From: Lanius Trolling
Date: Wed, 15 Jun 2022 20:27:48 +0000 (-0400)
Subject: Initial commit
X-Git-Url: https://gitweb.starshipfights.net/?a=commitdiff_plain;h=34ed3e1e2139766cb9bd5c425f41f04c35e3bd92;p=factbooks
Initial commit
---
34ed3e1e2139766cb9bd5c425f41f04c35e3bd92
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d1963af
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,46 @@
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
+
+# Webapp specific
+test/
+config.json
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..d1c4af0
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..13fe0db
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/markdown.xml b/.idea/markdown.xml
new file mode 100644
index 0000000..788f21f
--- /dev/null
+++ b/.idea/markdown.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..70102da
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 0000000..75d369c
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,43 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+ java
+ kotlin("jvm") version "1.6.21"
+ kotlin("plugin.serialization") version "1.6.21"
+ id("com.github.johnrengelman.shadow") version "7.1.2"
+ application
+}
+
+group = "info.mechyrdia"
+
+repositories {
+ mavenCentral()
+ maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven")
+}
+
+dependencies {
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2")
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.2")
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactive:1.6.2")
+ implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.3.3")
+ implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.3")
+
+ implementation("io.ktor:ktor-server-netty:1.6.8")
+ implementation("io.ktor:ktor-html-builder:1.6.8")
+
+ implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:0.7.5")
+
+ implementation("org.slf4j:slf4j-api:1.7.32")
+ implementation("ch.qos.logback:logback-classic:1.2.10")
+}
+
+tasks.withType {
+ kotlinOptions {
+ jvmTarget = "1.8"
+ freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn")
+ }
+}
+
+application {
+ mainClass.set("info.mechyrdia.Factbooks")
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..7fc6f1f
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1 @@
+kotlin.code.style=official
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..7454180
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..60c76b3
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
\ No newline at end of file
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..1b6c787
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,234 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..107acd3
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/logs/server.log b/logs/server.log
new file mode 100644
index 0000000..d4ea447
--- /dev/null
+++ b/logs/server.log
@@ -0,0 +1,3426 @@
+2022-06-15/15:22:54.986 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:22:55.082 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:22:55.092 [main] I (ktor.application) - Application started in 0.104 seconds.
+2022-06-15/15:22:55.092 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:22:55.098 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:22:55.181 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:22:55.181 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:22:55.183 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:22:55.183 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:22:55.184 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:22:55.184 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:22:55.185 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:22:55.185 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:22:55.185 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:22:55.185 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:22:55.185 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:22:55.185 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:22:55.187 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:22:55.189 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:22:55.190 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:22:55.190 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:22:55.190 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:22:56.353 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:22:56.366 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:22:56.367 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:22:56.371 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:22:56.371 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:22:56.376 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:22:56.517 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 4528 (auto-detected)
+2022-06-15/15:22:56.518 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:22:56.518 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:22:57.511 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:22:57.512 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:22:58.573 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:22:58.582 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:22:58.583 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:22:58.601 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:22:58.601 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:22:58.601 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:22:58.601 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:22:58.601 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:22:58.601 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:22:58.601 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:22:58.601 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:22:58.602 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:22:58.602 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:22:58.602 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:22:58.602 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:22:58.612 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:22:58.612 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:22:58.612 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:23:58.644 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:23:58.644 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:23:58.645 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@241a087
+2022-06-15/15:23:58.751 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:23:58.751 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:23:58.751 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:23:58.751 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:23:59.030 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321038795 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET / Response 302 Found
+2022-06-15/15:23:59.144 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655321039040 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:23:59.328 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-5-1655321039282 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:23:59.329 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-4-1655321039275 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:23:59.333 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-3-1655321039268 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:23:59.389 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-6-1655321039387 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:23:59.389 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-7-1655321039387 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:23:59.397 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-9-1655321039394 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:23:59.425 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-10-1655321039423 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:23:59.441 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-11-1655321039438 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:23:59.445 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-8-1655321039389 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:23:59.490 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-12-1655321039488 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:23:59.493 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-14-1655321039488 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:23:59.493 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-13-1655321039488 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:23:59.501 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-16-1655321039496 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:23:59.501 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-17-1655321039496 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:23:59.503 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-18-1655321039498 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:23:59.506 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-15-1655321039496 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:23:59.515 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-19-1655321039510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/icon.svg Response 200 OK
+2022-06-15/15:23:59.534 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-20-1655321039531 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:23:59.536 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-22-1655321039531 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:23:59.536 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-21-1655321039531 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:23:59.553 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-23-1655321039551 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:23:59.618 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-24-1655321039584 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:23:59.768 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-25-1655321039765 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:23:59.789 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-26-1655321039786 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:24:00.793 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-27-1655321040719 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language.txt Response 200 OK
+2022-06-15/15:24:00.843 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-28-1655321040838 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:24:00.865 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-29-1655321040862 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:24:00.876 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-30-1655321040873 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:24:00.904 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-33-1655321040901 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:24:00.905 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-32-1655321040901 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:24:00.944 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-34-1655321040941 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/font/tylan-language-alphabet-3.woff Response 200 OK
+2022-06-15/15:24:00.947 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-31-1655321040900 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:24:00.968 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-35-1655321040966 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:24:01.165 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-36-1655321041162 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:24:01.181 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-37-1655321041177 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:24:01.353 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-39-1655321041326 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:24:01.354 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-38-1655321041325 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:24:01.405 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-40-1655321041398 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:24:01.406 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-42-1655321041400 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:24:01.416 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-43-1655321041402 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:24:01.418 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-44-1655321041403 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:24:01.421 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-41-1655321041398 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:24:01.496 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-46-1655321041491 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:24:01.501 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-47-1655321041491 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:24:01.526 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-45-1655321041491 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:24:01.565 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-48-1655321041560 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:24:01.681 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-49-1655321041641 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:24:01.831 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-50-1655321041828 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:24:01.852 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-51-1655321041848 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:24:08.713 [eventLoopGroupProxy-4-8] I (ktor.application) - Call #call-52-1655321048687 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language.txt Response 200 OK
+2022-06-15/15:25:21.202 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:25:21.269 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:25:21.270 [main] I (ktor.application) - Application started in 0.076 seconds.
+2022-06-15/15:25:21.270 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:25:21.275 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:25:21.322 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:25:21.322 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:25:21.323 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:25:21.323 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:25:21.323 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:25:21.324 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:25:21.324 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:25:21.324 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:25:21.324 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:25:21.324 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:25:21.325 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:25:21.325 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:25:21.325 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:25:21.326 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:25:21.326 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:25:21.326 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:25:21.327 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:25:22.399 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:25:22.409 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:25:22.409 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:25:22.413 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:25:22.413 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:25:22.418 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:25:22.460 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 9420 (auto-detected)
+2022-06-15/15:25:22.461 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:25:22.461 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:25:23.446 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:25:23.447 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:25:24.490 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:25:24.497 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:25:24.498 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:25:24.514 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:25:24.514 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:25:24.514 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:25:24.514 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:25:24.514 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:25:24.515 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:25:24.515 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:25:24.515 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:25:24.515 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:25:24.515 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:25:24.515 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:25:24.515 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:25:24.522 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:25:24.523 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:25:24.523 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:25:28.833 [eventLoopGroupProxy-3-2] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:25:28.834 [eventLoopGroupProxy-3-2] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:25:28.839 [eventLoopGroupProxy-3-2] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@2bcc6632
+2022-06-15/15:25:29.000 [eventLoopGroupProxy-3-2] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:25:29.001 [eventLoopGroupProxy-3-2] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:25:29.002 [eventLoopGroupProxy-3-2] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:25:29.002 [eventLoopGroupProxy-3-2] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:25:29.329 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321129129 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:25:29.366 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-3-1655321129358 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:25:29.435 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-4-1655321129428 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:25:29.444 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-6-1655321129439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:25:29.447 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-7-1655321129440 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:25:29.448 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-9-1655321129442 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:25:29.448 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-5-1655321129438 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:25:29.449 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-8-1655321129440 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:25:29.460 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-10-1655321129449 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:25:29.539 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-13-1655321129534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:25:29.542 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-11-1655321129534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:25:29.543 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-12-1655321129534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:25:29.572 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-14-1655321129568 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:25:29.681 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-15-1655321129622 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:25:29.693 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-2-1655321129129 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:25:29.750 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-16-1655321129747 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:25:29.766 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-17-1655321129762 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:25:30.191 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-18-1655321130086 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language.txt Response 200 OK
+2022-06-15/15:25:30.224 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-19-1655321130219 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:25:30.247 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-20-1655321130244 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:25:30.254 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-21-1655321130252 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:25:30.304 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-22-1655321130300 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:25:30.304 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-24-1655321130300 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:25:30.312 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-25-1655321130310 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:25:30.349 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-23-1655321130300 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:25:30.488 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-26-1655321130484 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:25:30.532 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-27-1655321130521 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:25:30.706 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-30-1655321130696 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:25:30.706 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-29-1655321130695 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:25:30.708 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-31-1655321130700 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:25:30.711 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-32-1655321130700 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:25:30.712 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-28-1655321130695 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:25:30.713 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-33-1655321130700 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:25:30.721 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-34-1655321130712 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:25:30.887 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-35-1655321130879 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:25:30.888 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-37-1655321130879 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:25:30.888 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-36-1655321130879 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:25:30.959 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-38-1655321130953 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:25:31.065 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-39-1655321131029 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:25:31.143 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-40-1655321131141 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:25:31.158 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-41-1655321131156 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:27:14.960 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:27:15.026 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:27:15.027 [main] I (ktor.application) - Application started in 0.075 seconds.
+2022-06-15/15:27:15.028 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:27:15.033 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:27:15.082 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:27:15.082 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:27:15.083 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:27:15.083 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:27:15.084 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:27:15.084 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:27:15.084 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:27:15.084 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:27:15.085 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:27:15.085 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:27:15.085 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:27:15.085 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:27:15.086 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:27:15.086 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:27:15.086 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:27:15.087 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:27:15.087 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:27:16.334 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:27:16.349 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:27:16.349 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:27:16.354 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:27:16.354 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:27:16.359 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:27:16.428 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 3804 (auto-detected)
+2022-06-15/15:27:16.431 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:27:16.432 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:27:17.490 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:27:17.490 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:27:18.568 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:27:18.575 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:27:18.576 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:27:18.592 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:27:18.592 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:27:18.592 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:27:18.593 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:27:18.601 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:27:18.601 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:27:18.601 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:27:24.133 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:27:24.134 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:27:24.140 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@6b9ec08c
+2022-06-15/15:27:24.306 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:27:24.306 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:27:24.306 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:27:24.306 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:27:24.575 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-2-1655321244446 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:27:24.589 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655321244586 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:27:24.664 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-4-1655321244659 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:27:24.671 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-5-1655321244667 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:27:24.678 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-8-1655321244669 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:27:24.678 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-6-1655321244669 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:27:24.719 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-9-1655321244671 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:27:24.720 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-7-1655321244669 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:27:24.734 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-10-1655321244673 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:27:24.768 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-11-1655321244764 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:27:24.772 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-12-1655321244765 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:27:24.772 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-13-1655321244765 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:27:24.794 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-14-1655321244790 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:27:24.845 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321244446 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:27:24.868 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-15-1655321244827 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:27:24.949 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-16-1655321244946 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:27:24.965 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-17-1655321244962 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:27:26.016 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-18-1655321245911 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language.txt Response 200 OK
+2022-06-15/15:27:26.045 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-19-1655321246039 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:27:26.076 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-20-1655321246073 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:27:26.089 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-21-1655321246085 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:27:26.116 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-23-1655321246113 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:27:26.116 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-24-1655321246113 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:27:26.123 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-25-1655321246121 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:27:26.158 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-22-1655321246113 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:27:26.341 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-26-1655321246333 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:27:26.360 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-27-1655321246357 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:27:26.414 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-29-1655321246410 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:27:26.414 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-30-1655321246410 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:27:26.414 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-28-1655321246410 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:27:26.419 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-31-1655321246414 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:27:26.419 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-33-1655321246415 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:27:26.420 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-32-1655321246415 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:27:26.425 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-34-1655321246417 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:27:26.455 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-35-1655321246452 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:27:26.457 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-37-1655321246452 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:27:26.457 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-36-1655321246452 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:27:26.475 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-38-1655321246473 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:27:26.531 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-39-1655321246504 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:27:26.594 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-40-1655321246592 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:27:26.609 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-41-1655321246606 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:29:40.880 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:29:40.947 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:29:40.949 [main] I (ktor.application) - Application started in 0.076 seconds.
+2022-06-15/15:29:40.949 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:29:40.954 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:29:41.003 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:29:41.003 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:29:41.004 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:29:41.004 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:29:41.004 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:29:41.005 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:29:41.005 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:29:41.005 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:29:41.005 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:29:41.006 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:29:41.006 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:29:41.006 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:29:41.006 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:29:41.008 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:29:41.008 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:29:41.009 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:29:41.009 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:29:42.093 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:29:42.103 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:29:42.103 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:29:42.107 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:29:42.107 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:29:42.112 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:29:42.155 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 13376 (auto-detected)
+2022-06-15/15:29:42.156 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:29:42.156 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:29:43.144 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:29:43.145 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:29:44.216 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:29:44.223 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:29:44.223 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:29:44.239 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:29:44.240 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:29:44.240 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:29:44.240 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:29:44.252 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:29:44.252 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:29:44.252 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:29:45.182 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:29:45.182 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:29:45.184 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@7c81023b
+2022-06-15/15:29:45.234 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:29:45.235 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:29:45.235 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:29:45.235 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:29:45.422 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321385276 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language.txt Response 200 OK
+2022-06-15/15:29:45.540 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-4-1655321385516 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:29:45.540 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655321385506 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:29:45.545 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655321385465 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:29:45.581 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-5-1655321385578 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:29:45.581 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-6-1655321385578 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:29:45.596 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-8-1655321385593 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:29:45.634 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-7-1655321385578 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:29:45.796 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-9-1655321385793 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:29:45.821 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-10-1655321385814 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:29:45.923 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-11-1655321385920 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:29:45.923 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-13-1655321385920 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:29:45.923 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-12-1655321385920 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:29:45.948 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-15-1655321385941 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:29:45.953 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-16-1655321385944 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:29:45.953 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-17-1655321385946 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:29:45.956 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-14-1655321385925 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:29:45.990 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-20-1655321385986 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:29:45.991 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-18-1655321385986 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:29:45.992 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-19-1655321385986 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:29:46.016 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-21-1655321386012 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:29:46.085 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-22-1655321386052 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:29:46.149 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-23-1655321386147 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:29:46.165 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-24-1655321386162 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:30:09.649 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:30:09.808 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:30:09.813 [main] I (ktor.application) - Application started in 0.168 seconds.
+2022-06-15/15:30:09.815 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:30:09.827 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:30:09.959 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:30:09.960 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:30:09.964 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:30:09.966 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:30:09.967 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:30:09.968 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:30:09.970 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:30:09.970 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:30:09.971 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:30:09.971 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:30:09.972 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:30:09.972 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:30:09.973 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:30:09.976 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:30:09.976 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:30:09.977 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:30:09.977 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:30:11.199 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:30:11.209 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:30:11.210 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:30:11.213 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:30:11.214 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:30:11.218 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:30:11.262 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 11852 (auto-detected)
+2022-06-15/15:30:11.264 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:30:11.264 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:30:12.276 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:30:12.276 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:30:13.492 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:30:13.515 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:30:13.516 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:30:13.561 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:30:13.562 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:30:13.562 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:30:13.562 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:30:13.562 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:30:13.562 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:30:13.563 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:30:13.563 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:30:13.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:30:13.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:30:13.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:30:13.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:30:13.590 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:30:13.591 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:30:13.592 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:30:19.225 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:30:19.225 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:30:19.227 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@753a71e0
+2022-06-15/15:30:19.277 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:30:19.277 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:30:19.277 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:30:19.277 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:30:19.471 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321419321 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language.txt Response 200 OK
+2022-06-15/15:30:19.569 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-4-1655321419539 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:30:19.570 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655321419532 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:30:19.573 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655321419498 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:30:19.617 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-5-1655321419613 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:30:19.617 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-7-1655321419613 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:30:19.646 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-8-1655321419643 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:30:19.680 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-6-1655321419613 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:30:19.841 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-9-1655321419838 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:30:19.874 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-10-1655321419864 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:30:19.979 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-11-1655321419975 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:30:19.979 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-12-1655321419975 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:30:19.979 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-13-1655321419975 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:30:20.002 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-15-1655321419996 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:30:20.002 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-16-1655321419997 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:30:20.005 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-17-1655321419999 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:30:20.008 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-14-1655321419980 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:30:20.040 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-18-1655321420037 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:30:20.041 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-19-1655321420037 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:30:20.043 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-20-1655321420039 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:30:20.057 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-21-1655321420055 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:30:20.124 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-22-1655321420091 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:30:20.192 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-23-1655321420190 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:30:20.209 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-24-1655321420206 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:30:20.430 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-25-1655321420426 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture Response 200 OK
+2022-06-15/15:30:20.478 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-26-1655321420475 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:30:20.492 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-28-1655321420488 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:30:20.494 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-27-1655321420486 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:30:20.531 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-29-1655321420527 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:30:20.531 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-31-1655321420528 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:30:20.535 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-32-1655321420531 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:30:20.568 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-30-1655321420527 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:30:20.588 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-33-1655321420586 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:30:20.605 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-34-1655321420600 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:30:20.652 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-36-1655321420647 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:30:20.652 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-37-1655321420648 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:30:20.652 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-35-1655321420647 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:30:20.654 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-38-1655321420649 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:30:20.656 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-39-1655321420651 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:30:20.657 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-40-1655321420652 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:30:20.661 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-41-1655321420655 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:30:20.688 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-44-1655321420684 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:30:20.688 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-42-1655321420684 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:30:20.688 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-43-1655321420684 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:30:20.702 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-45-1655321420700 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:30:20.765 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-46-1655321420731 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:30:20.866 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-47-1655321420863 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:30:20.883 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-48-1655321420880 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:30:21.132 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-49-1655321421130 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:30:21.208 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-50-1655321421203 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:30:21.234 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-51-1655321421231 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:30:21.235 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-52-1655321421234 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:30:21.291 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-55-1655321421290 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:30:21.291 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-54-1655321421290 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:30:21.293 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-56-1655321421292 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:30:21.316 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-53-1655321421289 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:30:21.376 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-57-1655321421374 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:30:21.421 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-58-1655321421418 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:30:21.485 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-61-1655321421484 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:30:21.486 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-60-1655321421484 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:30:21.486 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-59-1655321421484 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:30:21.486 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-62-1655321421484 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:30:21.487 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-63-1655321421485 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:30:21.487 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-64-1655321421486 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:30:21.489 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-65-1655321421486 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:30:21.521 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-66-1655321421519 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:30:21.522 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-67-1655321421520 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:30:21.523 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-68-1655321421521 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:30:21.539 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-69-1655321421538 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:30:21.597 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-70-1655321421574 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:30:21.665 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-71-1655321421662 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:30:21.677 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-72-1655321421676 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:30:22.593 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-73-1655321422583 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/places/milky-way.txt Response 200 OK
+2022-06-15/15:30:22.648 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-74-1655321422644 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:30:22.682 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-75-1655321422680 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:30:22.902 [eventLoopGroupProxy-4-9] I (ktor.application) - Call #call-84-1655321422900 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:30:23.087 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-80-1655321422828 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-ilkhan-republic.png Response 404 Not Found
+2022-06-15/15:30:23.087 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-92-1655321423084 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-arkant-horde.png Response 404 Not Found
+2022-06-15/15:30:23.089 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-79-1655321422828 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-niska-republic.png Response 404 Not Found
+2022-06-15/15:30:23.089 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-94-1655321423085 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-fulkreykk-1.png Response 404 Not Found
+2022-06-15/15:30:23.089 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-95-1655321423086 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-ferthlon-internation.png Response 404 Not Found
+2022-06-15/15:30:23.090 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-91-1655321423084 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-ilkhan-commune.png Response 404 Not Found
+2022-06-15/15:30:23.091 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-90-1655321423083 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-ndrc.png Response 404 Not Found
+2022-06-15/15:30:23.092 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-88-1655321422916 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-diadochus-diabolorum.png Response 404 Not Found
+2022-06-15/15:30:23.092 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-99-1655321423089 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-tylan-theocracy.png Response 404 Not Found
+2022-06-15/15:30:23.093 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-77-1655321422828 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-isarnareykk.png Response 404 Not Found
+2022-06-15/15:30:23.093 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-97-1655321423087 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-telareth-republic.png Response 404 Not Found
+2022-06-15/15:30:23.094 [eventLoopGroupProxy-4-11] I (ktor.application) - Call #call-87-1655321422911 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-diadochus-togatorum.png Response 404 Not Found
+2022-06-15/15:30:23.094 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-76-1655321422828 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-masra-draetsen.png Response 404 Not Found
+2022-06-15/15:30:23.095 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-81-1655321422828 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-theudareykk.png Response 404 Not Found
+2022-06-15/15:30:23.094 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-86-1655321422905 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-lyudareykk.png Response 404 Not Found
+2022-06-15/15:30:23.096 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-96-1655321423086 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-corsairs.png Response 404 Not Found
+2022-06-15/15:30:23.096 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-104-1655321423093 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-felinae-felices.png Response 404 Not Found
+2022-06-15/15:30:23.097 [eventLoopGroupProxy-4-8] I (ktor.application) - Call #call-82-1655321422900 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-stahlareykk.png Response 404 Not Found
+2022-06-15/15:30:23.098 [eventLoopGroupProxy-4-11] I (ktor.application) - Call #call-108-1655321423095 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/logo-mjolnir-energy.png Response 404 Not Found
+2022-06-15/15:30:23.096 [eventLoopGroupProxy-4-9] I (ktor.application) - Call #call-85-1655321422903 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-diadochus-magistrorum.png Response 404 Not Found
+2022-06-15/15:30:23.098 [eventLoopGroupProxy-4-8] I (ktor.application) - Call #call-101-1655321423090 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-fulkreykk-2.png Response 404 Not Found
+2022-06-15/15:30:23.098 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-102-1655321423092 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:30:23.098 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-93-1655321423084 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:30:23.099 [eventLoopGroupProxy-4-9] I (ktor.application) - Call #call-105-1655321423094 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:30:23.099 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-89-1655321423083 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-diadochus-viperarum.png Response 404 Not Found
+2022-06-15/15:30:23.099 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-107-1655321423095 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-diadochus-noctiferorum.png Response 404 Not Found
+2022-06-15/15:30:23.100 [eventLoopGroupProxy-4-8] I (ktor.application) - Call #call-103-1655321423092 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-ccc.png Response 404 Not Found
+2022-06-15/15:30:23.100 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-100-1655321423089 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-drakhassi-federation.png Response 404 Not Found
+2022-06-15/15:30:23.100 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-109-1655321423096 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-vestigium.png Response 404 Not Found
+2022-06-15/15:30:23.100 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-78-1655321422828 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-chaebodes-star-empire.png Response 404 Not Found
+2022-06-15/15:30:23.100 [eventLoopGroupProxy-4-9] I (ktor.application) - Call #call-98-1655321423087 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-lihann-empire.png Response 404 Not Found
+2022-06-15/15:30:23.102 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-83-1655321422900 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-swartareykk.png Response 404 Not Found
+2022-06-15/15:30:23.139 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-106-1655321423094 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:30:23.370 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-110-1655321423368 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:30:23.389 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-111-1655321423386 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:30:23.487 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-112-1655321423484 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:30:23.494 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-113-1655321423492 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:30:23.505 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-115-1655321423502 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:30:23.505 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-114-1655321423500 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:30:23.512 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-116-1655321423509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:30:23.512 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-117-1655321423510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:30:23.522 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-118-1655321423517 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:30:23.725 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-120-1655321423722 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:30:23.725 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-119-1655321423722 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:30:23.725 [eventLoopGroupProxy-4-9] I (ktor.application) - Call #call-121-1655321423723 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:30:23.748 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-122-1655321423746 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:30:24.562 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-123-1655321424535 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:30:24.642 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-124-1655321424640 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:30:24.656 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-125-1655321424655 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:30:59.114 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:30:59.180 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:30:59.181 [main] I (ktor.application) - Application started in 0.074 seconds.
+2022-06-15/15:30:59.182 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:30:59.186 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:30:59.233 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:30:59.233 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:30:59.234 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:30:59.235 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:30:59.235 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:30:59.235 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:30:59.235 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:30:59.236 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:30:59.236 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:30:59.236 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:30:59.236 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:30:59.236 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:30:59.237 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:30:59.237 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:30:59.237 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:30:59.238 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:30:59.238 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:31:00.316 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:31:00.325 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:31:00.326 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:31:00.330 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:31:00.330 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:31:00.334 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:31:00.383 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 13300 (auto-detected)
+2022-06-15/15:31:00.384 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:31:00.385 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:31:01.484 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:31:01.484 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:31:02.541 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:31:02.548 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:31:02.548 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:31:02.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:31:02.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:31:02.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:31:02.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:31:02.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:31:02.564 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:31:02.565 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:31:02.565 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:31:02.565 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:31:02.565 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:31:02.565 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:31:02.565 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:31:02.573 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:31:02.574 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:31:02.574 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:31:11.654 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:31:11.654 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:31:11.655 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@7cf4b0c3
+2022-06-15/15:31:11.706 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:31:11.706 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:31:11.706 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:31:11.706 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:31:11.849 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321471753 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/places/milky-way.txt Response 200 OK
+2022-06-15/15:31:11.939 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655321471873 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:31:11.939 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655321471888 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:31:11.944 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-4-1655321471888 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:31:11.990 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-7-1655321471986 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:31:11.993 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-6-1655321471986 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:31:12.016 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-8-1655321472012 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:31:12.071 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-5-1655321471986 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:31:12.237 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-9-1655321472234 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:31:12.259 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-10-1655321472253 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:31:12.335 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-11-1655321472332 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:31:12.337 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-12-1655321472332 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:31:12.344 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-14-1655321472339 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:31:12.344 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-13-1655321472338 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:31:12.359 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-15-1655321472341 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:31:12.385 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-16-1655321472380 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:31:12.394 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-17-1655321472382 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:31:12.432 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-19-1655321472427 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:31:12.434 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-18-1655321472427 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:31:12.437 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-20-1655321472427 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:31:12.457 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-21-1655321472454 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:31:12.762 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-22-1655321472715 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:31:12.839 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-23-1655321472837 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:31:12.853 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-24-1655321472851 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:31:14.376 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-25-1655321474372 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:31:14.419 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-26-1655321474412 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:31:14.427 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-27-1655321474421 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:31:14.432 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-28-1655321474429 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:31:14.472 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-31-1655321474470 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:31:14.473 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-30-1655321474469 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:31:14.475 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-32-1655321474473 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:31:14.516 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-29-1655321474469 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:31:14.540 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-33-1655321474538 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:31:14.559 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-34-1655321474555 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:31:14.610 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-35-1655321474605 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:31:14.611 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-37-1655321474606 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:31:14.611 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-36-1655321474606 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:31:14.611 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-38-1655321474606 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:31:14.615 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-39-1655321474607 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:31:14.624 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-40-1655321474613 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:31:14.624 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-41-1655321474618 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:31:14.651 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-43-1655321474648 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:31:14.651 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-42-1655321474648 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:31:14.652 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-44-1655321474649 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:31:14.666 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-45-1655321474664 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:31:14.726 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-46-1655321474698 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:31:14.801 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-47-1655321474798 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:31:14.817 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-48-1655321474813 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:31:22.244 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-49-1655321482242 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:32:12.558 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:32:12.649 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:32:12.650 [main] I (ktor.application) - Application started in 0.099 seconds.
+2022-06-15/15:32:12.651 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:32:12.659 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:32:12.716 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:32:12.717 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:32:12.717 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:32:12.718 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:32:12.718 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:32:12.718 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:32:12.719 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:32:12.719 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:32:12.719 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:32:12.719 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:32:12.719 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:32:12.720 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:32:12.720 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:32:12.721 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:32:12.721 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:32:12.721 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:32:12.722 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:32:13.840 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:32:13.850 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:32:13.850 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:32:13.854 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:32:13.854 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:32:13.859 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:32:13.903 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 13936 (auto-detected)
+2022-06-15/15:32:13.905 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:32:13.905 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:32:14.959 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:32:14.960 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:32:16.091 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:32:16.099 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:32:16.099 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:32:16.116 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:32:16.116 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:32:16.116 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:32:16.116 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:32:16.116 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:32:16.117 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:32:16.117 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:32:16.117 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:32:16.117 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:32:16.117 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:32:16.117 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:32:16.117 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:32:16.124 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:32:16.125 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:32:16.125 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:32:28.409 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:32:28.409 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:32:28.410 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@7c81023b
+2022-06-15/15:32:28.460 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:32:28.461 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:32:28.461 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:32:28.461 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:32:28.564 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321548503 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:32:28.671 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655321548609 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:32:28.671 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-4-1655321548620 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:32:28.677 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655321548620 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:32:28.712 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-6-1655321548709 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:32:28.712 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-5-1655321548708 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:32:28.717 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-8-1655321548713 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:32:28.767 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-7-1655321548709 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:32:28.791 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-9-1655321548787 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:32:28.802 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-10-1655321548798 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/icon.svg Response 200 OK
+2022-06-15/15:32:28.812 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-11-1655321548809 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:32:28.857 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-13-1655321548854 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:32:28.858 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-12-1655321548854 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:32:28.860 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-14-1655321548855 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:32:28.867 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-16-1655321548863 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:32:28.868 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-17-1655321548864 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:32:28.870 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-18-1655321548865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:32:28.871 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-15-1655321548861 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:32:28.897 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-19-1655321548893 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:32:28.898 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-21-1655321548893 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:32:28.898 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-20-1655321548893 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:32:28.912 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-22-1655321548910 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:32:28.973 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-23-1655321548941 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:32:29.044 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-24-1655321549040 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:32:29.060 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-25-1655321549057 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:32:29.975 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-26-1655321549973 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture Response 200 OK
+2022-06-15/15:32:30.052 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-27-1655321550050 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:32:30.067 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-29-1655321550064 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:32:30.068 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-28-1655321550061 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:32:30.106 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-31-1655321550103 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:32:30.106 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-30-1655321550103 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:32:30.113 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-33-1655321550109 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:32:30.146 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-32-1655321550103 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:32:30.177 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-34-1655321550174 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:32:30.192 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-35-1655321550190 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:32:30.233 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-36-1655321550231 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:32:30.240 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-38-1655321550234 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:32:30.241 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-37-1655321550234 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:32:30.240 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-40-1655321550234 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:32:30.242 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-39-1655321550234 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:32:30.242 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-41-1655321550234 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:32:30.247 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-42-1655321550239 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:32:30.276 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-43-1655321550273 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:32:30.276 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-45-1655321550273 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:32:30.276 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-44-1655321550273 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:32:30.292 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-46-1655321550290 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:32:30.361 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-47-1655321550328 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:32:30.444 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-48-1655321550441 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:32:30.463 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-49-1655321550460 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:32:31.407 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-50-1655321551401 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /change-theme Response 200 OK
+2022-06-15/15:32:31.449 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-51-1655321551443 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:32:31.453 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-52-1655321551448 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:32:31.457 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-53-1655321551455 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:32:31.495 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-54-1655321551494 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:32:31.495 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-56-1655321551494 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:32:31.498 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-57-1655321551496 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:32:31.529 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-55-1655321551494 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:32:31.559 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-58-1655321551558 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:32:31.579 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-59-1655321551575 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:32:31.622 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-61-1655321551620 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:32:31.622 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-60-1655321551620 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:32:31.625 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-62-1655321551623 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:32:31.627 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-63-1655321551624 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:32:31.628 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-64-1655321551626 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:32:31.631 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-66-1655321551629 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:32:31.633 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-65-1655321551629 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:32:31.661 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-68-1655321551659 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:32:31.662 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-69-1655321551660 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:32:31.662 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-67-1655321551659 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:32:31.677 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-70-1655321551676 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:32:31.730 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-71-1655321551708 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:32:31.799 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-72-1655321551797 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:32:31.813 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-73-1655321551811 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:32:32.752 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-76-1655321552750 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link-dark.svg Response 200 OK
+2022-06-15/15:32:32.752 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-74-1655321552750 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel-dark.svg Response 200 OK
+2022-06-15/15:32:32.779 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-75-1655321552750 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background-dark.jpg Response 200 OK
+2022-06-15/15:32:35.531 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-77-1655321555277 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /change-theme Response 302 Found
+2022-06-15/15:32:35.549 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-78-1655321555544 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /change-theme Response 200 OK
+2022-06-15/15:32:35.591 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-79-1655321555589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:32:35.601 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-80-1655321555597 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:32:35.602 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-81-1655321555599 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:32:35.644 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-83-1655321555643 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel-dark.svg Response 200 OK
+2022-06-15/15:32:35.644 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-84-1655321555643 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link-dark.svg Response 200 OK
+2022-06-15/15:32:35.647 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-85-1655321555645 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:32:35.671 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-82-1655321555643 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background-dark.jpg Response 200 OK
+2022-06-15/15:32:35.723 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-86-1655321555721 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:32:35.737 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-87-1655321555735 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:32:35.782 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-88-1655321555780 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:32:35.782 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-89-1655321555780 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:32:35.783 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-90-1655321555780 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:32:35.783 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-91-1655321555781 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:32:35.785 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-92-1655321555783 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:32:35.785 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-94-1655321555783 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:32:35.786 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-93-1655321555783 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:32:35.815 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-95-1655321555813 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:32:35.815 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-97-1655321555813 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:32:35.815 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-96-1655321555813 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:32:35.834 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-98-1655321555833 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:32:35.892 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-99-1655321555871 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:32:35.962 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-100-1655321555960 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:32:35.978 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-101-1655321555977 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:32:36.635 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-102-1655321556633 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /change-theme Response 200 OK
+2022-06-15/15:32:36.667 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-103-1655321556666 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:32:36.676 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-104-1655321556672 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:32:36.677 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-105-1655321556676 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:32:36.717 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-107-1655321556715 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel-dark.svg Response 200 OK
+2022-06-15/15:32:36.717 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-108-1655321556716 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link-dark.svg Response 200 OK
+2022-06-15/15:32:36.723 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-109-1655321556720 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:32:36.746 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-106-1655321556715 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background-dark.jpg Response 200 OK
+2022-06-15/15:32:36.793 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-110-1655321556792 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:32:36.809 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-111-1655321556807 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:32:36.854 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-112-1655321556853 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:32:36.856 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-113-1655321556854 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:32:36.857 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-114-1655321556855 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:32:36.858 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-115-1655321556856 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:32:36.859 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-116-1655321556856 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:32:36.859 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-117-1655321556856 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:32:36.862 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-118-1655321556857 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:32:36.893 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-120-1655321556892 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:32:36.893 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-119-1655321556892 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:32:36.893 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-121-1655321556892 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:32:36.909 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-122-1655321556907 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:32:36.965 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-123-1655321556945 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:32:37.058 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-124-1655321557056 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:32:37.072 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-125-1655321557070 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:33:39.386 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:33:39.453 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:33:39.455 [main] I (ktor.application) - Application started in 0.077 seconds.
+2022-06-15/15:33:39.455 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:33:39.459 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:33:39.510 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:33:39.510 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:33:39.510 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:33:39.511 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:33:39.511 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:33:39.511 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:33:39.512 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:33:39.512 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:33:39.512 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:33:39.512 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:33:39.512 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:33:39.513 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:33:39.513 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:33:39.514 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:33:39.514 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:33:39.514 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:33:39.515 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:33:40.598 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:33:40.608 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:33:40.608 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:33:40.612 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:33:40.612 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:33:40.616 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:33:40.659 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 2336 (auto-detected)
+2022-06-15/15:33:40.660 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:33:40.661 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:33:41.702 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:33:41.703 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:33:42.787 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:33:42.795 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:33:42.795 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:33:42.811 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:33:42.812 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:33:42.820 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:33:42.820 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:33:42.820 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:33:44.776 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:33:44.776 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:33:44.777 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@7c81023b
+2022-06-15/15:33:44.837 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:33:44.837 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:33:44.837 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:33:44.837 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:33:44.948 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321624886 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /change-theme Response 200 OK
+2022-06-15/15:33:45.046 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655321624984 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:33:45.046 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-3-1655321624999 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:33:45.052 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-4-1655321624999 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:33:45.091 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-5-1655321625088 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel-dark.svg Response 200 OK
+2022-06-15/15:33:45.091 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-6-1655321625088 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link-dark.svg Response 200 OK
+2022-06-15/15:33:45.097 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-8-1655321625093 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:33:45.152 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-7-1655321625088 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background-dark.jpg Response 200 OK
+2022-06-15/15:33:45.175 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-9-1655321625173 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:33:45.199 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-10-1655321625194 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:33:45.249 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-12-1655321625242 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:33:45.249 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-11-1655321625242 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:33:45.252 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-14-1655321625244 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:33:45.252 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-13-1655321625244 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:33:45.260 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-16-1655321625255 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:33:45.261 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-17-1655321625256 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:33:45.262 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-15-1655321625253 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:33:45.287 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-18-1655321625284 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:33:45.287 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-20-1655321625284 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:33:45.287 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-19-1655321625284 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:33:45.301 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-21-1655321625299 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:33:45.366 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-22-1655321625331 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:33:45.477 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-23-1655321625439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:33:45.575 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-24-1655321625489 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:33:46.499 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-25-1655321626492 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:33:46.545 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-26-1655321626541 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:33:46.555 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-28-1655321626553 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:33:46.557 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-27-1655321626551 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:33:46.599 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-31-1655321626596 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link-dark.svg Response 200 OK
+2022-06-15/15:33:46.600 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-30-1655321626596 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel-dark.svg Response 200 OK
+2022-06-15/15:33:46.607 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-32-1655321626599 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:33:46.645 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-29-1655321626596 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background-dark.jpg Response 200 OK
+2022-06-15/15:33:46.668 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-33-1655321626666 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:33:46.686 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-34-1655321626682 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:33:46.856 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-36-1655321626729 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:33:46.856 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-39-1655321626730 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:33:46.856 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-35-1655321626729 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:33:46.856 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-37-1655321626729 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:33:46.856 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-38-1655321626729 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:33:46.857 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-40-1655321626732 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:33:46.861 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-41-1655321626857 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:33:46.894 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-43-1655321626890 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:33:46.895 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-44-1655321626890 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:33:46.895 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-42-1655321626890 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:33:46.911 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-45-1655321626910 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:33:46.981 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-46-1655321626947 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:33:47.058 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-47-1655321627056 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:33:47.076 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-48-1655321627074 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:33:47.913 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-49-1655321627819 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language.txt Response 200 OK
+2022-06-15/15:33:47.954 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-50-1655321627950 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:33:47.973 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-51-1655321627970 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:33:47.983 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-52-1655321627981 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:33:48.011 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-53-1655321628009 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel-dark.svg Response 200 OK
+2022-06-15/15:33:48.011 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-55-1655321628009 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link-dark.svg Response 200 OK
+2022-06-15/15:33:48.020 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-56-1655321628018 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/font/tylan-language-alphabet-3.woff Response 200 OK
+2022-06-15/15:33:48.046 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-54-1655321628009 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background-dark.jpg Response 200 OK
+2022-06-15/15:33:48.058 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-57-1655321628056 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:33:48.266 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-58-1655321628264 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:33:48.314 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-59-1655321628309 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:33:48.394 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-61-1655321628391 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:33:48.394 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-62-1655321628392 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:33:48.394 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-60-1655321628391 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:33:48.396 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-63-1655321628393 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:33:48.396 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-64-1655321628394 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:33:48.396 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-65-1655321628394 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:33:48.398 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-66-1655321628394 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:33:48.439 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-67-1655321628437 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:33:48.440 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-68-1655321628437 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:33:48.440 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-69-1655321628438 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:33:48.457 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-70-1655321628455 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:33:48.540 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-71-1655321628508 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:33:48.613 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-72-1655321628611 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:33:48.630 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-73-1655321628629 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:34:18.211 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-74-1655321658210 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /change-theme Response 200 OK
+2022-06-15/15:34:18.262 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-75-1655321658261 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:34:18.273 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-77-1655321658271 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:34:18.273 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-76-1655321658269 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:34:18.316 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-78-1655321658314 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel-dark.svg Response 200 OK
+2022-06-15/15:34:18.316 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-80-1655321658314 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link-dark.svg Response 200 OK
+2022-06-15/15:34:18.318 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-81-1655321658316 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:34:18.342 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-79-1655321658314 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background-dark.jpg Response 200 OK
+2022-06-15/15:34:18.379 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-82-1655321658379 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:34:18.398 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-83-1655321658396 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:34:18.440 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-86-1655321658439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:34:18.440 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-85-1655321658438 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:34:18.440 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-84-1655321658438 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:34:18.443 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-88-1655321658442 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:34:18.443 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-87-1655321658441 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:34:18.444 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-89-1655321658442 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:34:18.446 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-90-1655321658442 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:34:18.477 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-92-1655321658475 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:34:18.478 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-93-1655321658475 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:34:18.478 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-91-1655321658475 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:34:18.494 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-94-1655321658492 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:34:18.545 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-95-1655321658524 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:34:18.610 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-96-1655321658610 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:34:18.627 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-97-1655321658626 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:34:19.136 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-98-1655321659134 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:34:19.136 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-100-1655321659134 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:34:19.162 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-99-1655321659134 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:34:19.778 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-101-1655321659552 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /change-theme Response 302 Found
+2022-06-15/15:34:19.802 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-102-1655321659800 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /change-theme Response 200 OK
+2022-06-15/15:34:19.845 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-103-1655321659843 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:34:19.849 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-104-1655321659846 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:34:19.853 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-105-1655321659851 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:34:19.903 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-107-1655321659901 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:34:19.903 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-108-1655321659901 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:34:19.909 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-109-1655321659907 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:34:19.931 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-106-1655321659901 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:34:19.990 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-110-1655321659987 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:34:20.006 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-111-1655321660004 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:34:20.074 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-112-1655321660073 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:34:20.074 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-114-1655321660073 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:34:20.074 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-113-1655321660073 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:34:20.075 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-115-1655321660073 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:34:20.075 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-116-1655321660074 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:34:20.077 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-117-1655321660075 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:34:20.079 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-118-1655321660075 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:34:20.145 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-119-1655321660142 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:34:20.145 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-120-1655321660142 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:34:20.147 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-121-1655321660145 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:34:20.236 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-122-1655321660235 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:34:20.294 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-123-1655321660272 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:34:20.359 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-124-1655321660357 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:34:20.372 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-125-1655321660371 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:34:20.539 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-126-1655321660537 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:34:20.586 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-127-1655321660582 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:34:20.601 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-128-1655321660599 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:34:20.610 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-129-1655321660608 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:34:20.639 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-131-1655321660638 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:34:20.639 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-132-1655321660638 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:34:20.642 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-133-1655321660640 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:34:20.669 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-130-1655321660638 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:34:20.708 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-134-1655321660706 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:34:20.722 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-135-1655321660719 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:34:20.776 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-136-1655321660774 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:34:20.776 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-137-1655321660774 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:34:20.777 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-138-1655321660774 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:34:20.778 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-139-1655321660774 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:34:20.778 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-140-1655321660776 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:34:20.779 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-141-1655321660776 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:34:20.781 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-142-1655321660777 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:34:20.823 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-144-1655321660821 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:34:20.823 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-145-1655321660821 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:34:20.823 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-143-1655321660821 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:34:20.842 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-146-1655321660841 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:34:20.892 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-147-1655321660874 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:34:20.958 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-148-1655321660956 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:34:20.972 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-149-1655321660971 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:34:49.585 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:34:49.660 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:34:49.661 [main] I (ktor.application) - Application started in 0.083 seconds.
+2022-06-15/15:34:49.661 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:34:49.666 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:34:49.714 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:34:49.714 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:34:49.715 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:34:49.715 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:34:49.716 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:34:49.716 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:34:49.716 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:34:49.716 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:34:49.716 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:34:49.716 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:34:49.717 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:34:49.717 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:34:49.717 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:34:49.719 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:34:49.719 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:34:49.719 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:34:49.719 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:34:50.863 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:34:50.875 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:34:50.875 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:34:50.880 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:34:50.880 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:34:50.885 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:34:50.928 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 20336 (auto-detected)
+2022-06-15/15:34:50.930 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:34:50.930 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:34:51.975 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:34:51.975 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:34:53.103 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:34:53.111 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:34:53.111 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:34:53.127 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:34:53.128 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:34:53.136 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:34:53.136 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:34:53.136 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:35:04.227 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:35:04.228 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:35:04.229 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@7c81023b
+2022-06-15/15:35:04.285 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:35:04.285 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:35:04.285 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:35:04.285 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:35:04.394 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321704330 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:35:04.499 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-4-1655321704455 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:35:04.499 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655321704435 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:35:04.505 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655321704453 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:35:04.545 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-6-1655321704542 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:35:04.547 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-7-1655321704542 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:35:04.553 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-8-1655321704549 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:35:04.606 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-5-1655321704542 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:35:04.628 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-9-1655321704626 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:35:04.647 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-10-1655321704643 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:35:04.698 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-11-1655321704692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:35:04.698 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-13-1655321704693 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:35:04.698 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-12-1655321704692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:35:04.701 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-14-1655321704693 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:35:04.707 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-16-1655321704702 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:35:04.711 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-17-1655321704705 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:35:04.712 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-15-1655321704701 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:35:04.740 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-18-1655321704738 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:35:04.741 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-19-1655321704738 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:35:04.742 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-20-1655321704738 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:35:04.755 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-21-1655321704753 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:35:04.824 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-22-1655321704790 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:35:04.890 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-23-1655321704887 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:35:04.904 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-24-1655321704901 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:35:05.236 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-25-1655321705234 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/places Response 200 OK
+2022-06-15/15:35:05.300 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-27-1655321705297 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:35:05.301 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-26-1655321705292 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:35:05.308 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-28-1655321705306 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:35:05.344 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-31-1655321705341 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:35:05.344 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-30-1655321705341 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:35:05.347 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-32-1655321705344 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:35:05.385 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-29-1655321705340 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:35:05.413 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-33-1655321705410 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:35:05.433 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-34-1655321705430 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:35:05.477 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-37-1655321705473 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:35:05.477 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-36-1655321705473 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:35:05.477 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-35-1655321705473 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:35:05.480 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-40-1655321705477 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:35:05.480 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-38-1655321705474 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:35:05.481 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-39-1655321705477 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:35:05.488 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-41-1655321705478 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:35:05.514 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-43-1655321705511 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:35:05.514 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-44-1655321705511 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:35:05.514 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-42-1655321705511 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:35:05.529 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-45-1655321705528 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:35:05.590 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-46-1655321705561 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:35:05.672 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-47-1655321705670 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:35:05.752 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-48-1655321705749 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:35:05.926 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-49-1655321705887 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/places/milky-way.txt Response 200 OK
+2022-06-15/15:35:05.968 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-50-1655321705964 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:35:06.004 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-51-1655321706002 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:35:06.180 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-60-1655321706175 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:35:06.383 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-62-1655321706334 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:35:06.605 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-52-1655321706160 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-masra-draetsen.png Response 404 Not Found
+2022-06-15/15:35:06.605 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-57-1655321706162 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-fulkreykk-1.png Response 404 Not Found
+2022-06-15/15:35:06.606 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-53-1655321706160 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-chaebodes-star-empire.png Response 404 Not Found
+2022-06-15/15:35:06.606 [eventLoopGroupProxy-4-8] I (ktor.application) - Call #call-59-1655321706172 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-ilkhan-commune.png Response 404 Not Found
+2022-06-15/15:35:06.607 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-54-1655321706160 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-isarnareykk.png Response 404 Not Found
+2022-06-15/15:35:06.607 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-58-1655321706172 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-terran-revolutionary-republic.png Response 404 Not Found
+2022-06-15/15:35:06.607 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-63-1655321706603 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:35:06.607 [eventLoopGroupProxy-4-9] I (ktor.application) - Call #call-61-1655321706177 Client unknown `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-fulkreykk-2.png Response 404 Not Found
+2022-06-15/15:35:06.607 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-56-1655321706162 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-tylan-theocracy.png Response 404 Not Found
+2022-06-15/15:35:06.608 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-64-1655321706603 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:35:06.609 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-55-1655321706162 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/flag-arkant-horde.png Response 404 Not Found
+2022-06-15/15:35:06.609 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-65-1655321706607 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:35:06.647 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-66-1655321706645 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:35:06.813 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-67-1655321706809 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:35:06.889 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-68-1655321706886 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:35:06.889 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-69-1655321706886 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:35:06.891 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-70-1655321706888 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:35:06.893 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-72-1655321706891 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:35:06.894 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-71-1655321706889 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:35:06.895 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-73-1655321706893 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:35:06.902 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-74-1655321706895 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:35:06.942 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-76-1655321706940 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:35:06.943 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-77-1655321706941 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:35:06.944 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-75-1655321706940 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:35:06.963 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-78-1655321706961 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:35:07.671 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-79-1655321707649 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:35:07.735 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-80-1655321707733 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:35:07.746 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-81-1655321707745 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:35:14.985 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-82-1655321714939 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-felinae-felices.png Response 200 OK
+2022-06-15/15:35:15.652 [eventLoopGroupProxy-4-10] I (ktor.application) - Call #call-83-1655321715649 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /favicon.ico Response 404 Not Found
+2022-06-15/15:35:17.348 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-84-1655321717344 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:35:17.405 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-85-1655321717401 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:35:17.408 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-86-1655321717405 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:35:17.410 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-87-1655321717409 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:35:17.454 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-90-1655321717452 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:35:17.454 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-89-1655321717452 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:35:17.457 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-91-1655321717456 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:35:17.479 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-88-1655321717452 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:35:17.523 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-92-1655321717519 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:35:17.539 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-93-1655321717537 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:35:17.583 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-94-1655321717582 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:35:17.585 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-95-1655321717583 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:35:17.585 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-96-1655321717583 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:35:17.585 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-98-1655321717584 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:35:17.586 [eventLoopGroupProxy-4-9] I (ktor.application) - Call #call-97-1655321717584 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:35:17.588 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-99-1655321717586 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:35:17.589 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-100-1655321717586 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:35:17.620 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-101-1655321717618 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:35:17.620 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-103-1655321717618 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:35:17.620 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-102-1655321717618 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:35:17.635 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-104-1655321717633 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:35:17.687 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-105-1655321717667 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:35:17.754 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-106-1655321717753 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:35:17.769 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-107-1655321717767 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:37:14.914 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-108-1655321834912 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:37:14.946 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-109-1655321834945 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:37:14.952 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-110-1655321834949 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:37:14.955 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-111-1655321834954 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:37:14.998 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-112-1655321834996 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:37:15.000 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-114-1655321834998 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:37:15.002 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-115-1655321835000 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:37:15.026 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-113-1655321834996 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:37:15.083 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-116-1655321835082 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:37:15.100 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-117-1655321835098 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:37:15.142 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-120-1655321835140 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:37:15.143 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-119-1655321835140 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:37:15.143 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-118-1655321835140 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:37:15.146 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-121-1655321835141 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:37:15.147 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-122-1655321835145 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:37:15.147 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-123-1655321835146 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:37:15.149 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-124-1655321835146 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:37:15.182 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-126-1655321835179 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:37:15.182 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-127-1655321835180 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:37:15.182 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-125-1655321835179 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:37:15.200 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-128-1655321835198 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:37:15.254 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-129-1655321835232 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:37:15.330 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-130-1655321835328 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:37:15.346 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-131-1655321835344 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:37:16.211 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-132-1655321836210 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics Response 200 OK
+2022-06-15/15:37:16.293 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-133-1655321836292 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:37:16.297 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-134-1655321836293 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:37:16.297 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-135-1655321836295 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:37:16.358 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-137-1655321836356 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:37:16.358 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-138-1655321836356 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:37:16.363 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-139-1655321836361 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:37:16.383 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-136-1655321836356 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:37:16.429 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-140-1655321836427 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:37:16.451 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-141-1655321836449 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:37:16.511 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-142-1655321836509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:37:16.511 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-147-1655321836510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:37:16.511 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-146-1655321836510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:37:16.512 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-144-1655321836509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:37:16.512 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-143-1655321836509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:37:16.512 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-145-1655321836509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:37:16.516 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-148-1655321836512 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:37:16.592 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-149-1655321836589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:37:16.592 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-150-1655321836589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:37:16.592 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-151-1655321836589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:37:16.632 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-152-1655321836631 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:37:16.688 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-153-1655321836664 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:37:16.753 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-154-1655321836751 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:37:16.767 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-155-1655321836765 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:37:17.974 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-156-1655321836881 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate.txt Response 200 OK
+2022-06-15/15:37:18.017 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-157-1655321838013 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:37:18.037 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-158-1655321838035 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:37:18.092 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-161-1655321838090 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-imperials.png Response 404 Not Found
+2022-06-15/15:37:18.092 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-159-1655321838090 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-freedom.png Response 404 Not Found
+2022-06-15/15:37:18.092 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-160-1655321838090 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-whigs.png Response 404 Not Found
+2022-06-15/15:37:18.092 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-162-1655321838091 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-tylan-peoples.png Response 404 Not Found
+2022-06-15/15:37:18.093 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-163-1655321838091 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-workers-left.png Response 404 Not Found
+2022-06-15/15:37:18.093 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-164-1655321838091 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-new-republicans.png Response 404 Not Found
+2022-06-15/15:37:18.095 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-165-1655321838093 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-liberals.png Response 404 Not Found
+2022-06-15/15:37:18.096 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-166-1655321838094 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-democratic-union.png Response 404 Not Found
+2022-06-15/15:37:18.096 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-168-1655321838094 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-imperial-democrats.png Response 404 Not Found
+2022-06-15/15:37:18.096 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-167-1655321838094 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-royalists.png Response 404 Not Found
+2022-06-15/15:37:18.096 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-169-1655321838095 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-democratic-reform.png Response 404 Not Found
+2022-06-15/15:37:18.098 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-171-1655321838097 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-republicans.png Response 404 Not Found
+2022-06-15/15:37:18.098 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-170-1655321838097 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-all-peoples.png Response 404 Not Found
+2022-06-15/15:37:18.106 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-172-1655321838104 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:37:18.133 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-175-1655321838131 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:37:18.133 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-174-1655321838131 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:37:18.146 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-176-1655321838145 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:37:18.162 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-173-1655321838131 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:37:18.320 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-177-1655321838317 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:37:18.355 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-178-1655321838350 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:37:18.400 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-179-1655321838398 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:37:18.400 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-181-1655321838399 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:37:18.400 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-180-1655321838399 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:37:18.402 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-183-1655321838400 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:37:18.402 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-182-1655321838400 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:37:18.403 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-184-1655321838401 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:37:18.404 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-185-1655321838401 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:37:18.435 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-187-1655321838433 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:37:18.435 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-186-1655321838433 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:37:18.435 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-188-1655321838433 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:37:18.449 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-189-1655321838448 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:37:18.495 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-190-1655321838476 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:37:18.558 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-191-1655321838556 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:37:18.570 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-192-1655321838569 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:37:21.915 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-193-1655321841910 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-freedom.png Response 200 OK
+2022-06-15/15:37:24.948 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-194-1655321844129 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate.txt Response 200 OK
+2022-06-15/15:37:24.974 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-195-1655321844971 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:37:25.004 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-196-1655321845003 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:37:25.055 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-197-1655321845054 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-freedom.png Response 404 Not Found
+2022-06-15/15:37:25.055 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-200-1655321845054 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-tylan-peoples.png Response 404 Not Found
+2022-06-15/15:37:25.055 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-198-1655321845054 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-whigs.png Response 404 Not Found
+2022-06-15/15:37:25.055 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-199-1655321845054 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-imperials.png Response 404 Not Found
+2022-06-15/15:37:25.055 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-201-1655321845054 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-workers-left.png Response 404 Not Found
+2022-06-15/15:37:25.055 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-202-1655321845054 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-new-republicans.png Response 404 Not Found
+2022-06-15/15:37:25.057 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-203-1655321845055 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-democratic-union.png Response 404 Not Found
+2022-06-15/15:37:25.058 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-204-1655321845056 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-liberals.png Response 404 Not Found
+2022-06-15/15:37:25.057 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-205-1655321845056 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-royalists.png Response 404 Not Found
+2022-06-15/15:37:25.058 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-206-1655321845056 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-imperial-democrats.png Response 404 Not Found
+2022-06-15/15:37:25.058 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-207-1655321845057 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-democratic-reform.png Response 404 Not Found
+2022-06-15/15:37:25.060 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-209-1655321845059 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-all-peoples.png Response 404 Not Found
+2022-06-15/15:37:25.060 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-208-1655321845058 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-republicans.png Response 404 Not Found
+2022-06-15/15:37:25.067 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-210-1655321845066 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:37:25.093 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-212-1655321845092 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:37:25.094 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-213-1655321845092 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:37:25.103 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-214-1655321845101 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:37:25.129 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-211-1655321845092 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:37:25.289 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-215-1655321845284 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:37:25.327 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-216-1655321845322 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:37:25.375 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-219-1655321845374 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:37:25.375 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-217-1655321845373 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:37:25.376 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-218-1655321845373 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:37:25.376 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-220-1655321845374 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:37:25.376 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-221-1655321845374 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:37:25.376 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-222-1655321845375 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:37:25.380 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-223-1655321845376 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:37:25.413 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-225-1655321845411 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:37:25.413 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-224-1655321845411 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:37:25.413 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-226-1655321845412 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:37:25.428 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-227-1655321845428 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:37:25.475 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-228-1655321845458 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:37:25.540 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-229-1655321845537 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:37:25.556 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-230-1655321845554 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:37:26.800 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-231-1655321846795 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-freedom.png Response 200 OK
+2022-06-15/15:37:29.840 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-232-1655321849017 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate.txt Response 200 OK
+2022-06-15/15:37:31.626 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-233-1655321850996 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate.txt Response 200 OK
+2022-06-15/15:37:31.681 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-234-1655321851679 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:37:31.735 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-235-1655321851733 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-whigs.png Response 404 Not Found
+2022-06-15/15:37:31.736 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-238-1655321851733 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-imperials.png Response 404 Not Found
+2022-06-15/15:37:31.736 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-239-1655321851734 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-workers-left.png Response 404 Not Found
+2022-06-15/15:37:31.738 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-236-1655321851733 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-freedom.png Response 404 Not Found
+2022-06-15/15:37:31.738 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-237-1655321851733 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-tylan-peoples.png Response 404 Not Found
+2022-06-15/15:37:31.739 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-241-1655321851737 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-liberals.png Response 404 Not Found
+2022-06-15/15:37:31.740 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-240-1655321851737 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-new-republicans.png Response 404 Not Found
+2022-06-15/15:37:31.740 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-242-1655321851739 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-democratic-union.png Response 404 Not Found
+2022-06-15/15:37:31.743 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-243-1655321851739 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:37:31.747 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-248-1655321851745 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-republicans.png Response 404 Not Found
+2022-06-15/15:37:31.747 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-246-1655321851744 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-royalists.png Response 404 Not Found
+2022-06-15/15:37:31.747 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-247-1655321851744 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-imperial-democrats.png Response 404 Not Found
+2022-06-15/15:37:31.747 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-244-1655321851744 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-all-peoples.png Response 404 Not Found
+2022-06-15/15:37:31.747 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-245-1655321851744 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-democratic-reform.png Response 404 Not Found
+2022-06-15/15:37:31.782 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-249-1655321851781 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:37:31.958 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-250-1655321851956 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-whigs.png Response 404 Not Found
+2022-06-15/15:37:31.958 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-253-1655321851957 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-tylan-peoples.png Response 404 Not Found
+2022-06-15/15:37:31.958 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-252-1655321851956 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-imperials.png Response 404 Not Found
+2022-06-15/15:37:31.958 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-251-1655321851956 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-freedom.png Response 404 Not Found
+2022-06-15/15:37:31.959 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-255-1655321851957 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-new-republicans.png Response 404 Not Found
+2022-06-15/15:37:31.959 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-254-1655321851957 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-workers-left.png Response 404 Not Found
+2022-06-15/15:37:31.961 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-256-1655321851959 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-democratic-union.png Response 404 Not Found
+2022-06-15/15:37:31.961 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-259-1655321851960 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-imperial-democrats.png Response 404 Not Found
+2022-06-15/15:37:31.961 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-258-1655321851960 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-liberals.png Response 404 Not Found
+2022-06-15/15:37:31.963 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-260-1655321851961 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-republicans.png Response 404 Not Found
+2022-06-15/15:37:31.963 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-257-1655321851960 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-royalists.png Response 404 Not Found
+2022-06-15/15:37:31.964 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-261-1655321851962 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-all-peoples.png Response 404 Not Found
+2022-06-15/15:37:31.964 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-262-1655321851962 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/party-democratic-reform.png Response 404 Not Found
+2022-06-15/15:37:31.965 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-265-1655321851964 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:37:31.965 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-264-1655321851963 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:37:31.990 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-263-1655321851962 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:37:32.008 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-266-1655321852007 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:37:32.284 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-267-1655321852282 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:37:32.310 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-268-1655321852308 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:37:32.386 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-269-1655321852384 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:37:32.386 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-270-1655321852385 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:37:32.387 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-273-1655321852386 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:37:32.387 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-271-1655321852385 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:37:32.388 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-272-1655321852385 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:37:32.388 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-274-1655321852386 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:37:32.398 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-275-1655321852395 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:37:32.526 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-276-1655321852524 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:37:32.527 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-277-1655321852524 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:37:32.528 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-278-1655321852527 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:37:32.576 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-279-1655321852575 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:37:32.659 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-280-1655321852639 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:37:32.730 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-281-1655321852728 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:37:32.749 [eventLoopGroupProxy-4-12] I (ktor.application) - Call #call-282-1655321852747 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:38:17.547 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:38:17.628 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:38:17.632 [main] I (ktor.application) - Application started in 0.091 seconds.
+2022-06-15/15:38:17.633 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:38:17.640 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:38:17.725 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:38:17.725 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:38:17.727 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:38:17.727 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:38:17.727 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:38:17.728 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:38:17.728 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:38:17.728 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:38:17.728 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:38:17.728 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:38:17.729 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:38:17.729 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:38:17.730 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:38:17.731 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:38:17.731 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:38:17.732 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:38:17.732 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:38:19.068 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:38:19.082 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:38:19.083 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:38:19.088 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:38:19.088 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:38:19.093 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:38:19.181 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 16736 (auto-detected)
+2022-06-15/15:38:19.182 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:38:19.182 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:38:20.356 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:38:20.356 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:38:21.687 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:38:21.695 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:38:21.696 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:38:21.731 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:38:21.732 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:38:21.732 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:38:21.732 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:38:21.732 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:38:21.732 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:38:21.732 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:38:21.733 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:38:21.733 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:38:21.733 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:38:21.733 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:38:21.733 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:38:21.743 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:38:21.743 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:38:21.743 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:38:33.087 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:38:33.088 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:38:33.090 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@1677a9db
+2022-06-15/15:38:33.222 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:38:33.222 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:38:33.222 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:38:33.222 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:38:35.464 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655321913304 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate.txt Response 200 OK
+2022-06-15/15:38:35.634 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655321915504 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:38:35.641 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655321915516 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:38:35.716 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-8-1655321915692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-tylan-peoples.png Response 200 OK
+2022-06-15/15:38:35.722 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-10-1655321915718 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:38:35.741 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-9-1655321915693 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-union.png Response 200 OK
+2022-06-15/15:38:35.741 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-6-1655321915691 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-workers-left.png Response 200 OK
+2022-06-15/15:38:35.754 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-5-1655321915677 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperials.png Response 200 OK
+2022-06-15/15:38:35.761 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-7-1655321915691 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-new-republicans.png Response 200 OK
+2022-06-15/15:38:35.790 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-12-1655321915743 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperial-democrats.png Response 200 OK
+2022-06-15/15:38:35.806 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-4-1655321915676 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-whigs.png Response 200 OK
+2022-06-15/15:38:35.826 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-11-1655321915724 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-liberals.png Response 200 OK
+2022-06-15/15:38:35.863 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-13-1655321915743 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-royalists.png Response 200 OK
+2022-06-15/15:38:35.899 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-19-1655321915867 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:38:35.901 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-17-1655321915809 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-reform.png Response 200 OK
+2022-06-15/15:38:35.907 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-15-1655321915762 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-all-peoples.png Response 200 OK
+2022-06-15/15:38:35.910 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-16-1655321915792 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-freedom.png Response 200 OK
+2022-06-15/15:38:35.915 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-20-1655321915903 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:38:35.935 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-14-1655321915757 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-republicans.png Response 200 OK
+2022-06-15/15:38:35.944 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-21-1655321915935 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:38:36.055 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-18-1655321915838 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:38:36.293 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-22-1655321916289 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:38:36.337 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-23-1655321916331 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:38:36.455 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-26-1655321916448 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:38:36.455 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-27-1655321916449 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:38:36.457 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-24-1655321916446 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:38:36.459 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-25-1655321916447 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:38:36.461 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-28-1655321916451 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:38:36.464 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-29-1655321916451 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:38:36.472 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-30-1655321916457 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:38:36.576 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-31-1655321916528 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:38:36.578 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-33-1655321916528 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:38:36.579 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-32-1655321916528 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:38:36.615 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-34-1655321916610 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:38:36.726 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-35-1655321916676 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:38:36.841 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-36-1655321916836 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:38:36.874 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-37-1655321916870 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:39:30.962 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-38-1655321970954 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /change-theme Response 200 OK
+2022-06-15/15:39:31.022 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-39-1655321971019 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:39:31.032 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-41-1655321971028 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:39:31.035 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-40-1655321971028 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:39:31.082 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-44-1655321971078 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:39:31.082 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-43-1655321971078 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:39:31.085 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-45-1655321971082 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:39:31.120 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-42-1655321971077 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:39:31.176 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-46-1655321971174 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:39:31.191 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-47-1655321971188 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:39:31.299 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-48-1655321971245 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:39:31.299 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-50-1655321971245 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:39:31.299 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-49-1655321971245 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:39:31.303 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-53-1655321971297 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:39:31.304 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-51-1655321971247 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:39:31.305 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-52-1655321971248 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:39:31.312 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-54-1655321971301 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:39:31.350 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-55-1655321971348 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:39:31.352 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-57-1655321971348 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:39:31.352 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-56-1655321971348 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:39:31.374 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-58-1655321971370 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:39:31.438 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-59-1655321971411 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:39:31.534 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-60-1655321971529 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:39:31.550 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-61-1655321971548 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:39:33.120 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-62-1655321973117 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:39:33.177 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-63-1655321973174 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:39:33.188 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-65-1655321973185 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:39:33.191 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-64-1655321973185 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:39:33.245 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-67-1655321973243 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:39:33.248 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-68-1655321973245 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:39:33.250 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-69-1655321973247 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:39:33.285 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-66-1655321973243 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:39:33.334 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-70-1655321973333 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:39:33.373 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-71-1655321973370 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:39:33.419 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-72-1655321973416 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:39:33.419 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-73-1655321973416 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:39:33.420 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-74-1655321973416 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:39:33.422 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-76-1655321973417 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:39:33.422 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-75-1655321973417 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:39:33.428 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-77-1655321973420 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:39:33.431 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-78-1655321973421 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:39:33.456 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-80-1655321973453 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:39:33.456 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-81-1655321973453 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:39:33.456 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-79-1655321973453 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:39:33.471 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-82-1655321973470 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:39:33.525 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-83-1655321973503 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:39:33.674 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-84-1655321973672 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:39:33.726 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-85-1655321973723 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:39:35.541 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-86-1655321974585 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate.txt Response 200 OK
+2022-06-15/15:39:35.583 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-87-1655321975579 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:39:35.603 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-88-1655321975601 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:39:35.615 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-89-1655321975614 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:39:35.696 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-93-1655321975692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-tylan-peoples.png Response 200 OK
+2022-06-15/15:39:35.701 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-92-1655321975692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperials.png Response 200 OK
+2022-06-15/15:39:35.701 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-95-1655321975693 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-new-republicans.png Response 200 OK
+2022-06-15/15:39:35.701 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-91-1655321975692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-whigs.png Response 200 OK
+2022-06-15/15:39:35.704 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-90-1655321975692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-freedom.png Response 200 OK
+2022-06-15/15:39:35.709 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-96-1655321975698 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-union.png Response 200 OK
+2022-06-15/15:39:35.712 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-94-1655321975693 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-workers-left.png Response 200 OK
+2022-06-15/15:39:35.713 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-100-1655321975710 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:39:35.715 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-99-1655321975703 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperial-democrats.png Response 200 OK
+2022-06-15/15:39:35.715 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-98-1655321975702 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-liberals.png Response 200 OK
+2022-06-15/15:39:35.716 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-101-1655321975713 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:39:35.721 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-97-1655321975702 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-royalists.png Response 200 OK
+2022-06-15/15:39:35.722 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-104-1655321975717 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-reform.png Response 200 OK
+2022-06-15/15:39:35.722 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-103-1655321975716 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-all-peoples.png Response 200 OK
+2022-06-15/15:39:35.725 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-102-1655321975714 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-republicans.png Response 200 OK
+2022-06-15/15:39:35.731 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-106-1655321975727 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:39:35.779 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-105-1655321975717 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:39:35.822 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-107-1655321975820 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:39:35.980 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-108-1655321975975 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:39:36.054 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-111-1655321976053 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:39:36.054 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-109-1655321976052 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:39:36.055 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-112-1655321976053 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:39:36.055 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-110-1655321976052 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:39:36.056 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-113-1655321976054 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:39:36.057 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-114-1655321976055 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:39:36.060 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-115-1655321976055 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:39:36.094 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-117-1655321976092 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:39:36.094 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-116-1655321976092 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:39:36.097 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-118-1655321976095 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:39:36.109 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-119-1655321976107 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:39:36.161 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-120-1655321976140 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:39:36.228 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-121-1655321976227 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:39:36.241 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-122-1655321976239 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:39:44.867 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-123-1655321984865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-reform.png Response 200 OK
+2022-06-15/15:39:59.212 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-124-1655321999211 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics Response 200 OK
+2022-06-15/15:39:59.257 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-125-1655321999255 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:39:59.267 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-126-1655321999262 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:39:59.267 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-127-1655321999266 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:39:59.353 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-130-1655321999351 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:39:59.353 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-129-1655321999351 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:39:59.353 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-131-1655321999351 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:39:59.383 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-128-1655321999350 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:39:59.432 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-132-1655321999430 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:39:59.452 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-133-1655321999451 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:39:59.502 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-135-1655321999500 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:39:59.502 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-134-1655321999500 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:39:59.502 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-136-1655321999501 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:39:59.503 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-137-1655321999502 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:39:59.508 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-138-1655321999506 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:39:59.509 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-139-1655321999506 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:39:59.511 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-140-1655321999506 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:39:59.542 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-141-1655321999541 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:39:59.543 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-143-1655321999542 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:39:59.543 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-142-1655321999541 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:39:59.559 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-144-1655321999558 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:39:59.605 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-145-1655321999588 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:39:59.668 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-146-1655321999666 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:39:59.681 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-147-1655321999679 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:40:01.060 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-148-1655322000443 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate.txt Response 200 OK
+2022-06-15/15:40:01.109 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-149-1655322001106 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:40:01.114 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-150-1655322001112 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:40:01.120 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-151-1655322001119 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:40:01.200 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-155-1655322001196 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-tylan-peoples.png Response 200 OK
+2022-06-15/15:40:01.202 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-153-1655322001195 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-whigs.png Response 200 OK
+2022-06-15/15:40:01.204 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-157-1655322001198 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-new-republicans.png Response 200 OK
+2022-06-15/15:40:01.204 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-152-1655322001195 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-freedom.png Response 200 OK
+2022-06-15/15:40:01.206 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-154-1655322001196 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperials.png Response 200 OK
+2022-06-15/15:40:01.208 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-156-1655322001197 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-workers-left.png Response 200 OK
+2022-06-15/15:40:01.213 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-159-1655322001204 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-liberals.png Response 200 OK
+2022-06-15/15:40:01.213 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-158-1655322001201 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-union.png Response 200 OK
+2022-06-15/15:40:01.215 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-161-1655322001206 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperial-democrats.png Response 200 OK
+2022-06-15/15:40:01.221 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-163-1655322001214 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-all-peoples.png Response 200 OK
+2022-06-15/15:40:01.221 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-160-1655322001206 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-royalists.png Response 200 OK
+2022-06-15/15:40:01.221 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-164-1655322001214 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-reform.png Response 200 OK
+2022-06-15/15:40:01.222 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-162-1655322001209 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-republicans.png Response 200 OK
+2022-06-15/15:40:01.232 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-167-1655322001230 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:40:01.232 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-166-1655322001230 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:40:01.254 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-168-1655322001252 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:40:01.268 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-165-1655322001230 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:40:01.309 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-169-1655322001307 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:40:01.432 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-170-1655322001428 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:40:01.512 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-172-1655322001510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:40:01.512 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-171-1655322001510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:40:01.513 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-173-1655322001511 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:40:01.513 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-174-1655322001511 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:40:01.513 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-175-1655322001512 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:40:01.515 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-176-1655322001512 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:40:01.517 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-177-1655322001513 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:40:01.551 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-178-1655322001549 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:40:01.551 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-179-1655322001549 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:40:01.551 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-180-1655322001550 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:40:01.569 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-181-1655322001566 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:40:01.629 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-182-1655322001608 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:40:01.694 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-183-1655322001692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:40:01.706 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-184-1655322001704 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:40:03.250 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-185-1655322003247 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:40:03.291 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-186-1655322003290 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:40:03.302 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-188-1655322003300 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:40:03.302 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-187-1655322003298 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:40:03.343 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-190-1655322003342 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:40:03.344 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-191-1655322003343 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:40:03.349 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-192-1655322003347 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:40:03.376 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-189-1655322003342 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:40:03.417 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-193-1655322003415 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:40:03.437 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-194-1655322003435 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:40:03.477 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-195-1655322003475 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:40:03.477 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-196-1655322003475 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:40:03.478 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-197-1655322003476 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:40:03.478 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-198-1655322003476 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:40:03.478 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-200-1655322003478 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:40:03.478 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-199-1655322003477 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:40:03.481 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-201-1655322003478 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:40:03.511 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-202-1655322003510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:40:03.511 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-204-1655322003510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:40:03.511 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-203-1655322003510 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:40:03.525 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-205-1655322003524 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:40:03.575 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-206-1655322003558 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:40:03.643 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-207-1655322003641 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:40:03.658 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-208-1655322003656 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:40:38.719 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-209-1655322038717 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:40:38.787 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-210-1655322038785 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:40:38.795 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-211-1655322038792 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:40:38.800 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-212-1655322038799 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:40:38.839 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-214-1655322038837 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:40:38.839 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-215-1655322038837 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:40:38.842 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-216-1655322038840 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:40:38.865 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-213-1655322038837 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:40:38.914 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-217-1655322038912 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:40:38.930 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-218-1655322038928 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:40:38.979 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-219-1655322038978 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:40:38.979 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-220-1655322038978 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:40:38.979 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-221-1655322038978 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:40:38.980 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-222-1655322038978 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:40:38.981 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-224-1655322038980 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:40:38.981 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-223-1655322038980 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:40:38.983 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-225-1655322038980 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:40:39.015 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-226-1655322039013 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:40:39.015 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-227-1655322039013 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:40:39.015 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-228-1655322039014 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:40:39.030 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-229-1655322039028 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:40:39.081 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-230-1655322039063 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:40:39.148 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-231-1655322039147 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:40:39.164 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-232-1655322039162 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:40:39.750 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-233-1655322039689 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language Response 200 OK
+2022-06-15/15:40:39.816 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-234-1655322039812 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:40:39.942 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-235-1655322039835 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:40:39.942 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-236-1655322039844 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:40:39.969 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-238-1655322039968 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:40:39.969 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-239-1655322039968 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:40:39.991 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-240-1655322039974 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/font/tylan-language-alphabet-3.woff Response 200 OK
+2022-06-15/15:40:39.992 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-241-1655322039985 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:40:40.008 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-237-1655322039967 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:40:40.185 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-242-1655322040184 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:40:40.203 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-243-1655322040200 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:40:40.286 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-245-1655322040285 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:40:40.286 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-246-1655322040285 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:40:40.286 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-247-1655322040285 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:40:40.286 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-244-1655322040285 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:40:40.295 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-249-1655322040293 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:40:40.295 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-248-1655322040293 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:40:40.296 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-250-1655322040293 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:40:40.324 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-251-1655322040323 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:40:40.324 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-253-1655322040323 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:40:40.324 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-252-1655322040323 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:40:40.440 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-254-1655322040439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:40:40.498 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-255-1655322040479 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:40:40.574 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-256-1655322040573 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:40:40.586 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-257-1655322040584 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:41:04.120 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-258-1655322064106 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture/tylan-language Response 200 OK
+2022-06-15/15:41:04.161 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-259-1655322064159 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:41:04.171 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-261-1655322064169 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:41:04.172 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-260-1655322064167 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:41:04.232 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-263-1655322064231 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:41:04.232 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-264-1655322064231 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:41:04.253 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-265-1655322064251 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:41:04.259 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-262-1655322064231 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:41:04.408 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-266-1655322064406 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:41:04.439 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-267-1655322064434 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:41:04.500 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-269-1655322064498 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:41:04.500 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-268-1655322064498 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:41:04.500 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-270-1655322064499 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:41:04.501 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-271-1655322064499 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:41:04.502 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-272-1655322064500 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:41:04.502 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-273-1655322064501 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:41:04.503 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-274-1655322064501 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:41:04.531 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-275-1655322064529 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:41:04.531 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-276-1655322064529 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:41:04.531 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-277-1655322064530 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:41:04.548 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-278-1655322064546 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:41:04.604 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-279-1655322064586 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:41:04.667 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-280-1655322064666 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:41:04.681 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-281-1655322064680 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:41:06.801 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-282-1655322066033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:06.801 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-284-1655322066206 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:06.801 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-283-1655322066033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:07.191 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-285-1655322067190 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:07.849 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-286-1655322067848 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:08.218 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-287-1655322068217 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:08.999 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-288-1655322068998 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:09.202 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-289-1655322069201 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:09.544 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-290-1655322069544 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:09.800 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-291-1655322069799 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:09.832 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-292-1655322069832 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:09.973 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-293-1655322069973 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:10.407 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-294-1655322070406 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:10.582 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-295-1655322070582 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:11.214 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-296-1655322071213 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:12.698 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-297-1655322072697 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:12.878 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-298-1655322072878 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:13.639 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-299-1655322073639 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:13.905 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-300-1655322073904 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:21.535 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-301-1655322081534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request POST /tylan-lang Response 200 OK
+2022-06-15/15:41:28.457 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-302-1655322088425 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:41:37.761 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-303-1655322097760 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/culture Response 200 OK
+2022-06-15/15:41:37.807 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-304-1655322097807 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:41:37.815 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-305-1655322097811 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:41:37.821 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-306-1655322097819 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:41:37.870 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-309-1655322097869 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:41:37.870 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-308-1655322097869 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:41:37.872 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-310-1655322097871 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:41:37.893 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-307-1655322097869 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:41:37.940 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-311-1655322097938 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:41:37.955 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-312-1655322097954 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:41:37.999 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-313-1655322097998 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:41:37.999 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-314-1655322097998 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:41:37.999 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-315-1655322097998 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:41:38.000 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-316-1655322097999 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:41:38.002 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-317-1655322098000 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:41:38.002 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-319-1655322098000 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:41:38.004 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-318-1655322098000 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:41:38.032 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-321-1655322098031 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:41:38.036 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-320-1655322098031 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:41:38.037 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-322-1655322098032 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:41:38.053 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-323-1655322098048 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:41:38.100 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-324-1655322098084 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:41:38.174 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-325-1655322098172 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:41:38.190 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-326-1655322098189 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:41:39.562 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-327-1655322099560 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:41:39.626 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-328-1655322099624 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:41:39.633 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-330-1655322099631 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:41:39.635 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-329-1655322099631 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:41:39.688 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-332-1655322099687 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:41:39.688 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-333-1655322099687 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:41:39.691 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-334-1655322099690 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:41:39.711 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-331-1655322099686 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:41:39.751 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-335-1655322099749 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:41:39.765 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-336-1655322099764 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:41:39.807 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-337-1655322099806 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:41:39.808 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-339-1655322099806 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:41:39.808 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-338-1655322099806 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:41:39.809 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-340-1655322099807 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:41:39.809 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-341-1655322099808 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:41:39.810 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-342-1655322099808 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:41:39.812 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-343-1655322099808 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:41:39.845 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-344-1655322099844 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:41:39.845 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-346-1655322099844 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:41:39.845 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-345-1655322099844 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:41:39.860 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-347-1655322099859 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:41:39.908 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-348-1655322099891 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:41:39.976 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-349-1655322099975 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:41:39.990 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-350-1655322099988 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:41:40.858 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-351-1655322100825 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/places/milky-way Response 200 OK
+2022-06-15/15:41:40.898 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-352-1655322100895 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:41:40.936 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-353-1655322100934 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:41:41.095 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-356-1655322101089 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-masra-draetsen.png Response 200 OK
+2022-06-15/15:41:41.095 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-358-1655322101089 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-chaebodes-star-empire.png Response 200 OK
+2022-06-15/15:41:41.096 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-357-1655322101089 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-isarnareykk.png Response 200 OK
+2022-06-15/15:41:41.097 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-359-1655322101090 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-niska-republic.png Response 200 OK
+2022-06-15/15:41:41.100 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-355-1655322101088 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-mechyrdia.png Response 200 OK
+2022-06-15/15:41:41.103 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-361-1655322101096 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-theudareykk.png Response 200 OK
+2022-06-15/15:41:41.103 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-360-1655322101095 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ilkhan-republic.png Response 200 OK
+2022-06-15/15:41:41.104 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-363-1655322101098 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-stahlareykk.png Response 200 OK
+2022-06-15/15:41:41.105 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-362-1655322101097 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-swartareykk.png Response 200 OK
+2022-06-15/15:41:41.110 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-365-1655322101104 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-noctiferorum.png Response 200 OK
+2022-06-15/15:41:41.111 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-364-1655322101104 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-diabolorum.png Response 200 OK
+2022-06-15/15:41:41.114 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-366-1655322101105 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-viperarum.png Response 200 OK
+2022-06-15/15:41:41.114 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-367-1655322101105 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-arkant-horde.png Response 200 OK
+2022-06-15/15:41:41.122 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-368-1655322101111 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-tylan-theocracy.png Response 200 OK
+2022-06-15/15:41:41.126 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-370-1655322101115 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-terran-revolutionary-republic.png Response 200 OK
+2022-06-15/15:41:41.127 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-369-1655322101112 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-mechyrdia-protectorate.png Response 200 OK
+2022-06-15/15:41:41.127 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-371-1655322101116 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ilkhan-commune.png Response 200 OK
+2022-06-15/15:41:41.130 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-372-1655322101124 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-telareth-republic.png Response 200 OK
+2022-06-15/15:41:41.132 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-373-1655322101127 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-drakhassi-federation.png Response 200 OK
+2022-06-15/15:41:41.132 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-374-1655322101128 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ferthlon-internation.png Response 200 OK
+2022-06-15/15:41:41.135 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-375-1655322101128 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-rathian-consensus.png Response 200 OK
+2022-06-15/15:41:41.136 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-376-1655322101132 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ndrc.png Response 200 OK
+2022-06-15/15:41:41.139 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-378-1655322101134 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ccc.png Response 200 OK
+2022-06-15/15:41:41.141 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-377-1655322101133 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/logo-mjolnir-energy.png Response 200 OK
+2022-06-15/15:41:41.143 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-380-1655322101137 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-lyudareykk.png Response 200 OK
+2022-06-15/15:41:41.146 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-382-1655322101140 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-magistrorum.png Response 200 OK
+2022-06-15/15:41:41.149 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-379-1655322101136 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-res-nostra.png Response 200 OK
+2022-06-15/15:41:41.151 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-383-1655322101142 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-togatorum.png Response 200 OK
+2022-06-15/15:41:41.153 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-381-1655322101140 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-humilitatum.png Response 200 OK
+2022-06-15/15:41:41.155 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-385-1655322101151 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-lihann-empire.png Response 200 OK
+2022-06-15/15:41:41.155 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-384-1655322101147 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-corsairs.png Response 200 OK
+2022-06-15/15:41:41.158 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-387-1655322101155 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-fulkreykk-2.png Response 200 OK
+2022-06-15/15:41:41.158 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-386-1655322101153 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-fulkreykk-1.png Response 200 OK
+2022-06-15/15:41:41.158 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-389-1655322101156 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-felinae-felices.png Response 200 OK
+2022-06-15/15:41:41.160 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-388-1655322101156 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-vestigium.png Response 200 OK
+2022-06-15/15:41:41.166 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-392-1655322101164 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:41:41.166 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-391-1655322101164 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:41:41.170 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-393-1655322101169 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:41:41.228 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-390-1655322101164 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:41:41.256 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-394-1655322101256 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:41:41.429 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-395-1655322101427 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:41:41.635 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-396-1655322101632 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:41:41.726 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-397-1655322101725 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:41:41.726 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-398-1655322101725 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:41:41.727 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-399-1655322101726 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:41:41.728 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-401-1655322101727 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:41:41.728 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-400-1655322101727 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:41:41.729 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-402-1655322101728 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:41:41.730 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-403-1655322101728 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:41:41.780 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-404-1655322101778 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:41:41.781 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-406-1655322101778 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:41:41.781 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-405-1655322101778 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:41:41.814 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-407-1655322101812 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:41:41.874 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-354-1655322101088 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/map-galaxy.png Response 200 OK
+2022-06-15/15:41:42.572 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-408-1655322102554 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:41:42.651 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-409-1655322102650 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:41:42.665 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-410-1655322102664 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:41:43.157 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-411-1655322102994 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/map-galaxy.png Response 200 OK
+2022-06-15/15:42:39.084 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-412-1655322159081 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-masra-draetsen.png Response 200 OK
+2022-06-15/15:42:39.085 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-413-1655322159083 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-niska-republic.png Response 200 OK
+2022-06-15/15:42:39.085 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-414-1655322159083 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-chaebodes-star-empire.png Response 200 OK
+2022-06-15/15:42:39.525 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-415-1655322159523 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:42:39.551 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-416-1655322159548 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:42:39.610 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-417-1655322159609 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:42:39.610 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-418-1655322159609 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:42:39.612 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-419-1655322159610 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:42:39.612 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-420-1655322159611 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:42:39.613 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-421-1655322159612 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:42:39.621 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-422-1655322159618 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:42:39.625 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-423-1655322159622 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:42:39.659 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-424-1655322159658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:42:39.660 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-425-1655322159658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:42:39.660 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-426-1655322159659 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:42:39.683 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-427-1655322159681 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:42:40.406 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-428-1655322160386 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:42:40.479 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-429-1655322160478 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:42:40.491 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-430-1655322160490 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:43:03.188 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-431-1655322183184 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-corsairs.png Response 200 OK
+2022-06-15/15:43:05.299 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-432-1655322185297 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ndrc.png Response 200 OK
+2022-06-15/15:43:53.594 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-433-1655322233593 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/places Response 200 OK
+2022-06-15/15:43:53.654 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-434-1655322233652 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:43:53.661 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-435-1655322233658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:43:53.668 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-436-1655322233667 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:43:53.710 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-437-1655322233708 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:43:53.710 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-438-1655322233708 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:43:53.711 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-440-1655322233710 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:43:53.736 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-439-1655322233708 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:43:53.766 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-441-1655322233765 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:43:53.785 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-442-1655322233784 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:43:53.826 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-443-1655322233824 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:43:53.826 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-444-1655322233824 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:43:53.826 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-445-1655322233825 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:43:53.826 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-446-1655322233825 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:43:53.828 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-447-1655322233827 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:43:53.828 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-448-1655322233827 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:43:53.830 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-449-1655322233828 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:43:53.866 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-450-1655322233865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:43:53.866 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-452-1655322233865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:43:53.866 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-451-1655322233865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:43:53.880 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-453-1655322233879 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:43:53.933 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-454-1655322233912 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:43:54.001 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-455-1655322233999 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:43:54.016 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-456-1655322234015 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:43:54.211 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-457-1655322234208 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:43:54.253 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-458-1655322234249 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:43:54.271 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-459-1655322234269 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:43:54.278 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-460-1655322234277 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:43:54.311 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-463-1655322234310 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:43:54.311 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-462-1655322234310 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:43:54.314 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-464-1655322234312 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:43:54.335 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-461-1655322234310 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:43:54.376 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-465-1655322234375 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:43:54.394 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-466-1655322234392 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:43:54.434 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-468-1655322234433 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:43:54.434 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-467-1655322234433 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:43:54.435 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-469-1655322234434 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:43:54.436 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-470-1655322234435 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:43:54.437 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-471-1655322234436 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:43:54.437 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-472-1655322234436 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:43:54.442 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-473-1655322234439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:43:54.474 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-474-1655322234473 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:43:54.475 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-475-1655322234473 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:43:54.476 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-476-1655322234474 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:43:54.489 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-477-1655322234488 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:43:54.539 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-478-1655322234523 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:43:54.603 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-479-1655322234602 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:43:54.618 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-480-1655322234617 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:43:55.076 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-481-1655322235073 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/mechyrdian-navy-ships.txt Response 200 OK
+2022-06-15/15:43:55.118 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-482-1655322235116 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:43:55.132 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-483-1655322235131 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:43:55.137 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-484-1655322235136 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:43:55.160 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-486-1655322235159 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:43:55.160 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-487-1655322235159 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:43:55.168 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-488-1655322235166 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:43:55.183 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-485-1655322235159 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:43:55.267 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-489-1655322235267 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:43:55.283 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-490-1655322235283 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:43:55.325 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-491-1655322235324 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:43:55.325 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-492-1655322235324 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:43:55.326 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-493-1655322235324 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:43:55.326 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-494-1655322235324 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:43:55.328 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-495-1655322235326 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:43:55.328 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-496-1655322235326 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:43:55.332 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-497-1655322235327 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:43:55.368 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-499-1655322235365 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:43:55.369 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-500-1655322235368 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:43:55.371 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-498-1655322235365 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:43:55.381 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-501-1655322235379 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:43:55.426 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-502-1655322235409 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:43:55.486 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-503-1655322235485 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:43:55.499 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-504-1655322235497 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:43:55.856 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-507-1655322235801 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.mtl Response 200 OK
+2022-06-15/15:43:55.856 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-509-1655322235804 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.mtl Response 200 OK
+2022-06-15/15:43:55.856 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-505-1655322235800 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.mtl Response 200 OK
+2022-06-15/15:43:55.856 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-508-1655322235803 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.mtl Response 200 OK
+2022-06-15/15:43:55.856 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-506-1655322235800 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.mtl Response 200 OK
+2022-06-15/15:43:55.858 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-510-1655322235805 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.mtl Response 200 OK
+2022-06-15/15:43:55.859 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-511-1655322235857 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.mtl Response 200 OK
+2022-06-15/15:43:55.860 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-512-1655322235858 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.mtl Response 200 OK
+2022-06-15/15:43:55.860 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-514-1655322235858 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.mtl Response 200 OK
+2022-06-15/15:43:55.860 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-516-1655322235858 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.mtl Response 200 OK
+2022-06-15/15:43:55.861 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-513-1655322235858 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.mtl Response 200 OK
+2022-06-15/15:43:55.861 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-515-1655322235858 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.mtl Response 200 OK
+2022-06-15/15:43:55.862 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-517-1655322235860 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.mtl Response 200 OK
+2022-06-15/15:43:55.864 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-518-1655322235861 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.mtl Response 200 OK
+2022-06-15/15:43:55.864 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-519-1655322235862 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.mtl Response 200 OK
+2022-06-15/15:43:55.864 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-520-1655322235862 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.mtl Response 200 OK
+2022-06-15/15:43:55.864 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-522-1655322235862 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.mtl Response 200 OK
+2022-06-15/15:43:55.864 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-521-1655322235862 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.mtl Response 200 OK
+2022-06-15/15:43:55.865 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-523-1655322235862 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.mtl Response 200 OK
+2022-06-15/15:43:55.866 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-524-1655322235864 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.mtl Response 200 OK
+2022-06-15/15:43:55.866 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-525-1655322235865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.mtl Response 200 OK
+2022-06-15/15:43:55.866 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-526-1655322235866 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.mtl Response 200 OK
+2022-06-15/15:43:55.867 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-527-1655322235866 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.mtl Response 200 OK
+2022-06-15/15:43:55.921 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-528-1655322235920 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.diff.png Response 200 OK
+2022-06-15/15:43:55.921 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-529-1655322235920 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.spec.png Response 200 OK
+2022-06-15/15:43:55.947 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-530-1655322235945 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.diff.png Response 200 OK
+2022-06-15/15:43:55.948 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-531-1655322235945 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.spec.png Response 200 OK
+2022-06-15/15:43:55.976 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-532-1655322235974 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.diff.png Response 200 OK
+2022-06-15/15:43:55.976 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-533-1655322235974 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.spec.png Response 200 OK
+2022-06-15/15:43:55.990 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-534-1655322235989 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.diff.png Response 200 OK
+2022-06-15/15:43:55.991 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-535-1655322235989 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.spec.png Response 200 OK
+2022-06-15/15:43:56.006 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-536-1655322236005 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.diff.png Response 200 OK
+2022-06-15/15:43:56.006 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-537-1655322236005 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.spec.png Response 200 OK
+2022-06-15/15:43:56.020 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-539-1655322236018 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.spec.png Response 200 OK
+2022-06-15/15:43:56.020 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-538-1655322236018 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.diff.png Response 200 OK
+2022-06-15/15:43:56.034 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-542-1655322236032 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.spec.png Response 200 OK
+2022-06-15/15:43:56.034 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-541-1655322236032 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.diff.png Response 200 OK
+2022-06-15/15:43:56.045 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-540-1655322236019 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.obj Response 200 OK
+2022-06-15/15:43:56.050 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-544-1655322236048 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.spec.png Response 200 OK
+2022-06-15/15:43:56.050 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-543-1655322236048 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.diff.png Response 200 OK
+2022-06-15/15:43:56.062 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-545-1655322236061 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.diff.png Response 200 OK
+2022-06-15/15:43:56.062 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-546-1655322236061 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.spec.png Response 200 OK
+2022-06-15/15:43:56.075 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-548-1655322236073 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.spec.png Response 200 OK
+2022-06-15/15:43:56.075 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-547-1655322236073 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.diff.png Response 200 OK
+2022-06-15/15:43:56.087 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-549-1655322236086 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.diff.png Response 200 OK
+2022-06-15/15:43:56.087 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-550-1655322236086 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.spec.png Response 200 OK
+2022-06-15/15:43:56.103 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-552-1655322236101 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.spec.png Response 200 OK
+2022-06-15/15:43:56.103 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-551-1655322236101 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.diff.png Response 200 OK
+2022-06-15/15:43:56.117 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-554-1655322236116 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.diff.png Response 200 OK
+2022-06-15/15:43:56.117 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-555-1655322236116 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.spec.png Response 200 OK
+2022-06-15/15:43:56.130 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-556-1655322236128 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.spec.png Response 200 OK
+2022-06-15/15:43:56.130 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-557-1655322236128 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.diff.png Response 200 OK
+2022-06-15/15:43:56.145 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-558-1655322236144 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.diff.png Response 200 OK
+2022-06-15/15:43:56.145 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-559-1655322236144 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.spec.png Response 200 OK
+2022-06-15/15:43:56.161 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-560-1655322236159 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.diff.png Response 200 OK
+2022-06-15/15:43:56.161 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-561-1655322236160 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.spec.png Response 200 OK
+2022-06-15/15:43:56.175 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-563-1655322236174 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.spec.png Response 200 OK
+2022-06-15/15:43:56.175 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-562-1655322236174 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.diff.png Response 200 OK
+2022-06-15/15:43:56.189 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-565-1655322236187 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.spec.png Response 200 OK
+2022-06-15/15:43:56.189 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-564-1655322236187 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.diff.png Response 200 OK
+2022-06-15/15:43:56.204 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-566-1655322236203 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.diff.png Response 200 OK
+2022-06-15/15:43:56.204 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-567-1655322236203 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.spec.png Response 200 OK
+2022-06-15/15:43:56.219 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-568-1655322236217 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.spec.png Response 200 OK
+2022-06-15/15:43:56.219 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-569-1655322236217 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.diff.png Response 200 OK
+2022-06-15/15:43:56.233 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-571-1655322236232 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.spec.png Response 200 OK
+2022-06-15/15:43:56.233 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-570-1655322236232 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.diff.png Response 200 OK
+2022-06-15/15:43:56.253 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-573-1655322236251 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.diff.png Response 200 OK
+2022-06-15/15:43:56.253 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-572-1655322236251 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.spec.png Response 200 OK
+2022-06-15/15:43:56.266 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-576-1655322236265 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.spec.png Response 200 OK
+2022-06-15/15:43:56.266 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-575-1655322236265 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.diff.png Response 200 OK
+2022-06-15/15:43:56.354 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-574-1655322236258 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.obj Response 200 OK
+2022-06-15/15:43:56.669 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-553-1655322236103 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.obj Response 200 OK
+2022-06-15/15:43:56.689 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-580-1655322236274 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.obj Response 200 OK
+2022-06-15/15:43:56.801 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-579-1655322236269 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.obj Response 200 OK
+2022-06-15/15:43:56.890 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-577-1655322236268 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.obj Response 200 OK
+2022-06-15/15:43:56.903 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-581-1655322236355 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.obj Response 200 OK
+2022-06-15/15:43:56.916 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-584-1655322236802 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.obj Response 200 OK
+2022-06-15/15:43:56.935 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-582-1655322236670 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.obj Response 200 OK
+2022-06-15/15:43:57.089 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-578-1655322236269 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.obj Response 200 OK
+2022-06-15/15:43:57.090 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-586-1655322236903 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.obj Response 200 OK
+2022-06-15/15:43:57.099 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-585-1655322236891 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.obj Response 200 OK
+2022-06-15/15:43:57.125 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-583-1655322236690 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.obj Response 200 OK
+2022-06-15/15:43:57.262 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-588-1655322236936 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.obj Response 200 OK
+2022-06-15/15:43:57.291 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-589-1655322237090 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.obj Response 200 OK
+2022-06-15/15:43:57.472 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-587-1655322236917 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.obj Response 200 OK
+2022-06-15/15:43:57.475 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-592-1655322237126 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.obj Response 200 OK
+2022-06-15/15:43:57.487 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-590-1655322237091 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.obj Response 200 OK
+2022-06-15/15:43:57.517 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-591-1655322237100 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.obj Response 200 OK
+2022-06-15/15:43:57.543 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-593-1655322237262 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.obj Response 200 OK
+2022-06-15/15:43:57.547 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-594-1655322237292 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.obj Response 200 OK
+2022-06-15/15:43:57.566 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-596-1655322237476 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.obj Response 200 OK
+2022-06-15/15:43:57.583 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-595-1655322237473 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.obj Response 200 OK
+2022-06-15/15:44:07.039 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-597-1655322246986 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/mechyrdian-navy Response 404 Not Found
+2022-06-15/15:44:07.090 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-598-1655322247089 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:44:07.097 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-599-1655322247094 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:44:07.140 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-600-1655322247096 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:44:07.140 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-603-1655322247139 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:44:07.140 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-602-1655322247139 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:44:07.162 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-604-1655322247161 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:44:07.164 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-601-1655322247139 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:44:07.195 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-605-1655322247194 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:44:07.218 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-606-1655322247215 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:44:07.267 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-607-1655322247266 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:44:07.267 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-608-1655322247266 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:44:07.268 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-609-1655322247266 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:44:07.269 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-610-1655322247268 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:44:07.270 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-611-1655322247269 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:44:07.271 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-612-1655322247270 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:44:07.273 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-613-1655322247270 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:44:07.307 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-614-1655322247305 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:44:07.307 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-616-1655322247306 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:44:07.307 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-615-1655322247306 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:44:07.322 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-617-1655322247320 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:44:07.368 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-618-1655322247353 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:44:07.428 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-619-1655322247427 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:44:07.439 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-620-1655322247438 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:44:08.459 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-621-1655322248457 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:44:08.503 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-622-1655322248501 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:44:08.509 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-623-1655322248506 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:44:08.509 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-624-1655322248509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:44:08.557 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-627-1655322248557 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:44:08.557 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-626-1655322248556 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:44:08.560 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-628-1655322248559 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:44:08.582 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-625-1655322248556 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:44:08.637 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-629-1655322248635 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:44:08.660 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-630-1655322248658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:44:08.716 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-632-1655322248715 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:44:08.716 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-631-1655322248715 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:44:08.717 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-633-1655322248715 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:44:08.718 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-634-1655322248717 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:44:08.718 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-636-1655322248717 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:44:08.719 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-635-1655322248717 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:44:08.720 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-637-1655322248718 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:44:08.754 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-638-1655322248754 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:44:08.755 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-639-1655322248754 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:44:08.755 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-640-1655322248754 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:44:08.768 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-641-1655322248768 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:44:08.818 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-642-1655322248802 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:44:08.882 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-643-1655322248881 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:44:08.895 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-644-1655322248894 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:44:09.778 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-645-1655322249777 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets Response 200 OK
+2022-06-15/15:44:09.823 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-646-1655322249821 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:44:09.846 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-647-1655322249844 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:44:09.857 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-648-1655322249856 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:44:09.887 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-650-1655322249886 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:44:09.887 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-651-1655322249887 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:44:09.890 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-652-1655322249889 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:44:09.915 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-649-1655322249886 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:44:09.952 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-653-1655322249950 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:44:09.963 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-654-1655322249961 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:44:10.008 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-655-1655322250006 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:44:10.008 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-656-1655322250006 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:44:10.008 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-657-1655322250008 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:44:10.009 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-658-1655322250008 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:44:10.009 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-659-1655322250008 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:44:10.009 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-660-1655322250008 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:44:10.011 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-661-1655322250009 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:44:10.041 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-662-1655322250040 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:44:10.041 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-663-1655322250040 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:44:10.041 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-664-1655322250040 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:44:10.055 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-665-1655322250055 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:44:10.102 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-666-1655322250086 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:44:10.163 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-667-1655322250161 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:44:10.178 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-668-1655322250177 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:44:10.512 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-669-1655322250509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:44:10.554 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-670-1655322250552 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:44:10.562 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-671-1655322250561 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:44:10.569 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-672-1655322250569 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:44:10.600 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-674-1655322250600 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:44:10.600 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-675-1655322250600 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:44:10.604 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-676-1655322250604 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:44:10.624 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-673-1655322250599 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:44:10.668 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-677-1655322250666 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:44:10.680 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-678-1655322250679 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:44:10.727 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-682-1655322250726 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:44:10.727 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-680-1655322250725 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:44:10.727 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-681-1655322250726 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:44:10.727 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-679-1655322250725 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:44:10.728 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-684-1655322250727 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:44:10.728 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-683-1655322250727 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:44:10.730 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-685-1655322250727 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:44:10.759 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-687-1655322250759 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:44:10.760 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-686-1655322250759 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:44:10.760 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-688-1655322250759 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:44:10.775 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-689-1655322250774 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:44:10.820 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-690-1655322250804 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:44:10.887 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-691-1655322250885 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:44:10.899 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-692-1655322250897 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:44:11.264 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-693-1655322251262 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military Response 200 OK
+2022-06-15/15:44:11.305 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-694-1655322251302 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:44:11.316 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-695-1655322251315 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:44:11.322 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-696-1655322251321 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:44:11.353 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-699-1655322251352 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:44:11.353 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-698-1655322251352 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:44:11.355 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-700-1655322251354 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:44:11.376 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-697-1655322251352 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:44:11.403 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-701-1655322251403 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:44:11.421 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-702-1655322251419 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:44:11.463 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-703-1655322251462 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:44:11.463 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-704-1655322251462 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:44:11.464 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-705-1655322251463 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:44:11.464 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-706-1655322251463 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:44:11.464 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-707-1655322251463 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:44:11.467 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-708-1655322251466 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:44:11.468 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-709-1655322251466 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:44:11.495 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-710-1655322251493 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:44:11.495 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-712-1655322251493 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:44:11.495 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-711-1655322251493 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:44:11.509 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-713-1655322251508 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:44:11.553 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-714-1655322251537 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:44:11.618 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-715-1655322251617 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:44:11.629 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-716-1655322251629 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:44:12.075 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-717-1655322252072 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:44:12.114 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-718-1655322252111 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:44:12.127 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-719-1655322252127 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:44:12.134 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-720-1655322252132 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:44:12.162 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-722-1655322252161 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:44:12.162 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-723-1655322252161 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:44:12.169 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-724-1655322252168 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:44:12.183 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-721-1655322252161 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:44:12.226 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-725-1655322252225 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:44:12.237 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-726-1655322252235 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:44:12.274 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-729-1655322252273 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:44:12.274 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-728-1655322252273 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:44:12.274 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-727-1655322252273 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:44:12.274 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-730-1655322252274 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:44:12.276 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-731-1655322252275 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:44:12.276 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-732-1655322252275 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:44:12.277 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-733-1655322252275 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:44:12.304 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-734-1655322252303 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:44:12.304 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-736-1655322252304 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:44:12.304 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-735-1655322252303 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:44:12.318 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-737-1655322252317 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:44:12.370 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-738-1655322252350 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:44:12.444 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-739-1655322252442 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:44:12.462 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-740-1655322252460 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:44:13.412 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-741-1655322252751 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate Response 200 OK
+2022-06-15/15:44:13.459 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-742-1655322253456 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:44:13.482 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-743-1655322253480 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:44:13.569 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-749-1655322253534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-new-republicans.png Response 200 OK
+2022-06-15/15:44:13.571 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-750-1655322253570 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:44:13.572 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-747-1655322253532 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-tylan-peoples.png Response 200 OK
+2022-06-15/15:44:13.579 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-746-1655322253532 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperials.png Response 200 OK
+2022-06-15/15:44:13.587 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-748-1655322253533 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-workers-left.png Response 200 OK
+2022-06-15/15:44:13.588 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-754-1655322253588 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:44:13.611 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-751-1655322253572 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-union.png Response 200 OK
+2022-06-15/15:44:13.612 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-756-1655322253611 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:44:13.615 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-755-1655322253588 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperial-democrats.png Response 200 OK
+2022-06-15/15:44:13.665 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-752-1655322253572 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-liberals.png Response 200 OK
+2022-06-15/15:44:13.667 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-759-1655322253666 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:44:13.700 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-753-1655322253580 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-royalists.png Response 200 OK
+2022-06-15/15:44:13.702 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-744-1655322253532 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-freedom.png Response 200 OK
+2022-06-15/15:44:13.704 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-762-1655322253703 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:44:13.705 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-763-1655322253704 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:44:13.709 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-764-1655322253708 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:44:13.710 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-765-1655322253709 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:44:13.712 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-766-1655322253711 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:44:13.713 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-760-1655322253668 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-reform.png Response 200 OK
+2022-06-15/15:44:13.714 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-767-1655322253712 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:44:13.715 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-768-1655322253714 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:44:13.715 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-745-1655322253532 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-whigs.png Response 200 OK
+2022-06-15/15:44:13.717 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-769-1655322253715 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:44:13.719 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-770-1655322253715 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:44:13.728 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-761-1655322253700 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:44:13.732 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-758-1655322253615 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-all-peoples.png Response 200 OK
+2022-06-15/15:44:13.734 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-757-1655322253613 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-republicans.png Response 200 OK
+2022-06-15/15:44:13.895 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-771-1655322253893 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:44:13.895 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-772-1655322253893 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:44:13.895 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-773-1655322253894 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:44:13.919 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-774-1655322253917 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:44:13.963 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-775-1655322253948 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:44:14.027 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-776-1655322254027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:44:14.045 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-777-1655322254044 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:44:22.326 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-778-1655322261769 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate Response 200 OK
+2022-06-15/15:44:22.349 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-779-1655322262347 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:44:22.369 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-780-1655322262368 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:44:22.374 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-781-1655322262373 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:44:22.440 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-785-1655322262439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-tylan-peoples.png Response 200 OK
+2022-06-15/15:44:22.440 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-783-1655322262436 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-whigs.png Response 200 OK
+2022-06-15/15:44:22.441 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-787-1655322262439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-new-republicans.png Response 200 OK
+2022-06-15/15:44:22.441 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-784-1655322262437 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperials.png Response 200 OK
+2022-06-15/15:44:22.441 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-782-1655322262436 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-freedom.png Response 200 OK
+2022-06-15/15:44:22.443 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-788-1655322262440 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-union.png Response 200 OK
+2022-06-15/15:44:22.443 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-786-1655322262439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-workers-left.png Response 200 OK
+2022-06-15/15:44:22.445 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-789-1655322262441 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-liberals.png Response 200 OK
+2022-06-15/15:44:22.445 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-791-1655322262441 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperial-democrats.png Response 200 OK
+2022-06-15/15:44:22.447 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-792-1655322262444 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-reform.png Response 200 OK
+2022-06-15/15:44:22.448 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-790-1655322262441 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-royalists.png Response 200 OK
+2022-06-15/15:44:22.448 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-794-1655322262447 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-all-peoples.png Response 200 OK
+2022-06-15/15:44:22.448 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-793-1655322262444 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-republicans.png Response 200 OK
+2022-06-15/15:44:22.464 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-797-1655322262464 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:44:22.464 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-796-1655322262463 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:44:22.472 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-798-1655322262471 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:44:22.506 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-795-1655322262463 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:44:22.537 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-799-1655322262536 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:44:22.648 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-800-1655322262641 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:44:22.719 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-801-1655322262718 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:44:22.721 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-802-1655322262719 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:44:22.721 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-803-1655322262719 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:44:22.722 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-805-1655322262720 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:44:22.722 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-804-1655322262720 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:44:22.723 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-806-1655322262721 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:44:22.724 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-807-1655322262722 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:44:22.763 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-808-1655322262762 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:44:22.763 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-809-1655322262762 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:44:22.764 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-810-1655322262763 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:44:22.783 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-811-1655322262782 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:44:22.834 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-812-1655322262819 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:44:22.898 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-813-1655322262897 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:44:22.913 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-814-1655322262912 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:44:41.715 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-815-1655322281713 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-all-peoples.png Response 200 OK
+2022-06-15/15:44:42.512 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-816-1655322282374 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /favicon.ico Response 404 Not Found
+2022-06-15/15:46:07.809 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:46:07.909 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:46:07.917 [main] I (ktor.application) - Application started in 0.109 seconds.
+2022-06-15/15:46:07.917 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:46:07.924 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:46:08.116 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:46:08.116 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:46:08.118 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:46:08.119 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:46:08.119 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:46:08.119 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:46:08.120 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:46:08.120 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:46:08.120 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:46:08.120 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:46:08.148 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:46:08.148 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:46:08.148 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:46:08.150 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:46:08.150 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:46:08.150 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:46:08.150 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:46:09.495 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:46:09.543 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:46:09.544 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:46:09.549 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:46:09.549 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:46:09.554 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:46:09.671 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 19068 (auto-detected)
+2022-06-15/15:46:09.674 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:46:09.674 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:46:10.728 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:46:10.728 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:46:11.792 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:46:11.801 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:46:11.802 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:46:11.819 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:46:11.820 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:46:11.828 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:46:11.829 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:46:11.829 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:46:22.060 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:46:22.060 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:46:22.062 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@753a71e0
+2022-06-15/15:46:22.148 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:46:22.148 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:46:22.148 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:46:22.148 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:46:23.399 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655322382191 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics/mechyrdian-senate Response 200 OK
+2022-06-15/15:46:23.494 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655322383449 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:46:23.494 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-4-1655322383456 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:46:23.499 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655322383423 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:46:23.605 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-10-1655322383594 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-tylan-peoples.png Response 200 OK
+2022-06-15/15:46:23.605 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-9-1655322383594 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-new-republicans.png Response 200 OK
+2022-06-15/15:46:23.608 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-6-1655322383588 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-whigs.png Response 200 OK
+2022-06-15/15:46:23.613 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-7-1655322383588 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperials.png Response 200 OK
+2022-06-15/15:46:23.614 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-5-1655322383588 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-freedom.png Response 200 OK
+2022-06-15/15:46:23.618 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-8-1655322383594 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-workers-left.png Response 200 OK
+2022-06-15/15:46:23.619 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-11-1655322383606 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-union.png Response 200 OK
+2022-06-15/15:46:23.621 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-12-1655322383606 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-liberals.png Response 200 OK
+2022-06-15/15:46:23.627 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-16-1655322383621 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-democratic-reform.png Response 200 OK
+2022-06-15/15:46:23.627 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-17-1655322383623 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:46:23.634 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-15-1655322383617 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-republicans.png Response 200 OK
+2022-06-15/15:46:23.634 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-14-1655322383615 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-imperial-democrats.png Response 200 OK
+2022-06-15/15:46:23.637 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-18-1655322383627 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-all-peoples.png Response 200 OK
+2022-06-15/15:46:23.639 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-13-1655322383611 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/party-royalists.png Response 200 OK
+2022-06-15/15:46:23.640 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-20-1655322383636 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:46:23.660 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-21-1655322383653 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:46:23.717 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-19-1655322383628 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:46:23.890 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-22-1655322383882 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:46:23.919 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-23-1655322383913 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:46:23.992 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-25-1655322383989 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:46:23.992 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-24-1655322383988 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:46:23.996 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-27-1655322383992 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:46:23.995 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-26-1655322383990 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:46:23.998 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-28-1655322383993 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:46:24.000 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-29-1655322383993 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:46:24.004 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-30-1655322383994 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:46:24.035 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-32-1655322384032 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:46:24.035 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-31-1655322384032 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:46:24.035 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-33-1655322384032 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:46:24.053 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-34-1655322384049 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:46:24.113 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-35-1655322384083 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:46:24.194 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-36-1655322384191 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:46:24.208 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-37-1655322384206 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:46:39.339 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-38-1655322399335 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/politics Response 200 OK
+2022-06-15/15:46:39.389 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-39-1655322399386 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:46:39.400 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-41-1655322399396 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:46:39.400 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-40-1655322399393 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:46:39.448 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-44-1655322399443 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:46:39.448 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-43-1655322399443 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:46:39.451 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-45-1655322399448 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:46:39.485 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-42-1655322399443 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:46:39.514 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-46-1655322399512 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:46:39.543 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-47-1655322399539 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:46:39.592 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-49-1655322399589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:46:39.594 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-48-1655322399589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:46:39.596 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-50-1655322399590 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:46:39.598 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-51-1655322399592 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:46:39.598 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-53-1655322399592 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:46:39.599 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-52-1655322399592 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:46:39.603 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-54-1655322399595 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:46:39.638 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-56-1655322399634 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:46:39.638 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-55-1655322399634 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:46:39.639 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-57-1655322399635 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:46:39.655 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-58-1655322399653 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:46:39.720 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-59-1655322399692 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:46:39.803 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-60-1655322399801 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:46:39.820 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-61-1655322399817 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:46:40.626 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-62-1655322400622 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:46:40.669 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-63-1655322400665 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:46:40.689 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-64-1655322400686 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:46:40.697 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-65-1655322400695 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:46:40.729 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-68-1655322400728 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:46:40.729 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-66-1655322400727 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:46:40.731 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-69-1655322400729 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:46:40.760 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-67-1655322400727 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:46:40.807 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-70-1655322400806 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:46:40.820 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-71-1655322400818 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:46:40.868 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-76-1655322400866 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:46:40.868 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-72-1655322400865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:46:40.868 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-73-1655322400865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:46:40.868 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-74-1655322400865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:46:40.869 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-75-1655322400865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:46:40.869 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-77-1655322400866 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:46:40.873 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-78-1655322400869 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:46:40.906 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-79-1655322400904 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:46:40.906 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-81-1655322400904 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:46:40.906 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-80-1655322400904 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:46:40.921 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-82-1655322400919 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:46:40.978 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-83-1655322400956 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:46:41.044 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-84-1655322401042 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:46:41.058 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-85-1655322401057 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:46:41.467 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-86-1655322401462 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/mechyrdian-navy-ships Response 200 OK
+2022-06-15/15:46:41.569 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-87-1655322401567 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:46:41.571 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-89-1655322401569 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:46:41.572 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-88-1655322401569 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:46:41.627 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-91-1655322401625 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:46:41.627 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-92-1655322401625 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:46:41.628 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-93-1655322401627 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:46:41.654 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-90-1655322401625 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:46:41.761 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-94-1655322401759 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:46:41.778 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-95-1655322401775 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:46:41.823 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-96-1655322401822 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:46:41.824 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-97-1655322401822 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:46:41.825 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-98-1655322401822 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:46:41.825 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-99-1655322401823 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:46:41.827 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-101-1655322401824 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:46:41.827 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-100-1655322401824 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:46:41.829 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-102-1655322401825 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:46:41.864 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-103-1655322401860 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:46:41.864 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-104-1655322401860 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:46:41.864 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-105-1655322401860 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:46:41.884 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-106-1655322401882 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:46:41.935 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-107-1655322401914 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:46:41.995 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-108-1655322401993 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:46:42.008 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-109-1655322402006 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:46:42.263 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-110-1655322402259 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.mtl Response 200 OK
+2022-06-15/15:46:42.293 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-111-1655322402290 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.mtl Response 200 OK
+2022-06-15/15:46:42.293 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-112-1655322402290 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.mtl Response 200 OK
+2022-06-15/15:46:42.297 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-114-1655322402292 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.mtl Response 200 OK
+2022-06-15/15:46:42.299 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-115-1655322402296 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.mtl Response 200 OK
+2022-06-15/15:46:42.299 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-116-1655322402296 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.mtl Response 200 OK
+2022-06-15/15:46:42.300 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-117-1655322402297 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.mtl Response 200 OK
+2022-06-15/15:46:42.303 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-113-1655322402290 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.mtl Response 200 OK
+2022-06-15/15:46:42.305 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-118-1655322402300 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.mtl Response 200 OK
+2022-06-15/15:46:42.306 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-119-1655322402303 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.mtl Response 200 OK
+2022-06-15/15:46:42.308 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-120-1655322402303 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.mtl Response 200 OK
+2022-06-15/15:46:42.309 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-121-1655322402305 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.mtl Response 200 OK
+2022-06-15/15:46:42.311 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-122-1655322402308 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.mtl Response 200 OK
+2022-06-15/15:46:42.315 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-123-1655322402312 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.mtl Response 200 OK
+2022-06-15/15:46:42.323 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-124-1655322402321 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.mtl Response 200 OK
+2022-06-15/15:46:42.327 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-125-1655322402323 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.mtl Response 200 OK
+2022-06-15/15:46:42.328 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-126-1655322402324 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.mtl Response 200 OK
+2022-06-15/15:46:42.334 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-127-1655322402329 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.mtl Response 200 OK
+2022-06-15/15:46:42.337 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-128-1655322402331 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.mtl Response 200 OK
+2022-06-15/15:46:42.339 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-129-1655322402332 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.mtl Response 200 OK
+2022-06-15/15:46:42.355 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-132-1655322402347 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.mtl Response 200 OK
+2022-06-15/15:46:42.355 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-130-1655322402347 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.mtl Response 200 OK
+2022-06-15/15:46:42.356 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-131-1655322402347 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.mtl Response 200 OK
+2022-06-15/15:46:42.460 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-134-1655322402456 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.diff.png Response 200 OK
+2022-06-15/15:46:42.460 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-133-1655322402456 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.spec.png Response 200 OK
+2022-06-15/15:46:42.476 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-136-1655322402472 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.diff.png Response 200 OK
+2022-06-15/15:46:42.476 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-135-1655322402472 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.spec.png Response 200 OK
+2022-06-15/15:46:42.481 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-137-1655322402478 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.diff.png Response 200 OK
+2022-06-15/15:46:42.481 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-138-1655322402479 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.spec.png Response 200 OK
+2022-06-15/15:46:42.500 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-140-1655322402498 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.spec.png Response 200 OK
+2022-06-15/15:46:42.500 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-139-1655322402498 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.diff.png Response 200 OK
+2022-06-15/15:46:42.516 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-141-1655322402515 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.spec.png Response 200 OK
+2022-06-15/15:46:42.516 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-142-1655322402515 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.diff.png Response 200 OK
+2022-06-15/15:46:42.534 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-143-1655322402532 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.diff.png Response 200 OK
+2022-06-15/15:46:42.534 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-144-1655322402532 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.spec.png Response 200 OK
+2022-06-15/15:46:42.552 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-146-1655322402551 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.spec.png Response 200 OK
+2022-06-15/15:46:42.552 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-145-1655322402551 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.diff.png Response 200 OK
+2022-06-15/15:46:42.569 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-147-1655322402567 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.diff.png Response 200 OK
+2022-06-15/15:46:42.569 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-148-1655322402567 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.spec.png Response 200 OK
+2022-06-15/15:46:42.591 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-149-1655322402589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.diff.png Response 200 OK
+2022-06-15/15:46:42.591 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-150-1655322402589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.spec.png Response 200 OK
+2022-06-15/15:46:42.607 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-151-1655322402605 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.spec.png Response 200 OK
+2022-06-15/15:46:42.607 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-152-1655322402605 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.diff.png Response 200 OK
+2022-06-15/15:46:42.627 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-154-1655322402625 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.diff.png Response 200 OK
+2022-06-15/15:46:42.627 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-153-1655322402625 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.spec.png Response 200 OK
+2022-06-15/15:46:42.641 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-155-1655322402640 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.spec.png Response 200 OK
+2022-06-15/15:46:42.641 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-156-1655322402640 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.diff.png Response 200 OK
+2022-06-15/15:46:42.656 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-157-1655322402655 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.diff.png Response 200 OK
+2022-06-15/15:46:42.656 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-158-1655322402655 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.spec.png Response 200 OK
+2022-06-15/15:46:42.671 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-159-1655322402670 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.diff.png Response 200 OK
+2022-06-15/15:46:42.671 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-160-1655322402670 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.spec.png Response 200 OK
+2022-06-15/15:46:42.686 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-162-1655322402684 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.spec.png Response 200 OK
+2022-06-15/15:46:42.686 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-161-1655322402684 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.diff.png Response 200 OK
+2022-06-15/15:46:42.735 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-167-1655322402731 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.spec.png Response 200 OK
+2022-06-15/15:46:42.735 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-163-1655322402730 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.diff.png Response 200 OK
+2022-06-15/15:46:42.736 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-166-1655322402730 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.diff.png Response 200 OK
+2022-06-15/15:46:42.736 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-165-1655322402730 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.spec.png Response 200 OK
+2022-06-15/15:46:42.748 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-169-1655322402746 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.spec.png Response 200 OK
+2022-06-15/15:46:42.748 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-168-1655322402745 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.diff.png Response 200 OK
+2022-06-15/15:46:42.752 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-164-1655322402730 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.obj Response 200 OK
+2022-06-15/15:46:42.767 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-170-1655322402765 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.diff.png Response 200 OK
+2022-06-15/15:46:42.767 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-171-1655322402765 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.spec.png Response 200 OK
+2022-06-15/15:46:42.783 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-173-1655322402780 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.spec.png Response 200 OK
+2022-06-15/15:46:42.783 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-172-1655322402780 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.diff.png Response 200 OK
+2022-06-15/15:46:42.789 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-174-1655322402782 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.obj Response 200 OK
+2022-06-15/15:46:42.802 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-175-1655322402800 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.diff.png Response 200 OK
+2022-06-15/15:46:42.802 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-176-1655322402800 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.spec.png Response 200 OK
+2022-06-15/15:46:42.822 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-178-1655322402820 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.spec.png Response 200 OK
+2022-06-15/15:46:42.822 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-177-1655322402820 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.diff.png Response 200 OK
+2022-06-15/15:46:42.837 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-179-1655322402836 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.diff.png Response 200 OK
+2022-06-15/15:46:42.838 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-180-1655322402836 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.spec.png Response 200 OK
+2022-06-15/15:46:42.856 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-181-1655322402840 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.obj Response 200 OK
+2022-06-15/15:46:42.953 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-186-1655322402924 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.obj Response 200 OK
+2022-06-15/15:46:42.963 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-184-1655322402923 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.obj Response 200 OK
+2022-06-15/15:46:42.972 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-183-1655322402923 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.obj Response 200 OK
+2022-06-15/15:46:42.976 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-182-1655322402923 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.obj Response 200 OK
+2022-06-15/15:46:42.985 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-185-1655322402923 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.obj Response 200 OK
+2022-06-15/15:46:43.002 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-187-1655322402924 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.obj Response 200 OK
+2022-06-15/15:46:43.019 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-189-1655322402964 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.obj Response 200 OK
+2022-06-15/15:46:43.029 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-192-1655322402987 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.obj Response 200 OK
+2022-06-15/15:46:43.031 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-190-1655322402973 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.obj Response 200 OK
+2022-06-15/15:46:43.031 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-188-1655322402954 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.obj Response 200 OK
+2022-06-15/15:46:43.034 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-191-1655322402978 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.obj Response 200 OK
+2022-06-15/15:46:43.063 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-193-1655322403004 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.obj Response 200 OK
+2022-06-15/15:46:43.071 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-195-1655322403030 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.obj Response 200 OK
+2022-06-15/15:46:43.075 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-197-1655322403034 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.obj Response 200 OK
+2022-06-15/15:46:43.077 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-194-1655322403020 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.obj Response 200 OK
+2022-06-15/15:46:43.106 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-196-1655322403033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.obj Response 200 OK
+2022-06-15/15:46:43.107 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-198-1655322403035 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.obj Response 200 OK
+2022-06-15/15:46:43.119 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-201-1655322403076 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.obj Response 200 OK
+2022-06-15/15:46:43.121 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-199-1655322403064 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.obj Response 200 OK
+2022-06-15/15:46:43.122 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-200-1655322403072 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.obj Response 200 OK
+2022-06-15/15:47:54.336 [eventLoopGroupProxy-4-2] D (ktor.application) - 200 OK: GET - /lore/military/fleets/mechyrdian-navy-ships. Exception class io.ktor.util.cio.ChannelWriteException: Cannot write to a channel]
+io.ktor.util.cio.ChannelWriteException: Cannot write to a channel
+ at io.ktor.server.netty.cio.NettyResponsePipeline.processCallFailed(NettyResponsePipeline.kt:146)
+ at io.ktor.server.netty.cio.NettyResponsePipeline.processJobs(NettyResponsePipeline.kt:485)
+ at io.ktor.server.netty.cio.NettyResponsePipeline.access$processJobs(NettyResponsePipeline.kt:26)
+ at io.ktor.server.netty.cio.NettyResponsePipeline$processJobs$1.invokeSuspend(NettyResponsePipeline.kt)
+ at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
+ at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
+ at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
+ at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469)
+ at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503)
+ at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
+ at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
+ at io.ktor.server.netty.EventLoopGroupProxy$Companion.create$lambda-1$lambda-0(NettyApplicationEngine.kt:251)
+ at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
+ at java.lang.Thread.run(Thread.java:748)
+Caused by: io.netty.channel.StacklessClosedChannelException: null
+ at io.netty.channel.AbstractChannel$AbstractUnsafe.write(Object, ChannelPromise)(Unknown Source)
+2022-06-15/15:47:54.561 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-203-1655322474559 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:47:54.591 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-204-1655322474589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:47:54.660 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-209-1655322474658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:47:54.660 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-207-1655322474658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:47:54.660 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-205-1655322474658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:47:54.660 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-208-1655322474658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:47:54.662 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-206-1655322474658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:47:54.666 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-210-1655322474662 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:47:54.669 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-211-1655322474664 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:47:54.711 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-212-1655322474709 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:47:54.711 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-213-1655322474709 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:47:54.712 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-214-1655322474709 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:47:54.779 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-215-1655322474777 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:47:54.910 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-216-1655322474882 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:47:55.007 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-217-1655322475005 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:47:55.020 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-218-1655322475018 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:47:55.180 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-219-1655322475179 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.mtl Response 200 OK
+2022-06-15/15:47:55.202 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-220-1655322475200 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.mtl Response 200 OK
+2022-06-15/15:47:55.347 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-221-1655322475336 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/mechyrdian-navy-ships Response 200 OK
+2022-06-15/15:47:55.409 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-222-1655322475407 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:47:55.420 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-223-1655322475416 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:47:55.421 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-224-1655322475420 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:47:55.493 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-226-1655322475490 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:47:55.494 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-227-1655322475491 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:47:55.502 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-228-1655322475500 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:47:55.538 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-225-1655322475490 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:47:55.667 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-229-1655322475666 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:47:55.712 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-230-1655322475709 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:47:55.761 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-231-1655322475759 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:47:55.761 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-233-1655322475759 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:47:55.761 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-232-1655322475759 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:47:55.762 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-234-1655322475760 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:47:55.763 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-235-1655322475761 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:47:55.763 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-236-1655322475761 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:47:55.765 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-237-1655322475762 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:47:55.799 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-238-1655322475797 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:47:55.799 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-240-1655322475798 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:47:55.799 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-239-1655322475797 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:47:55.825 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-241-1655322475823 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:47:55.893 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-242-1655322475870 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:47:55.958 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-243-1655322475956 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:47:55.971 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-244-1655322475969 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:47:56.134 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-245-1655322476133 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.mtl Response 200 OK
+2022-06-15/15:47:56.217 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-246-1655322476215 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.mtl Response 200 OK
+2022-06-15/15:47:56.295 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-248-1655322476293 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.mtl Response 200 OK
+2022-06-15/15:47:56.295 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-247-1655322476293 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.mtl Response 200 OK
+2022-06-15/15:47:56.296 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-249-1655322476294 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.mtl Response 200 OK
+2022-06-15/15:47:56.297 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-250-1655322476295 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.mtl Response 200 OK
+2022-06-15/15:47:56.300 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-251-1655322476297 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.mtl Response 200 OK
+2022-06-15/15:47:56.302 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-253-1655322476300 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.mtl Response 200 OK
+2022-06-15/15:47:56.302 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-252-1655322476299 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.mtl Response 200 OK
+2022-06-15/15:47:56.306 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-255-1655322476304 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.mtl Response 200 OK
+2022-06-15/15:47:56.306 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-254-1655322476303 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.mtl Response 200 OK
+2022-06-15/15:47:56.309 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-256-1655322476307 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.mtl Response 200 OK
+2022-06-15/15:47:56.312 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-257-1655322476310 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.mtl Response 200 OK
+2022-06-15/15:47:56.316 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-258-1655322476313 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.mtl Response 200 OK
+2022-06-15/15:47:56.323 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-260-1655322476319 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.mtl Response 200 OK
+2022-06-15/15:47:56.324 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-259-1655322476318 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.mtl Response 200 OK
+2022-06-15/15:47:56.325 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-261-1655322476322 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.mtl Response 200 OK
+2022-06-15/15:47:56.333 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-262-1655322476331 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.mtl Response 200 OK
+2022-06-15/15:47:56.333 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-263-1655322476331 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.mtl Response 200 OK
+2022-06-15/15:47:56.336 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-264-1655322476335 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.mtl Response 200 OK
+2022-06-15/15:47:56.336 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-265-1655322476335 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.mtl Response 200 OK
+2022-06-15/15:47:56.340 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-266-1655322476337 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.mtl Response 200 OK
+2022-06-15/15:47:56.350 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-267-1655322476348 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.mtl Response 200 OK
+2022-06-15/15:47:56.418 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-269-1655322476415 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.diff.png Response 200 OK
+2022-06-15/15:47:56.418 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-268-1655322476415 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.spec.png Response 200 OK
+2022-06-15/15:47:56.430 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-270-1655322476428 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.diff.png Response 200 OK
+2022-06-15/15:47:56.431 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-271-1655322476429 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.spec.png Response 200 OK
+2022-06-15/15:47:56.433 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-273-1655322476432 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.spec.png Response 200 OK
+2022-06-15/15:47:56.433 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-272-1655322476432 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.diff.png Response 200 OK
+2022-06-15/15:47:56.444 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-274-1655322476441 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.spec.png Response 200 OK
+2022-06-15/15:47:56.444 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-275-1655322476441 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.diff.png Response 200 OK
+2022-06-15/15:47:56.452 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-276-1655322476450 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.diff.png Response 200 OK
+2022-06-15/15:47:56.452 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-277-1655322476450 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.spec.png Response 200 OK
+2022-06-15/15:47:56.466 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-279-1655322476465 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.spec.png Response 200 OK
+2022-06-15/15:47:56.466 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-278-1655322476465 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.diff.png Response 200 OK
+2022-06-15/15:47:56.482 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-281-1655322476480 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.diff.png Response 200 OK
+2022-06-15/15:47:56.482 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-280-1655322476480 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.spec.png Response 200 OK
+2022-06-15/15:47:56.497 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-282-1655322476496 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.diff.png Response 200 OK
+2022-06-15/15:47:56.500 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-283-1655322476497 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.spec.png Response 200 OK
+2022-06-15/15:47:56.516 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-284-1655322476515 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.spec.png Response 200 OK
+2022-06-15/15:47:56.516 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-285-1655322476515 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.diff.png Response 200 OK
+2022-06-15/15:47:56.536 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-286-1655322476534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.diff.png Response 200 OK
+2022-06-15/15:47:56.536 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-288-1655322476534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.spec.png Response 200 OK
+2022-06-15/15:47:56.550 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-287-1655322476534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-micro-class.obj Response 200 OK
+2022-06-15/15:47:56.562 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-289-1655322476560 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.diff.png Response 200 OK
+2022-06-15/15:47:56.562 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-290-1655322476560 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.spec.png Response 200 OK
+2022-06-15/15:47:56.581 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-291-1655322476579 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.spec.png Response 200 OK
+2022-06-15/15:47:56.582 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-292-1655322476581 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.diff.png Response 200 OK
+2022-06-15/15:47:56.600 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-293-1655322476598 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.diff.png Response 200 OK
+2022-06-15/15:47:56.601 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-294-1655322476600 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.spec.png Response 200 OK
+2022-06-15/15:47:56.623 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-296-1655322476621 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.spec.png Response 200 OK
+2022-06-15/15:47:56.623 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-295-1655322476621 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.diff.png Response 200 OK
+2022-06-15/15:47:56.643 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-298-1655322476641 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.diff.png Response 200 OK
+2022-06-15/15:47:56.643 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-297-1655322476641 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.spec.png Response 200 OK
+2022-06-15/15:47:56.651 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-299-1655322476643 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-nano-class.obj Response 200 OK
+2022-06-15/15:47:56.663 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-301-1655322476662 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.spec.png Response 200 OK
+2022-06-15/15:47:56.663 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-300-1655322476661 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.diff.png Response 200 OK
+2022-06-15/15:47:56.680 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-303-1655322476678 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.spec.png Response 200 OK
+2022-06-15/15:47:56.680 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-302-1655322476678 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.diff.png Response 200 OK
+2022-06-15/15:47:56.687 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-304-1655322476680 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-1-pico-class.obj Response 200 OK
+2022-06-15/15:47:56.705 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-306-1655322476703 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.spec.png Response 200 OK
+2022-06-15/15:47:56.705 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-305-1655322476703 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.diff.png Response 200 OK
+2022-06-15/15:47:56.721 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-308-1655322476719 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.spec.png Response 200 OK
+2022-06-15/15:47:56.721 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-307-1655322476719 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.diff.png Response 200 OK
+2022-06-15/15:47:56.739 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-310-1655322476737 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.spec.png Response 200 OK
+2022-06-15/15:47:56.739 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-309-1655322476737 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.diff.png Response 200 OK
+2022-06-15/15:47:56.761 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-311-1655322476741 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-gladius-class.obj Response 200 OK
+2022-06-15/15:47:56.765 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-313-1655322476764 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.spec.png Response 200 OK
+2022-06-15/15:47:56.766 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-312-1655322476764 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.diff.png Response 200 OK
+2022-06-15/15:47:56.781 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-315-1655322476779 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.spec.png Response 200 OK
+2022-06-15/15:47:56.781 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-314-1655322476779 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.diff.png Response 200 OK
+2022-06-15/15:47:56.795 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-317-1655322476793 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.spec.png Response 200 OK
+2022-06-15/15:47:56.795 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-316-1655322476793 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.diff.png Response 200 OK
+2022-06-15/15:47:56.817 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-318-1655322476797 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-sica-class.obj Response 200 OK
+2022-06-15/15:47:56.822 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-319-1655322476800 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-2-pilum-class.obj Response 200 OK
+2022-06-15/15:47:56.837 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-321-1655322476802 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kozachnia-class.obj Response 200 OK
+2022-06-15/15:47:56.837 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-320-1655322476801 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-kaiserswelt-class.obj Response 200 OK
+2022-06-15/15:47:56.866 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-322-1655322476829 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-karolina-class.obj Response 200 OK
+2022-06-15/15:47:56.892 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-323-1655322476857 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mont-imperial-class.obj Response 200 OK
+2022-06-15/15:47:56.895 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-324-1655322476865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-imperium-class.obj Response 200 OK
+2022-06-15/15:47:56.899 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-325-1655322476870 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-honos-class.obj Response 200 OK
+2022-06-15/15:47:56.960 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-326-1655322476916 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pax-class.obj Response 200 OK
+2022-06-15/15:47:56.989 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-328-1655322476930 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-pietas-class.obj Response 200 OK
+2022-06-15/15:47:57.012 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-329-1655322476939 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-mechyrdia-class.obj Response 200 OK
+2022-06-15/15:47:57.018 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-327-1655322476925 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-earth-class.obj Response 200 OK
+2022-06-15/15:47:57.036 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-333-1655322476990 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-mundus-caesaris-divi-class.obj Response 200 OK
+2022-06-15/15:47:57.036 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-330-1655322476946 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-languavarth-class.obj Response 200 OK
+2022-06-15/15:47:57.048 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-331-1655322476951 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-nova-roma-class.obj Response 200 OK
+2022-06-15/15:47:57.048 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-332-1655322476972 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-5-tyla-class.obj Response 200 OK
+2022-06-15/15:47:57.051 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-334-1655322477013 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-3-vensca-class.obj Response 200 OK
+2022-06-15/15:47:57.066 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-335-1655322477038 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-auctoritas-class.obj Response 200 OK
+2022-06-15/15:47:57.072 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-336-1655322477052 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/mechyrdia-4-civitas-class.obj Response 200 OK
+2022-06-15/15:47:58.426 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-337-1655322478424 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets Response 200 OK
+2022-06-15/15:47:58.471 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-338-1655322478469 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:47:58.480 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-340-1655322478478 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:47:58.481 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-339-1655322478477 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:47:58.532 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-343-1655322478531 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:47:58.532 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-342-1655322478531 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:47:58.534 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-344-1655322478533 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:47:58.560 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-341-1655322478531 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:47:58.607 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-345-1655322478605 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:47:58.617 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-346-1655322478616 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:47:58.655 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-348-1655322478654 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:47:58.655 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-347-1655322478654 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:47:58.656 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-349-1655322478654 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:47:58.658 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-351-1655322478655 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:47:58.658 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-350-1655322478655 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:47:58.660 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-352-1655322478658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:47:58.662 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-353-1655322478658 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:47:58.688 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-354-1655322478686 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:47:58.690 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-355-1655322478688 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:47:58.690 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-356-1655322478688 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:47:58.701 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-357-1655322478700 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:47:58.747 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-358-1655322478730 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:47:58.818 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-359-1655322478816 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:47:58.830 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-360-1655322478830 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:47:59.647 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-361-1655322479645 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/ndrc-ships Response 200 OK
+2022-06-15/15:47:59.687 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-362-1655322479684 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:47:59.707 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-363-1655322479705 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:47:59.715 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-364-1655322479714 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:47:59.743 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-366-1655322479742 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:47:59.743 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-367-1655322479742 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:47:59.745 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-368-1655322479745 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:47:59.767 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-365-1655322479742 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:47:59.810 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-369-1655322479810 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:47:59.825 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-370-1655322479824 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:47:59.866 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-372-1655322479866 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:47:59.867 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-373-1655322479866 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:47:59.868 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-371-1655322479865 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:47:59.868 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-374-1655322479866 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:47:59.869 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-375-1655322479867 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:47:59.869 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-376-1655322479867 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:47:59.872 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-377-1655322479868 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:47:59.898 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-378-1655322479896 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:47:59.898 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-379-1655322479896 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:47:59.898 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-380-1655322479896 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:47:59.911 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-381-1655322479911 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:47:59.960 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-382-1655322479940 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:00.022 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-383-1655322480020 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:00.032 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-384-1655322480032 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:00.098 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-386-1655322480097 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-novaatje-class.mtl Response 200 OK
+2022-06-15/15:48:00.098 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-385-1655322480097 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-zwaard-class.mtl Response 200 OK
+2022-06-15/15:48:00.099 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-387-1655322480097 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-jager-class.mtl Response 200 OK
+2022-06-15/15:48:00.099 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-389-1655322480098 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-3-voorhoede-class.mtl Response 200 OK
+2022-06-15/15:48:00.099 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-388-1655322480098 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-3-slagschip-class.mtl Response 200 OK
+2022-06-15/15:48:00.099 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-390-1655322480098 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-5-krijgschuit-class.mtl Response 200 OK
+2022-06-15/15:48:00.213 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-391-1655322480212 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-zwaard-class.diff.png Response 200 OK
+2022-06-15/15:48:00.214 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-392-1655322480213 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-zwaard-class.spec.png Response 200 OK
+2022-06-15/15:48:00.229 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-393-1655322480228 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-novaatje-class.diff.png Response 200 OK
+2022-06-15/15:48:00.241 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-394-1655322480239 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-jager-class.diff.png Response 200 OK
+2022-06-15/15:48:00.241 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-395-1655322480239 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-jager-class.spec.png Response 200 OK
+2022-06-15/15:48:00.256 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-397-1655322480254 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-3-slagschip-class.diff.png Response 200 OK
+2022-06-15/15:48:00.256 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-398-1655322480254 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-3-slagschip-class.spec.png Response 200 OK
+2022-06-15/15:48:00.273 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-399-1655322480271 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-3-voorhoede-class.diff.png Response 200 OK
+2022-06-15/15:48:00.273 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-400-1655322480272 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-3-voorhoede-class.spec.png Response 200 OK
+2022-06-15/15:48:00.283 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-396-1655322480241 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-zwaard-class.obj Response 200 OK
+2022-06-15/15:48:00.296 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-402-1655322480294 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-5-krijgschuit-class.spec.png Response 200 OK
+2022-06-15/15:48:00.296 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-401-1655322480294 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-5-krijgschuit-class.diff.png Response 200 OK
+2022-06-15/15:48:00.361 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-403-1655322480296 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-novaatje-class.obj Response 200 OK
+2022-06-15/15:48:00.363 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-408-1655322480362 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-novaatje-class.spec.png Response 200 OK
+2022-06-15/15:48:00.413 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-406-1655322480305 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-3-voorhoede-class.obj Response 200 OK
+2022-06-15/15:48:00.416 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-404-1655322480298 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-2-jager-class.obj Response 200 OK
+2022-06-15/15:48:00.429 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-405-1655322480303 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-3-slagschip-class.obj Response 200 OK
+2022-06-15/15:48:00.461 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-407-1655322480306 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/ndrc-5-krijgschuit-class.obj Response 200 OK
+2022-06-15/15:48:03.889 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-409-1655322483887 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets Response 200 OK
+2022-06-15/15:48:03.935 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-410-1655322483932 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:03.946 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-411-1655322483946 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:03.952 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-412-1655322483950 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:03.979 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-414-1655322483978 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:03.979 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-415-1655322483978 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:03.983 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-416-1655322483981 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:04.002 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-413-1655322483978 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:04.046 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-417-1655322484045 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:04.061 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-418-1655322484059 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:04.100 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-419-1655322484099 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:04.100 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-420-1655322484099 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:04.100 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-421-1655322484099 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:04.101 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-422-1655322484100 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:04.102 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-423-1655322484101 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:04.102 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-424-1655322484101 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:04.108 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-425-1655322484105 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:04.138 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-426-1655322484137 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:04.139 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-428-1655322484137 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:04.139 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-427-1655322484137 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:04.153 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-429-1655322484153 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:04.199 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-430-1655322484182 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:04.262 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-431-1655322484262 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:04.275 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-432-1655322484274 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:04.785 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-433-1655322484782 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/vestigium-ships Response 200 OK
+2022-06-15/15:48:04.833 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-434-1655322484830 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:04.845 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-435-1655322484844 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:04.856 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-436-1655322484855 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:04.889 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-438-1655322484888 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:04.889 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-439-1655322484888 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:04.891 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-440-1655322484889 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:04.914 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-437-1655322484888 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:04.975 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-441-1655322484974 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:04.986 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-442-1655322484985 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:05.028 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-444-1655322485027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:05.028 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-443-1655322485027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:05.028 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-445-1655322485028 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:05.030 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-446-1655322485028 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:05.030 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-447-1655322485029 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:05.031 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-448-1655322485030 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:05.036 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-449-1655322485032 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:05.068 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-450-1655322485065 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:05.068 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-451-1655322485066 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:05.069 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-452-1655322485067 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:05.081 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-453-1655322485080 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:05.127 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-454-1655322485110 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:05.189 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-455-1655322485187 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:05.200 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-456-1655322485199 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:05.330 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-457-1655322485329 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-coleman-class.mtl Response 200 OK
+2022-06-15/15:48:05.337 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-458-1655322485336 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-jefferson-class.mtl Response 200 OK
+2022-06-15/15:48:05.337 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-459-1655322485336 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-quenney-class.mtl Response 200 OK
+2022-06-15/15:48:05.337 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-460-1655322485336 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-roosevelt-class.mtl Response 200 OK
+2022-06-15/15:48:05.338 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-461-1655322485337 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-washington-class.mtl Response 200 OK
+2022-06-15/15:48:05.339 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-462-1655322485338 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-arlington-class.mtl Response 200 OK
+2022-06-15/15:48:05.340 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-464-1655322485338 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-lexington-class.mtl Response 200 OK
+2022-06-15/15:48:05.340 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-463-1655322485338 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-concord-class.mtl Response 200 OK
+2022-06-15/15:48:05.340 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-465-1655322485339 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-raven-rock-class.mtl Response 200 OK
+2022-06-15/15:48:05.341 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-467-1655322485339 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-maryland-class.mtl Response 200 OK
+2022-06-15/15:48:05.341 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-466-1655322485339 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-iowa-class.mtl Response 200 OK
+2022-06-15/15:48:05.342 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-468-1655322485340 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-new-york-class.mtl Response 200 OK
+2022-06-15/15:48:05.345 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-469-1655322485343 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-ohio-class.mtl Response 200 OK
+2022-06-15/15:48:05.519 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-470-1655322485517 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-coleman-class.diff.png Response 200 OK
+2022-06-15/15:48:05.519 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-471-1655322485518 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-coleman-class.spec.png Response 200 OK
+2022-06-15/15:48:05.535 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-472-1655322485534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-jefferson-class.diff.png Response 200 OK
+2022-06-15/15:48:05.535 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-473-1655322485534 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-jefferson-class.spec.png Response 200 OK
+2022-06-15/15:48:05.547 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-474-1655322485546 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-quenney-class.spec.png Response 200 OK
+2022-06-15/15:48:05.547 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-475-1655322485546 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-quenney-class.diff.png Response 200 OK
+2022-06-15/15:48:05.562 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-477-1655322485561 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-roosevelt-class.spec.png Response 200 OK
+2022-06-15/15:48:05.562 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-476-1655322485561 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-roosevelt-class.diff.png Response 200 OK
+2022-06-15/15:48:05.578 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-478-1655322485576 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-washington-class.spec.png Response 200 OK
+2022-06-15/15:48:05.578 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-479-1655322485576 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-washington-class.diff.png Response 200 OK
+2022-06-15/15:48:05.593 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-481-1655322485592 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-arlington-class.spec.png Response 200 OK
+2022-06-15/15:48:05.593 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-480-1655322485592 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-arlington-class.diff.png Response 200 OK
+2022-06-15/15:48:05.608 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-483-1655322485607 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-concord-class.spec.png Response 200 OK
+2022-06-15/15:48:05.608 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-482-1655322485607 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-concord-class.diff.png Response 200 OK
+2022-06-15/15:48:05.623 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-484-1655322485621 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-lexington-class.diff.png Response 200 OK
+2022-06-15/15:48:05.623 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-485-1655322485621 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-lexington-class.spec.png Response 200 OK
+2022-06-15/15:48:05.639 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-487-1655322485637 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-raven-rock-class.diff.png Response 200 OK
+2022-06-15/15:48:05.639 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-486-1655322485636 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-raven-rock-class.spec.png Response 200 OK
+2022-06-15/15:48:05.655 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-488-1655322485653 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-iowa-class.diff.png Response 200 OK
+2022-06-15/15:48:05.655 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-489-1655322485653 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-iowa-class.spec.png Response 200 OK
+2022-06-15/15:48:05.669 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-491-1655322485668 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-maryland-class.spec.png Response 200 OK
+2022-06-15/15:48:05.669 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-490-1655322485668 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-maryland-class.diff.png Response 200 OK
+2022-06-15/15:48:05.682 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-492-1655322485681 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-new-york-class.diff.png Response 200 OK
+2022-06-15/15:48:05.682 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-493-1655322485681 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-new-york-class.spec.png Response 200 OK
+2022-06-15/15:48:05.696 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-494-1655322485695 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-ohio-class.diff.png Response 200 OK
+2022-06-15/15:48:05.696 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-495-1655322485695 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-ohio-class.spec.png Response 200 OK
+2022-06-15/15:48:05.808 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-496-1655322485696 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-coleman-class.obj Response 200 OK
+2022-06-15/15:48:05.825 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-498-1655322485698 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-quenney-class.obj Response 200 OK
+2022-06-15/15:48:05.837 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-500-1655322485705 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-washington-class.obj Response 200 OK
+2022-06-15/15:48:05.883 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-497-1655322485697 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-jefferson-class.obj Response 200 OK
+2022-06-15/15:48:05.928 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-499-1655322485702 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-1-roosevelt-class.obj Response 200 OK
+2022-06-15/15:48:05.946 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-502-1655322485808 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-concord-class.obj Response 200 OK
+2022-06-15/15:48:05.953 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-504-1655322485838 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-raven-rock-class.obj Response 200 OK
+2022-06-15/15:48:05.958 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-501-1655322485707 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-arlington-class.obj Response 200 OK
+2022-06-15/15:48:05.973 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-503-1655322485825 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-3-lexington-class.obj Response 200 OK
+2022-06-15/15:48:05.982 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-506-1655322485928 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-maryland-class.obj Response 200 OK
+2022-06-15/15:48:05.982 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-507-1655322485948 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-new-york-class.obj Response 200 OK
+2022-06-15/15:48:05.983 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-505-1655322485884 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-iowa-class.obj Response 200 OK
+2022-06-15/15:48:05.984 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-508-1655322485954 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/usa-5-ohio-class.obj Response 200 OK
+2022-06-15/15:48:17.023 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-509-1655322497019 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/vestigium Response 404 Not Found
+2022-06-15/15:48:17.095 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-510-1655322497092 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:17.097 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-511-1655322497095 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:17.104 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-512-1655322497102 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:17.141 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-515-1655322497140 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:17.141 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-514-1655322497139 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:17.146 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-516-1655322497145 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:17.163 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-513-1655322497139 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:17.204 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-517-1655322497204 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:17.220 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-518-1655322497219 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:17.258 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-520-1655322497257 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:17.258 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-519-1655322497257 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:17.259 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-521-1655322497257 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:17.260 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-522-1655322497258 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:17.260 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-523-1655322497258 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:17.262 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-525-1655322497260 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:17.263 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-524-1655322497260 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:17.289 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-527-1655322497287 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:17.289 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-526-1655322497287 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:17.289 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-528-1655322497288 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:17.303 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-529-1655322497301 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:17.348 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-530-1655322497332 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:17.409 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-531-1655322497408 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:17.422 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-532-1655322497421 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:18.521 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-533-1655322498518 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:48:18.564 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-534-1655322498561 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:18.587 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-535-1655322498585 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:18.595 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-536-1655322498594 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:18.629 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-539-1655322498625 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:18.629 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-538-1655322498625 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:18.630 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-540-1655322498629 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:18.653 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-537-1655322498624 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:18.697 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-541-1655322498695 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:18.718 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-542-1655322498717 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:18.762 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-544-1655322498761 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:18.762 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-543-1655322498761 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:18.762 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-545-1655322498761 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:18.764 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-546-1655322498762 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:18.766 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-547-1655322498765 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:18.771 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-548-1655322498770 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:18.772 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-549-1655322498770 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:18.800 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-550-1655322498799 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:18.801 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-551-1655322498799 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:18.801 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-552-1655322498799 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:18.817 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-553-1655322498816 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:18.863 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-554-1655322498848 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:18.925 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-555-1655322498923 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:18.937 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-556-1655322498936 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:19.511 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-557-1655322499509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/fulkreykk-ships Response 200 OK
+2022-06-15/15:48:19.557 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-558-1655322499554 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:19.568 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-559-1655322499567 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:19.573 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-560-1655322499571 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:19.602 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-562-1655322499602 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:19.602 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-563-1655322499602 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:19.605 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-564-1655322499604 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:19.626 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-561-1655322499602 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:19.687 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-565-1655322499686 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:19.699 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-566-1655322499697 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:19.738 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-567-1655322499737 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:19.739 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-568-1655322499737 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:19.739 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-569-1655322499738 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:19.739 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-570-1655322499738 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:19.740 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-571-1655322499739 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:19.740 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-572-1655322499739 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:19.742 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-573-1655322499740 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:19.768 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-574-1655322499767 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:19.768 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-575-1655322499767 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:19.768 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-576-1655322499768 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:19.783 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-577-1655322499783 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:19.829 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-578-1655322499814 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:19.894 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-579-1655322499893 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:19.908 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-580-1655322499907 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:20.019 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-581-1655322500017 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-1-gannan-class.mtl Response 200 OK
+2022-06-15/15:48:20.028 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-582-1655322500027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-1-lodovik-class.mtl Response 200 OK
+2022-06-15/15:48:20.028 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-585-1655322500027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-voss-class.mtl Response 200 OK
+2022-06-15/15:48:20.028 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-583-1655322500027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-karnas-class.mtl Response 200 OK
+2022-06-15/15:48:20.029 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-584-1655322500027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-pertona-class.mtl Response 200 OK
+2022-06-15/15:48:20.035 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-588-1655322500034 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-lorus-class.mtl Response 200 OK
+2022-06-15/15:48:20.035 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-586-1655322500033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-brekoryn-class.mtl Response 200 OK
+2022-06-15/15:48:20.036 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-589-1655322500035 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-orsh-class.mtl Response 200 OK
+2022-06-15/15:48:20.036 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-587-1655322500033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-falk-class.mtl Response 200 OK
+2022-06-15/15:48:20.037 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-590-1655322500035 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-tefran-class.mtl Response 200 OK
+2022-06-15/15:48:20.037 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-591-1655322500036 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-kassck-class.mtl Response 200 OK
+2022-06-15/15:48:20.039 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-592-1655322500037 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-khorr-class.mtl Response 200 OK
+2022-06-15/15:48:20.040 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-593-1655322500038 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-grev-ahtaumenth.mtl Response 200 OK
+2022-06-15/15:48:20.213 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-595-1655322500212 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-1-gannan-class.diff.png Response 200 OK
+2022-06-15/15:48:20.213 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-594-1655322500212 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-1-gannan-class.spec.png Response 200 OK
+2022-06-15/15:48:20.223 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-596-1655322500221 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-1-lodovik-class.diff.png Response 200 OK
+2022-06-15/15:48:20.223 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-597-1655322500222 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-1-lodovik-class.spec.png Response 200 OK
+2022-06-15/15:48:20.237 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-599-1655322500236 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-karnas-class.diff.png Response 200 OK
+2022-06-15/15:48:20.237 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-598-1655322500236 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-karnas-class.spec.png Response 200 OK
+2022-06-15/15:48:20.252 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-601-1655322500251 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-pertona-class.spec.png Response 200 OK
+2022-06-15/15:48:20.252 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-600-1655322500251 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-pertona-class.diff.png Response 200 OK
+2022-06-15/15:48:20.265 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-603-1655322500263 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-voss-class.spec.png Response 200 OK
+2022-06-15/15:48:20.265 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-602-1655322500263 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-voss-class.diff.png Response 200 OK
+2022-06-15/15:48:20.285 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-605-1655322500283 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-brekoryn-class.diff.png Response 200 OK
+2022-06-15/15:48:20.285 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-604-1655322500283 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-brekoryn-class.spec.png Response 200 OK
+2022-06-15/15:48:20.302 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-607-1655322500301 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-falk-class.spec.png Response 200 OK
+2022-06-15/15:48:20.302 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-606-1655322500301 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-falk-class.diff.png Response 200 OK
+2022-06-15/15:48:20.318 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-609-1655322500317 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-lorus-class.spec.png Response 200 OK
+2022-06-15/15:48:20.318 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-608-1655322500317 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-lorus-class.diff.png Response 200 OK
+2022-06-15/15:48:20.344 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-611-1655322500343 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-orsh-class.spec.png Response 200 OK
+2022-06-15/15:48:20.344 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-610-1655322500343 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-orsh-class.diff.png Response 200 OK
+2022-06-15/15:48:20.364 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-613-1655322500363 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-tefran-class.spec.png Response 200 OK
+2022-06-15/15:48:20.364 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-612-1655322500363 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-tefran-class.diff.png Response 200 OK
+2022-06-15/15:48:20.372 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-614-1655322500370 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-kassck-class.diff.png Response 200 OK
+2022-06-15/15:48:20.372 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-615-1655322500370 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-kassck-class.spec.png Response 200 OK
+2022-06-15/15:48:20.386 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-616-1655322500385 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-khorr-class.diff.png Response 200 OK
+2022-06-15/15:48:20.386 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-617-1655322500385 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-khorr-class.spec.png Response 200 OK
+2022-06-15/15:48:20.402 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-618-1655322500400 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-grev-ahtaumenth.diff.png Response 200 OK
+2022-06-15/15:48:20.402 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-619-1655322500400 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-grev-ahtaumenth.spec.png Response 200 OK
+2022-06-15/15:48:20.467 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-620-1655322500404 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-1-gannan-class.obj Response 200 OK
+2022-06-15/15:48:20.669 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-621-1655322500405 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-1-lodovik-class.obj Response 200 OK
+2022-06-15/15:48:20.669 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-624-1655322500411 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-brekoryn-class.obj Response 200 OK
+2022-06-15/15:48:20.695 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-625-1655322500415 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-voss-class.obj Response 200 OK
+2022-06-15/15:48:20.696 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-622-1655322500406 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-karnas-class.obj Response 200 OK
+2022-06-15/15:48:20.757 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-627-1655322500669 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-lorus-class.obj Response 200 OK
+2022-06-15/15:48:20.791 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-623-1655322500408 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-2-pertona-class.obj Response 200 OK
+2022-06-15/15:48:20.794 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-626-1655322500468 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-falk-class.obj Response 200 OK
+2022-06-15/15:48:20.797 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-628-1655322500669 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-orsh-class.obj Response 200 OK
+2022-06-15/15:48:20.799 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-629-1655322500695 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-3-tefran-class.obj Response 200 OK
+2022-06-15/15:48:20.813 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-630-1655322500698 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-kassck-class.obj Response 200 OK
+2022-06-15/15:48:20.904 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-631-1655322500758 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-khorr-class.obj Response 200 OK
+2022-06-15/15:48:20.904 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-632-1655322500791 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/fulkreykk-4-grev-ahtaumenth.obj Response 200 OK
+2022-06-15/15:48:30.538 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-633-1655322510537 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets Response 200 OK
+2022-06-15/15:48:30.586 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-634-1655322510584 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:30.606 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-635-1655322510604 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:30.615 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-636-1655322510613 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:30.641 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-638-1655322510639 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:30.641 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-639-1655322510639 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:30.647 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-640-1655322510646 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:30.664 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-637-1655322510639 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:30.700 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-641-1655322510698 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:30.716 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-642-1655322510714 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:30.755 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-644-1655322510754 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:30.755 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-643-1655322510754 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:30.755 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-645-1655322510754 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:30.757 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-646-1655322510756 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:30.758 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-647-1655322510757 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:30.758 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-648-1655322510757 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:30.760 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-649-1655322510757 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:30.787 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-650-1655322510787 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:30.787 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-651-1655322510787 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:30.788 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-652-1655322510787 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:30.801 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-653-1655322510800 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:30.851 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-654-1655322510833 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:30.915 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-655-1655322510913 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:30.929 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-656-1655322510929 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:31.855 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-657-1655322511852 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/arkant-horde-ships Response 200 OK
+2022-06-15/15:48:31.930 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-658-1655322511929 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:31.932 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-659-1655322511930 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:31.933 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-660-1655322511933 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:31.981 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-662-1655322511979 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:31.981 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-663-1655322511979 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:31.984 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-664-1655322511983 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:31.997 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-661-1655322511979 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:32.105 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-665-1655322512103 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:32.144 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-666-1655322512143 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:32.188 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-668-1655322512187 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:32.188 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-667-1655322512187 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:32.189 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-669-1655322512188 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:32.190 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-671-1655322512189 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:32.190 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-670-1655322512189 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:32.191 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-672-1655322512190 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:32.194 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-673-1655322512191 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:32.221 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-675-1655322512220 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:32.221 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-674-1655322512220 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:32.221 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-676-1655322512221 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:32.235 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-677-1655322512233 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:32.280 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-678-1655322512264 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:32.340 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-679-1655322512339 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:32.353 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-680-1655322512353 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:32.478 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-681-1655322512476 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-1-eris-class.mtl Response 200 OK
+2022-06-15/15:48:32.503 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-682-1655322512502 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-1-typhon-class.mtl Response 200 OK
+2022-06-15/15:48:32.503 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-683-1655322512502 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-ahriman-class.mtl Response 200 OK
+2022-06-15/15:48:32.504 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-684-1655322512503 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-apophis-class.mtl Response 200 OK
+2022-06-15/15:48:32.504 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-685-1655322512503 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-azathoth-class.mtl Response 200 OK
+2022-06-15/15:48:32.505 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-686-1655322512504 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-chernobog-class.mtl Response 200 OK
+2022-06-15/15:48:32.507 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-688-1655322512505 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-lamashtu-class.mtl Response 200 OK
+2022-06-15/15:48:32.507 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-687-1655322512505 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-cipactli-class.mtl Response 200 OK
+2022-06-15/15:48:32.507 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-689-1655322512506 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-lotan-class.mtl Response 200 OK
+2022-06-15/15:48:32.508 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-690-1655322512507 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-morgoth-class.mtl Response 200 OK
+2022-06-15/15:48:32.510 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-691-1655322512509 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-tiamat-class.mtl Response 200 OK
+2022-06-15/15:48:32.512 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-692-1655322512511 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-charybdis-class.mtl Response 200 OK
+2022-06-15/15:48:32.512 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-693-1655322512511 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-kakia-class.mtl Response 200 OK
+2022-06-15/15:48:32.514 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-694-1655322512512 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-moloch-class.mtl Response 200 OK
+2022-06-15/15:48:32.518 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-695-1655322512516 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-scylla-class.mtl Response 200 OK
+2022-06-15/15:48:32.518 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-696-1655322512516 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-5-aedon-class.mtl Response 200 OK
+2022-06-15/15:48:32.692 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-697-1655322512690 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-1-eris-class.diff.png Response 200 OK
+2022-06-15/15:48:32.692 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-698-1655322512690 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-1-eris-class.spec.png Response 200 OK
+2022-06-15/15:48:32.701 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-700-1655322512700 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-1-typhon-class.spec.png Response 200 OK
+2022-06-15/15:48:32.701 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-699-1655322512699 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-1-typhon-class.diff.png Response 200 OK
+2022-06-15/15:48:32.715 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-702-1655322512714 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-ahriman-class.spec.png Response 200 OK
+2022-06-15/15:48:32.715 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-701-1655322512714 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-ahriman-class.diff.png Response 200 OK
+2022-06-15/15:48:32.728 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-704-1655322512726 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-apophis-class.spec.png Response 200 OK
+2022-06-15/15:48:32.728 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-703-1655322512726 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-apophis-class.diff.png Response 200 OK
+2022-06-15/15:48:32.746 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-706-1655322512745 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-azathoth-class.spec.png Response 200 OK
+2022-06-15/15:48:32.746 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-705-1655322512745 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-azathoth-class.diff.png Response 200 OK
+2022-06-15/15:48:32.759 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-707-1655322512758 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-chernobog-class.diff.png Response 200 OK
+2022-06-15/15:48:32.759 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-708-1655322512758 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-chernobog-class.spec.png Response 200 OK
+2022-06-15/15:48:32.775 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-709-1655322512774 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-cipactli-class.spec.png Response 200 OK
+2022-06-15/15:48:32.776 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-710-1655322512774 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-cipactli-class.diff.png Response 200 OK
+2022-06-15/15:48:32.790 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-712-1655322512789 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-lamashtu-class.spec.png Response 200 OK
+2022-06-15/15:48:32.790 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-711-1655322512789 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-lamashtu-class.diff.png Response 200 OK
+2022-06-15/15:48:32.807 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-714-1655322512806 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-lotan-class.spec.png Response 200 OK
+2022-06-15/15:48:32.807 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-713-1655322512806 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-lotan-class.diff.png Response 200 OK
+2022-06-15/15:48:32.821 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-715-1655322512820 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-morgoth-class.diff.png Response 200 OK
+2022-06-15/15:48:32.821 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-716-1655322512820 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-morgoth-class.spec.png Response 200 OK
+2022-06-15/15:48:32.840 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-718-1655322512839 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-tiamat-class.spec.png Response 200 OK
+2022-06-15/15:48:32.840 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-717-1655322512839 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-tiamat-class.diff.png Response 200 OK
+2022-06-15/15:48:32.852 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-719-1655322512851 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-charybdis-class.diff.png Response 200 OK
+2022-06-15/15:48:32.852 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-720-1655322512851 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-charybdis-class.spec.png Response 200 OK
+2022-06-15/15:48:32.865 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-722-1655322512864 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-kakia-class.spec.png Response 200 OK
+2022-06-15/15:48:32.865 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-721-1655322512864 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-kakia-class.diff.png Response 200 OK
+2022-06-15/15:48:32.879 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-724-1655322512878 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-moloch-class.spec.png Response 200 OK
+2022-06-15/15:48:32.879 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-723-1655322512877 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-moloch-class.diff.png Response 200 OK
+2022-06-15/15:48:32.892 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-725-1655322512879 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-1-eris-class.obj Response 200 OK
+2022-06-15/15:48:32.896 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-726-1655322512894 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-scylla-class.diff.png Response 200 OK
+2022-06-15/15:48:32.896 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-727-1655322512894 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-scylla-class.spec.png Response 200 OK
+2022-06-15/15:48:32.911 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-729-1655322512910 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-5-aedon-class.spec.png Response 200 OK
+2022-06-15/15:48:32.911 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-728-1655322512910 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-5-aedon-class.diff.png Response 200 OK
+2022-06-15/15:48:33.079 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-730-1655322512912 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-1-typhon-class.obj Response 200 OK
+2022-06-15/15:48:33.168 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-731-1655322512913 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-ahriman-class.obj Response 200 OK
+2022-06-15/15:48:33.173 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-732-1655322512916 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-apophis-class.obj Response 200 OK
+2022-06-15/15:48:33.205 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-735-1655322512935 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-cipactli-class.obj Response 200 OK
+2022-06-15/15:48:33.377 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-733-1655322512918 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-2-azathoth-class.obj Response 200 OK
+2022-06-15/15:48:34.085 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-738-1655322513173 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-morgoth-class.obj Response 200 OK
+2022-06-15/15:48:34.391 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-739-1655322513206 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-tiamat-class.obj Response 200 OK
+2022-06-15/15:48:34.438 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-734-1655322512921 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-chernobog-class.obj Response 200 OK
+2022-06-15/15:48:34.457 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-736-1655322513079 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-lamashtu-class.obj Response 200 OK
+2022-06-15/15:48:34.468 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-737-1655322513168 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-3-lotan-class.obj Response 200 OK
+2022-06-15/15:48:34.739 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-740-1655322513378 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-charybdis-class.obj Response 200 OK
+2022-06-15/15:48:34.745 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-741-1655322514085 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-kakia-class.obj Response 200 OK
+2022-06-15/15:48:34.785 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-743-1655322514439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-scylla-class.obj Response 200 OK
+2022-06-15/15:48:34.837 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-742-1655322514392 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-4-moloch-class.obj Response 200 OK
+2022-06-15/15:48:34.862 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-744-1655322514457 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/diadochi-5-aedon-class.obj Response 200 OK
+2022-06-15/15:48:42.795 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-745-1655322522794 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets Response 200 OK
+2022-06-15/15:48:42.843 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-746-1655322522841 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:42.848 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-747-1655322522846 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:42.848 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-748-1655322522847 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:42.899 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-750-1655322522898 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:42.899 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-751-1655322522898 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:42.901 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-752-1655322522901 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:42.923 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-749-1655322522897 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:42.975 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-753-1655322522974 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:42.990 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-754-1655322522987 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:43.027 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-756-1655322523026 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:43.027 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-755-1655322523026 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:43.028 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-757-1655322523027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:43.030 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-758-1655322523030 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:43.031 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-759-1655322523030 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:43.031 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-760-1655322523030 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:43.035 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-761-1655322523033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:43.062 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-762-1655322523060 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:43.062 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-763-1655322523060 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:43.062 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-764-1655322523060 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:43.075 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-765-1655322523074 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:43.120 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-766-1655322523104 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:43.184 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-767-1655322523183 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:43.198 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-768-1655322523198 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:43.936 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-769-1655322523932 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/military/fleets/felinae-felices-ships Response 200 OK
+2022-06-15/15:48:43.976 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-770-1655322523973 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:43.991 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-771-1655322523990 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:43.998 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-772-1655322523997 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:44.026 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-774-1655322524026 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:44.026 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-775-1655322524026 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:44.028 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-776-1655322524027 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:44.048 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-773-1655322524025 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:44.103 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-777-1655322524102 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:44.119 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-778-1655322524116 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:44.157 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-779-1655322524156 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:44.157 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-780-1655322524156 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:44.157 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-781-1655322524157 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:44.158 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-782-1655322524157 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:44.158 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-783-1655322524157 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:44.158 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-784-1655322524158 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:44.161 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-785-1655322524158 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:44.184 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-786-1655322524183 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:44.184 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-787-1655322524183 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:44.184 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-788-1655322524183 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:44.203 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-789-1655322524197 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:44.248 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-790-1655322524233 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:44.312 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-791-1655322524311 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:44.324 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-792-1655322524323 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:48:44.411 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-795-1655322524409 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-2-margay-class.mtl Response 200 OK
+2022-06-15/15:48:44.411 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-796-1655322524409 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-2-ocelot-class.mtl Response 200 OK
+2022-06-15/15:48:44.411 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-793-1655322524409 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-1-kodkod-class.mtl Response 200 OK
+2022-06-15/15:48:44.411 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-794-1655322524409 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-1-oncilla-class.mtl Response 200 OK
+2022-06-15/15:48:44.412 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-797-1655322524411 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-3-bobcat-class.mtl Response 200 OK
+2022-06-15/15:48:44.412 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-798-1655322524411 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-3-lynx-class.mtl Response 200 OK
+2022-06-15/15:48:44.414 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-799-1655322524412 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-4-leopard-class.mtl Response 200 OK
+2022-06-15/15:48:44.414 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-800-1655322524412 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-4-tiger-class.mtl Response 200 OK
+2022-06-15/15:48:44.414 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-801-1655322524412 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-5-caracal-class.mtl Response 200 OK
+2022-06-15/15:48:44.560 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-803-1655322524559 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-1-kodkod-class.spec.png Response 200 OK
+2022-06-15/15:48:44.560 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-802-1655322524558 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-1-kodkod-class.diff.png Response 200 OK
+2022-06-15/15:48:44.567 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-805-1655322524566 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-1-oncilla-class.spec.png Response 200 OK
+2022-06-15/15:48:44.567 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-804-1655322524566 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-1-oncilla-class.diff.png Response 200 OK
+2022-06-15/15:48:44.583 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-806-1655322524581 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-2-margay-class.diff.png Response 200 OK
+2022-06-15/15:48:44.583 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-807-1655322524582 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-2-margay-class.spec.png Response 200 OK
+2022-06-15/15:48:44.603 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-809-1655322524601 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-2-ocelot-class.spec.png Response 200 OK
+2022-06-15/15:48:44.603 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-808-1655322524600 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-2-ocelot-class.diff.png Response 200 OK
+2022-06-15/15:48:44.623 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-811-1655322524622 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-3-bobcat-class.spec.png Response 200 OK
+2022-06-15/15:48:44.623 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-810-1655322524622 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-3-bobcat-class.diff.png Response 200 OK
+2022-06-15/15:48:44.640 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-813-1655322524638 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-3-lynx-class.spec.png Response 200 OK
+2022-06-15/15:48:44.640 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-812-1655322524638 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-3-lynx-class.diff.png Response 200 OK
+2022-06-15/15:48:44.654 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-815-1655322524653 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-4-leopard-class.spec.png Response 200 OK
+2022-06-15/15:48:44.654 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-814-1655322524653 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-4-leopard-class.diff.png Response 200 OK
+2022-06-15/15:48:44.670 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-817-1655322524669 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-4-tiger-class.spec.png Response 200 OK
+2022-06-15/15:48:44.670 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-816-1655322524669 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-4-tiger-class.diff.png Response 200 OK
+2022-06-15/15:48:44.688 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-819-1655322524687 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-5-caracal-class.spec.png Response 200 OK
+2022-06-15/15:48:44.688 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-818-1655322524687 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-5-caracal-class.diff.png Response 200 OK
+2022-06-15/15:48:44.696 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-820-1655322524689 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-1-kodkod-class.obj Response 200 OK
+2022-06-15/15:48:44.696 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-821-1655322524690 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-1-oncilla-class.obj Response 200 OK
+2022-06-15/15:48:44.736 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-822-1655322524691 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-2-margay-class.obj Response 200 OK
+2022-06-15/15:48:44.750 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-823-1655322524694 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-2-ocelot-class.obj Response 200 OK
+2022-06-15/15:48:44.770 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-824-1655322524698 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-3-bobcat-class.obj Response 200 OK
+2022-06-15/15:48:44.779 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-825-1655322524703 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-3-lynx-class.obj Response 200 OK
+2022-06-15/15:48:44.831 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-826-1655322524703 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-4-leopard-class.obj Response 200 OK
+2022-06-15/15:48:44.872 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-828-1655322524737 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-5-caracal-class.obj Response 200 OK
+2022-06-15/15:48:44.878 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-827-1655322524703 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/meshes/felinae-4-tiger-class.obj Response 200 OK
+2022-06-15/15:48:59.306 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-829-1655322539303 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:48:59.357 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-830-1655322539355 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:48:59.380 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-831-1655322539379 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:48:59.396 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-832-1655322539395 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:48:59.424 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-835-1655322539423 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:48:59.425 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-834-1655322539423 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:48:59.426 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-836-1655322539426 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:48:59.452 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-833-1655322539423 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:48:59.522 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-837-1655322539520 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:48:59.545 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-838-1655322539543 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:48:59.598 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-840-1655322539597 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:48:59.598 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-839-1655322539597 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:48:59.598 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-841-1655322539597 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:48:59.600 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-842-1655322539598 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:48:59.600 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-843-1655322539599 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:48:59.601 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-844-1655322539599 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:48:59.603 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-845-1655322539600 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:48:59.635 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-846-1655322539634 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:48:59.635 [eventLoopGroupProxy-4-7] I (ktor.application) - Call #call-847-1655322539634 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:48:59.640 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-848-1655322539638 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:48:59.651 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-849-1655322539650 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:48:59.711 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-850-1655322539690 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:48:59.789 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-851-1655322539788 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:48:59.803 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-852-1655322539802 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:57:23.743 [main] I (ktor.application) - Autoreload is disabled because the development mode is off.
+2022-06-15/15:57:23.820 [main] I (ktor.application) - Responding at http://127.0.0.1:8080
+2022-06-15/15:57:23.821 [main] I (ktor.application) - Application started in 0.086 seconds.
+2022-06-15/15:57:23.822 [main] I (ktor.application) - Application started: io.ktor.application.Application@1372ed45
+2022-06-15/15:57:23.827 [main] D (io.netty.util.internal.logging.InternalLoggerFactory) - Using SLF4J as the default logging framework
+2022-06-15/15:57:23.876 [main] D (io.netty.util.internal.PlatformDependent0) - -Dio.netty.noUnsafe: false
+2022-06-15/15:57:23.877 [main] D (io.netty.util.internal.PlatformDependent0) - Java version: 8
+2022-06-15/15:57:23.877 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.theUnsafe: available
+2022-06-15/15:57:23.877 [main] D (io.netty.util.internal.PlatformDependent0) - sun.misc.Unsafe.copyMemory: available
+2022-06-15/15:57:23.878 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Buffer.address: available
+2022-06-15/15:57:23.878 [main] D (io.netty.util.internal.PlatformDependent0) - direct buffer constructor: available
+2022-06-15/15:57:23.879 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.Bits.unaligned: available, true
+2022-06-15/15:57:23.879 [main] D (io.netty.util.internal.PlatformDependent0) - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
+2022-06-15/15:57:23.879 [main] D (io.netty.util.internal.PlatformDependent0) - java.nio.DirectByteBuffer.(long, int): available
+2022-06-15/15:57:23.879 [main] D (io.netty.util.internal.PlatformDependent) - sun.misc.Unsafe: available
+2022-06-15/15:57:23.880 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.tmpdir: C:\Users\samfr\AppData\Local\Temp (java.io.tmpdir)
+2022-06-15/15:57:23.880 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.bitMode: 64 (sun.arch.data.model)
+2022-06-15/15:57:23.880 [main] D (io.netty.util.internal.PlatformDependent) - Platform: Windows
+2022-06-15/15:57:23.882 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.maxDirectMemory: 7589068800 bytes
+2022-06-15/15:57:23.882 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.uninitializedArrayAllocationThreshold: -1
+2022-06-15/15:57:23.883 [main] D (io.netty.util.internal.CleanerJava6) - java.nio.ByteBuffer.cleaner(): available
+2022-06-15/15:57:23.883 [main] D (io.netty.util.internal.PlatformDependent) - -Dio.netty.noPreferDirect: false
+2022-06-15/15:57:24.969 [main] D (io.netty.channel.MultithreadEventLoopGroup) - -Dio.netty.eventLoopThreads: 24
+2022-06-15/15:57:24.980 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
+2022-06-15/15:57:24.980 [main] D (io.netty.util.internal.InternalThreadLocalMap) - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
+2022-06-15/15:57:24.986 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.noKeySetOptimization: false
+2022-06-15/15:57:24.987 [main] D (io.netty.channel.nio.NioEventLoop) - -Dio.netty.selectorAutoRebuildThreshold: 512
+2022-06-15/15:57:24.994 [main] D (io.netty.util.internal.PlatformDependent) - org.jctools-core.MpscChunkedArrayQueue: available
+2022-06-15/15:57:25.038 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.processId: 1788 (auto-detected)
+2022-06-15/15:57:25.040 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv4Stack: false
+2022-06-15/15:57:25.040 [main] D (io.netty.util.NetUtil) - -Djava.net.preferIPv6Addresses: false
+2022-06-15/15:57:26.046 [main] D (io.netty.util.NetUtilInitializations) - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
+2022-06-15/15:57:26.047 [main] D (io.netty.util.NetUtil) - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
+2022-06-15/15:57:27.090 [main] D (io.netty.channel.DefaultChannelId) - -Dio.netty.machineId: 30:24:32:ff:fe:7e:95:aa (auto-detected)
+2022-06-15/15:57:27.097 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.level: simple
+2022-06-15/15:57:27.097 [main] D (io.netty.util.ResourceLeakDetector) - -Dio.netty.leakDetection.targetRecords: 4
+2022-06-15/15:57:27.113 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numHeapArenas: 24
+2022-06-15/15:57:27.113 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.numDirectArenas: 24
+2022-06-15/15:57:27.113 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.pageSize: 8192
+2022-06-15/15:57:27.113 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxOrder: 11
+2022-06-15/15:57:27.113 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.chunkSize: 16777216
+2022-06-15/15:57:27.113 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.smallCacheSize: 256
+2022-06-15/15:57:27.114 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.normalCacheSize: 64
+2022-06-15/15:57:27.114 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
+2022-06-15/15:57:27.114 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimInterval: 8192
+2022-06-15/15:57:27.114 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
+2022-06-15/15:57:27.114 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.useCacheForAllThreads: true
+2022-06-15/15:57:27.114 [main] D (io.netty.buffer.PooledByteBufAllocator) - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
+2022-06-15/15:57:27.123 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.allocator.type: pooled
+2022-06-15/15:57:27.123 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.threadLocalDirectBufferSize: 0
+2022-06-15/15:57:27.123 [main] D (io.netty.buffer.ByteBufUtil) - -Dio.netty.maxThreadLocalCharBufferSize: 16384
+2022-06-15/15:57:29.299 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkAccessible: true
+2022-06-15/15:57:29.299 [eventLoopGroupProxy-3-1] D (io.netty.buffer.AbstractByteBuf) - -Dio.netty.buffer.checkBounds: true
+2022-06-15/15:57:29.300 [eventLoopGroupProxy-3-1] D (io.netty.util.ResourceLeakDetectorFactory) - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@24304f7e
+2022-06-15/15:57:29.353 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.maxCapacityPerThread: 4096
+2022-06-15/15:57:29.353 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.ratio: 8
+2022-06-15/15:57:29.353 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.chunkSize: 32
+2022-06-15/15:57:29.353 [eventLoopGroupProxy-3-1] D (io.netty.util.Recycler) - -Dio.netty.recycler.blocking: false
+2022-06-15/15:57:29.464 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-1-1655323049398 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:57:29.580 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-2-1655323049498 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:57:29.580 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-4-1655323049520 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:57:29.585 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-3-1655323049519 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:57:29.692 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-6-1655323049688 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:57:29.692 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-7-1655323049688 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:57:29.698 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-8-1655323049694 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:57:29.749 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-5-1655323049688 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:57:29.799 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-9-1655323049795 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:57:29.821 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-10-1655323049817 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:57:29.891 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-12-1655323049887 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:57:29.893 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-11-1655323049887 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:57:29.893 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-13-1655323049887 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:57:29.896 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-14-1655323049889 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:57:29.902 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-17-1655323049898 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:57:29.904 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-16-1655323049898 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:57:29.907 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-15-1655323049896 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:57:29.922 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-18-1655323049918 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/icon.svg Response 200 OK
+2022-06-15/15:57:29.948 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-20-1655323049945 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:57:29.948 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-19-1655323049945 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:57:29.951 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-21-1655323049948 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:57:29.969 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-22-1655323049966 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:57:30.034 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-23-1655323050002 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:57:30.102 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-24-1655323050100 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:57:30.119 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-25-1655323050114 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:57:36.947 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-26-1655323056944 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:57:36.981 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-27-1655323056979 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:57:36.990 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-28-1655323056985 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:57:36.995 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-29-1655323056991 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:57:37.035 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-31-1655323057033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:57:37.037 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-32-1655323057033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:57:37.039 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-33-1655323057037 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:57:37.076 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-30-1655323057033 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:57:37.131 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-34-1655323057128 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:57:37.153 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-35-1655323057149 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:57:37.200 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-37-1655323057198 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:57:37.202 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-36-1655323057198 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:57:37.202 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-38-1655323057198 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:57:37.205 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-40-1655323057200 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:57:37.205 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-39-1655323057200 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:57:37.207 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-41-1655323057200 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:57:37.213 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-42-1655323057202 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:57:37.243 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-43-1655323057242 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:57:37.245 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-45-1655323057242 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:57:37.245 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-44-1655323057242 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:57:37.267 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-46-1655323057264 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:57:37.338 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-47-1655323057305 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:57:37.427 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-48-1655323057424 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:57:37.445 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-49-1655323057444 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:57:38.109 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-50-1655323058077 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/places/milky-way Response 200 OK
+2022-06-15/15:57:38.154 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-51-1655323058150 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:57:38.190 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-52-1655323058187 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:57:38.394 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-53-1655323058368 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-masra-draetsen.png Response 200 OK
+2022-06-15/15:57:38.397 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-55-1655323058368 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-isarnareykk.png Response 200 OK
+2022-06-15/15:57:38.399 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-56-1655323058368 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-chaebodes-star-empire.png Response 200 OK
+2022-06-15/15:57:38.403 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-58-1655323058373 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-viperarum.png Response 200 OK
+2022-06-15/15:57:38.423 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-60-1655323058398 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-tylan-theocracy.png Response 200 OK
+2022-06-15/15:57:38.425 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-57-1655323058369 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-noctiferorum.png Response 200 OK
+2022-06-15/15:57:38.433 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-61-1655323058400 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-fulkreykk-1.png Response 200 OK
+2022-06-15/15:57:38.433 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-62-1655323058405 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-fulkreykk-2.png Response 200 OK
+2022-06-15/15:57:38.436 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-59-1655323058395 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-arkant-horde.png Response 200 OK
+2022-06-15/15:57:38.440 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-64-1655323058426 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ilkhan-commune.png Response 200 OK
+2022-06-15/15:57:38.441 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-67-1655323058439 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:57:38.442 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-63-1655323058424 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-terran-revolutionary-republic.png Response 200 OK
+2022-06-15/15:57:38.445 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-66-1655323058435 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-telareth-republic.png Response 200 OK
+2022-06-15/15:57:38.451 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-68-1655323058443 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/logo-mjolnir-energy.png Response 200 OK
+2022-06-15/15:57:38.453 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-65-1655323058435 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-mechyrdia.png Response 200 OK
+2022-06-15/15:57:38.457 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-69-1655323058447 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-felinae-felices.png Response 200 OK
+2022-06-15/15:57:38.459 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-70-1655323058453 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-theudareykk.png Response 200 OK
+2022-06-15/15:57:38.482 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-72-1655323058458 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-diabolorum.png Response 200 OK
+2022-06-15/15:57:38.575 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-71-1655323058455 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-stahlareykk.png Response 200 OK
+2022-06-15/15:57:38.575 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-73-1655323058462 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-lihann-empire.png Response 200 OK
+2022-06-15/15:57:38.575 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-75-1655323058470 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-vestigium.png Response 200 OK
+2022-06-15/15:57:38.576 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-74-1655323058462 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-res-nostra.png Response 200 OK
+2022-06-15/15:57:38.581 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-77-1655323058577 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ferthlon-internation.png Response 200 OK
+2022-06-15/15:57:38.583 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-79-1655323058577 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:57:38.586 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-76-1655323058483 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-drakhassi-federation.png Response 200 OK
+2022-06-15/15:57:38.586 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-80-1655323058579 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ndrc.png Response 200 OK
+2022-06-15/15:57:38.602 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-81-1655323058583 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ccc.png Response 200 OK
+2022-06-15/15:57:38.602 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-78-1655323058577 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-rathian-consensus.png Response 200 OK
+2022-06-15/15:57:38.605 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-84-1655323058589 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-ilkhan-republic.png Response 200 OK
+2022-06-15/15:57:38.607 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-83-1655323058588 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-niska-republic.png Response 200 OK
+2022-06-15/15:57:38.612 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-86-1655323058605 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-swartareykk.png Response 200 OK
+2022-06-15/15:57:38.613 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-85-1655323058605 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-lyudareykk.png Response 200 OK
+2022-06-15/15:57:38.618 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-87-1655323058605 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-magistrorum.png Response 200 OK
+2022-06-15/15:57:38.619 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-82-1655323058585 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-corsairs.png Response 200 OK
+2022-06-15/15:57:38.621 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-88-1655323058610 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-togatorum.png Response 200 OK
+2022-06-15/15:57:38.626 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-91-1655323058622 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:57:38.628 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-92-1655323058627 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:57:38.649 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-93-1655323058648 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:57:38.693 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-90-1655323058621 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:57:38.707 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-89-1655323058620 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-mechyrdia-protectorate.png Response 200 OK
+2022-06-15/15:57:38.909 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-94-1655323058897 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/flag-diadochus-humilitatum.png Response 200 OK
+2022-06-15/15:57:39.043 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-54-1655323058368 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /assets/images/map-galaxy.png Response 200 OK
+2022-06-15/15:57:39.202 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-95-1655323059200 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:57:39.291 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-98-1655323059288 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:57:39.291 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-97-1655323059288 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:57:39.292 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-99-1655323059288 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:57:39.293 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-101-1655323059289 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:57:39.293 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-96-1655323059287 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:57:39.295 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-100-1655323059289 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:57:39.300 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-102-1655323059294 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:57:39.337 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-103-1655323059335 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:57:39.339 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-104-1655323059335 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:57:39.339 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-105-1655323059336 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:57:39.360 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-106-1655323059358 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:57:39.802 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-107-1655323059773 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:57:39.882 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-108-1655323059880 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:57:39.898 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-109-1655323059896 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:57:50.041 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-110-1655323070039 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore/places Response 200 OK
+2022-06-15/15:57:50.082 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-111-1655323070078 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:57:50.099 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-112-1655323070098 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:57:50.108 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-113-1655323070107 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:57:50.133 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-116-1655323070131 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:57:50.133 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-115-1655323070130 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:57:50.135 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-117-1655323070133 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:57:50.163 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-114-1655323070130 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:57:50.207 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-118-1655323070205 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:57:50.222 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-119-1655323070221 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:57:50.260 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-121-1655323070259 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:57:50.260 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-120-1655323070258 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:57:50.260 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-122-1655323070259 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:57:50.260 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-123-1655323070259 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:57:50.261 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-124-1655323070259 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:57:50.261 [eventLoopGroupProxy-4-6] I (ktor.application) - Call #call-125-1655323070260 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:57:50.265 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-126-1655323070260 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:57:50.290 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-127-1655323070288 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:57:50.291 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-128-1655323070288 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:57:50.291 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-129-1655323070289 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:57:50.304 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-130-1655323070302 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:57:50.352 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-131-1655323070332 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:57:50.413 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-132-1655323070411 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:57:50.426 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-133-1655323070425 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
+2022-06-15/15:57:50.721 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-134-1655323070717 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /lore Response 200 OK
+2022-06-15/15:57:50.765 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-135-1655323070764 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/style.css Response 200 OK
+2022-06-15/15:57:50.778 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-136-1655323070773 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js Response 200 OK
+2022-06-15/15:57:50.779 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-137-1655323070777 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/init.js Response 200 OK
+2022-06-15/15:57:50.827 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-138-1655323070826 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/panel.svg Response 200 OK
+2022-06-15/15:57:50.827 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-140-1655323070826 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/external-link.svg Response 200 OK
+2022-06-15/15:57:50.829 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-141-1655323070827 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/gltf-viewer.html Response 200 OK
+2022-06-15/15:57:50.858 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-139-1655323070826 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/images/background.jpg Response 200 OK
+2022-06-15/15:57:50.900 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-142-1655323070900 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/polymer-element.html Response 200 OK
+2022-06-15/15:57:50.922 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-143-1655323070919 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html Response 200 OK
+2022-06-15/15:57:50.968 [eventLoopGroupProxy-4-3] I (ktor.application) - Call #call-147-1655323070966 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html Response 200 OK
+2022-06-15/15:57:50.968 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-145-1655323070966 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html Response 200 OK
+2022-06-15/15:57:50.969 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-146-1655323070966 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html Response 200 OK
+2022-06-15/15:57:50.969 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-144-1655323070966 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/boot.html Response 200 OK
+2022-06-15/15:57:50.970 [eventLoopGroupProxy-4-5] I (ktor.application) - Call #call-148-1655323070966 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html Response 200 OK
+2022-06-15/15:57:50.974 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-149-1655323070971 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html Response 200 OK
+2022-06-15/15:57:50.976 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-150-1655323070972 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html Response 200 OK
+2022-06-15/15:57:51.014 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-152-1655323071012 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/path.html Response 200 OK
+2022-06-15/15:57:51.014 [eventLoopGroupProxy-4-2] I (ktor.application) - Call #call-151-1655323071012 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html Response 200 OK
+2022-06-15/15:57:51.015 [eventLoopGroupProxy-4-4] I (ktor.application) - Call #call-153-1655323071013 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html Response 200 OK
+2022-06-15/15:57:51.032 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-154-1655323071030 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/bower_components/polymer/lib/utils/async.html Response 200 OK
+2022-06-15/15:57:51.087 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-155-1655323071069 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three.js Response 200 OK
+2022-06-15/15:57:51.150 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-156-1655323071148 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/three-examples.js Response 200 OK
+2022-06-15/15:57:51.165 [eventLoopGroupProxy-4-1] I (ktor.application) - Call #call-157-1655323071164 Client 127.0.0.1 `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0` Request GET /static/gltf-viewer/js/OrbitControls.js Response 200 OK
diff --git a/patch b/patch
new file mode 100644
index 0000000..4de65ee
--- /dev/null
+++ b/patch
@@ -0,0 +1,6 @@
+#!/usr/bin/env sh
+
+screen -S factbooks -X quit
+git pull
+/opt/gradle/gradle-7.1/bin/gradle shadowJar
+screen -dmS factbooks /opt/gradle/gradle-7.1/bin/gradle runShadow
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 0000000..a30b383
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1,3 @@
+
+rootProject.name = "factbooks"
+
diff --git a/src/main/kotlin/info/mechyrdia/Configuration.kt b/src/main/kotlin/info/mechyrdia/Configuration.kt
new file mode 100644
index 0000000..49b2f63
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/Configuration.kt
@@ -0,0 +1,48 @@
+package info.mechyrdia
+
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.Json
+import java.io.File
+
+@Serializable
+data class Configuration(
+ val host: String = "127.0.0.1",
+ val port: Int = 8080,
+
+ val articleDir: String = "../lore",
+ val assetDir: String = "../assets",
+) {
+ companion object {
+
+ private val DEFAULT_CONFIG = Configuration()
+
+ private var currentConfig: Configuration? = null
+
+ val CurrentConfiguration: Configuration
+ get() {
+ currentConfig?.let { return it }
+
+ val file = File(System.getProperty("factbooks.configpath", "./config.json"))
+ if (!file.isFile) {
+ if (file.exists())
+ file.deleteRecursively()
+
+ val json = JsonConfigCodec.encodeToString(serializer(), DEFAULT_CONFIG)
+ file.writeText(json, Charsets.UTF_8)
+ return DEFAULT_CONFIG
+ }
+
+ val json = file.readText()
+ return JsonConfigCodec.decodeFromString(serializer(), json).also { currentConfig = it }
+ }
+
+ @OptIn(ExperimentalSerializationApi::class)
+ val JsonConfigCodec = Json {
+ prettyPrint = true
+ prettyPrintIndent = "\t"
+
+ useAlternativeNames = false
+ }
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/Factbooks.kt b/src/main/kotlin/info/mechyrdia/Factbooks.kt
new file mode 100644
index 0000000..c4268c6
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/Factbooks.kt
@@ -0,0 +1,108 @@
+package info.mechyrdia
+
+import info.mechyrdia.lore.*
+import io.ktor.application.*
+import io.ktor.features.*
+import io.ktor.html.*
+import io.ktor.http.*
+import io.ktor.http.content.*
+import io.ktor.request.*
+import io.ktor.response.*
+import io.ktor.routing.*
+import io.ktor.server.engine.*
+import io.ktor.server.netty.*
+import org.slf4j.event.Level
+import java.io.File
+import java.io.IOException
+import java.util.concurrent.atomic.AtomicLong
+
+object Factbooks {
+ @JvmStatic
+ fun main(args: Array) {
+ System.setProperty("logback.statusListenerClass", "ch.qos.logback.core.status.NopStatusListener")
+
+ System.setProperty("io.ktor.development", "false")
+
+ embeddedServer(Netty, port = Configuration.CurrentConfiguration.port, host = Configuration.CurrentConfiguration.host) {
+ install(IgnoreTrailingSlash)
+ install(XForwardedHeaderSupport)
+
+ install(CallId) {
+ val counter = AtomicLong(0)
+ generate {
+ "call-${counter.incrementAndGet().toULong()}-${System.currentTimeMillis()}"
+ }
+ }
+
+ install(CallLogging) {
+ level = Level.INFO
+
+ callIdMdc("ktor-call-id")
+
+ format { call ->
+ "Call #${call.callId} Client ${call.request.origin.remoteHost} `${call.request.userAgent()}` Request ${call.request.httpMethod.value} ${call.request.uri} Response ${call.response.status()}"
+ }
+ }
+
+ install(StatusPages) {
+ status(HttpStatusCode.NotFound) {
+ call.respondHtml(HttpStatusCode.NotFound, call.error404())
+ }
+
+ exception { (url, permanent) ->
+ call.respondRedirect(url, permanent)
+ }
+ exception {
+ call.respondHtml(HttpStatusCode.BadRequest, call.error400())
+ }
+ exception {
+ call.respondHtml(HttpStatusCode.NotFound, call.error404())
+ }
+ exception {
+ call.respondHtml(HttpStatusCode.NotFound, call.error404())
+ }
+
+ exception {
+ call.respondHtml(HttpStatusCode.InternalServerError, call.error503())
+ throw it
+ }
+ }
+
+ routing {
+ get("/") {
+ redirect("/lore")
+ }
+
+ static("/static") {
+ resources("static")
+ }
+
+ get("/lore/{path...}") {
+ call.respondHtml(HttpStatusCode.OK, call.loreArticlePage())
+ }
+
+ static("/assets") {
+ files(File(Configuration.CurrentConfiguration.assetDir))
+ }
+
+ get("/change-theme") {
+ call.respondHtml(HttpStatusCode.OK, call.changeThemePage())
+ }
+
+ post("/change-theme") {
+ val newTheme = when (call.receiveParameters()["theme"]) {
+ "light" -> "light"
+ "dark" -> "dark"
+ else -> "system"
+ }
+ call.response.cookies.append("factbook-theme", newTheme, maxAge = Int.MAX_VALUE.toLong())
+ redirect("/lore")
+ }
+
+ post("/tylan-lang") {
+ call.respondText(TylanAlphabet.tylanToFontAlphabet(call.receiveText()))
+ }
+ }
+ }.start(wait = true)
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/article_listing.kt b/src/main/kotlin/info/mechyrdia/lore/article_listing.kt
new file mode 100644
index 0000000..9e953c1
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/article_listing.kt
@@ -0,0 +1,27 @@
+package info.mechyrdia.lore
+
+import kotlinx.html.UL
+import kotlinx.html.a
+import kotlinx.html.li
+import kotlinx.html.ul
+import java.io.File
+
+data class ArticleNode(val name: String, val subNodes: List)
+
+fun File.toArticleNode(): ArticleNode = ArticleNode(
+ name,
+ listFiles()?.map { it.toArticleNode() }.orEmpty()
+)
+
+fun List.renderInto(list: UL, base: String? = null) {
+ val prefix = base?.let { "$it/" } ?: ""
+ forEach {
+ list.li {
+ a(href = "/lore/$prefix${it.name}") { +it.name }
+ if (it.subNodes.isNotEmpty())
+ ul {
+ it.subNodes.renderInto(this, "$prefix${it.name}")
+ }
+ }
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/html_utils.kt b/src/main/kotlin/info/mechyrdia/lore/html_utils.kt
new file mode 100644
index 0000000..a446df1
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/html_utils.kt
@@ -0,0 +1,17 @@
+package info.mechyrdia.lore
+
+import kotlinx.html.MAIN
+import kotlinx.html.SECTION
+import kotlinx.html.section
+
+fun interface SECTIONS {
+ fun section(body: SECTION.() -> Unit)
+}
+
+fun MAIN.sectioned(): SECTIONS = MainSections(this)
+
+private class MainSections(private val delegate: MAIN) : SECTIONS {
+ override fun section(body: SECTION.() -> Unit) {
+ delegate.section(block = body)
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/http_utils.kt b/src/main/kotlin/info/mechyrdia/lore/http_utils.kt
new file mode 100644
index 0000000..b3daef9
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/http_utils.kt
@@ -0,0 +1,5 @@
+package info.mechyrdia.lore
+
+data class HttpRedirectException(val url: String, val permanent: Boolean) : RuntimeException()
+
+fun redirect(url: String, permanent: Boolean = false): Nothing = throw HttpRedirectException(url, permanent)
diff --git a/src/main/kotlin/info/mechyrdia/lore/parser.kt b/src/main/kotlin/info/mechyrdia/lore/parser.kt
new file mode 100644
index 0000000..1368bf6
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/parser.kt
@@ -0,0 +1,180 @@
+package info.mechyrdia.lore
+
+data class TextParserScope(
+ val write: Appendable,
+ val tags: TextParserTags,
+ val ctx: TContext
+)
+
+sealed class TextParserState(
+ val scope: TextParserScope,
+ val insideTags: List>,
+ val insideDirectTags: List
+) {
+ abstract fun processCharacter(char: Char): TextParserState
+ abstract fun processEndOfText()
+
+ protected fun appendText(text: String) {
+ scope.write.append(
+ insideTags.foldRight(censorText(text)) { (tag, param), t ->
+ (scope.tags[tag] as? TextParserTagType.Indirect)
+ ?.process(param, t, scope.ctx)
+ ?: "[$tag${param?.let { "=$it" } ?: ""}]$t[/$tag]"
+ }
+ )
+ }
+
+ protected fun appendTextRaw(text: String) {
+ scope.write.append(text)
+ }
+
+ class Initial(scope: TextParserScope) : TextParserState(scope, listOf(), listOf()) {
+ override fun processCharacter(char: Char): TextParserState {
+ return if (char == '[')
+ OpenTag(scope, "", insideTags, insideDirectTags)
+ else
+ PlainText(scope, "$char", insideTags, insideDirectTags)
+ }
+
+ override fun processEndOfText() {
+ // Do nothing
+ }
+ }
+
+ class PlainText(scope: TextParserScope, val text: String, insideTags: List>, insideDirectTags: List) : TextParserState(scope, insideTags, insideDirectTags) {
+ override fun processCharacter(char: Char): TextParserState {
+ return if (char == '[') {
+ appendText(text)
+ OpenTag(scope, "", insideTags, insideDirectTags)
+ } else if (char == '\n' && text.endsWith('\n')) {
+ appendText(text.removeSuffix("\n"))
+
+ val newline = if (insideDirectTags.isEmpty())
+ "
"
+ else
+ "
"
+
+ appendTextRaw(newline)
+ PlainText(scope, "", insideTags, insideDirectTags)
+ } else
+ PlainText(scope, text + char, insideTags, insideDirectTags)
+ }
+
+ override fun processEndOfText() {
+ appendText(text)
+ }
+ }
+
+ class NoFormatText(scope: TextParserScope, val text: String, insideTags: List>, insideDirectTags: List) : TextParserState(scope, insideTags, insideDirectTags) {
+ override fun processCharacter(char: Char): TextParserState {
+ val newText = text + char
+ return if (newText.endsWith("[/$NO_FORMAT_TAG]")) {
+ appendText(newText.removeSuffix("[/$NO_FORMAT_TAG]"))
+ PlainText(scope, "", insideTags, insideDirectTags)
+ } else if (newText.endsWith('\n')) {
+ appendText(newText.removeSuffix("\n"))
+ appendTextRaw("
")
+ NoFormatText(scope, "", insideTags, insideDirectTags)
+ } else
+ NoFormatText(scope, newText, insideTags, insideDirectTags)
+ }
+
+ override fun processEndOfText() {
+ appendText(text)
+ }
+ }
+
+ class OpenTag(scope: TextParserScope, val tag: String, insideTags: List>, insideDirectTags: List) : TextParserState(scope, insideTags, insideDirectTags) {
+ override fun processCharacter(char: Char): TextParserState {
+ return if (char == ']') {
+ if (tag.equals(NO_FORMAT_TAG, ignoreCase = true))
+ NoFormatText(scope, "", insideTags, insideDirectTags)
+ else if (scope.tags[tag] is TextParserTagType.Direct) {
+ (scope.tags[tag] as? TextParserTagType.Direct)?.begin(null, scope.ctx)?.let {
+ appendTextRaw(it)
+ }
+
+ PlainText(scope, "", insideTags, insideDirectTags + tag)
+ } else
+ PlainText(scope, "", insideTags + (tag to null), insideDirectTags)
+ } else if (char == '/' && tag == "")
+ CloseTag(scope, tag, insideTags, insideDirectTags)
+ else if (char == '=' && tag != "")
+ TagParam(scope, tag, "", insideTags, insideDirectTags)
+ else
+ OpenTag(scope, tag + char, insideTags, insideDirectTags)
+ }
+
+ override fun processEndOfText() {
+ appendText("[$tag")
+ }
+ }
+
+ class TagParam(scope: TextParserScope, val tag: String, val param: String, insideTags: List>, insideDirectTags: List) : TextParserState(scope, insideTags, insideDirectTags) {
+ override fun processCharacter(char: Char): TextParserState {
+ return if (char == ']') {
+ val tagType = scope.tags[tag]
+ if (tagType is TextParserTagType.Direct) {
+ appendTextRaw(tagType.begin(param, scope.ctx))
+
+ PlainText(scope, "", insideTags, insideDirectTags + tag)
+ } else
+ PlainText(scope, "", insideTags + (tag to param), insideDirectTags)
+ } else
+ TagParam(scope, tag, param + char, insideTags, insideDirectTags)
+ }
+
+ override fun processEndOfText() {
+ appendText("[$tag=$param")
+ }
+ }
+
+ class CloseTag(scope: TextParserScope, val tag: String, insideTags: List>, insideDirectTags: List) : TextParserState(scope, insideTags, insideDirectTags) {
+ override fun processCharacter(char: Char): TextParserState {
+ return if (char == ']') {
+ val tagType = scope.tags[tag]
+ if (tagType is TextParserTagType.Direct && insideDirectTags.last().equals(tag, ignoreCase = true)) {
+ appendTextRaw(tagType.end(scope.ctx))
+
+ PlainText(scope, "", insideTags, insideDirectTags.dropLast(1))
+ } else if (insideTags.isNotEmpty() && insideTags.last().first.equals(tag, ignoreCase = true)) {
+ PlainText(scope, "", insideTags.dropLast(1), insideDirectTags)
+ } else {
+ appendText("[/$tag]")
+ PlainText(scope, "", insideTags, insideDirectTags)
+ }
+ } else CloseTag(scope, tag + char, insideTags, insideDirectTags)
+ }
+
+ override fun processEndOfText() {
+ appendText("[/$tag")
+ }
+ }
+
+ companion object {
+ const val NO_FORMAT_TAG = "noformat"
+
+ fun censorText(uncensored: String) = uncensored
+ .replace("&", "&")
+ .replace("<", "<")
+ .replace(">", ">")
+ .replace("\"", """)
+
+ fun uncensorText(censored: String) = censored
+ .replace(""", "\"")
+ .replace("<", "<")
+ .replace(">", ">")
+ .replace("&", "&")
+
+ fun parseText(text: String, tags: TextParserTags, context: TContext): String {
+ val builder = StringBuilder()
+ try {
+ val fixedText = text.replace("\r\n", "\n").replace('\r', '\n')
+ fixedText.fold>(Initial(TextParserScope(builder, tags, context))) { state, char -> state.processCharacter(char) }.processEndOfText()
+ } catch (ex: Exception) {
+ return "$builder
INTERNAL ERROR
${ex.stackTraceToString()}"
+ }
+ return "$builder
"
+ }
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/parser_tags.kt b/src/main/kotlin/info/mechyrdia/lore/parser_tags.kt
new file mode 100644
index 0000000..63f173e
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/parser_tags.kt
@@ -0,0 +1,359 @@
+package info.mechyrdia.lore
+
+sealed class TextParserTagType {
+ data class Direct(val beginFunc: (String?, TContext) -> String, val endFunc: (TContext) -> String) : TextParserTagType() {
+ fun begin(param: String?, context: TContext) = beginFunc(param, context)
+ fun end(context: TContext) = endFunc(context)
+ }
+
+ data class Indirect(val processFunc: (String?, String, TContext) -> String) : TextParserTagType() {
+ fun process(param: String?, content: String, context: TContext) = processFunc(param, content, context)
+ }
+}
+
+@JvmInline
+value class TextParserTags private constructor(val tags: Map>) {
+ operator fun get(name: String) = tags[name.lowercase()]
+
+ companion object {
+ operator fun invoke(tags: Map>) = TextParserTags(tags.mapKeys { (name, _) -> name.lowercase() })
+ }
+}
+
+enum class TextParserFormattingTag(val type: TextParserTagType) {
+ // Basic formatting
+ B(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+ I(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+ U(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+ S(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+ SUP(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+ SUB(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+ COLOR(
+ TextParserTagType.Direct(
+ { tagParam, _ ->
+ val color = tagParam?.toIntOrNull(16)?.toString(16)?.padStart(6, '0')
+ val style = color?.let { " style=\"color: #$it\"" } ?: ""
+ ""
+ },
+ { "" },
+ )
+ ),
+ IPA(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+ CODE(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+ H1(
+ TextParserTagType.Indirect { _, content, _ ->
+ val anchor = TextParserToCBuilderTag.headerContentToAnchor(content)
+ "$content
"
+ }
+ ),
+ H2(
+ TextParserTagType.Indirect { _, content, _ ->
+ val anchor = TextParserToCBuilderTag.headerContentToAnchor(content)
+ "$content
${TextParserToCBuilderTag.RETURN_TO_TOP}"
+ }
+ ),
+ H3(
+ TextParserTagType.Indirect { _, content, _ ->
+ val anchor = TextParserToCBuilderTag.headerContentToAnchor(content)
+ "$content
${TextParserToCBuilderTag.RETURN_TO_TOP}"
+ }
+ ),
+ H4(
+ TextParserTagType.Indirect { _, content, _ ->
+ val anchor = TextParserToCBuilderTag.headerContentToAnchor(content)
+ "$content
${TextParserToCBuilderTag.RETURN_TO_TOP}"
+ }
+ ),
+ H5(
+ TextParserTagType.Indirect { _, content, _ ->
+ val anchor = TextParserToCBuilderTag.headerContentToAnchor(content)
+ "$content
${TextParserToCBuilderTag.RETURN_TO_TOP}"
+ }
+ ),
+ H6(
+ TextParserTagType.Indirect { _, content, _ ->
+ val anchor = TextParserToCBuilderTag.headerContentToAnchor(content)
+ "$content
${TextParserToCBuilderTag.RETURN_TO_TOP}"
+ }
+ ),
+ ALIGN(
+ TextParserTagType.Direct(
+ { tagParam, _ ->
+ val alignments = setOf("left", "center", "right", "justify")
+ val alignment = tagParam?.takeIf { it in alignments }
+ val styleAttr = alignment?.let { " style=\"text-align: $it\"" } ?: ""
+ ""
+ },
+ { "
" },
+ )
+ ),
+ ASIDE(
+ TextParserTagType.Direct(
+ { tagParam, _ ->
+ val floats = setOf("left", "right")
+ val float = tagParam?.takeIf { it in floats } ?: "right"
+ ""
+ },
+ { "
" },
+ )
+ ),
+
+ // Resource showing
+ IMAGE(
+ TextParserTagType.Indirect { tagParam, content, _ ->
+ val imageUrl = sanitizeLink(content)
+
+ val (width, height) = getSizeParam(tagParam)
+ val sizeAttrs = getImageSizeAttributes(width, height)
+
+ "
"
+ }
+ ),
+ MODEL(
+ TextParserTagType.Indirect { tagParam, content, _ ->
+ val modelUrl = sanitizeLink(content)
+
+ val (width, height) = getSizeParam(tagParam)
+ val sizeAttrs = getImageSizeAttributes(width, height)
+
+ ""
+ }
+ ),
+
+ // Lists
+ UL(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ )
+ ),
+ OL(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "
" },
+ )
+ ),
+ LI(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "" },
+ )
+ ),
+
+ // Tables
+ TABLE(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ )
+ ),
+ TR(
+ TextParserTagType.Direct(
+ { _, _ -> "" },
+ { "
" },
+ )
+ ),
+ TD(
+ TextParserTagType.Direct(
+ { tagParam, _ ->
+
+ val (width, height) = getSizeParam(tagParam)
+ val sizeAttrs = getTableSizeAttributes(width, height)
+
+ ""
+
+ },
+ { " | " },
+ )
+ ),
+ TH(
+ TextParserTagType.Direct(
+ { tagParam, _ ->
+
+ val (width, height) = getSizeParam(tagParam)
+ val sizeAttrs = getTableSizeAttributes(width, height)
+
+ ""
+
+ },
+ { " | " },
+ )
+ ),
+
+ // Hyperformatting
+ LINK(
+ TextParserTagType.Direct(
+ { tagParam, _ ->
+ val param = tagParam?.let { TextParserState.censorText(it) }
+ val url = param?.let { if (it.startsWith('/')) "/lore$it" else it }
+ val attr = url?.let { " href=\"$it\"" } ?: ""
+
+ ""
+ },
+ { "" },
+ )
+ ),
+ EXTLINK(
+ TextParserTagType.Direct(
+ { tagParam, _ ->
+ val url = tagParam?.let { TextParserState.censorText(it) }
+ val attr = url?.let { " href=\"$it\"" } ?: ""
+
+ ""
+ },
+ { "" },
+ )
+ ),
+ ANCHOR(
+ TextParserTagType.Indirect { _, content, _ ->
+ val anchor = sanitizeLink(content)
+ ""
+ }
+ ),
+
+ // Conlangs
+ LANG(
+ TextParserTagType.Indirect { tagParam, content, _ ->
+ if (tagParam?.equals("tylan", ignoreCase = true) == true) {
+ val uncensored = TextParserState.uncensorText(content)
+ val tylan = TylanAlphabet.tylanToFontAlphabet(uncensored)
+ val recensored = TextParserState.censorText(tylan)
+ "$recensored"
+ } else content
+ }
+ ),
+ ALPHABET(
+ TextParserTagType.Indirect { _, content, _ ->
+ if (content.equals("tylan", ignoreCase = true)) {
+ """
+ |
+ |
Latin Alphabet:
+ |
+ |
Tylan Alphabet:
+ |
+ |
+ """.trimMargin()
+ } else content
+ }
+ ),
+
+ // DANGER ZONE
+ RAWHTML(
+ TextParserTagType.Indirect { _, content, _ ->
+ TextParserState.uncensorText(content)
+ }
+ ),
+ ;
+
+ companion object {
+ val asTags: TextParserTags
+ get() = TextParserTags(values().associate { it.name to it.type })
+
+ fun sanitizeLink(html: String) = html.replace(Regex("[^#a-zA-Z0-9._\\-]"), "").replace("..", ".")
+
+ fun getSizeParam(tagParam: String?): Pair = tagParam?.let { resolution ->
+ val parts = resolution.split('x')
+ parts.getOrNull(0)?.toIntOrNull() to parts.getOrNull(1)?.toIntOrNull()
+ } ?: (null to null)
+
+ fun getTableSizeAttributes(width: Int?, height: Int?) = (width?.let { " colspan=\"$it\"" } ?: "") + (height?.let { " rowspan=\"$it\"" } ?: "")
+ fun getImageSizeAttributes(width: Int?, height: Int?) = " style=\"" + (width?.let { "width: ${it * 0.032}vmin;" } ?: "") + (height?.let { "height: ${it * 0.032}vmin;" } ?: "") + "\""
+ }
+}
+
+enum class TextParserToCBuilderTag(val type: TextParserTagType) {
+ H1(
+ TextParserTagType.Indirect { _, content, builder ->
+ builder.add(headerContentToLabel(content), headerContentToAnchor(content))
+ content
+ }
+ ),
+ H2(
+ TextParserTagType.Indirect { _, content, builder ->
+ val label = headerContentToLabel(content)
+ builder.add("- $label", headerContentToAnchor(content))
+ content
+ }
+ ),
+ H3(
+ TextParserTagType.Indirect { _, content, builder ->
+ val label = headerContentToLabel(content)
+ builder.add("-- $label", headerContentToAnchor(content))
+ content
+ }
+ ),
+ H4(
+ TextParserTagType.Indirect { _, content, builder ->
+ val label = headerContentToLabel(content)
+ builder.add("--- $label", headerContentToAnchor(content))
+ content
+ }
+ ),
+ H5(
+ TextParserTagType.Indirect { _, content, builder ->
+ val label = headerContentToLabel(content)
+ builder.add("---- $label", headerContentToAnchor(content))
+ content
+ }
+ ),
+ H6(
+ TextParserTagType.Indirect { _, content, builder ->
+ val label = headerContentToLabel(content)
+ builder.add("----- $label", headerContentToAnchor(content))
+ content
+ }
+ );
+
+ companion object {
+ val NON_ANCHOR_CHAR = Regex("[^a-zA-Z\\d\\-]")
+ val INSIDE_TAG_TEXT = Regex("\\[.*?]")
+
+ fun headerContentToLabel(content: String) = content.replace(INSIDE_TAG_TEXT, "")
+ fun headerContentToAnchor(content: String) = headerContentToLabel(content).replace(NON_ANCHOR_CHAR, "-")
+
+ val asTags: TextParserTags
+ get() = TextParserTags(values().associate { it.name to it.type })
+
+ val RETURN_TO_TOP = "Back to Top
"
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/parser_toc.kt b/src/main/kotlin/info/mechyrdia/lore/parser_toc.kt
new file mode 100644
index 0000000..9ce1d59
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/parser_toc.kt
@@ -0,0 +1,10 @@
+package info.mechyrdia.lore
+
+@JvmInline
+value class TableOfContentsBuilder private constructor(private val links: MutableList) {
+ constructor() : this(mutableListOf())
+
+ fun add(text: String, toAnchor: String) = links.plusAssign(NavLink("#$toAnchor", text, aClasses = "left"))
+
+ fun toNavBar(): List = links.toList()
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/tylan_language.kt b/src/main/kotlin/info/mechyrdia/lore/tylan_language.kt
new file mode 100644
index 0000000..10c6fe7
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/tylan_language.kt
@@ -0,0 +1,62 @@
+package info.mechyrdia.lore
+
+object TylanAlphabet {
+ private val allowedTranslitCharacters = setOf(
+ ' ', '\r', '\n', '\t',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'x', 'y',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+',
+ '[', '{', '}', ']', '\\', '|', '/', '<',
+ '.', ',', ':', ';', '\'', '"', '?', '>',
+ )
+
+ private val replacements = listOf(
+ Regex("x") to "M",
+ Regex("y") to "N",
+ Regex("[qw-z]") to "",
+
+ Regex("ch") to "C",
+ Regex("dh") to "D",
+ Regex("sh") to "S",
+ Regex("th") to "T",
+ Regex("ff") to "F",
+ Regex("fv") to "V",
+ Regex("hj") to "J",
+ Regex("lh") to "L",
+ Regex("ll") to "L",
+ Regex("hl") to "L",
+ Regex("rh") to "R",
+ Regex("rr") to "R",
+ Regex("hr") to "R",
+ Regex("d'h") to "dh",
+ Regex("l'h") to "lh",
+ Regex("l'J") to "lJ",
+ Regex("r'h") to "rh",
+ Regex("r'J") to "rJ",
+ Regex("s'h") to "sh",
+ Regex("t'h") to "th",
+ Regex("h'l") to "hl",
+ Regex("h'r") to "hr",
+ Regex("c(?!h)") to "",
+
+ Regex("ae") to "W",
+ Regex("au") to "X",
+ Regex("ea") to "Y",
+ Regex("ei") to "Z",
+ Regex("eo") to "w",
+ Regex("eu") to "x",
+ Regex("oa") to "y",
+ Regex("ou") to "z",
+ Regex("oe") to "O",
+ Regex("ui") to "U",
+
+ Regex("i([aeiouOUw-zW-Z])") to "ij$1",
+ Regex("^([aeiouOUw-zW-Z])") to "'$1",
+ Regex("([^'CDFJLR-TVbdf-hj-npr-tv])([aeiouOUw-zW-Z])") to "$1'$2",
+ Regex("([aeiouOUw-zW-Z])([aeiouOUw-zW-Z])") to "$1'$2",
+ )
+
+ fun tylanToFontAlphabet(tylan: String) = replacements.fold(tylan.lowercase().filter { it in allowedTranslitCharacters }) { partial, (regex, replacement) ->
+ partial.replace(regex, replacement)
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/view_bar.kt b/src/main/kotlin/info/mechyrdia/lore/view_bar.kt
new file mode 100644
index 0000000..cb05709
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/view_bar.kt
@@ -0,0 +1,20 @@
+package info.mechyrdia.lore
+
+import kotlinx.html.*
+
+abstract class Sidebar {
+ protected abstract fun TagConsumer<*>.display()
+ fun displayIn(aside: ASIDE) = aside.consumer.display()
+}
+
+data class PageNavSidebar(val contents: List) : Sidebar() {
+ override fun TagConsumer<*>.display() {
+ div(classes = "list") {
+ for (it in contents) {
+ div(classes = "item") {
+ it.displayIn(this)
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/view_nav.kt b/src/main/kotlin/info/mechyrdia/lore/view_nav.kt
new file mode 100644
index 0000000..7eb6846
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/view_nav.kt
@@ -0,0 +1,42 @@
+package info.mechyrdia.lore
+
+import kotlinx.html.DIV
+import kotlinx.html.a
+import kotlinx.html.span
+import kotlinx.html.style
+
+fun standardNavBar(path: List? = null) = listOf(
+ NavLink("/lore", "Lore Index")
+) + path?.let { pathParts ->
+ pathParts.dropLast(1).mapIndexed { i, part ->
+ val subPath = pathParts.take(i + 1).joinToString("/")
+ NavLink("/lore/$subPath", part)
+ }
+}.orEmpty() + listOf(
+ NavHead("Preferences"),
+ NavLink("/change-theme", "Light/Dark Mode"),
+ NavHead("External Links"),
+ NavLink("https://nationstates.net/mechyrdia", "On NationStates"),
+)
+
+sealed class NavItem {
+ protected abstract fun DIV.display()
+ fun displayIn(div: DIV) = div.display()
+}
+
+data class NavHead(val label: String) : NavItem() {
+ override fun DIV.display() {
+ span {
+ style = "font-variant:small-caps;text-decoration:underline"
+ +label
+ }
+ }
+}
+
+data class NavLink(val to: String, val text: String, val aClasses: String? = null) : NavItem() {
+ override fun DIV.display() {
+ a(href = to, classes = aClasses) {
+ +text
+ }
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/view_tpl.kt b/src/main/kotlin/info/mechyrdia/lore/view_tpl.kt
new file mode 100644
index 0000000..1572b8b
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/view_tpl.kt
@@ -0,0 +1,83 @@
+package info.mechyrdia.lore
+
+import io.ktor.application.*
+import kotlinx.html.*
+
+fun ApplicationCall.page(pageTitle: String? = null, navBar: List? = null, sidebar: Sidebar? = null, content: SECTIONS.() -> Unit): HTML.() -> Unit {
+ val theme = request.cookies["factbook-theme"]
+
+ return {
+ when (theme) {
+ "light" -> "light"
+ "dark" -> "dark"
+ else -> null
+ }?.let { attributes["data-theme"] = it }
+
+ head {
+ meta(charset = "utf-8")
+ meta(name = "viewport", content = "width=device-width, initial-scale=1.0")
+
+ script(src = "/static/gltf-viewer/bower_components/webcomponentsjs/webcomponents-lite.js") {}
+
+ link(rel = "icon", type = "image/svg+xml", href = "/static/images/icon.svg")
+ link(rel = "import", href = "/static/gltf-viewer/gltf-viewer.html")
+
+ link(rel = "preconnect", href = "https://fonts.googleapis.com")
+ link(rel = "preconnect", href = "https://fonts.gstatic.com") { attributes["crossorigin"] = "anonymous" }
+ link(rel = "stylesheet", href = "https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,400;0,700;1,400;1,700&family=Jetbrains+Mono:wght@400;600;800&display=swap")
+
+ link(rel = "stylesheet", href = "/static/style.css")
+
+ title {
+ +(pageTitle ?: "Mechyrdiaverse Lorebase")
+ }
+ }
+ body {
+ div { id = "bg" }
+
+ navBar?.let { nb ->
+ nav(classes = "desktop") {
+ div(classes = "list") {
+ for (ni in nb) {
+ div(classes = "item") {
+ ni.displayIn(this)
+ }
+ }
+ }
+ }
+ }
+
+ sidebar?.let {
+ aside(classes = "desktop") {
+ it.displayIn(this)
+ }
+ }
+
+ main {
+ sidebar?.let {
+ aside(classes = "mobile") {
+ it.displayIn(this)
+ }
+ }
+
+ with(sectioned()) {
+ content()
+ }
+
+ navBar?.let { nb ->
+ nav(classes = "mobile") {
+ div(classes = "list") {
+ for (ni in nb) {
+ div(classes = "item") {
+ ni.displayIn(this)
+ }
+ }
+ }
+ }
+ }
+ }
+
+ script(src = "/static/init.js") {}
+ }
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/views_error.kt b/src/main/kotlin/info/mechyrdia/lore/views_error.kt
new file mode 100644
index 0000000..9d295a6
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/views_error.kt
@@ -0,0 +1,27 @@
+package info.mechyrdia.lore
+
+import io.ktor.application.*
+import kotlinx.html.HTML
+import kotlinx.html.h1
+import kotlinx.html.p
+
+fun ApplicationCall.error400(): HTML.() -> Unit = page("Bad Request", standardNavBar()) {
+ section {
+ h1 { +"Bad Request" }
+ p { +"The request your browser sent was improperly formatted." }
+ }
+}
+
+fun ApplicationCall.error404(): HTML.() -> Unit = page("Not Found", standardNavBar()) {
+ section {
+ h1 { +"Not Found" }
+ p { +"Unfortunately, we could not find what you were looking for." }
+ }
+}
+
+fun ApplicationCall.error503(): HTML.() -> Unit = page("Internal Error", standardNavBar()) {
+ section {
+ h1 { +"Internal Error" }
+ p { +"The servers made a bit of a mistake. Please be patient while we clean up our mess." }
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/views_lore.kt b/src/main/kotlin/info/mechyrdia/lore/views_lore.kt
new file mode 100644
index 0000000..e0ad344
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/views_lore.kt
@@ -0,0 +1,43 @@
+package info.mechyrdia.lore
+
+import info.mechyrdia.Configuration
+import io.ktor.application.*
+import io.ktor.util.*
+import kotlinx.html.*
+import java.io.File
+
+fun ApplicationCall.loreArticlePage(): HTML.() -> Unit {
+ val pagePathParts = parameters.getAll("path")!!
+ val pagePath = pagePathParts.joinToString("/")
+ val pageFile = File(Configuration.CurrentConfiguration.articleDir).combineSafe(pagePath)
+ val pageNode = pageFile.toArticleNode()
+
+ if (pageFile.isDirectory) {
+ val navbar = standardNavBar(pagePathParts.takeIf { it.isNotEmpty() })
+
+ return page("~/${pagePath}", navbar, null) {
+ section {
+ h1 { +"~/${pagePath}" }
+ ul {
+ pageNode.subNodes.renderInto(this, pagePath.takeIf { it.isNotEmpty() })
+ }
+ }
+ }
+ } else {
+ val pageMarkup = pageFile.readText()
+ val pageHtml = TextParserState.parseText(pageMarkup, TextParserFormattingTag.asTags, Unit)
+
+ val pageToC = TableOfContentsBuilder()
+ TextParserState.parseText(pageMarkup, TextParserToCBuilderTag.asTags, pageToC)
+
+ val navbar = standardNavBar(pagePathParts)
+ val sidebar = PageNavSidebar(pageToC.toNavBar())
+
+ return page("~/${pagePath}", navbar, sidebar) {
+ section {
+ a { id = "page-top" }
+ unsafe { raw(pageHtml) }
+ }
+ }
+ }
+}
diff --git a/src/main/kotlin/info/mechyrdia/lore/views_prefs.kt b/src/main/kotlin/info/mechyrdia/lore/views_prefs.kt
new file mode 100644
index 0000000..26f1a42
--- /dev/null
+++ b/src/main/kotlin/info/mechyrdia/lore/views_prefs.kt
@@ -0,0 +1,56 @@
+package info.mechyrdia.lore
+
+import io.ktor.application.*
+import kotlinx.html.*
+
+fun ApplicationCall.changeThemePage(): HTML.() -> Unit {
+ val theme = when (request.cookies["factbook-theme"]) {
+ "light" -> "light"
+ "dark" -> "dark"
+ else -> null
+ }
+
+ return page("/etc/prefs", standardNavBar(), null) {
+ section {
+ h1 { +"Client Preferences" }
+ form(action = "/change-theme", method = FormMethod.post) {
+ label {
+ radioInput(name = "theme") {
+ id = "system-theme"
+ value = "system"
+ required = true
+ checked = theme == null
+ }
+ +Entities.nbsp
+ +"System Choice"
+ }
+ br
+ label {
+ radioInput(name = "theme") {
+ id = "light-theme"
+ value = "light"
+ required = true
+ checked = theme == "light"
+ }
+ +Entities.nbsp
+ +"Light Theme"
+ }
+ br
+ label {
+ radioInput(name = "theme") {
+ id = "dark-theme"
+ value = "dark"
+ required = true
+ checked = theme == "dark"
+ }
+ +Entities.nbsp
+ +"Dark Theme"
+ }
+ br
+ submitInput {
+ value = "Accept Changes"
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..64e2290
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,25 @@
+
+
+
+ logs/server.log
+
+ logs/server.%d{yyyy-MM-dd}.log
+
+
+
+ UTF-8
+ %d{yyyy-MM-dd/HH:mm:ss.SSS} [%thread] %.-1level \(%logger\) - %msg%n
+
+
+
+
+
+ %d{yyyy-MM-dd/HH:mm:ss.SSS} [%thread] %.-1level \(%logger\) - %msg%n
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/font/tylan-language-alphabet-3.woff b/src/main/resources/static/font/tylan-language-alphabet-3.woff
new file mode 100644
index 0000000..9bf8657
Binary files /dev/null and b/src/main/resources/static/font/tylan-language-alphabet-3.woff differ
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/array-selector.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/array-selector.html
new file mode 100644
index 0000000..85603aa
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/array-selector.html
@@ -0,0 +1,410 @@
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/custom-style.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/custom-style.html
new file mode 100644
index 0000000..8aae908
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/custom-style.html
@@ -0,0 +1,73 @@
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-bind.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-bind.html
new file mode 100644
index 0000000..436791d
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-bind.html
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-if.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-if.html
new file mode 100644
index 0000000..842e5a6
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-if.html
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html
new file mode 100644
index 0000000..99edb7f
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-module.html
@@ -0,0 +1,134 @@
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-repeat.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-repeat.html
new file mode 100644
index 0000000..6969014
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/elements/dom-repeat.html
@@ -0,0 +1,687 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/class.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/class.html
new file mode 100644
index 0000000..a63c6a1
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/class.html
@@ -0,0 +1,334 @@
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/legacy-element-mixin.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/legacy-element-mixin.html
new file mode 100644
index 0000000..e831d6c
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/legacy-element-mixin.html
@@ -0,0 +1,917 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/mutable-data-behavior.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/mutable-data-behavior.html
new file mode 100644
index 0000000..7a1d529
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/mutable-data-behavior.html
@@ -0,0 +1,150 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/polymer-fn.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/polymer-fn.html
new file mode 100644
index 0000000..1a145c9
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/polymer-fn.html
@@ -0,0 +1,48 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/polymer.dom.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/polymer.dom.html
new file mode 100644
index 0000000..ae9ba4b
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/polymer.dom.html
@@ -0,0 +1,336 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/templatizer-behavior.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/templatizer-behavior.html
new file mode 100644
index 0000000..4f3a14a
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/legacy/templatizer-behavior.html
@@ -0,0 +1,136 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html
new file mode 100644
index 0000000..92b728d
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/element-mixin.html
@@ -0,0 +1,929 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/gesture-event-listeners.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/gesture-event-listeners.html
new file mode 100644
index 0000000..dcf163d
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/gesture-event-listeners.html
@@ -0,0 +1,61 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/mutable-data.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/mutable-data.html
new file mode 100644
index 0000000..9cb6493
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/mutable-data.html
@@ -0,0 +1,194 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html
new file mode 100644
index 0000000..a586f31
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/property-accessors.html
@@ -0,0 +1,576 @@
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html
new file mode 100644
index 0000000..5be94f0
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/property-effects.html
@@ -0,0 +1,2384 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html
new file mode 100644
index 0000000..af17ee3
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/mixins/template-stamp.html
@@ -0,0 +1,477 @@
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/array-splice.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/array-splice.html
new file mode 100644
index 0000000..9008ebf
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/array-splice.html
@@ -0,0 +1,321 @@
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/async.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/async.html
new file mode 100644
index 0000000..19293dd
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/async.html
@@ -0,0 +1,203 @@
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/boot.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/boot.html
new file mode 100644
index 0000000..aefae13
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/boot.html
@@ -0,0 +1,60 @@
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html
new file mode 100644
index 0000000..b1b44cd
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/case-map.html
@@ -0,0 +1,64 @@
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/debounce.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/debounce.html
new file mode 100644
index 0000000..dc8f66a
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/debounce.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/flattened-nodes-observer.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/flattened-nodes-observer.html
new file mode 100644
index 0000000..c1f75d0
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/flattened-nodes-observer.html
@@ -0,0 +1,242 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/flush.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/flush.html
new file mode 100644
index 0000000..0e3384b
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/flush.html
@@ -0,0 +1,60 @@
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/gestures.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/gestures.html
new file mode 100644
index 0000000..4ee65c3
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/gestures.html
@@ -0,0 +1,853 @@
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/import-href.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/import-href.html
new file mode 100644
index 0000000..77933a4
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/import-href.html
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html
new file mode 100644
index 0000000..12a4ebb
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/mixin.html
@@ -0,0 +1,76 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/path.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/path.html
new file mode 100644
index 0000000..2dfe894
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/path.html
@@ -0,0 +1,274 @@
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/render-status.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/render-status.html
new file mode 100644
index 0000000..ca7175a
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/render-status.html
@@ -0,0 +1,130 @@
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html
new file mode 100644
index 0000000..7bffd13
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/resolve-url.html
@@ -0,0 +1,108 @@
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html
new file mode 100644
index 0000000..e18a347
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/style-gather.html
@@ -0,0 +1,146 @@
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/templatize.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/templatize.html
new file mode 100644
index 0000000..456c015
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/templatize.html
@@ -0,0 +1,473 @@
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/unresolved.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/unresolved.html
new file mode 100644
index 0000000..6c8752a
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/lib/utils/unresolved.html
@@ -0,0 +1,31 @@
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/polymer-element.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/polymer-element.html
new file mode 100644
index 0000000..1dac595
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/polymer-element.html
@@ -0,0 +1,33 @@
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/static/gltf-viewer/bower_components/polymer/polymer.html b/src/main/resources/static/gltf-viewer/bower_components/polymer/polymer.html
new file mode 100644
index 0000000..0331373
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/polymer/polymer.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/shadycss/apply-shim.html b/src/main/resources/static/gltf-viewer/bower_components/shadycss/apply-shim.html
new file mode 100644
index 0000000..d344ec3
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/shadycss/apply-shim.html
@@ -0,0 +1,10 @@
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/shadycss/apply-shim.min.js b/src/main/resources/static/gltf-viewer/bower_components/shadycss/apply-shim.min.js
new file mode 100644
index 0000000..7fec2ff
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/shadycss/apply-shim.min.js
@@ -0,0 +1,29 @@
+(function(){
+/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var l={};function m(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
+function p(a){a=a.replace(aa,"").replace(ba,"");var b=q,c=a,d=new m;d.start=0;d.end=c.length;for(var e=d,f=0,h=c.length;f *")};
+function pa(a,b){b=b.replace(B,function(b,d,e,f){return qa(a,b,d,e,f)});return O(a,b)}function O(a,b){for(var c;c=C.exec(b);){var d=c[0],e=c[1];c=c.index;var f=b.slice(0,c+d.indexOf("@apply"));b=b.slice(c+d.length);var h=P(a,f),g,k,d=void 0;g=a;var e=e.replace(na,""),n=[];k=g.a.get(e);k||(g.a.set(e,{}),k=g.a.get(e));if(k)for(d in g.c&&(k.i[g.c]=!0),k.h)g=h&&h[d],k=[d,": var(",e,"_-_",d],g&&k.push(",",g),k.push(")"),n.push(k.join(""));d=n.join("; ");b=""+f+d+b;C.lastIndex=c+d.length}return b}
+function P(a,b){b=b.split(";");for(var c,d,e={},f=0,h;f}\n */\nconst templateMap = {};\nexport default templateMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/*\nExtremely simple css parser. Intended to be not more than what we need\nand definitely not necessarily correct =).\n*/\n\n'use strict';\n\n/** @unrestricted */\nclass StyleNode {\n constructor() {\n /** @type {number} */\n this['start'] = 0;\n /** @type {number} */\n this['end'] = 0;\n /** @type {StyleNode} */\n this['previous'] = null;\n /** @type {StyleNode} */\n this['parent'] = null;\n /** @type {Array} */\n this['rules'] = null;\n /** @type {string} */\n this['parsedCssText'] = '';\n /** @type {string} */\n this['cssText'] = '';\n /** @type {boolean} */\n this['atRule'] = false;\n /** @type {number} */\n this['type'] = 0;\n /** @type {string} */\n this['keyframesName'] = '';\n /** @type {string} */\n this['selector'] = '';\n /** @type {string} */\n this['parsedSelector'] = '';\n }\n}\n\nexport {StyleNode}\n\n// given a string of css, return a simple rule tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nexport function parse(text) {\n text = clean(text);\n return parseCss(lex(text), text);\n}\n\n// remove stuff we don't care about that may hinder parsing\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction clean(cssText) {\n return cssText.replace(RX.comments, '').replace(RX.port, '');\n}\n\n// super simple {...} lexer that returns a node tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nfunction lex(text) {\n let root = new StyleNode();\n root['start'] = 0;\n root['end'] = text.length\n let n = root;\n for (let i = 0, l = text.length; i < l; i++) {\n if (text[i] === OPEN_BRACE) {\n if (!n['rules']) {\n n['rules'] = [];\n }\n let p = n;\n let previous = p['rules'][p['rules'].length - 1] || null;\n n = new StyleNode();\n n['start'] = i + 1;\n n['parent'] = p;\n n['previous'] = previous;\n p['rules'].push(n);\n } else if (text[i] === CLOSE_BRACE) {\n n['end'] = i + 1;\n n = n['parent'] || root;\n }\n }\n return root;\n}\n\n// add selectors/cssText to node tree\n/**\n * @param {StyleNode} node\n * @param {string} text\n * @return {StyleNode}\n */\nfunction parseCss(node, text) {\n let t = text.substring(node['start'], node['end'] - 1);\n node['parsedCssText'] = node['cssText'] = t.trim();\n if (node['parent']) {\n let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];\n t = text.substring(ss, node['start'] - 1);\n t = _expandUnicodeEscapes(t);\n t = t.replace(RX.multipleSpaces, ' ');\n // TODO(sorvell): ad hoc; make selector include only after last ;\n // helps with mixin syntax\n t = t.substring(t.lastIndexOf(';') + 1);\n let s = node['parsedSelector'] = node['selector'] = t.trim();\n node['atRule'] = (s.indexOf(AT_START) === 0);\n // note, support a subset of rule types...\n if (node['atRule']) {\n if (s.indexOf(MEDIA_START) === 0) {\n node['type'] = types.MEDIA_RULE;\n } else if (s.match(RX.keyframesRule)) {\n node['type'] = types.KEYFRAMES_RULE;\n node['keyframesName'] =\n node['selector'].split(RX.multipleSpaces).pop();\n }\n } else {\n if (s.indexOf(VAR_START) === 0) {\n node['type'] = types.MIXIN_RULE;\n } else {\n node['type'] = types.STYLE_RULE;\n }\n }\n }\n let r$ = node['rules'];\n if (r$) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n parseCss(r, text);\n }\n }\n return node;\n}\n\n/**\n * conversion of sort unicode escapes with spaces like `\\33 ` (and longer) into\n * expanded form that doesn't require trailing space `\\000033`\n * @param {string} s\n * @return {string}\n */\nfunction _expandUnicodeEscapes(s) {\n return s.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function() {\n let code = arguments[1],\n repeat = 6 - code.length;\n while (repeat--) {\n code = '0' + code;\n }\n return '\\\\' + code;\n });\n}\n\n/**\n * stringify parsed css.\n * @param {StyleNode} node\n * @param {boolean=} preserveProperties\n * @param {string=} text\n * @return {string}\n */\nexport function stringify(node, preserveProperties, text = '') {\n // calc rule cssText\n let cssText = '';\n if (node['cssText'] || node['rules']) {\n let r$ = node['rules'];\n if (r$ && !_hasMixinRules(r$)) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n cssText = stringify(r, preserveProperties, cssText);\n }\n } else {\n cssText = preserveProperties ? node['cssText'] :\n removeCustomProps(node['cssText']);\n cssText = cssText.trim();\n if (cssText) {\n cssText = ' ' + cssText + '\\n';\n }\n }\n }\n // emit rule if there is cssText\n if (cssText) {\n if (node['selector']) {\n text += node['selector'] + ' ' + OPEN_BRACE + '\\n';\n }\n text += cssText;\n if (node['selector']) {\n text += CLOSE_BRACE + '\\n\\n';\n }\n }\n return text;\n}\n\n/**\n * @param {Array} rules\n * @return {boolean}\n */\nfunction _hasMixinRules(rules) {\n let r = rules[0];\n return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomProps(cssText) {\n cssText = removeCustomPropAssignment(cssText);\n return removeCustomPropApply(cssText);\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nexport function removeCustomPropAssignment(cssText) {\n return cssText\n .replace(RX.customProp, '')\n .replace(RX.mixinProp, '');\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomPropApply(cssText) {\n return cssText\n .replace(RX.mixinApply, '')\n .replace(RX.varApply, '');\n}\n\n/** @enum {number} */\nexport const types = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7,\n MEDIA_RULE: 4,\n MIXIN_RULE: 1000\n}\n\nconst OPEN_BRACE = '{';\nconst CLOSE_BRACE = '}';\n\n// helper regexp's\nconst RX = {\n comments: /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n port: /@import[^;]*;/gim,\n customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,\n mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,\n mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,\n varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,\n keyframesRule: /^@[^\\s]*keyframes/,\n multipleSpaces: /\\s+/g\n}\n\nconst VAR_START = '--';\nconst MEDIA_START = '@media';\nconst AT_START = '@';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\nimport templateMap from './template-map'\nimport {StyleNode} from './css-parse' // eslint-disable-line no-unused-vars\n\n/*\n * Utilities for handling invalidating apply-shim mixins for a given template.\n *\n * The invalidation strategy involves keeping track of the \"current\" version of a template's mixins, and updating that count when a mixin is invalidated.\n * The template\n */\n\n/** @const {string} */\nconst CURRENT_VERSION = '_applyShimCurrentVersion';\n\n/** @const {string} */\nconst NEXT_VERSION = '_applyShimNextVersion';\n\n/** @const {string} */\nconst VALIDATING_VERSION = '_applyShimValidatingVersion';\n\n/**\n * @const {Promise}\n */\nconst promise = Promise.resolve();\n\n/**\n * @param {string} elementName\n */\nexport function invalidate(elementName){\n let template = templateMap[elementName];\n if (template) {\n invalidateTemplate(template);\n }\n}\n\n/**\n * This function can be called multiple times to mark a template invalid\n * and signal that the style inside must be regenerated.\n *\n * Use `startValidatingTemplate` to begin an asynchronous validation cycle.\n * During that cycle, call `templateIsValidating` to see if the template must\n * be revalidated\n * @param {HTMLTemplateElement} template\n */\nexport function invalidateTemplate(template) {\n // default the current version to 0\n template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;\n // ensure the \"validating for\" flag exists\n template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;\n // increment the next version\n template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValid(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValid(template);\n }\n return true;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValid(template) {\n return template[CURRENT_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValidating(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValidating(template);\n }\n return false;\n}\n\n/**\n * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.\n * If false, the template must be validated.\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValidating(template) {\n return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * the template is marked as `validating` for one microtask so that all instances\n * found in the tree crawl of `applyStyle` will update themselves,\n * but the template will only be updated once.\n * @param {string} elementName\n*/\nexport function startValidating(elementName) {\n let template = templateMap[elementName];\n startValidatingTemplate(template);\n}\n\n/**\n * Begin an asynchronous invalidation cycle.\n * This should be called after every validation of a template\n *\n * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`\n * @param {HTMLTemplateElement} template\n */\nexport function startValidatingTemplate(template) {\n // remember that the current \"next version\" is the reason for this validation cycle\n template[VALIDATING_VERSION] = template[NEXT_VERSION];\n // however, there only needs to be one async task to clear the counters\n if (!template._validating) {\n template._validating = true;\n promise.then(function() {\n // sync the current version to let future invalidations cause a refresh cycle\n template[CURRENT_VERSION] = template[NEXT_VERSION];\n template._validating = false;\n });\n }\n}\n\n/**\n * @return {boolean}\n */\nexport function elementsAreInvalid() {\n for (let elementName in templateMap) {\n let template = templateMap[elementName];\n if (!templateIsValid(template)) {\n return true;\n }\n }\n return false;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport const VAR_ASSIGN = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:([^;{]*)|{([^}]*)})(?:(?=[;\\s}])|$)/gi;\nexport const MIXIN_MATCH = /(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi;\nexport const VAR_CONSUMED = /(--[\\w-]+)\\s*([:,;)]|$)/gi;\nexport const ANIMATION_MATCH = /(animation\\s*:)|(animation-name\\s*:)/;\nexport const MEDIA_MATCH = /@media[^(]*(\\([^)]*\\))/;\nexport const IS_VAR = /^--/;\nexport const BRACKETED = /\\{[^}]*\\}/g;\nexport const HOST_PREFIX = '(?:^|[^.#[:])';\nexport const HOST_SUFFIX = '($|[.:[\\\\s>+~])';","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport let nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\n// chrome 49 has semi-working css vars, check if box-shadow works\n// safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\nexport let nativeCssVariables = (!navigator.userAgent.match('AppleWebKit/601') &&\nwindow.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n\n/**\n * @param {ShadyCSSOptions | ShadyCSSInterface | undefined} settings\n */\nfunction parseSettings(settings) {\n if (settings) {\n nativeCssVariables = nativeCssVariables && !settings['nativeCss'] && !settings['shimcssproperties'];\n nativeShadow = nativeShadow && !settings['nativeShadow'] && !settings['shimshadow'];\n }\n}\n\nif (window.ShadyCSS) {\n parseSettings(window.ShadyCSS);\n} else if (window['WebComponents']) {\n parseSettings(window['WebComponents']['flags']);\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow, nativeCssVariables} from './style-settings'\nimport {parse, stringify, types, StyleNode} from './css-parse' // eslint-disable-line no-unused-vars\nimport {MEDIA_MATCH} from './common-regex';\n\n/**\n * @param {string|StyleNode} rules\n * @param {function(StyleNode)=} callback\n * @return {string}\n */\nexport function toCssText (rules, callback) {\n if (!rules) {\n return '';\n }\n if (typeof rules === 'string') {\n rules = parse(rules);\n }\n if (callback) {\n forEachRule(rules, callback);\n }\n return stringify(rules, nativeCssVariables);\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @return {StyleNode}\n */\nexport function rulesForStyle(style) {\n if (!style['__cssRules'] && style.textContent) {\n style['__cssRules'] = parse(style.textContent);\n }\n return style['__cssRules'] || null;\n}\n\n// Tests if a rule is a keyframes selector, which looks almost exactly\n// like a normal selector but is not (it has nothing to do with scoping\n// for example).\n/**\n * @param {StyleNode} rule\n * @return {boolean}\n */\nexport function isKeyframesSelector(rule) {\n return Boolean(rule['parent']) &&\n rule['parent']['type'] === types.KEYFRAMES_RULE;\n}\n\n/**\n * @param {StyleNode} node\n * @param {Function=} styleRuleCallback\n * @param {Function=} keyframesRuleCallback\n * @param {boolean=} onlyActiveRules\n */\nexport function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {\n if (!node) {\n return;\n }\n let skipRules = false;\n let type = node['type'];\n if (onlyActiveRules) {\n if (type === types.MEDIA_RULE) {\n let matchMedia = node['selector'].match(MEDIA_MATCH);\n if (matchMedia) {\n // if rule is a non matching @media rule, skip subrules\n if (!window.matchMedia(matchMedia[1]).matches) {\n skipRules = true;\n }\n }\n }\n }\n if (type === types.STYLE_RULE) {\n styleRuleCallback(node);\n } else if (keyframesRuleCallback &&\n type === types.KEYFRAMES_RULE) {\n keyframesRuleCallback(node);\n } else if (type === types.MIXIN_RULE) {\n skipRules = true;\n }\n let r$ = node['rules'];\n if (r$ && !skipRules) {\n for (let i=0, l=r$.length, r; (i`\n */\n if (localName) {\n if (localName.indexOf('-') > -1) {\n is = localName;\n } else {\n typeExtension = localName;\n is = (element.getAttribute && element.getAttribute('is')) || '';\n }\n } else {\n is = /** @type {?} */(element).is;\n typeExtension = /** @type {?} */(element).extends;\n }\n return {is, typeExtension};\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n/*\n * The apply shim simulates the behavior of `@apply` proposed at\n * https://tabatkins.github.io/specs/css-apply-rule/.\n * The approach is to convert a property like this:\n *\n * --foo: {color: red; background: blue;}\n *\n * to this:\n *\n * --foo_-_color: red;\n * --foo_-_background: blue;\n *\n * Then where `@apply --foo` is used, that is converted to:\n *\n * color: var(--foo_-_color);\n * background: var(--foo_-_background);\n *\n * This approach generally works but there are some issues and limitations.\n * Consider, for example, that somewhere *between* where `--foo` is set and used,\n * another element sets it to:\n *\n * --foo: { border: 2px solid red; }\n *\n * We must now ensure that the color and background from the previous setting\n * do not apply. This is accomplished by changing the property set to this:\n *\n * --foo_-_border: 2px solid red;\n * --foo_-_color: initial;\n * --foo_-_background: initial;\n *\n * This works but introduces one new issue.\n * Consider this setup at the point where the `@apply` is used:\n *\n * background: orange;\n * `@apply` --foo;\n *\n * In this case the background will be unset (initial) rather than the desired\n * `orange`. We address this by altering the property set to use a fallback\n * value like this:\n *\n * color: var(--foo_-_color);\n * background: var(--foo_-_background, orange);\n * border: var(--foo_-_border);\n *\n * Note that the default is retained in the property set and the `background` is\n * the desired `orange`. This leads us to a limitation.\n *\n * Limitation 1:\n\n * Only properties in the rule where the `@apply`\n * is used are considered as default values.\n * If another rule matches the element and sets `background` with\n * less specificity than the rule in which `@apply` appears,\n * the `background` will not be set.\n *\n * Limitation 2:\n *\n * When using Polymer's `updateStyles` api, new properties may not be set for\n * `@apply` properties.\n\n*/\n\n'use strict';\n\nimport {forEachRule, processVariableAndFallback, rulesForStyle, toCssText} from './style-util'\nimport {MIXIN_MATCH, VAR_ASSIGN} from './common-regex'\nimport {StyleNode} from './css-parse' // eslint-disable-line no-unused-vars\n\nconst APPLY_NAME_CLEAN = /;\\s*/m;\nconst INITIAL_INHERIT = /^\\s*(initial)|(inherit)\\s*$/;\n\n// separator used between mixin-name and mixin-property-name when producing properties\n// NOTE: plain '-' may cause collisions in user styles\nconst MIXIN_VAR_SEP = '_-_';\n\n/**\n * @typedef {!Object}\n */\nlet PropertyEntry; // eslint-disable-line no-unused-vars\n\n/**\n * @typedef {!Object}\n */\nlet DependantsEntry; // eslint-disable-line no-unused-vars\n\n/** @typedef {{\n * properties: PropertyEntry,\n * dependants: DependantsEntry\n * }}\n */\nlet MixinMapEntry; // eslint-disable-line no-unused-vars\n\n// map of mixin to property names\n// --foo: {border: 2px} -> {properties: {(--foo, ['border'])}, dependants: {'element-name': proto}}\nclass MixinMap {\n constructor() {\n /** @type {!Object} */\n this._map = {};\n }\n /**\n * @param {string} name\n * @param {!PropertyEntry} props\n */\n set(name, props) {\n name = name.trim();\n this._map[name] = {\n properties: props,\n dependants: {}\n }\n }\n /**\n * @param {string} name\n * @return {MixinMapEntry}\n */\n get(name) {\n name = name.trim();\n return this._map[name] || null;\n }\n}\n\n/**\n * Callback for when an element is marked invalid\n * @type {?function(string)}\n */\nlet invalidCallback = null;\n\n/** @unrestricted */\nclass ApplyShim {\n constructor() {\n /** @type {?string} */\n this._currentElement = null;\n /** @type {HTMLMetaElement} */\n this._measureElement = null;\n this._map = new MixinMap();\n }\n /**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\n detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n }\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @return {StyleNode}\n */\n transformTemplate(template, elementName) {\n const style = /** @type {HTMLStyleElement} */(template.content.querySelector('style'));\n /** @type {StyleNode} */\n let ast = null;\n if (style) {\n ast = this.transformStyle(style, elementName);\n }\n return ast;\n }\n /**\n * @param {!HTMLStyleElement} style\n * @param {string} elementName\n * @return {StyleNode}\n */\n transformStyle(style, elementName = '') {\n let ast = rulesForStyle(style);\n this.transformRules(ast, elementName);\n style.textContent = toCssText(ast);\n return ast;\n }\n /**\n * @param {!HTMLStyleElement} style\n * @return {StyleNode}\n */\n transformCustomStyle(style) {\n let ast = rulesForStyle(style);\n forEachRule(ast, (rule) => {\n if (rule['selector'] === ':root') {\n rule['selector'] = 'html';\n }\n this.transformRule(rule);\n })\n style.textContent = toCssText(ast);\n return ast;\n }\n /**\n * @param {StyleNode} rules\n * @param {string} elementName\n */\n transformRules(rules, elementName) {\n this._currentElement = elementName;\n forEachRule(rules, (r) => {\n this.transformRule(r);\n });\n this._currentElement = null;\n }\n /**\n * @param {!StyleNode} rule\n */\n transformRule(rule) {\n rule['cssText'] = this.transformCssText(rule['parsedCssText']);\n // :root was only used for variable assignment in property shim,\n // but generates invalid selectors with real properties.\n // replace with `:host > *`, which serves the same effect\n if (rule['selector'] === ':root') {\n rule['selector'] = ':host > *';\n }\n }\n /**\n * @param {string} cssText\n * @return {string}\n */\n transformCssText(cssText) {\n // produce variables\n cssText = cssText.replace(VAR_ASSIGN, (matchText, propertyName, valueProperty, valueMixin) =>\n this._produceCssProperties(matchText, propertyName, valueProperty, valueMixin));\n // consume mixins\n return this._consumeCssProperties(cssText);\n }\n /**\n * @param {string} property\n * @return {string}\n */\n _getInitialValueForProperty(property) {\n if (!this._measureElement) {\n this._measureElement = /** @type {HTMLMetaElement} */(document.createElement('meta'));\n this._measureElement.setAttribute('apply-shim-measure', '');\n this._measureElement.style.all = 'initial';\n document.head.appendChild(this._measureElement);\n }\n return window.getComputedStyle(this._measureElement).getPropertyValue(property);\n }\n /**\n * replace mixin consumption with variable consumption\n * @param {string} text\n * @return {string}\n */\n _consumeCssProperties(text) {\n /** @type {Array} */\n let m = null;\n // loop over text until all mixins with defintions have been applied\n while((m = MIXIN_MATCH.exec(text))) {\n let matchText = m[0];\n let mixinName = m[1];\n let idx = m.index;\n // collect properties before apply to be \"defaults\" if mixin might override them\n // match includes a \"prefix\", so find the start and end positions of @apply\n let applyPos = idx + matchText.indexOf('@apply');\n let afterApplyPos = idx + matchText.length;\n // find props defined before this @apply\n let textBeforeApply = text.slice(0, applyPos);\n let textAfterApply = text.slice(afterApplyPos);\n let defaults = this._cssTextToMap(textBeforeApply);\n let replacement = this._atApplyToCssProperties(mixinName, defaults);\n // use regex match position to replace mixin, keep linear processing time\n text = `${textBeforeApply}${replacement}${textAfterApply}`;\n // move regex search to _after_ replacement\n MIXIN_MATCH.lastIndex = idx + replacement.length;\n }\n return text;\n }\n /**\n * produce variable consumption at the site of mixin consumption\n * `@apply` --foo; -> for all props (${propname}: var(--foo_-_${propname}, ${fallback[propname]}}))\n * Example:\n * border: var(--foo_-_border); padding: var(--foo_-_padding, 2px)\n *\n * @param {string} mixinName\n * @param {Object} fallbacks\n * @return {string}\n */\n _atApplyToCssProperties(mixinName, fallbacks) {\n mixinName = mixinName.replace(APPLY_NAME_CLEAN, '');\n let vars = [];\n let mixinEntry = this._map.get(mixinName);\n // if we depend on a mixin before it is created\n // make a sentinel entry in the map to add this element as a dependency for when it is defined.\n if (!mixinEntry) {\n this._map.set(mixinName, {});\n mixinEntry = this._map.get(mixinName);\n }\n if (mixinEntry) {\n if (this._currentElement) {\n mixinEntry.dependants[this._currentElement] = true;\n }\n let p, parts, f;\n for (p in mixinEntry.properties) {\n f = fallbacks && fallbacks[p];\n parts = [p, ': var(', mixinName, MIXIN_VAR_SEP, p];\n if (f) {\n parts.push(',', f);\n }\n parts.push(')');\n vars.push(parts.join(''));\n }\n }\n return vars.join('; ');\n }\n\n /**\n * @param {string} property\n * @param {string} value\n * @return {string}\n */\n _replaceInitialOrInherit(property, value) {\n let match = INITIAL_INHERIT.exec(value);\n if (match) {\n if (match[1]) {\n // initial\n // replace `initial` with the concrete initial value for this property\n value = this._getInitialValueForProperty(property);\n } else {\n // inherit\n // with this purposfully illegal value, the variable will be invalid at\n // compute time (https://www.w3.org/TR/css-variables/#invalid-at-computed-value-time)\n // and for inheriting values, will behave similarly\n // we cannot support the same behavior for non inheriting values like 'border'\n value = 'apply-shim-inherit';\n }\n }\n return value;\n }\n\n /**\n * \"parse\" a mixin definition into a map of properties and values\n * cssTextToMap('border: 2px solid black') -> ('border', '2px solid black')\n * @param {string} text\n * @return {!Object}\n */\n _cssTextToMap(text) {\n let props = text.split(';');\n let property, value;\n let out = {};\n for (let i = 0, p, sp; i < props.length; i++) {\n p = props[i];\n if (p) {\n sp = p.split(':');\n // ignore lines that aren't definitions like @media\n if (sp.length > 1) {\n property = sp[0].trim();\n // some properties may have ':' in the value, like data urls\n value = this._replaceInitialOrInherit(property, sp.slice(1).join(':'));\n out[property] = value;\n }\n }\n }\n return out;\n }\n\n /**\n * @param {MixinMapEntry} mixinEntry\n */\n _invalidateMixinEntry(mixinEntry) {\n if (!invalidCallback) {\n return;\n }\n for (let elementName in mixinEntry.dependants) {\n if (elementName !== this._currentElement) {\n invalidCallback(elementName);\n }\n }\n }\n\n /**\n * @param {string} matchText\n * @param {string} propertyName\n * @param {?string} valueProperty\n * @param {?string} valueMixin\n * @return {string}\n */\n _produceCssProperties(matchText, propertyName, valueProperty, valueMixin) {\n // handle case where property value is a mixin\n if (valueProperty) {\n // form: --mixin2: var(--mixin1), where --mixin1 is in the map\n processVariableAndFallback(valueProperty, (prefix, value) => {\n if (value && this._map.get(value)) {\n valueMixin = `@apply ${value};`\n }\n });\n }\n if (!valueMixin) {\n return matchText;\n }\n let mixinAsProperties = this._consumeCssProperties(valueMixin);\n let prefix = matchText.slice(0, matchText.indexOf('--'));\n let mixinValues = this._cssTextToMap(mixinAsProperties);\n let combinedProps = mixinValues;\n let mixinEntry = this._map.get(propertyName);\n let oldProps = mixinEntry && mixinEntry.properties;\n if (oldProps) {\n // NOTE: since we use mixin, the map of properties is updated here\n // and this is what we want.\n combinedProps = Object.assign(Object.create(oldProps), mixinValues);\n } else {\n this._map.set(propertyName, combinedProps);\n }\n let out = [];\n let p, v;\n // set variables defined by current mixin\n let needToInvalidate = false;\n for (p in combinedProps) {\n v = mixinValues[p];\n // if property not defined by current mixin, set initial\n if (v === undefined) {\n v = 'initial';\n }\n if (oldProps && !(p in oldProps)) {\n needToInvalidate = true;\n }\n out.push(`${propertyName}${MIXIN_VAR_SEP}${p}: ${v}`);\n }\n if (needToInvalidate) {\n this._invalidateMixinEntry(mixinEntry);\n }\n if (mixinEntry) {\n mixinEntry.properties = combinedProps;\n }\n // because the mixinMap is global, the mixin might conflict with\n // a different scope's simple variable definition:\n // Example:\n // some style somewhere:\n // --mixin1:{ ... }\n // --mixin2: var(--mixin1);\n // some other element:\n // --mixin1: 10px solid red;\n // --foo: var(--mixin1);\n // In this case, we leave the original variable definition in place.\n if (valueProperty) {\n prefix = `${matchText};${prefix}`;\n }\n return `${prefix}${out.join('; ')};`;\n }\n}\n\n/* exports */\nApplyShim.prototype['detectMixin'] = ApplyShim.prototype.detectMixin;\nApplyShim.prototype['transformStyle'] = ApplyShim.prototype.transformStyle;\nApplyShim.prototype['transformCustomStyle'] = ApplyShim.prototype.transformCustomStyle;\nApplyShim.prototype['transformRules'] = ApplyShim.prototype.transformRules;\nApplyShim.prototype['transformRule'] = ApplyShim.prototype.transformRule;\nApplyShim.prototype['transformTemplate'] = ApplyShim.prototype.transformTemplate;\nApplyShim.prototype['_separator'] = MIXIN_VAR_SEP;\nObject.defineProperty(ApplyShim.prototype, 'invalidCallback', {\n /** @return {?function(string)} */\n get() {\n return invalidCallback;\n },\n /** @param {?function(string)} cb */\n set(cb) {\n invalidCallback = cb;\n }\n});\n\nexport default ApplyShim;","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {Promise} */\nlet readyPromise = null;\n\n/** @type {?function(?function())} */\nlet whenReady = window['HTMLImports'] && window['HTMLImports']['whenReady'] || null;\n\n/** @type {function()} */\nlet resolveFn;\n\n/**\n * @param {?function()} callback\n */\nexport default function documentWait(callback) {\n requestAnimationFrame(function() {\n if (whenReady) {\n whenReady(callback)\n } else {\n if (!readyPromise) {\n readyPromise = new Promise((resolve) => {resolveFn = resolve});\n if (document.readyState === 'complete') {\n resolveFn();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n resolveFn();\n }\n });\n }\n }\n readyPromise.then(function(){ callback && callback(); });\n }\n });\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport ApplyShim from '../src/apply-shim'\nimport templateMap from '../src/template-map'\nimport {getIsExtends, toCssText} from '../src/style-util'\nimport * as ApplyShimUtils from '../src/apply-shim-utils'\nimport documentWait from '../src/document-wait'\nimport {getComputedStyleValue, updateNativeProperties} from '../src/common-utils'\nimport {CustomStyleInterfaceInterface} from '../src/custom-style-interface' // eslint-disable-line no-unused-vars\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings'\n\n/** @const {ApplyShim} */\nconst applyShim = new ApplyShim();\n\nclass ApplyShimInterface {\n constructor() {\n /** @type {?CustomStyleInterfaceInterface} */\n this.customStyleInterface = null;\n this.booted = false;\n documentWait(() => {\n this.ensure();\n });\n applyShim['invalidCallback'] = ApplyShimUtils.invalidate;\n }\n ensure() {\n if (this.booted) {\n return;\n }\n this.customStyleInterface = window.ShadyCSS.CustomStyleInterface;\n if (this.customStyleInterface) {\n this.customStyleInterface['transformCallback'] = (style) => {\n applyShim.transformCustomStyle(style);\n };\n this.customStyleInterface['validateCallback'] = () => {\n requestAnimationFrame(() => {\n if (this.customStyleInterface['enqueued']) {\n this.flushCustomStyles();\n }\n });\n }\n }\n this.booted = true;\n }\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n */\n prepareTemplate(template, elementName) {\n this.ensure();\n templateMap[elementName] = template;\n let ast = applyShim.transformTemplate(template, elementName);\n // save original style ast to use for revalidating instances\n template['_styleAst'] = ast;\n }\n flushCustomStyles() {\n this.ensure();\n if (!this.customStyleInterface) {\n return;\n }\n let styles = this.customStyleInterface['processStyles']();\n if (!this.customStyleInterface['enqueued']) {\n return;\n }\n for (let i = 0; i < styles.length; i++ ) {\n let cs = styles[i];\n let style = this.customStyleInterface['getStyleForCustomStyle'](cs);\n if (style) {\n applyShim.transformCustomStyle(style);\n }\n }\n this.customStyleInterface['enqueued'] = false;\n }\n /**\n * @param {HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n this.ensure();\n if (properties) {\n updateNativeProperties(element, properties);\n }\n if (element.shadowRoot) {\n this.styleElement(element);\n let shadowChildren = element.shadowRoot.children || element.shadowRoot.childNodes;\n for (let i = 0; i < shadowChildren.length; i++) {\n this.styleSubtree(/** @type {HTMLElement} */(shadowChildren[i]));\n }\n } else {\n let children = element.children || element.childNodes;\n for (let i = 0; i < children.length; i++) {\n this.styleSubtree(/** @type {HTMLElement} */(children[i]));\n }\n }\n }\n /**\n * @param {HTMLElement} element\n */\n styleElement(element) {\n this.ensure();\n let {is} = getIsExtends(element);\n let template = templateMap[is];\n if (template && !ApplyShimUtils.templateIsValid(template)) {\n // only revalidate template once\n if (!ApplyShimUtils.templateIsValidating(template)) {\n this.prepareTemplate(template, is);\n ApplyShimUtils.startValidatingTemplate(template);\n }\n // update this element instance\n let root = element.shadowRoot;\n if (root) {\n let style = /** @type {HTMLStyleElement} */(root.querySelector('style'));\n if (style) {\n // reuse the template's style ast, it has all the original css text\n style['__cssRules'] = template['_styleAst'];\n style.textContent = toCssText(template['_styleAst'])\n }\n }\n }\n }\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n this.ensure();\n this.styleSubtree(document.body, properties);\n }\n}\n\nif (!window.ShadyCSS || !window.ShadyCSS.ScopingShim) {\n const applyShimInterface = new ApplyShimInterface();\n let CustomStyleInterface = window.ShadyCSS && window.ShadyCSS.CustomStyleInterface;\n\n window.ShadyCSS = {\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) { // eslint-disable-line no-unused-vars\n applyShimInterface.flushCustomStyles();\n applyShimInterface.prepareTemplate(template, elementName)\n },\n\n /**\n * @param {!HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n applyShimInterface.flushCustomStyles();\n applyShimInterface.styleSubtree(element, properties);\n },\n\n /**\n * @param {!HTMLElement} element\n */\n styleElement(element) {\n applyShimInterface.flushCustomStyles();\n applyShimInterface.styleElement(element);\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n applyShimInterface.flushCustomStyles();\n applyShimInterface.styleDocument(properties);\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return getComputedStyleValue(element, property);\n },\n nativeCss: nativeCssVariables,\n nativeShadow: nativeShadow\n };\n\n if (CustomStyleInterface) {\n window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;\n }\n}\n\nwindow.ShadyCSS.ApplyShim = applyShim;","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}"]}
\ No newline at end of file
diff --git a/src/main/resources/static/gltf-viewer/bower_components/shadycss/custom-style-interface.html b/src/main/resources/static/gltf-viewer/bower_components/shadycss/custom-style-interface.html
new file mode 100644
index 0000000..a3919fa
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/shadycss/custom-style-interface.html
@@ -0,0 +1,10 @@
+
+
diff --git a/src/main/resources/static/gltf-viewer/bower_components/shadycss/custom-style-interface.min.js b/src/main/resources/static/gltf-viewer/bower_components/shadycss/custom-style-interface.min.js
new file mode 100644
index 0000000..4347aa9
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/bower_components/shadycss/custom-style-interface.min.js
@@ -0,0 +1,16 @@
+(function(){
+/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var c=!(window.ShadyDOM&&window.ShadyDOM.inUse),f=!navigator.userAgent.match("AppleWebKit/601")&&window.CSS&&CSS.supports&&CSS.supports("box-shadow","0 0 0 var(--foo)");function g(a){a&&(f=f&&!a.nativeCss&&!a.shimcssproperties,c=c&&!a.nativeShadow&&!a.shimshadow)}window.ShadyCSS?g(window.ShadyCSS):window.WebComponents&&g(window.WebComponents.flags);var h=c,k=f;function l(a,b){for(var d in b)null===d?a.style.removeProperty(d):a.style.setProperty(d,b[d])};var m=null,n=window.HTMLImports&&window.HTMLImports.whenReady||null,r;function t(){var a=u;requestAnimationFrame(function(){n?n(a):(m||(m=new Promise(function(a){r=a}),"complete"===document.readyState?r():document.addEventListener("readystatechange",function(){"complete"===document.readyState&&r()})),m.then(function(){a&&a()}))})};var v=null,u=null;function x(){this.customStyles=[];this.enqueued=!1}function y(a){!a.enqueued&&u&&(a.enqueued=!0,t())}x.prototype.c=function(a){a.__seenByShadyCSS||(a.__seenByShadyCSS=!0,this.customStyles.push(a),y(this))};x.prototype.b=function(a){if(a.__shadyCSSCachedStyle)return a.__shadyCSSCachedStyle;var b;a.getStyle?b=a.getStyle():b=a;return b};
+x.prototype.a=function(){for(var a=this.customStyles,b=0;b} */\nlet readyPromise = null;\n\n/** @type {?function(?function())} */\nlet whenReady = window['HTMLImports'] && window['HTMLImports']['whenReady'] || null;\n\n/** @type {function()} */\nlet resolveFn;\n\n/**\n * @param {?function()} callback\n */\nexport default function documentWait(callback) {\n requestAnimationFrame(function() {\n if (whenReady) {\n whenReady(callback)\n } else {\n if (!readyPromise) {\n readyPromise = new Promise((resolve) => {resolveFn = resolve});\n if (document.readyState === 'complete') {\n resolveFn();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n resolveFn();\n }\n });\n }\n }\n readyPromise.then(function(){ callback && callback(); });\n }\n });\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport documentWait from './document-wait'\n\n/**\n * @typedef {HTMLStyleElement | {getStyle: function():HTMLStyleElement}}\n */\nexport let CustomStyleProvider;\n\nconst SEEN_MARKER = '__seenByShadyCSS';\nconst CACHED_STYLE = '__shadyCSSCachedStyle';\n\n/** @type {?function(!HTMLStyleElement)} */\nlet transformFn = null;\n\n/** @type {?function()} */\nlet validateFn = null;\n\n/**\nThis interface is provided to add document-level
+
+
+
+
+
diff --git a/src/main/resources/static/gltf-viewer/js/OrbitControls.js b/src/main/resources/static/gltf-viewer/js/OrbitControls.js
new file mode 100644
index 0000000..151f0c8
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/js/OrbitControls.js
@@ -0,0 +1,1042 @@
+/**
+ * @author qiao / https://github.com/qiao
+ * @author mrdoob / http://mrdoob.com
+ * @author alteredq / http://alteredqualia.com/
+ * @author WestLangley / http://github.com/WestLangley
+ * @author erich666 / http://erichaines.com
+ */
+
+// This set of controls performs orbiting, dollying (zooming), and panning.
+// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).
+//
+// Orbit - left mouse / touch: one finger move
+// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish
+// Pan - right mouse, or arrow keys / touch: three finger swipe
+
+THREE.OrbitControls = function ( object, domElement ) {
+
+ this.object = object;
+
+ this.domElement = ( domElement !== undefined ) ? domElement : document;
+
+ // Set to false to disable this control
+ this.enabled = true;
+
+ // "target" sets the location of focus, where the object orbits around
+ this.target = new THREE.Vector3();
+
+ // How far you can dolly in and out ( PerspectiveCamera only )
+ this.minDistance = 0;
+ this.maxDistance = Infinity;
+
+ // How far you can zoom in and out ( OrthographicCamera only )
+ this.minZoom = 0;
+ this.maxZoom = Infinity;
+
+ // How far you can orbit vertically, upper and lower limits.
+ // Range is 0 to Math.PI radians.
+ this.minPolarAngle = 0; // radians
+ this.maxPolarAngle = Math.PI; // radians
+
+ // How far you can orbit horizontally, upper and lower limits.
+ // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].
+ this.minAzimuthAngle = - Infinity; // radians
+ this.maxAzimuthAngle = Infinity; // radians
+
+ // Set to true to enable damping (inertia)
+ // If damping is enabled, you must call controls.update() in your animation loop
+ this.enableDamping = false;
+ this.dampingFactor = 0.25;
+
+ // This option actually enables dollying in and out; left as "zoom" for backwards compatibility.
+ // Set to false to disable zooming
+ this.enableZoom = true;
+ this.zoomSpeed = 1.0;
+
+ // Set to false to disable rotating
+ this.enableRotate = true;
+ this.rotateSpeed = 1.0;
+
+ // Set to false to disable panning
+ this.enablePan = true;
+ this.keyPanSpeed = 7.0; // pixels moved per arrow key push
+
+ // Set to true to automatically rotate around the target
+ // If auto-rotate is enabled, you must call controls.update() in your animation loop
+ this.autoRotate = false;
+ this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60
+
+ // Set to false to disable use of the keys
+ this.enableKeys = true;
+
+ // The four arrow keys
+ this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };
+
+ // Mouse buttons
+ this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };
+
+ // for reset
+ this.target0 = this.target.clone();
+ this.position0 = this.object.position.clone();
+ this.zoom0 = this.object.zoom;
+
+ //
+ // public methods
+ //
+
+ this.getPolarAngle = function () {
+
+ return spherical.phi;
+
+ };
+
+ this.getAzimuthalAngle = function () {
+
+ return spherical.theta;
+
+ };
+
+ this.saveState = function () {
+
+ scope.target0.copy( scope.target );
+ scope.position0.copy( scope.object.position );
+ scope.zoom0 = scope.object.zoom;
+
+ };
+
+ this.reset = function () {
+
+ scope.target.copy( scope.target0 );
+ scope.object.position.copy( scope.position0 );
+ scope.object.zoom = scope.zoom0;
+
+ scope.object.updateProjectionMatrix();
+ scope.dispatchEvent( changeEvent );
+
+ scope.update();
+
+ state = STATE.NONE;
+
+ };
+
+ // this method is exposed, but perhaps it would be better if we can make it private...
+ this.update = function () {
+
+ var offset = new THREE.Vector3();
+
+ // so camera.up is the orbit axis
+ var quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );
+ var quatInverse = quat.clone().inverse();
+
+ var lastPosition = new THREE.Vector3();
+ var lastQuaternion = new THREE.Quaternion();
+
+ return function update() {
+
+ var position = scope.object.position;
+
+ offset.copy( position ).sub( scope.target );
+
+ // rotate offset to "y-axis-is-up" space
+ offset.applyQuaternion( quat );
+
+ // angle from z-axis around y-axis
+ spherical.setFromVector3( offset );
+
+ if ( scope.autoRotate && state === STATE.NONE ) {
+
+ rotateLeft( getAutoRotationAngle() );
+
+ }
+
+ spherical.theta += sphericalDelta.theta;
+ spherical.phi += sphericalDelta.phi;
+
+ // restrict theta to be between desired limits
+ spherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );
+
+ // restrict phi to be between desired limits
+ spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );
+
+ spherical.makeSafe();
+
+
+ spherical.radius *= scale;
+
+ // restrict radius to be between desired limits
+ spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );
+
+ // move target to panned location
+ scope.target.add( panOffset );
+
+ offset.setFromSpherical( spherical );
+
+ // rotate offset back to "camera-up-vector-is-up" space
+ offset.applyQuaternion( quatInverse );
+
+ position.copy( scope.target ).add( offset );
+
+ scope.object.lookAt( scope.target );
+
+ if ( scope.enableDamping === true ) {
+
+ sphericalDelta.theta *= ( 1 - scope.dampingFactor );
+ sphericalDelta.phi *= ( 1 - scope.dampingFactor );
+
+ } else {
+
+ sphericalDelta.set( 0, 0, 0 );
+
+ }
+
+ scale = 1;
+ panOffset.set( 0, 0, 0 );
+
+ // update condition is:
+ // min(camera displacement, camera rotation in radians)^2 > EPS
+ // using small-angle approximation cos(x/2) = 1 - x^2 / 8
+
+ if ( zoomChanged ||
+ lastPosition.distanceToSquared( scope.object.position ) > EPS ||
+ 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {
+
+ scope.dispatchEvent( changeEvent );
+
+ lastPosition.copy( scope.object.position );
+ lastQuaternion.copy( scope.object.quaternion );
+ zoomChanged = false;
+
+ return true;
+
+ }
+
+ return false;
+
+ };
+
+ }();
+
+ this.dispose = function () {
+
+ scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );
+ scope.domElement.removeEventListener( 'mousedown', onMouseDown, false );
+ scope.domElement.removeEventListener( 'wheel', onMouseWheel, false );
+
+ scope.domElement.removeEventListener( 'touchstart', onTouchStart, false );
+ scope.domElement.removeEventListener( 'touchend', onTouchEnd, false );
+ scope.domElement.removeEventListener( 'touchmove', onTouchMove, false );
+
+ document.removeEventListener( 'mousemove', onMouseMove, false );
+ document.removeEventListener( 'mouseup', onMouseUp, false );
+
+ window.removeEventListener( 'keydown', onKeyDown, false );
+
+ //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?
+
+ };
+
+ //
+ // internals
+ //
+
+ var scope = this;
+
+ var changeEvent = { type: 'change' };
+ var startEvent = { type: 'start' };
+ var endEvent = { type: 'end' };
+
+ var STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 };
+
+ var state = STATE.NONE;
+
+ var EPS = 0.000001;
+
+ // current position in spherical coordinates
+ var spherical = new THREE.Spherical();
+ var sphericalDelta = new THREE.Spherical();
+
+ var scale = 1;
+ var panOffset = new THREE.Vector3();
+ var zoomChanged = false;
+
+ var rotateStart = new THREE.Vector2();
+ var rotateEnd = new THREE.Vector2();
+ var rotateDelta = new THREE.Vector2();
+
+ var panStart = new THREE.Vector2();
+ var panEnd = new THREE.Vector2();
+ var panDelta = new THREE.Vector2();
+
+ var dollyStart = new THREE.Vector2();
+ var dollyEnd = new THREE.Vector2();
+ var dollyDelta = new THREE.Vector2();
+
+ function getAutoRotationAngle() {
+
+ return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;
+
+ }
+
+ function getZoomScale() {
+
+ return Math.pow( 0.95, scope.zoomSpeed );
+
+ }
+
+ function rotateLeft( angle ) {
+
+ sphericalDelta.theta -= angle;
+
+ }
+
+ function rotateUp( angle ) {
+
+ sphericalDelta.phi -= angle;
+
+ }
+
+ var panLeft = function () {
+
+ var v = new THREE.Vector3();
+
+ return function panLeft( distance, objectMatrix ) {
+
+ v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix
+ v.multiplyScalar( - distance );
+
+ panOffset.add( v );
+
+ };
+
+ }();
+
+ var panUp = function () {
+
+ var v = new THREE.Vector3();
+
+ return function panUp( distance, objectMatrix ) {
+
+ v.setFromMatrixColumn( objectMatrix, 1 ); // get Y column of objectMatrix
+ v.multiplyScalar( distance );
+
+ panOffset.add( v );
+
+ };
+
+ }();
+
+ // deltaX and deltaY are in pixels; right and down are positive
+ var pan = function () {
+
+ var offset = new THREE.Vector3();
+
+ return function pan( deltaX, deltaY ) {
+
+ var element = scope.domElement === document ? scope.domElement.body : scope.domElement;
+
+ if ( scope.object instanceof THREE.PerspectiveCamera ) {
+
+ // perspective
+ var position = scope.object.position;
+ offset.copy( position ).sub( scope.target );
+ var targetDistance = offset.length();
+
+ // half of the fov is center to top of screen
+ targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );
+
+ // we actually don't use screenWidth, since perspective camera is fixed to screen height
+ panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );
+ panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );
+
+ } else if ( scope.object instanceof THREE.OrthographicCamera ) {
+
+ // orthographic
+ panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );
+ panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );
+
+ } else {
+
+ // camera neither orthographic nor perspective
+ console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );
+ scope.enablePan = false;
+
+ }
+
+ };
+
+ }();
+
+ function dollyIn( dollyScale ) {
+
+ if ( scope.object instanceof THREE.PerspectiveCamera ) {
+
+ scale /= dollyScale;
+
+ } else if ( scope.object instanceof THREE.OrthographicCamera ) {
+
+ scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );
+ scope.object.updateProjectionMatrix();
+ zoomChanged = true;
+
+ } else {
+
+ console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );
+ scope.enableZoom = false;
+
+ }
+
+ }
+
+ function dollyOut( dollyScale ) {
+
+ if ( scope.object instanceof THREE.PerspectiveCamera ) {
+
+ scale *= dollyScale;
+
+ } else if ( scope.object instanceof THREE.OrthographicCamera ) {
+
+ scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );
+ scope.object.updateProjectionMatrix();
+ zoomChanged = true;
+
+ } else {
+
+ console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );
+ scope.enableZoom = false;
+
+ }
+
+ }
+
+ //
+ // event callbacks - update the object state
+ //
+
+ function handleMouseDownRotate( event ) {
+
+ //console.log( 'handleMouseDownRotate' );
+
+ rotateStart.set( event.clientX, event.clientY );
+
+ }
+
+ function handleMouseDownDolly( event ) {
+
+ //console.log( 'handleMouseDownDolly' );
+
+ dollyStart.set( event.clientX, event.clientY );
+
+ }
+
+ function handleMouseDownPan( event ) {
+
+ //console.log( 'handleMouseDownPan' );
+
+ panStart.set( event.clientX, event.clientY );
+
+ }
+
+ function handleMouseMoveRotate( event ) {
+
+ //console.log( 'handleMouseMoveRotate' );
+
+ rotateEnd.set( event.clientX, event.clientY );
+ rotateDelta.subVectors( rotateEnd, rotateStart );
+
+ var element = scope.domElement === document ? scope.domElement.body : scope.domElement;
+
+ // rotating across whole screen goes 360 degrees around
+ rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );
+
+ // rotating up and down along whole screen attempts to go 360, but limited to 180
+ rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );
+
+ rotateStart.copy( rotateEnd );
+
+ scope.update();
+
+ }
+
+ function handleMouseMoveDolly( event ) {
+
+ //console.log( 'handleMouseMoveDolly' );
+
+ dollyEnd.set( event.clientX, event.clientY );
+
+ dollyDelta.subVectors( dollyEnd, dollyStart );
+
+ if ( dollyDelta.y > 0 ) {
+
+ dollyIn( getZoomScale() );
+
+ } else if ( dollyDelta.y < 0 ) {
+
+ dollyOut( getZoomScale() );
+
+ }
+
+ dollyStart.copy( dollyEnd );
+
+ scope.update();
+
+ }
+
+ function handleMouseMovePan( event ) {
+
+ //console.log( 'handleMouseMovePan' );
+
+ panEnd.set( event.clientX, event.clientY );
+
+ panDelta.subVectors( panEnd, panStart );
+
+ pan( panDelta.x, panDelta.y );
+
+ panStart.copy( panEnd );
+
+ scope.update();
+
+ }
+
+ function handleMouseUp( event ) {
+
+ // console.log( 'handleMouseUp' );
+
+ }
+
+ function handleMouseWheel( event ) {
+
+ // console.log( 'handleMouseWheel' );
+
+ if ( event.deltaY < 0 ) {
+
+ dollyOut( getZoomScale() );
+
+ } else if ( event.deltaY > 0 ) {
+
+ dollyIn( getZoomScale() );
+
+ }
+
+ scope.update();
+
+ }
+
+ function handleKeyDown( event ) {
+
+ //console.log( 'handleKeyDown' );
+
+ switch ( event.keyCode ) {
+
+ case scope.keys.UP:
+ pan( 0, scope.keyPanSpeed );
+ scope.update();
+ break;
+
+ case scope.keys.BOTTOM:
+ pan( 0, - scope.keyPanSpeed );
+ scope.update();
+ break;
+
+ case scope.keys.LEFT:
+ pan( scope.keyPanSpeed, 0 );
+ scope.update();
+ break;
+
+ case scope.keys.RIGHT:
+ pan( - scope.keyPanSpeed, 0 );
+ scope.update();
+ break;
+
+ }
+
+ }
+
+ function handleTouchStartRotate( event ) {
+
+ //console.log( 'handleTouchStartRotate' );
+
+ rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );
+
+ }
+
+ function handleTouchStartDolly( event ) {
+
+ //console.log( 'handleTouchStartDolly' );
+
+ var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
+ var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
+
+ var distance = Math.sqrt( dx * dx + dy * dy );
+
+ dollyStart.set( 0, distance );
+
+ }
+
+ function handleTouchStartPan( event ) {
+
+ //console.log( 'handleTouchStartPan' );
+
+ panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );
+
+ }
+
+ function handleTouchMoveRotate( event ) {
+
+ //console.log( 'handleTouchMoveRotate' );
+
+ rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );
+ rotateDelta.subVectors( rotateEnd, rotateStart );
+
+ var element = scope.domElement === document ? scope.domElement.body : scope.domElement;
+
+ // rotating across whole screen goes 360 degrees around
+ rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );
+
+ // rotating up and down along whole screen attempts to go 360, but limited to 180
+ rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );
+
+ rotateStart.copy( rotateEnd );
+
+ scope.update();
+
+ }
+
+ function handleTouchMoveDolly( event ) {
+
+ //console.log( 'handleTouchMoveDolly' );
+
+ var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
+ var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
+
+ var distance = Math.sqrt( dx * dx + dy * dy );
+
+ dollyEnd.set( 0, distance );
+
+ dollyDelta.subVectors( dollyEnd, dollyStart );
+
+ if ( dollyDelta.y > 0 ) {
+
+ dollyOut( getZoomScale() );
+
+ } else if ( dollyDelta.y < 0 ) {
+
+ dollyIn( getZoomScale() );
+
+ }
+
+ dollyStart.copy( dollyEnd );
+
+ scope.update();
+
+ }
+
+ function handleTouchMovePan( event ) {
+
+ //console.log( 'handleTouchMovePan' );
+
+ panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );
+
+ panDelta.subVectors( panEnd, panStart );
+
+ pan( panDelta.x, panDelta.y );
+
+ panStart.copy( panEnd );
+
+ scope.update();
+
+ }
+
+ function handleTouchEnd( event ) {
+
+ //console.log( 'handleTouchEnd' );
+
+ }
+
+ //
+ // event handlers - FSM: listen for events and reset state
+ //
+
+ function onMouseDown( event ) {
+
+ if ( scope.enabled === false ) return;
+
+ event.preventDefault();
+
+ switch ( event.button ) {
+
+ case scope.mouseButtons.ORBIT:
+
+ if ( scope.enableRotate === false ) return;
+
+ handleMouseDownRotate( event );
+
+ state = STATE.ROTATE;
+
+ break;
+
+ case scope.mouseButtons.ZOOM:
+
+ if ( scope.enableZoom === false ) return;
+
+ handleMouseDownDolly( event );
+
+ state = STATE.DOLLY;
+
+ break;
+
+ case scope.mouseButtons.PAN:
+
+ if ( scope.enablePan === false ) return;
+
+ handleMouseDownPan( event );
+
+ state = STATE.PAN;
+
+ break;
+
+ }
+
+ if ( state !== STATE.NONE ) {
+
+ document.addEventListener( 'mousemove', onMouseMove, false );
+ document.addEventListener( 'mouseup', onMouseUp, false );
+
+ scope.dispatchEvent( startEvent );
+
+ }
+
+ }
+
+ function onMouseMove( event ) {
+
+ if ( scope.enabled === false ) return;
+
+ event.preventDefault();
+
+ switch ( state ) {
+
+ case STATE.ROTATE:
+
+ if ( scope.enableRotate === false ) return;
+
+ handleMouseMoveRotate( event );
+
+ break;
+
+ case STATE.DOLLY:
+
+ if ( scope.enableZoom === false ) return;
+
+ handleMouseMoveDolly( event );
+
+ break;
+
+ case STATE.PAN:
+
+ if ( scope.enablePan === false ) return;
+
+ handleMouseMovePan( event );
+
+ break;
+
+ }
+
+ }
+
+ function onMouseUp( event ) {
+
+ if ( scope.enabled === false ) return;
+
+ handleMouseUp( event );
+
+ document.removeEventListener( 'mousemove', onMouseMove, false );
+ document.removeEventListener( 'mouseup', onMouseUp, false );
+
+ scope.dispatchEvent( endEvent );
+
+ state = STATE.NONE;
+
+ }
+
+ function onMouseWheel( event ) {
+
+ if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;
+
+ event.preventDefault();
+ event.stopPropagation();
+
+ handleMouseWheel( event );
+
+ scope.dispatchEvent( startEvent ); // not sure why these are here...
+ scope.dispatchEvent( endEvent );
+
+ }
+
+ function onKeyDown( event ) {
+
+ if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;
+
+ handleKeyDown( event );
+
+ }
+
+ function onTouchStart( event ) {
+
+ if ( scope.enabled === false ) return;
+
+ switch ( event.touches.length ) {
+
+ case 1: // one-fingered touch: rotate
+
+ if ( scope.enableRotate === false ) return;
+
+ handleTouchStartRotate( event );
+
+ state = STATE.TOUCH_ROTATE;
+
+ break;
+
+ case 2: // two-fingered touch: dolly
+
+ if ( scope.enableZoom === false ) return;
+
+ handleTouchStartDolly( event );
+
+ state = STATE.TOUCH_DOLLY;
+
+ break;
+
+ case 3: // three-fingered touch: pan
+
+ if ( scope.enablePan === false ) return;
+
+ handleTouchStartPan( event );
+
+ state = STATE.TOUCH_PAN;
+
+ break;
+
+ default:
+
+ state = STATE.NONE;
+
+ }
+
+ if ( state !== STATE.NONE ) {
+
+ scope.dispatchEvent( startEvent );
+
+ }
+
+ }
+
+ function onTouchMove( event ) {
+
+ if ( scope.enabled === false ) return;
+
+ event.preventDefault();
+ event.stopPropagation();
+
+ switch ( event.touches.length ) {
+
+ case 1: // one-fingered touch: rotate
+
+ if ( scope.enableRotate === false ) return;
+ if ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?...
+
+ handleTouchMoveRotate( event );
+
+ break;
+
+ case 2: // two-fingered touch: dolly
+
+ if ( scope.enableZoom === false ) return;
+ if ( state !== STATE.TOUCH_DOLLY ) return; // is this needed?...
+
+ handleTouchMoveDolly( event );
+
+ break;
+
+ case 3: // three-fingered touch: pan
+
+ if ( scope.enablePan === false ) return;
+ if ( state !== STATE.TOUCH_PAN ) return; // is this needed?...
+
+ handleTouchMovePan( event );
+
+ break;
+
+ default:
+
+ state = STATE.NONE;
+
+ }
+
+ }
+
+ function onTouchEnd( event ) {
+
+ if ( scope.enabled === false ) return;
+
+ handleTouchEnd( event );
+
+ scope.dispatchEvent( endEvent );
+
+ state = STATE.NONE;
+
+ }
+
+ function onContextMenu( event ) {
+
+ if ( scope.enabled === false ) return;
+
+ event.preventDefault();
+
+ }
+
+ //
+
+ scope.domElement.addEventListener( 'contextmenu', onContextMenu, false );
+
+ scope.domElement.addEventListener( 'mousedown', onMouseDown, false );
+ scope.domElement.addEventListener( 'wheel', onMouseWheel, false );
+
+ scope.domElement.addEventListener( 'touchstart', onTouchStart, false );
+ scope.domElement.addEventListener( 'touchend', onTouchEnd, false );
+ scope.domElement.addEventListener( 'touchmove', onTouchMove, false );
+
+ window.addEventListener( 'keydown', onKeyDown, false );
+
+ // force an update at start
+
+ this.update();
+
+};
+
+THREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );
+THREE.OrbitControls.prototype.constructor = THREE.OrbitControls;
+
+Object.defineProperties( THREE.OrbitControls.prototype, {
+
+ center: {
+
+ get: function () {
+
+ console.warn( 'THREE.OrbitControls: .center has been renamed to .target' );
+ return this.target;
+
+ }
+
+ },
+
+ // backward compatibility
+
+ noZoom: {
+
+ get: function () {
+
+ console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );
+ return ! this.enableZoom;
+
+ },
+
+ set: function ( value ) {
+
+ console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );
+ this.enableZoom = ! value;
+
+ }
+
+ },
+
+ noRotate: {
+
+ get: function () {
+
+ console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );
+ return ! this.enableRotate;
+
+ },
+
+ set: function ( value ) {
+
+ console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );
+ this.enableRotate = ! value;
+
+ }
+
+ },
+
+ noPan: {
+
+ get: function () {
+
+ console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );
+ return ! this.enablePan;
+
+ },
+
+ set: function ( value ) {
+
+ console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );
+ this.enablePan = ! value;
+
+ }
+
+ },
+
+ noKeys: {
+
+ get: function () {
+
+ console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );
+ return ! this.enableKeys;
+
+ },
+
+ set: function ( value ) {
+
+ console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );
+ this.enableKeys = ! value;
+
+ }
+
+ },
+
+ staticMoving: {
+
+ get: function () {
+
+ console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );
+ return ! this.enableDamping;
+
+ },
+
+ set: function ( value ) {
+
+ console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );
+ this.enableDamping = ! value;
+
+ }
+
+ },
+
+ dynamicDampingFactor: {
+
+ get: function () {
+
+ console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );
+ return this.dampingFactor;
+
+ },
+
+ set: function ( value ) {
+
+ console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );
+ this.dampingFactor = value;
+
+ }
+
+ }
+
+} );
diff --git a/src/main/resources/static/gltf-viewer/js/three-examples.js b/src/main/resources/static/gltf-viewer/js/three-examples.js
new file mode 100644
index 0000000..7892ef1
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/js/three-examples.js
@@ -0,0 +1,1452 @@
+(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0) ? line.substring(0, pos) : line;
+ key = key.toLowerCase();
+
+ let value = (pos >= 0) ? line.substring(pos + 1) : '';
+ value = value.trim();
+
+ if (key === 'newmtl') {
+
+ // New material
+
+ info = {name: value};
+ materialsInfo[value] = info;
+
+ } else {
+
+ if (key === 'ka' || key === 'kd' || key === 'ks' || key === 'ke') {
+
+ const ss = value.split(delimiter_pattern, 3);
+ info[key] = [parseFloat(ss[0]), parseFloat(ss[1]), parseFloat(ss[2])];
+
+ } else {
+
+ info[key] = value;
+
+ }
+
+ }
+
+ }
+
+ const materialCreator = new MaterialCreator(this.resourcePath || path, this.materialOptions);
+ materialCreator.setCrossOrigin(this.crossOrigin);
+ materialCreator.setManager(this.manager);
+ materialCreator.setMaterials(materialsInfo);
+ return materialCreator;
+
+ }
+
+}
+
+/**
+ * Create a new MTLLoader.MaterialCreator
+ * @param baseUrl - Url relative to which textures are loaded
+ * @param options - Set of options on how to construct the materials
+ * side: Which side to apply the material
+ * THREE.FrontSide (default), THREE.BackSide, THREE.DoubleSide
+ * wrap: What type of wrapping to apply for textures
+ * THREE.RepeatWrapping (default), THREE.ClampToEdgeWrapping, THREE.MirroredRepeatWrapping
+ * normalizeRGB: RGBs need to be normalized to 0-1 from 0-255
+ * Default: false, assumed to be already normalized
+ * ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's
+ * Default: false
+ * @constructor
+ */
+
+class MaterialCreator {
+
+ constructor(baseUrl = '', options = {}) {
+
+ this.baseUrl = baseUrl;
+ this.options = options;
+ this.materialsInfo = {};
+ this.materials = {};
+ this.materialsArray = [];
+ this.nameLookup = {};
+
+ this.crossOrigin = 'anonymous';
+
+ this.side = (this.options.side !== undefined) ? this.options.side : THREE.FrontSide;
+ this.wrap = (this.options.wrap !== undefined) ? this.options.wrap : THREE.RepeatWrapping;
+
+ }
+
+ setCrossOrigin(value) {
+
+ this.crossOrigin = value;
+ return this;
+
+ }
+
+ setManager(value) {
+
+ this.manager = value;
+
+ }
+
+ setMaterials(materialsInfo) {
+
+ this.materialsInfo = this.convert(materialsInfo);
+ this.materials = {};
+ this.materialsArray = [];
+ this.nameLookup = {};
+
+ }
+
+ convert(materialsInfo) {
+
+ if (!this.options) return materialsInfo;
+
+ const converted = {};
+
+ for (const mn in materialsInfo) {
+
+ // Convert materials info into normalized form based on options
+
+ const mat = materialsInfo[mn];
+
+ const covmat = {};
+
+ converted[mn] = covmat;
+
+ for (const prop in mat) {
+
+ let save = true;
+ let value = mat[prop];
+ const lprop = prop.toLowerCase();
+
+ switch (lprop) {
+
+ case 'kd':
+ case 'ka':
+ case 'ks':
+
+ // Diffuse color (color under white light) using RGB values
+
+ if (this.options && this.options.normalizeRGB) {
+
+ value = [value[0] / 255, value[1] / 255, value[2] / 255];
+
+ }
+
+ if (this.options && this.options.ignoreZeroRGBs) {
+
+ if (value[0] === 0 && value[1] === 0 && value[2] === 0) {
+
+ // ignore
+
+ save = false;
+
+ }
+
+ }
+
+ break;
+
+ default:
+
+ break;
+
+ }
+
+ if (save) {
+
+ covmat[lprop] = value;
+
+ }
+
+ }
+
+ }
+
+ return converted;
+
+ }
+
+ preload() {
+
+ for (const mn in this.materialsInfo) {
+
+ this.create(mn);
+
+ }
+
+ }
+
+ getIndex(materialName) {
+
+ return this.nameLookup[materialName];
+
+ }
+
+ getAsArray() {
+
+ let index = 0;
+
+ for (const mn in this.materialsInfo) {
+
+ this.materialsArray[index] = this.create(mn);
+ this.nameLookup[mn] = index;
+ index++;
+
+ }
+
+ return this.materialsArray;
+
+ }
+
+ create(materialName) {
+
+ if (this.materials[materialName] === undefined) {
+
+ this.createMaterial_(materialName);
+
+ }
+
+ return this.materials[materialName];
+
+ }
+
+ createMaterial_(materialName) {
+
+ // Create material
+
+ const scope = this;
+ const mat = this.materialsInfo[materialName];
+ const params = {
+
+ name: materialName,
+ side: this.side
+
+ };
+
+ function resolveURL(baseUrl, url) {
+
+ if (typeof url !== 'string' || url === '')
+ return '';
+
+ // Absolute URL
+ if (/^https?:\/\//i.test(url)) return url;
+
+ return baseUrl + url;
+
+ }
+
+ function setMapForType(mapType, value) {
+
+ if (params[mapType]) return; // Keep the first encountered texture
+
+ const texParams = scope.getTextureParams(value, params);
+ const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url));
+
+ map.repeat.copy(texParams.scale);
+ map.offset.copy(texParams.offset);
+
+ map.wrapS = scope.wrap;
+ map.wrapT = scope.wrap;
+
+ params[mapType] = map;
+
+ }
+
+ for (const prop in mat) {
+
+ const value = mat[prop];
+ let n;
+
+ if (value === '') continue;
+
+ switch (prop.toLowerCase()) {
+
+ // Ns is material specular exponent
+
+ case 'kd':
+
+ // Diffuse color (color under white light) using RGB values
+
+ params.color = new THREE.Color().fromArray(value);
+
+ break;
+
+ case 'ks':
+
+ // Specular color (color when light is reflected from shiny surface) using RGB values
+ params.specular = new THREE.Color().fromArray(value);
+
+ break;
+
+ case 'ke':
+
+ // Emissive using RGB values
+ params.emissive = new THREE.Color().fromArray(value);
+
+ break;
+
+ case 'map_kd':
+
+ // Diffuse texture map
+
+ setMapForType('map', value);
+
+ break;
+
+ case 'map_ks':
+
+ // Specular map
+
+ setMapForType('specularMap', value);
+
+ break;
+
+ case 'map_ke':
+
+ // Emissive map
+
+ setMapForType('emissiveMap', value);
+
+ break;
+
+ case 'norm':
+
+ setMapForType('normalMap', value);
+
+ break;
+
+ case 'map_bump':
+ case 'bump':
+
+ // Bump texture map
+
+ setMapForType('bumpMap', value);
+
+ break;
+
+ case 'map_d':
+
+ // Alpha map
+
+ setMapForType('alphaMap', value);
+ params.transparent = true;
+
+ break;
+
+ case 'ns':
+
+ // The specular exponent (defines the focus of the specular highlight)
+ // A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.
+
+ params.shininess = parseFloat(value);
+
+ break;
+
+ case 'd':
+ n = parseFloat(value);
+
+ if (n < 1) {
+
+ params.opacity = n;
+ params.transparent = true;
+
+ }
+
+ break;
+
+ case 'tr':
+ n = parseFloat(value);
+
+ if (this.options && this.options.invertTrProperty) n = 1 - n;
+
+ if (n > 0) {
+
+ params.opacity = 1 - n;
+ params.transparent = true;
+
+ }
+
+ break;
+
+ default:
+ break;
+
+ }
+
+ }
+
+ this.materials[materialName] = new THREE.MeshPhongMaterial(params);
+ return this.materials[materialName];
+
+ }
+
+ getTextureParams(value, matParams) {
+
+ const texParams = {
+
+ scale: new THREE.Vector2(1, 1),
+ offset: new THREE.Vector2(0, 0)
+
+ };
+
+ const items = value.split(/\s+/);
+ let pos;
+
+ pos = items.indexOf('-bm');
+
+ if (pos >= 0) {
+
+ matParams.bumpScale = parseFloat(items[pos + 1]);
+ items.splice(pos, 2);
+
+ }
+
+ pos = items.indexOf('-s');
+
+ if (pos >= 0) {
+
+ texParams.scale.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2]));
+ items.splice(pos, 4); // we expect 3 parameters here!
+
+ }
+
+ pos = items.indexOf('-o');
+
+ if (pos >= 0) {
+
+ texParams.offset.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2]));
+ items.splice(pos, 4); // we expect 3 parameters here!
+
+ }
+
+ texParams.url = items.join(' ').trim();
+ return texParams;
+
+ }
+
+ loadTexture(url, mapping, onLoad, onProgress, onError) {
+
+ const manager = (this.manager !== undefined) ? this.manager : THREE.DefaultLoadingManager;
+ let loader = manager.getHandler(url);
+
+ if (loader === null) {
+
+ loader = new THREE.TextureLoader(manager);
+
+ }
+
+ if (loader.setCrossOrigin) loader.setCrossOrigin(this.crossOrigin);
+
+ const texture = loader.load(url, onLoad, onProgress, onError);
+
+ if (mapping !== undefined) texture.mapping = mapping;
+
+ return texture;
+
+ }
+
+}
+
+module.exports = {MTLLoader: MTLLoader};
+
+},{}],3:[function(require,module,exports){
+window.THREE.OBJLoader = require("./OBJLoader").OBJLoader;
+
+},{"./OBJLoader":4}],4:[function(require,module,exports){
+// o object_name | g group_name
+const _object_pattern = /^[og]\s*(.+)?/;
+// mtllib file_reference
+const _material_library_pattern = /^mtllib /;
+// usemtl material_name
+const _material_use_pattern = /^usemtl /;
+// usemap map_name
+const _map_use_pattern = /^usemap /;
+
+const _vA = new THREE.Vector3();
+const _vB = new THREE.Vector3();
+const _vC = new THREE.Vector3();
+
+const _ab = new THREE.Vector3();
+const _cb = new THREE.Vector3();
+
+function ParserState() {
+
+ const state = {
+ objects: [],
+ object: {},
+
+ vertices: [],
+ normals: [],
+ colors: [],
+ uvs: [],
+
+ materials: {},
+ materialLibraries: [],
+
+ startObject: function (name, fromDeclaration) {
+
+ // If the current object (initial from reset) is not from a g/o declaration in the parsed
+ // file. We need to use it for the first parsed g/o to keep things in sync.
+ if (this.object && this.object.fromDeclaration === false) {
+
+ this.object.name = name;
+ this.object.fromDeclaration = (fromDeclaration !== false);
+ return;
+
+ }
+
+ const previousMaterial = (this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined);
+
+ if (this.object && typeof this.object._finalize === 'function') {
+
+ this.object._finalize(true);
+
+ }
+
+ this.object = {
+ name: name || '',
+ fromDeclaration: (fromDeclaration !== false),
+
+ geometry: {
+ vertices: [],
+ normals: [],
+ colors: [],
+ uvs: [],
+ hasUVIndices: false
+ },
+ materials: [],
+ smooth: true,
+
+ startMaterial: function (name, libraries) {
+
+ const previous = this._finalize(false);
+
+ // New usemtl declaration overwrites an inherited material, except if faces were declared
+ // after the material, then it must be preserved for proper MultiMaterial continuation.
+ if (previous && (previous.inherited || previous.groupCount <= 0)) {
+
+ this.materials.splice(previous.index, 1);
+
+ }
+
+ const material = {
+ index: this.materials.length,
+ name: name || '',
+ mtllib: (Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : ''),
+ smooth: (previous !== undefined ? previous.smooth : this.smooth),
+ groupStart: (previous !== undefined ? previous.groupEnd : 0),
+ groupEnd: -1,
+ groupCount: -1,
+ inherited: false,
+
+ clone: function (index) {
+
+ const cloned = {
+ index: (typeof index === 'number' ? index : this.index),
+ name: this.name,
+ mtllib: this.mtllib,
+ smooth: this.smooth,
+ groupStart: 0,
+ groupEnd: -1,
+ groupCount: -1,
+ inherited: false
+ };
+ cloned.clone = this.clone.bind(cloned);
+ return cloned;
+
+ }
+ };
+
+ this.materials.push(material);
+
+ return material;
+
+ },
+
+ currentMaterial: function () {
+
+ if (this.materials.length > 0) {
+
+ return this.materials[this.materials.length - 1];
+
+ }
+
+ return undefined;
+
+ },
+
+ _finalize: function (end) {
+
+ const lastMultiMaterial = this.currentMaterial();
+ if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {
+
+ lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
+ lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
+ lastMultiMaterial.inherited = false;
+
+ }
+
+ // Ignore objects tail materials if no face declarations followed them before a new o/g started.
+ if (end && this.materials.length > 1) {
+
+ for (let mi = this.materials.length - 1; mi >= 0; mi--) {
+
+ if (this.materials[mi].groupCount <= 0) {
+
+ this.materials.splice(mi, 1);
+
+ }
+
+ }
+
+ }
+
+ // Guarantee at least one empty material, this makes the creation later more straight forward.
+ if (end && this.materials.length === 0) {
+
+ this.materials.push({
+ name: '',
+ smooth: this.smooth
+ });
+
+ }
+
+ return lastMultiMaterial;
+
+ }
+ };
+
+ // Inherit previous objects material.
+ // Spec tells us that a declared material must be set to all objects until a new material is declared.
+ // If a usemtl declaration is encountered while this new object is being parsed, it will
+ // overwrite the inherited material. Exception being that there was already face declarations
+ // to the inherited material, then it will be preserved for proper MultiMaterial continuation.
+
+ if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {
+
+ const declared = previousMaterial.clone(0);
+ declared.inherited = true;
+ this.object.materials.push(declared);
+
+ }
+
+ this.objects.push(this.object);
+
+ },
+
+ finalize: function () {
+
+ if (this.object && typeof this.object._finalize === 'function') {
+
+ this.object._finalize(true);
+
+ }
+
+ },
+
+ parseVertexIndex: function (value, len) {
+
+ const index = parseInt(value, 10);
+ return (index >= 0 ? index - 1 : index + len / 3) * 3;
+
+ },
+
+ parseNormalIndex: function (value, len) {
+
+ const index = parseInt(value, 10);
+ return (index >= 0 ? index - 1 : index + len / 3) * 3;
+
+ },
+
+ parseUVIndex: function (value, len) {
+
+ const index = parseInt(value, 10);
+ return (index >= 0 ? index - 1 : index + len / 2) * 2;
+
+ },
+
+ addVertex: function (a, b, c) {
+
+ const src = this.vertices;
+ const dst = this.object.geometry.vertices;
+
+ dst.push(src[a + 0], src[a + 1], src[a + 2]);
+ dst.push(src[b + 0], src[b + 1], src[b + 2]);
+ dst.push(src[c + 0], src[c + 1], src[c + 2]);
+
+ },
+
+ addVertexPoint: function (a) {
+
+ const src = this.vertices;
+ const dst = this.object.geometry.vertices;
+
+ dst.push(src[a + 0], src[a + 1], src[a + 2]);
+
+ },
+
+ addVertexLine: function (a) {
+
+ const src = this.vertices;
+ const dst = this.object.geometry.vertices;
+
+ dst.push(src[a + 0], src[a + 1], src[a + 2]);
+
+ },
+
+ addNormal: function (a, b, c) {
+
+ const src = this.normals;
+ const dst = this.object.geometry.normals;
+
+ dst.push(src[a + 0], src[a + 1], src[a + 2]);
+ dst.push(src[b + 0], src[b + 1], src[b + 2]);
+ dst.push(src[c + 0], src[c + 1], src[c + 2]);
+
+ },
+
+ addFaceNormal: function (a, b, c) {
+
+ const src = this.vertices;
+ const dst = this.object.geometry.normals;
+
+ _vA.fromArray(src, a);
+ _vB.fromArray(src, b);
+ _vC.fromArray(src, c);
+
+ _cb.subVectors(_vC, _vB);
+ _ab.subVectors(_vA, _vB);
+ _cb.cross(_ab);
+
+ _cb.normalize();
+
+ dst.push(_cb.x, _cb.y, _cb.z);
+ dst.push(_cb.x, _cb.y, _cb.z);
+ dst.push(_cb.x, _cb.y, _cb.z);
+
+ },
+
+ addColor: function (a, b, c) {
+
+ const src = this.colors;
+ const dst = this.object.geometry.colors;
+
+ if (src[a] !== undefined) dst.push(src[a + 0], src[a + 1], src[a + 2]);
+ if (src[b] !== undefined) dst.push(src[b + 0], src[b + 1], src[b + 2]);
+ if (src[c] !== undefined) dst.push(src[c + 0], src[c + 1], src[c + 2]);
+
+ },
+
+ addUV: function (a, b, c) {
+
+ const src = this.uvs;
+ const dst = this.object.geometry.uvs;
+
+ dst.push(src[a + 0], src[a + 1]);
+ dst.push(src[b + 0], src[b + 1]);
+ dst.push(src[c + 0], src[c + 1]);
+
+ },
+
+ addDefaultUV: function () {
+
+ const dst = this.object.geometry.uvs;
+
+ dst.push(0, 0);
+ dst.push(0, 0);
+ dst.push(0, 0);
+
+ },
+
+ addUVLine: function (a) {
+
+ const src = this.uvs;
+ const dst = this.object.geometry.uvs;
+
+ dst.push(src[a + 0], src[a + 1]);
+
+ },
+
+ addFace: function (a, b, c, ua, ub, uc, na, nb, nc) {
+
+ const vLen = this.vertices.length;
+
+ let ia = this.parseVertexIndex(a, vLen);
+ let ib = this.parseVertexIndex(b, vLen);
+ let ic = this.parseVertexIndex(c, vLen);
+
+ this.addVertex(ia, ib, ic);
+ this.addColor(ia, ib, ic);
+
+ // normals
+
+ if (na !== undefined && na !== '') {
+
+ const nLen = this.normals.length;
+
+ ia = this.parseNormalIndex(na, nLen);
+ ib = this.parseNormalIndex(nb, nLen);
+ ic = this.parseNormalIndex(nc, nLen);
+
+ this.addNormal(ia, ib, ic);
+
+ } else {
+
+ this.addFaceNormal(ia, ib, ic);
+
+ }
+
+ // uvs
+
+ if (ua !== undefined && ua !== '') {
+
+ const uvLen = this.uvs.length;
+
+ ia = this.parseUVIndex(ua, uvLen);
+ ib = this.parseUVIndex(ub, uvLen);
+ ic = this.parseUVIndex(uc, uvLen);
+
+ this.addUV(ia, ib, ic);
+
+ this.object.geometry.hasUVIndices = true;
+
+ } else {
+
+ // add placeholder values (for inconsistent face definitions)
+
+ this.addDefaultUV();
+
+ }
+
+ },
+
+ addPointGeometry: function (vertices) {
+
+ this.object.geometry.type = 'THREE.Points';
+
+ const vLen = this.vertices.length;
+
+ for (let vi = 0, l = vertices.length; vi < l; vi++) {
+
+ const index = this.parseVertexIndex(vertices[vi], vLen);
+
+ this.addVertexPoint(index);
+ this.addColor(index);
+
+ }
+
+ },
+
+ addLineGeometry: function (vertices, uvs) {
+
+ this.object.geometry.type = 'Line';
+
+ const vLen = this.vertices.length;
+ const uvLen = this.uvs.length;
+
+ for (let vi = 0, l = vertices.length; vi < l; vi++) {
+
+ this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen));
+
+ }
+
+ for (let uvi = 0, l = uvs.length; uvi < l; uvi++) {
+
+ this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen));
+
+ }
+
+ }
+
+ };
+
+ state.startObject('', false);
+
+ return state;
+
+}
+
+//
+
+class OBJLoader extends THREE.Loader {
+
+ constructor(manager) {
+
+ super(manager);
+
+ this.materials = null;
+
+ }
+
+ load(url, onLoad, onProgress, onError) {
+
+ const scope = this;
+
+ const loader = new THREE.FileLoader(this.manager);
+ loader.setPath(this.path);
+ loader.setRequestHeader(this.requestHeader);
+ loader.setWithCredentials(this.withCredentials);
+ loader.load(url, function (text) {
+
+ try {
+
+ onLoad(scope.parse(text));
+
+ } catch (e) {
+
+ if (onError) {
+
+ onError(e);
+
+ } else {
+
+ console.error(e);
+
+ }
+
+ scope.manager.itemError(url);
+
+ }
+
+ }, onProgress, onError);
+
+ }
+
+ setMaterials(materials) {
+
+ this.materials = materials;
+
+ return this;
+
+ }
+
+ parse(text) {
+
+ const state = new ParserState();
+
+ if (text.indexOf('\r\n') !== -1) {
+
+ // This is faster than String.split with regex that splits on both
+ text = text.replace(/\r\n/g, '\n');
+
+ }
+
+ if (text.indexOf('\\\n') !== -1) {
+
+ // join lines separated by a line continuation character (\)
+ text = text.replace(/\\\n/g, '');
+
+ }
+
+ const lines = text.split('\n');
+ let line = '', lineFirstChar = '';
+ let lineLength = 0;
+ let result = [];
+
+ // Faster to just trim left side of the line. Use if available.
+ const trimLeft = (typeof ''.trimLeft === 'function');
+
+ for (let i = 0, l = lines.length; i < l; i++) {
+
+ line = lines[i];
+
+ line = trimLeft ? line.trimLeft() : line.trim();
+
+ lineLength = line.length;
+
+ if (lineLength === 0) continue;
+
+ lineFirstChar = line.charAt(0);
+
+ // @todo invoke passed in handler if any
+ if (lineFirstChar === '#') continue;
+
+ if (lineFirstChar === 'v') {
+
+ const data = line.split(/\s+/);
+
+ switch (data[0]) {
+
+ case 'v':
+ state.vertices.push(
+ parseFloat(data[1]),
+ parseFloat(data[2]),
+ parseFloat(data[3])
+ );
+ if (data.length >= 7) {
+
+ state.colors.push(
+ parseFloat(data[4]),
+ parseFloat(data[5]),
+ parseFloat(data[6])
+ );
+
+ } else {
+
+ // if no colors are defined, add placeholders so color and vertex indices match
+
+ state.colors.push(undefined, undefined, undefined);
+
+ }
+
+ break;
+ case 'vn':
+ state.normals.push(
+ parseFloat(data[1]),
+ parseFloat(data[2]),
+ parseFloat(data[3])
+ );
+ break;
+ case 'vt':
+ state.uvs.push(
+ parseFloat(data[1]),
+ parseFloat(data[2])
+ );
+ break;
+
+ }
+
+ } else if (lineFirstChar === 'f') {
+
+ const lineData = line.substr(1).trim();
+ const vertexData = lineData.split(/\s+/);
+ const faceVertices = [];
+
+ // Parse the face vertex data into an easy to work with format
+
+ for (let j = 0, jl = vertexData.length; j < jl; j++) {
+
+ const vertex = vertexData[j];
+
+ if (vertex.length > 0) {
+
+ const vertexParts = vertex.split('/');
+ faceVertices.push(vertexParts);
+
+ }
+
+ }
+
+ // Draw an edge between the first vertex and all subsequent vertices to form an n-gon
+
+ const v1 = faceVertices[0];
+
+ for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {
+
+ const v2 = faceVertices[j];
+ const v3 = faceVertices[j + 1];
+
+ state.addFace(
+ v1[0], v2[0], v3[0],
+ v1[1], v2[1], v3[1],
+ v1[2], v2[2], v3[2]
+ );
+
+ }
+
+ } else if (lineFirstChar === 'l') {
+
+ const lineParts = line.substring(1).trim().split(' ');
+ let lineVertices = [];
+ const lineUVs = [];
+
+ if (line.indexOf('/') === -1) {
+
+ lineVertices = lineParts;
+
+ } else {
+
+ for (let li = 0, llen = lineParts.length; li < llen; li++) {
+
+ const parts = lineParts[li].split('/');
+
+ if (parts[0] !== '') lineVertices.push(parts[0]);
+ if (parts[1] !== '') lineUVs.push(parts[1]);
+
+ }
+
+ }
+
+ state.addLineGeometry(lineVertices, lineUVs);
+
+ } else if (lineFirstChar === 'p') {
+
+ const lineData = line.substr(1).trim();
+ const pointData = lineData.split(' ');
+
+ state.addPointGeometry(pointData);
+
+ } else if ((result = _object_pattern.exec(line)) !== null) {
+
+ // o object_name
+ // or
+ // g group_name
+
+ // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869
+ // let name = result[ 0 ].substr( 1 ).trim();
+ const name = (' ' + result[0].substr(1).trim()).substr(1);
+
+ state.startObject(name);
+
+ } else if (_material_use_pattern.test(line)) {
+
+ // material
+
+ state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);
+
+ } else if (_material_library_pattern.test(line)) {
+
+ // mtl file
+
+ state.materialLibraries.push(line.substring(7).trim());
+
+ } else if (_map_use_pattern.test(line)) {
+
+ // the line is parsed but ignored since the loader assumes textures are defined MTL files
+ // (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)
+
+ console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.');
+
+ } else if (lineFirstChar === 's') {
+
+ result = line.split(' ');
+
+ // smooth shading
+
+ // @todo Handle files that have varying smooth values for a set of faces inside one geometry,
+ // but does not define a usemtl for each face set.
+ // This should be detected and a dummy material created (later MultiMaterial and geometry groups).
+ // This requires some care to not create extra material on each smooth value for "normal" obj files.
+ // where explicit usemtl defines geometry groups.
+ // Example asset: examples/models/obj/cerberus/Cerberus.obj
+
+ /*
+ * http://paulbourke.net/dataformats/obj/
+ * or
+ * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf
+ *
+ * From chapter "Grouping" Syntax explanation "s group_number":
+ * "group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.
+ * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form
+ * surfaces, smoothing groups are either turned on or off; there is no difference between values greater
+ * than 0."
+ */
+ if (result.length > 1) {
+
+ const value = result[1].trim().toLowerCase();
+ state.object.smooth = (value !== '0' && value !== 'off');
+
+ } else {
+
+ // ZBrush can produce "s" lines #11707
+ state.object.smooth = true;
+
+ }
+
+ const material = state.object.currentMaterial();
+ if (material) material.smooth = state.object.smooth;
+
+ } else {
+
+ // Handle null terminated files without exception
+ if (line === '\0') continue;
+
+ console.warn('THREE.OBJLoader: Unexpected line: "' + line + '"');
+
+ }
+
+ }
+
+ state.finalize();
+
+ const container = new THREE.Group();
+ container.materialLibraries = [].concat(state.materialLibraries);
+
+ const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0);
+
+ if (hasPrimitives === true) {
+
+ for (let i = 0, l = state.objects.length; i < l; i++) {
+
+ const object = state.objects[i];
+ const geometry = object.geometry;
+ const materials = object.materials;
+ const isLine = (geometry.type === 'Line');
+ const isPoints = (geometry.type === 'THREE.Points');
+ let hasVertexColors = false;
+
+ // Skip o/g line declarations that did not follow with any faces
+ if (geometry.vertices.length === 0) continue;
+
+ const buffergeometry = new THREE.BufferGeometry();
+
+ buffergeometry.setAttribute('position', new THREE.Float32BufferAttribute(geometry.vertices, 3));
+
+ if (geometry.normals.length > 0) {
+
+ buffergeometry.setAttribute('normal', new THREE.Float32BufferAttribute(geometry.normals, 3));
+
+ }
+
+ if (geometry.colors.length > 0) {
+
+ hasVertexColors = true;
+ buffergeometry.setAttribute('color', new THREE.Float32BufferAttribute(geometry.colors, 3));
+
+ }
+
+ if (geometry.hasUVIndices === true) {
+
+ buffergeometry.setAttribute('uv', new THREE.Float32BufferAttribute(geometry.uvs, 2));
+
+ }
+
+ // Create materials
+
+ const createdMaterials = [];
+
+ for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {
+
+ const sourceMaterial = materials[mi];
+ const materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;
+ let material = state.materials[materialHash];
+
+ if (this.materials !== null) {
+
+ material = this.materials.create(sourceMaterial.name);
+
+ // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.
+ if (isLine && material && !(material instanceof THREE.LineBasicMaterial)) {
+
+ const materialLine = new THREE.LineBasicMaterial();
+ THREE.Material.prototype.copy.call(materialLine, material);
+ materialLine.color.copy(material.color);
+ material = materialLine;
+
+ } else if (isPoints && material && !(material instanceof THREE.PointsMaterial)) {
+
+ const materialPoints = new THREE.PointsMaterial({size: 10, sizeAttenuation: false});
+ THREE.Material.prototype.copy.call(materialPoints, material);
+ materialPoints.color.copy(material.color);
+ materialPoints.map = material.map;
+ material = materialPoints;
+
+ }
+
+ }
+
+ if (material === undefined) {
+
+ if (isLine) {
+
+ material = new THREE.LineBasicMaterial();
+
+ } else if (isPoints) {
+
+ material = new THREE.PointsMaterial({size: 1, sizeAttenuation: false});
+
+ } else {
+
+ material = new THREE.MeshPhongMaterial();
+
+ }
+
+ material.name = sourceMaterial.name;
+ material.flatShading = sourceMaterial.smooth ? false : true;
+ material.vertexColors = hasVertexColors;
+
+ state.materials[materialHash] = material;
+
+ }
+
+ createdMaterials.push(material);
+
+ }
+
+ // Create mesh
+
+ let mesh;
+
+ if (createdMaterials.length > 1) {
+
+ for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {
+
+ const sourceMaterial = materials[mi];
+ buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi);
+
+ }
+
+ if (isLine) {
+
+ mesh = new THREE.LineSegments(buffergeometry, createdMaterials);
+
+ } else if (isPoints) {
+
+ mesh = new THREE.Points(buffergeometry, createdMaterials);
+
+ } else {
+
+ mesh = new THREE.Mesh(buffergeometry, createdMaterials);
+
+ }
+
+ } else {
+
+ if (isLine) {
+
+ mesh = new THREE.LineSegments(buffergeometry, createdMaterials[0]);
+
+ } else if (isPoints) {
+
+ mesh = new THREE.Points(buffergeometry, createdMaterials[0]);
+
+ } else {
+
+ mesh = new THREE.Mesh(buffergeometry, createdMaterials[0]);
+
+ }
+
+ }
+
+ mesh.name = object.name;
+
+ container.add(mesh);
+
+ }
+
+ } else {
+
+ // if there is only the default parser state object with no geometry data, interpret data as point cloud
+
+ if (state.vertices.length > 0) {
+
+ const material = new THREE.PointsMaterial({size: 1, sizeAttenuation: false});
+
+ const buffergeometry = new THREE.BufferGeometry();
+
+ buffergeometry.setAttribute('position', new THREE.Float32BufferAttribute(state.vertices, 3));
+
+ if (state.colors.length > 0 && state.colors[0] !== undefined) {
+
+ buffergeometry.setAttribute('color', new THREE.Float32BufferAttribute(state.colors, 3));
+ material.vertexColors = true;
+
+ }
+
+ const points = new THREE.Points(buffergeometry, material);
+ container.add(points);
+
+ }
+
+ }
+
+ return container;
+
+ }
+
+}
+
+module.exports = {OBJLoader: OBJLoader};
+
+},{}]},{},[1,3]);
diff --git a/src/main/resources/static/gltf-viewer/js/three.js b/src/main/resources/static/gltf-viewer/js/three.js
new file mode 100644
index 0000000..595636b
--- /dev/null
+++ b/src/main/resources/static/gltf-viewer/js/three.js
@@ -0,0 +1,36493 @@
+(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' + _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' + _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] + _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff]; // .toUpperCase() here flattens concatenated strings to save heap memory space.
+
+ return uuid.toUpperCase();
+ }
+
+ function clamp(value, min, max) {
+ return Math.max(min, Math.min(max, value));
+ } // compute euclidian modulo of m % n
+ // https://en.wikipedia.org/wiki/Modulo_operation
+
+
+ function euclideanModulo(n, m) {
+ return (n % m + m) % m;
+ } // Linear mapping from range to range
+
+
+ function mapLinear(x, a1, a2, b1, b2) {
+ return b1 + (x - a1) * (b2 - b1) / (a2 - a1);
+ } // https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/
+
+
+ function inverseLerp(x, y, value) {
+ if (x !== y) {
+ return (value - x) / (y - x);
+ } else {
+ return 0;
+ }
+ } // https://en.wikipedia.org/wiki/Linear_interpolation
+
+
+ function lerp(x, y, t) {
+ return (1 - t) * x + t * y;
+ } // http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/
+
+
+ function damp(x, y, lambda, dt) {
+ return lerp(x, y, 1 - Math.exp(-lambda * dt));
+ } // https://www.desmos.com/calculator/vcsjnyz7x4
+
+
+ function pingpong(x, length = 1) {
+ return length - Math.abs(euclideanModulo(x, length * 2) - length);
+ } // http://en.wikipedia.org/wiki/Smoothstep
+
+
+ function smoothstep(x, min, max) {
+ if (x <= min) return 0;
+ if (x >= max) return 1;
+ x = (x - min) / (max - min);
+ return x * x * (3 - 2 * x);
+ }
+
+ function smootherstep(x, min, max) {
+ if (x <= min) return 0;
+ if (x >= max) return 1;
+ x = (x - min) / (max - min);
+ return x * x * x * (x * (x * 6 - 15) + 10);
+ } // Random integer from interval
+
+
+ function randInt(low, high) {
+ return low + Math.floor(Math.random() * (high - low + 1));
+ } // Random float from interval
+
+
+ function randFloat(low, high) {
+ return low + Math.random() * (high - low);
+ } // Random float from <-range/2, range/2> interval
+
+
+ function randFloatSpread(range) {
+ return range * (0.5 - Math.random());
+ } // Deterministic pseudo-random float in the interval [ 0, 1 ]
+
+
+ function seededRandom(s) {
+ if (s !== undefined) _seed = s % 2147483647; // Park-Miller algorithm
+
+ _seed = _seed * 16807 % 2147483647;
+ return (_seed - 1) / 2147483646;
+ }
+
+ function degToRad(degrees) {
+ return degrees * DEG2RAD;
+ }
+
+ function radToDeg(radians) {
+ return radians * RAD2DEG;
+ }
+
+ function isPowerOfTwo(value) {
+ return (value & value - 1) === 0 && value !== 0;
+ }
+
+ function ceilPowerOfTwo(value) {
+ return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));
+ }
+
+ function floorPowerOfTwo(value) {
+ return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));
+ }
+
+ function setQuaternionFromProperEuler(q, a, b, c, order) {
+ // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles
+ // rotations are applied to the axes in the order specified by 'order'
+ // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'
+ // angles are in radians
+ const cos = Math.cos;
+ const sin = Math.sin;
+ const c2 = cos(b / 2);
+ const s2 = sin(b / 2);
+ const c13 = cos((a + c) / 2);
+ const s13 = sin((a + c) / 2);
+ const c1_3 = cos((a - c) / 2);
+ const s1_3 = sin((a - c) / 2);
+ const c3_1 = cos((c - a) / 2);
+ const s3_1 = sin((c - a) / 2);
+
+ switch (order) {
+ case 'XYX':
+ q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);
+ break;
+
+ case 'YZY':
+ q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);
+ break;
+
+ case 'ZXZ':
+ q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);
+ break;
+
+ case 'XZX':
+ q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);
+ break;
+
+ case 'YXY':
+ q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);
+ break;
+
+ case 'ZYZ':
+ q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);
+ break;
+
+ default:
+ console.warn('THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order);
+ }
+ }
+
+ var MathUtils = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ DEG2RAD: DEG2RAD,
+ RAD2DEG: RAD2DEG,
+ generateUUID: generateUUID,
+ clamp: clamp,
+ euclideanModulo: euclideanModulo,
+ mapLinear: mapLinear,
+ inverseLerp: inverseLerp,
+ lerp: lerp,
+ damp: damp,
+ pingpong: pingpong,
+ smoothstep: smoothstep,
+ smootherstep: smootherstep,
+ randInt: randInt,
+ randFloat: randFloat,
+ randFloatSpread: randFloatSpread,
+ seededRandom: seededRandom,
+ degToRad: degToRad,
+ radToDeg: radToDeg,
+ isPowerOfTwo: isPowerOfTwo,
+ ceilPowerOfTwo: ceilPowerOfTwo,
+ floorPowerOfTwo: floorPowerOfTwo,
+ setQuaternionFromProperEuler: setQuaternionFromProperEuler
+ });
+
+ class Vector2 {
+ constructor(x = 0, y = 0) {
+ this.x = x;
+ this.y = y;
+ }
+
+ get width() {
+ return this.x;
+ }
+
+ set width(value) {
+ this.x = value;
+ }
+
+ get height() {
+ return this.y;
+ }
+
+ set height(value) {
+ this.y = value;
+ }
+
+ set(x, y) {
+ this.x = x;
+ this.y = y;
+ return this;
+ }
+
+ setScalar(scalar) {
+ this.x = scalar;
+ this.y = scalar;
+ return this;
+ }
+
+ setX(x) {
+ this.x = x;
+ return this;
+ }
+
+ setY(y) {
+ this.y = y;
+ return this;
+ }
+
+ setComponent(index, value) {
+ switch (index) {
+ case 0:
+ this.x = value;
+ break;
+
+ case 1:
+ this.y = value;
+ break;
+
+ default:
+ throw new Error('index is out of range: ' + index);
+ }
+
+ return this;
+ }
+
+ getComponent(index) {
+ switch (index) {
+ case 0:
+ return this.x;
+
+ case 1:
+ return this.y;
+
+ default:
+ throw new Error('index is out of range: ' + index);
+ }
+ }
+
+ clone() {
+ return new this.constructor(this.x, this.y);
+ }
+
+ copy(v) {
+ this.x = v.x;
+ this.y = v.y;
+ return this;
+ }
+
+ add(v, w) {
+ if (w !== undefined) {
+ console.warn('THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');
+ return this.addVectors(v, w);
+ }
+
+ this.x += v.x;
+ this.y += v.y;
+ return this;
+ }
+
+ addScalar(s) {
+ this.x += s;
+ this.y += s;
+ return this;
+ }
+
+ addVectors(a, b) {
+ this.x = a.x + b.x;
+ this.y = a.y + b.y;
+ return this;
+ }
+
+ addScaledVector(v, s) {
+ this.x += v.x * s;
+ this.y += v.y * s;
+ return this;
+ }
+
+ sub(v, w) {
+ if (w !== undefined) {
+ console.warn('THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');
+ return this.subVectors(v, w);
+ }
+
+ this.x -= v.x;
+ this.y -= v.y;
+ return this;
+ }
+
+ subScalar(s) {
+ this.x -= s;
+ this.y -= s;
+ return this;
+ }
+
+ subVectors(a, b) {
+ this.x = a.x - b.x;
+ this.y = a.y - b.y;
+ return this;
+ }
+
+ multiply(v) {
+ this.x *= v.x;
+ this.y *= v.y;
+ return this;
+ }
+
+ multiplyScalar(scalar) {
+ this.x *= scalar;
+ this.y *= scalar;
+ return this;
+ }
+
+ divide(v) {
+ this.x /= v.x;
+ this.y /= v.y;
+ return this;
+ }
+
+ divideScalar(scalar) {
+ return this.multiplyScalar(1 / scalar);
+ }
+
+ applyMatrix3(m) {
+ const x = this.x,
+ y = this.y;
+ const e = m.elements;
+ this.x = e[0] * x + e[3] * y + e[6];
+ this.y = e[1] * x + e[4] * y + e[7];
+ return this;
+ }
+
+ min(v) {
+ this.x = Math.min(this.x, v.x);
+ this.y = Math.min(this.y, v.y);
+ return this;
+ }
+
+ max(v) {
+ this.x = Math.max(this.x, v.x);
+ this.y = Math.max(this.y, v.y);
+ return this;
+ }
+
+ clamp(min, max) {
+ // assumes min < max, componentwise
+ this.x = Math.max(min.x, Math.min(max.x, this.x));
+ this.y = Math.max(min.y, Math.min(max.y, this.y));
+ return this;
+ }
+
+ clampScalar(minVal, maxVal) {
+ this.x = Math.max(minVal, Math.min(maxVal, this.x));
+ this.y = Math.max(minVal, Math.min(maxVal, this.y));
+ return this;
+ }
+
+ clampLength(min, max) {
+ const length = this.length();
+ return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));
+ }
+
+ floor() {
+ this.x = Math.floor(this.x);
+ this.y = Math.floor(this.y);
+ return this;
+ }
+
+ ceil() {
+ this.x = Math.ceil(this.x);
+ this.y = Math.ceil(this.y);
+ return this;
+ }
+
+ round() {
+ this.x = Math.round(this.x);
+ this.y = Math.round(this.y);
+ return this;
+ }
+
+ roundToZero() {
+ this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);
+ this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);
+ return this;
+ }
+
+ negate() {
+ this.x = -this.x;
+ this.y = -this.y;
+ return this;
+ }
+
+ dot(v) {
+ return this.x * v.x + this.y * v.y;
+ }
+
+ cross(v) {
+ return this.x * v.y - this.y * v.x;
+ }
+
+ lengthSq() {
+ return this.x * this.x + this.y * this.y;
+ }
+
+ length() {
+ return Math.sqrt(this.x * this.x + this.y * this.y);
+ }
+
+ manhattanLength() {
+ return Math.abs(this.x) + Math.abs(this.y);
+ }
+
+ normalize() {
+ return this.divideScalar(this.length() || 1);
+ }
+
+ angle() {
+ // computes the angle in radians with respect to the positive x-axis
+ const angle = Math.atan2(-this.y, -this.x) + Math.PI;
+ return angle;
+ }
+
+ distanceTo(v) {
+ return Math.sqrt(this.distanceToSquared(v));
+ }
+
+ distanceToSquared(v) {
+ const dx = this.x - v.x,
+ dy = this.y - v.y;
+ return dx * dx + dy * dy;
+ }
+
+ manhattanDistanceTo(v) {
+ return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);
+ }
+
+ setLength(length) {
+ return this.normalize().multiplyScalar(length);
+ }
+
+ lerp(v, alpha) {
+ this.x += (v.x - this.x) * alpha;
+ this.y += (v.y - this.y) * alpha;
+ return this;
+ }
+
+ lerpVectors(v1, v2, alpha) {
+ this.x = v1.x + (v2.x - v1.x) * alpha;
+ this.y = v1.y + (v2.y - v1.y) * alpha;
+ return this;
+ }
+
+ equals(v) {
+ return v.x === this.x && v.y === this.y;
+ }
+
+ fromArray(array, offset = 0) {
+ this.x = array[offset];
+ this.y = array[offset + 1];
+ return this;
+ }
+
+ toArray(array = [], offset = 0) {
+ array[offset] = this.x;
+ array[offset + 1] = this.y;
+ return array;
+ }
+
+ fromBufferAttribute(attribute, index, offset) {
+ if (offset !== undefined) {
+ console.warn('THREE.Vector2: offset has been removed from .fromBufferAttribute().');
+ }
+
+ this.x = attribute.getX(index);
+ this.y = attribute.getY(index);
+ return this;
+ }
+
+ rotateAround(center, angle) {
+ const c = Math.cos(angle),
+ s = Math.sin(angle);
+ const x = this.x - center.x;
+ const y = this.y - center.y;
+ this.x = x * c - y * s + center.x;
+ this.y = x * s + y * c + center.y;
+ return this;
+ }
+
+ random() {
+ this.x = Math.random();
+ this.y = Math.random();
+ return this;
+ }
+
+ }
+
+ Vector2.prototype.isVector2 = true;
+
+ class Matrix3 {
+ constructor() {
+ this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1];
+
+ if (arguments.length > 0) {
+ console.error('THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.');
+ }
+ }
+
+ set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {
+ const te = this.elements;
+ te[0] = n11;
+ te[1] = n21;
+ te[2] = n31;
+ te[3] = n12;
+ te[4] = n22;
+ te[5] = n32;
+ te[6] = n13;
+ te[7] = n23;
+ te[8] = n33;
+ return this;
+ }
+
+ identity() {
+ this.set(1, 0, 0, 0, 1, 0, 0, 0, 1);
+ return this;
+ }
+
+ copy(m) {
+ const te = this.elements;
+ const me = m.elements;
+ te[0] = me[0];
+ te[1] = me[1];
+ te[2] = me[2];
+ te[3] = me[3];
+ te[4] = me[4];
+ te[5] = me[5];
+ te[6] = me[6];
+ te[7] = me[7];
+ te[8] = me[8];
+ return this;
+ }
+
+ extractBasis(xAxis, yAxis, zAxis) {
+ xAxis.setFromMatrix3Column(this, 0);
+ yAxis.setFromMatrix3Column(this, 1);
+ zAxis.setFromMatrix3Column(this, 2);
+ return this;
+ }
+
+ setFromMatrix4(m) {
+ const me = m.elements;
+ this.set(me[0], me[4], me[8], me[1], me[5], me[9], me[2], me[6], me[10]);
+ return this;
+ }
+
+ multiply(m) {
+ return this.multiplyMatrices(this, m);
+ }
+
+ premultiply(m) {
+ return this.multiplyMatrices(m, this);
+ }
+
+ multiplyMatrices(a, b) {
+ const ae = a.elements;
+ const be = b.elements;
+ const te = this.elements;
+ const a11 = ae[0],
+ a12 = ae[3],
+ a13 = ae[6];
+ const a21 = ae[1],
+ a22 = ae[4],
+ a23 = ae[7];
+ const a31 = ae[2],
+ a32 = ae[5],
+ a33 = ae[8];
+ const b11 = be[0],
+ b12 = be[3],
+ b13 = be[6];
+ const b21 = be[1],
+ b22 = be[4],
+ b23 = be[7];
+ const b31 = be[2],
+ b32 = be[5],
+ b33 = be[8];
+ te[0] = a11 * b11 + a12 * b21 + a13 * b31;
+ te[3] = a11 * b12 + a12 * b22 + a13 * b32;
+ te[6] = a11 * b13 + a12 * b23 + a13 * b33;
+ te[1] = a21 * b11 + a22 * b21 + a23 * b31;
+ te[4] = a21 * b12 + a22 * b22 + a23 * b32;
+ te[7] = a21 * b13 + a22 * b23 + a23 * b33;
+ te[2] = a31 * b11 + a32 * b21 + a33 * b31;
+ te[5] = a31 * b12 + a32 * b22 + a33 * b32;
+ te[8] = a31 * b13 + a32 * b23 + a33 * b33;
+ return this;
+ }
+
+ multiplyScalar(s) {
+ const te = this.elements;
+ te[0] *= s;
+ te[3] *= s;
+ te[6] *= s;
+ te[1] *= s;
+ te[4] *= s;
+ te[7] *= s;
+ te[2] *= s;
+ te[5] *= s;
+ te[8] *= s;
+ return this;
+ }
+
+ determinant() {
+ const te = this.elements;
+ const a = te[0],
+ b = te[1],
+ c = te[2],
+ d = te[3],
+ e = te[4],
+ f = te[5],
+ g = te[6],
+ h = te[7],
+ i = te[8];
+ return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;
+ }
+
+ invert() {
+ const te = this.elements,
+ n11 = te[0],
+ n21 = te[1],
+ n31 = te[2],
+ n12 = te[3],
+ n22 = te[4],
+ n32 = te[5],
+ n13 = te[6],
+ n23 = te[7],
+ n33 = te[8],
+ t11 = n33 * n22 - n32 * n23,
+ t12 = n32 * n13 - n33 * n12,
+ t13 = n23 * n12 - n22 * n13,
+ det = n11 * t11 + n21 * t12 + n31 * t13;
+ if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);
+ const detInv = 1 / det;
+ te[0] = t11 * detInv;
+ te[1] = (n31 * n23 - n33 * n21) * detInv;
+ te[2] = (n32 * n21 - n31 * n22) * detInv;
+ te[3] = t12 * detInv;
+ te[4] = (n33 * n11 - n31 * n13) * detInv;
+ te[5] = (n31 * n12 - n32 * n11) * detInv;
+ te[6] = t13 * detInv;
+ te[7] = (n21 * n13 - n23 * n11) * detInv;
+ te[8] = (n22 * n11 - n21 * n12) * detInv;
+ return this;
+ }
+
+ transpose() {
+ let tmp;
+ const m = this.elements;
+ tmp = m[1];
+ m[1] = m[3];
+ m[3] = tmp;
+ tmp = m[2];
+ m[2] = m[6];
+ m[6] = tmp;
+ tmp = m[5];
+ m[5] = m[7];
+ m[7] = tmp;
+ return this;
+ }
+
+ getNormalMatrix(matrix4) {
+ return this.setFromMatrix4(matrix4).invert().transpose();
+ }
+
+ transposeIntoArray(r) {
+ const m = this.elements;
+ r[0] = m[0];
+ r[1] = m[3];
+ r[2] = m[6];
+ r[3] = m[1];
+ r[4] = m[4];
+ r[5] = m[7];
+ r[6] = m[2];
+ r[7] = m[5];
+ r[8] = m[8];
+ return this;
+ }
+
+ setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {
+ const c = Math.cos(rotation);
+ const s = Math.sin(rotation);
+ this.set(sx * c, sx * s, -sx * (c * cx + s * cy) + cx + tx, -sy * s, sy * c, -sy * (-s * cx + c * cy) + cy + ty, 0, 0, 1);
+ return this;
+ }
+
+ scale(sx, sy) {
+ const te = this.elements;
+ te[0] *= sx;
+ te[3] *= sx;
+ te[6] *= sx;
+ te[1] *= sy;
+ te[4] *= sy;
+ te[7] *= sy;
+ return this;
+ }
+
+ rotate(theta) {
+ const c = Math.cos(theta);
+ const s = Math.sin(theta);
+ const te = this.elements;
+ const a11 = te[0],
+ a12 = te[3],
+ a13 = te[6];
+ const a21 = te[1],
+ a22 = te[4],
+ a23 = te[7];
+ te[0] = c * a11 + s * a21;
+ te[3] = c * a12 + s * a22;
+ te[6] = c * a13 + s * a23;
+ te[1] = -s * a11 + c * a21;
+ te[4] = -s * a12 + c * a22;
+ te[7] = -s * a13 + c * a23;
+ return this;
+ }
+
+ translate(tx, ty) {
+ const te = this.elements;
+ te[0] += tx * te[2];
+ te[3] += tx * te[5];
+ te[6] += tx * te[8];
+ te[1] += ty * te[2];
+ te[4] += ty * te[5];
+ te[7] += ty * te[8];
+ return this;
+ }
+
+ equals(matrix) {
+ const te = this.elements;
+ const me = matrix.elements;
+
+ for (let i = 0; i < 9; i++) {
+ if (te[i] !== me[i]) return false;
+ }
+
+ return true;
+ }
+
+ fromArray(array, offset = 0) {
+ for (let i = 0; i < 9; i++) {
+ this.elements[i] = array[i + offset];
+ }
+
+ return this;
+ }
+
+ toArray(array = [], offset = 0) {
+ const te = this.elements;
+ array[offset] = te[0];
+ array[offset + 1] = te[1];
+ array[offset + 2] = te[2];
+ array[offset + 3] = te[3];
+ array[offset + 4] = te[4];
+ array[offset + 5] = te[5];
+ array[offset + 6] = te[6];
+ array[offset + 7] = te[7];
+ array[offset + 8] = te[8];
+ return array;
+ }
+
+ clone() {
+ return new this.constructor().fromArray(this.elements);
+ }
+
+ }
+
+ Matrix3.prototype.isMatrix3 = true;
+
+ let _canvas;
+
+ class ImageUtils {
+ static getDataURL(image) {
+ if (/^data:/i.test(image.src)) {
+ return image.src;
+ }
+
+ if (typeof HTMLCanvasElement == 'undefined') {
+ return image.src;
+ }
+
+ let canvas;
+
+ if (image instanceof HTMLCanvasElement) {
+ canvas = image;
+ } else {
+ if (_canvas === undefined) _canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
+ _canvas.width = image.width;
+ _canvas.height = image.height;
+
+ const context = _canvas.getContext('2d');
+
+ if (image instanceof ImageData) {
+ context.putImageData(image, 0, 0);
+ } else {
+ context.drawImage(image, 0, 0, image.width, image.height);
+ }
+
+ canvas = _canvas;
+ }
+
+ if (canvas.width > 2048 || canvas.height > 2048) {
+ console.warn('THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image);
+ return canvas.toDataURL('image/jpeg', 0.6);
+ } else {
+ return canvas.toDataURL('image/png');
+ }
+ }
+
+ }
+
+ let textureId = 0;
+
+ class Texture extends EventDispatcher {
+ constructor(image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding) {
+ super();
+ Object.defineProperty(this, 'id', {
+ value: textureId++
+ });
+ this.uuid = generateUUID();
+ this.name = '';
+ this.image = image;
+ this.mipmaps = [];
+ this.mapping = mapping;
+ this.wrapS = wrapS;
+ this.wrapT = wrapT;
+ this.magFilter = magFilter;
+ this.minFilter = minFilter;
+ this.anisotropy = anisotropy;
+ this.format = format;
+ this.internalFormat = null;
+ this.type = type;
+ this.offset = new Vector2(0, 0);
+ this.repeat = new Vector2(1, 1);
+ this.center = new Vector2(0, 0);
+ this.rotation = 0;
+ this.matrixAutoUpdate = true;
+ this.matrix = new Matrix3();
+ this.generateMipmaps = true;
+ this.premultiplyAlpha = false;
+ this.flipY = true;
+ this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)
+ // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.
+ //
+ // Also changing the encoding after already used by a Material will not automatically make the Material
+ // update. You need to explicitly call Material.needsUpdate to trigger it to recompile.
+
+ this.encoding = encoding;
+ this.version = 0;
+ this.onUpdate = null;
+ this.isRenderTargetTexture = false;
+ }
+
+ updateMatrix() {
+ this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y);
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ copy(source) {
+ this.name = source.name;
+ this.image = source.image;
+ this.mipmaps = source.mipmaps.slice(0);
+ this.mapping = source.mapping;
+ this.wrapS = source.wrapS;
+ this.wrapT = source.wrapT;
+ this.magFilter = source.magFilter;
+ this.minFilter = source.minFilter;
+ this.anisotropy = source.anisotropy;
+ this.format = source.format;
+ this.internalFormat = source.internalFormat;
+ this.type = source.type;
+ this.offset.copy(source.offset);
+ this.repeat.copy(source.repeat);
+ this.center.copy(source.center);
+ this.rotation = source.rotation;
+ this.matrixAutoUpdate = source.matrixAutoUpdate;
+ this.matrix.copy(source.matrix);
+ this.generateMipmaps = source.generateMipmaps;
+ this.premultiplyAlpha = source.premultiplyAlpha;
+ this.flipY = source.flipY;
+ this.unpackAlignment = source.unpackAlignment;
+ this.encoding = source.encoding;
+ return this;
+ }
+
+ toJSON(meta) {
+ const isRootObject = meta === undefined || typeof meta === 'string';
+
+ if (!isRootObject && meta.textures[this.uuid] !== undefined) {
+ return meta.textures[this.uuid];
+ }
+
+ const output = {
+ metadata: {
+ version: 4.5,
+ type: 'Texture',
+ generator: 'Texture.toJSON'
+ },
+ uuid: this.uuid,
+ name: this.name,
+ mapping: this.mapping,
+ repeat: [this.repeat.x, this.repeat.y],
+ offset: [this.offset.x, this.offset.y],
+ center: [this.center.x, this.center.y],
+ rotation: this.rotation,
+ wrap: [this.wrapS, this.wrapT],
+ format: this.format,
+ type: this.type,
+ encoding: this.encoding,
+ minFilter: this.minFilter,
+ magFilter: this.magFilter,
+ anisotropy: this.anisotropy,
+ flipY: this.flipY,
+ premultiplyAlpha: this.premultiplyAlpha,
+ unpackAlignment: this.unpackAlignment
+ };
+
+ if (this.image !== undefined) {
+ // TODO: Move to THREE.Image
+ const image = this.image;
+
+ if (image.uuid === undefined) {
+ image.uuid = generateUUID(); // UGH
+ }
+
+ if (!isRootObject && meta.images[image.uuid] === undefined) {
+ let url;
+
+ if (Array.isArray(image)) {
+ // process array of images e.g. CubeTexture
+ url = [];
+
+ for (let i = 0, l = image.length; i < l; i++) {
+ // check cube texture with data textures
+ if (image[i].isDataTexture) {
+ url.push(serializeImage(image[i].image));
+ } else {
+ url.push(serializeImage(image[i]));
+ }
+ }
+ } else {
+ // process single image
+ url = serializeImage(image);
+ }
+
+ meta.images[image.uuid] = {
+ uuid: image.uuid,
+ url: url
+ };
+ }
+
+ output.image = image.uuid;
+ }
+
+ if (!isRootObject) {
+ meta.textures[this.uuid] = output;
+ }
+
+ return output;
+ }
+
+ dispose() {
+ this.dispatchEvent({
+ type: 'dispose'
+ });
+ }
+
+ transformUv(uv) {
+ if (this.mapping !== UVMapping) return uv;
+ uv.applyMatrix3(this.matrix);
+
+ if (uv.x < 0 || uv.x > 1) {
+ switch (this.wrapS) {
+ case RepeatWrapping:
+ uv.x = uv.x - Math.floor(uv.x);
+ break;
+
+ case ClampToEdgeWrapping:
+ uv.x = uv.x < 0 ? 0 : 1;
+ break;
+
+ case MirroredRepeatWrapping:
+ if (Math.abs(Math.floor(uv.x) % 2) === 1) {
+ uv.x = Math.ceil(uv.x) - uv.x;
+ } else {
+ uv.x = uv.x - Math.floor(uv.x);
+ }
+
+ break;
+ }
+ }
+
+ if (uv.y < 0 || uv.y > 1) {
+ switch (this.wrapT) {
+ case RepeatWrapping:
+ uv.y = uv.y - Math.floor(uv.y);
+ break;
+
+ case ClampToEdgeWrapping:
+ uv.y = uv.y < 0 ? 0 : 1;
+ break;
+
+ case MirroredRepeatWrapping:
+ if (Math.abs(Math.floor(uv.y) % 2) === 1) {
+ uv.y = Math.ceil(uv.y) - uv.y;
+ } else {
+ uv.y = uv.y - Math.floor(uv.y);
+ }
+
+ break;
+ }
+ }
+
+ if (this.flipY) {
+ uv.y = 1 - uv.y;
+ }
+
+ return uv;
+ }
+
+ set needsUpdate(value) {
+ if (value === true) this.version++;
+ }
+
+ }
+
+ Texture.DEFAULT_IMAGE = undefined;
+ Texture.DEFAULT_MAPPING = UVMapping;
+ Texture.prototype.isTexture = true;
+
+ function serializeImage(image) {
+ if (typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) {
+ // default images
+ return ImageUtils.getDataURL(image);
+ } else {
+ if (image.data) {
+ // images of DataTexture
+ return {
+ data: Array.prototype.slice.call(image.data),
+ width: image.width,
+ height: image.height,
+ type: image.data.constructor.name
+ };
+ } else {
+ console.warn('THREE.Texture: Unable to serialize Texture.');
+ return {};
+ }
+ }
+ }
+
+ class Vector4 {
+ constructor(x = 0, y = 0, z = 0, w = 1) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.w = w;
+ }
+
+ get width() {
+ return this.z;
+ }
+
+ set width(value) {
+ this.z = value;
+ }
+
+ get height() {
+ return this.w;
+ }
+
+ set height(value) {
+ this.w = value;
+ }
+
+ set(x, y, z, w) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.w = w;
+ return this;
+ }
+
+ setScalar(scalar) {
+ this.x = scalar;
+ this.y = scalar;
+ this.z = scalar;
+ this.w = scalar;
+ return this;
+ }
+
+ setX(x) {
+ this.x = x;
+ return this;
+ }
+
+ setY(y) {
+ this.y = y;
+ return this;
+ }
+
+ setZ(z) {
+ this.z = z;
+ return this;
+ }
+
+ setW(w) {
+ this.w = w;
+ return this;
+ }
+
+ setComponent(index, value) {
+ switch (index) {
+ case 0:
+ this.x = value;
+ break;
+
+ case 1:
+ this.y = value;
+ break;
+
+ case 2:
+ this.z = value;
+ break;
+
+ case 3:
+ this.w = value;
+ break;
+
+ default:
+ throw new Error('index is out of range: ' + index);
+ }
+
+ return this;
+ }
+
+ getComponent(index) {
+ switch (index) {
+ case 0:
+ return this.x;
+
+ case 1:
+ return this.y;
+
+ case 2:
+ return this.z;
+
+ case 3:
+ return this.w;
+
+ default:
+ throw new Error('index is out of range: ' + index);
+ }
+ }
+
+ clone() {
+ return new this.constructor(this.x, this.y, this.z, this.w);
+ }
+
+ copy(v) {
+ this.x = v.x;
+ this.y = v.y;
+ this.z = v.z;
+ this.w = v.w !== undefined ? v.w : 1;
+ return this;
+ }
+
+ add(v, w) {
+ if (w !== undefined) {
+ console.warn('THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');
+ return this.addVectors(v, w);
+ }
+
+ this.x += v.x;
+ this.y += v.y;
+ this.z += v.z;
+ this.w += v.w;
+ return this;
+ }
+
+ addScalar(s) {
+ this.x += s;
+ this.y += s;
+ this.z += s;
+ this.w += s;
+ return this;
+ }
+
+ addVectors(a, b) {
+ this.x = a.x + b.x;
+ this.y = a.y + b.y;
+ this.z = a.z + b.z;
+ this.w = a.w + b.w;
+ return this;
+ }
+
+ addScaledVector(v, s) {
+ this.x += v.x * s;
+ this.y += v.y * s;
+ this.z += v.z * s;
+ this.w += v.w * s;
+ return this;
+ }
+
+ sub(v, w) {
+ if (w !== undefined) {
+ console.warn('THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');
+ return this.subVectors(v, w);
+ }
+
+ this.x -= v.x;
+ this.y -= v.y;
+ this.z -= v.z;
+ this.w -= v.w;
+ return this;
+ }
+
+ subScalar(s) {
+ this.x -= s;
+ this.y -= s;
+ this.z -= s;
+ this.w -= s;
+ return this;
+ }
+
+ subVectors(a, b) {
+ this.x = a.x - b.x;
+ this.y = a.y - b.y;
+ this.z = a.z - b.z;
+ this.w = a.w - b.w;
+ return this;
+ }
+
+ multiply(v) {
+ this.x *= v.x;
+ this.y *= v.y;
+ this.z *= v.z;
+ this.w *= v.w;
+ return this;
+ }
+
+ multiplyScalar(scalar) {
+ this.x *= scalar;
+ this.y *= scalar;
+ this.z *= scalar;
+ this.w *= scalar;
+ return this;
+ }
+
+ applyMatrix4(m) {
+ const x = this.x,
+ y = this.y,
+ z = this.z,
+ w = this.w;
+ const e = m.elements;
+ this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;
+ this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;
+ this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;
+ this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;
+ return this;
+ }
+
+ divideScalar(scalar) {
+ return this.multiplyScalar(1 / scalar);
+ }
+
+ setAxisAngleFromQuaternion(q) {
+ // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
+ // q is assumed to be normalized
+ this.w = 2 * Math.acos(q.w);
+ const s = Math.sqrt(1 - q.w * q.w);
+
+ if (s < 0.0001) {
+ this.x = 1;
+ this.y = 0;
+ this.z = 0;
+ } else {
+ this.x = q.x / s;
+ this.y = q.y / s;
+ this.z = q.z / s;
+ }
+
+ return this;
+ }
+
+ setAxisAngleFromRotationMatrix(m) {
+ // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm
+ // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
+ let angle, x, y, z; // variables for result
+
+ const epsilon = 0.01,
+ // margin to allow for rounding errors
+ epsilon2 = 0.1,
+ // margin to distinguish between 0 and 180 degrees
+ te = m.elements,
+ m11 = te[0],
+ m12 = te[4],
+ m13 = te[8],
+ m21 = te[1],
+ m22 = te[5],
+ m23 = te[9],
+ m31 = te[2],
+ m32 = te[6],
+ m33 = te[10];
+
+ if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) {
+ // singularity found
+ // first check for identity matrix which must have +1 for all terms
+ // in leading diagonal and zero in other terms
+ if (Math.abs(m12 + m21) < epsilon2 && Math.abs(m13 + m31) < epsilon2 && Math.abs(m23 + m32) < epsilon2 && Math.abs(m11 + m22 + m33 - 3) < epsilon2) {
+ // this singularity is identity matrix so angle = 0
+ this.set(1, 0, 0, 0);
+ return this; // zero angle, arbitrary axis
+ } // otherwise this singularity is angle = 180
+
+
+ angle = Math.PI;
+ const xx = (m11 + 1) / 2;
+ const yy = (m22 + 1) / 2;
+ const zz = (m33 + 1) / 2;
+ const xy = (m12 + m21) / 4;
+ const xz = (m13 + m31) / 4;
+ const yz = (m23 + m32) / 4;
+
+ if (xx > yy && xx > zz) {
+ // m11 is the largest diagonal term
+ if (xx < epsilon) {
+ x = 0;
+ y = 0.707106781;
+ z = 0.707106781;
+ } else {
+ x = Math.sqrt(xx);
+ y = xy / x;
+ z = xz / x;
+ }
+ } else if (yy > zz) {
+ // m22 is the largest diagonal term
+ if (yy < epsilon) {
+ x = 0.707106781;
+ y = 0;
+ z = 0.707106781;
+ } else {
+ y = Math.sqrt(yy);
+ x = xy / y;
+ z = yz / y;
+ }
+ } else {
+ // m33 is the largest diagonal term so base result on this
+ if (zz < epsilon) {
+ x = 0.707106781;
+ y = 0.707106781;
+ z = 0;
+ } else {
+ z = Math.sqrt(zz);
+ x = xz / z;
+ y = yz / z;
+ }
+ }
+
+ this.set(x, y, z, angle);
+ return this; // return 180 deg rotation
+ } // as we have reached here there are no singularities so we can handle normally
+
+
+ let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); // used to normalize
+
+ if (Math.abs(s) < 0.001) s = 1; // prevent divide by zero, should not happen if matrix is orthogonal and should be
+ // caught by singularity test above, but I've left it in just in case
+
+ this.x = (m32 - m23) / s;
+ this.y = (m13 - m31) / s;
+ this.z = (m21 - m12) / s;
+ this.w = Math.acos((m11 + m22 + m33 - 1) / 2);
+ return this;
+ }
+
+ min(v) {
+ this.x = Math.min(this.x, v.x);
+ this.y = Math.min(this.y, v.y);
+ this.z = Math.min(this.z, v.z);
+ this.w = Math.min(this.w, v.w);
+ return this;
+ }
+
+ max(v) {
+ this.x = Math.max(this.x, v.x);
+ this.y = Math.max(this.y, v.y);
+ this.z = Math.max(this.z, v.z);
+ this.w = Math.max(this.w, v.w);
+ return this;
+ }
+
+ clamp(min, max) {
+ // assumes min < max, componentwise
+ this.x = Math.max(min.x, Math.min(max.x, this.x));
+ this.y = Math.max(min.y, Math.min(max.y, this.y));
+ this.z = Math.max(min.z, Math.min(max.z, this.z));
+ this.w = Math.max(min.w, Math.min(max.w, this.w));
+ return this;
+ }
+
+ clampScalar(minVal, maxVal) {
+ this.x = Math.max(minVal, Math.min(maxVal, this.x));
+ this.y = Math.max(minVal, Math.min(maxVal, this.y));
+ this.z = Math.max(minVal, Math.min(maxVal, this.z));
+ this.w = Math.max(minVal, Math.min(maxVal, this.w));
+ return this;
+ }
+
+ clampLength(min, max) {
+ const length = this.length();
+ return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));
+ }
+
+ floor() {
+ this.x = Math.floor(this.x);
+ this.y = Math.floor(this.y);
+ this.z = Math.floor(this.z);
+ this.w = Math.floor(this.w);
+ return this;
+ }
+
+ ceil() {
+ this.x = Math.ceil(this.x);
+ this.y = Math.ceil(this.y);
+ this.z = Math.ceil(this.z);
+ this.w = Math.ceil(this.w);
+ return this;
+ }
+
+ round() {
+ this.x = Math.round(this.x);
+ this.y = Math.round(this.y);
+ this.z = Math.round(this.z);
+ this.w = Math.round(this.w);
+ return this;
+ }
+
+ roundToZero() {
+ this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);
+ this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);
+ this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);
+ this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w);
+ return this;
+ }
+
+ negate() {
+ this.x = -this.x;
+ this.y = -this.y;
+ this.z = -this.z;
+ this.w = -this.w;
+ return this;
+ }
+
+ dot(v) {
+ return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;
+ }
+
+ lengthSq() {
+ return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;
+ }
+
+ length() {
+ return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);
+ }
+
+ manhattanLength() {
+ return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w);
+ }
+
+ normalize() {
+ return this.divideScalar(this.length() || 1);
+ }
+
+ setLength(length) {
+ return this.normalize().multiplyScalar(length);
+ }
+
+ lerp(v, alpha) {
+ this.x += (v.x - this.x) * alpha;
+ this.y += (v.y - this.y) * alpha;
+ this.z += (v.z - this.z) * alpha;
+ this.w += (v.w - this.w) * alpha;
+ return this;
+ }
+
+ lerpVectors(v1, v2, alpha) {
+ this.x = v1.x + (v2.x - v1.x) * alpha;
+ this.y = v1.y + (v2.y - v1.y) * alpha;
+ this.z = v1.z + (v2.z - v1.z) * alpha;
+ this.w = v1.w + (v2.w - v1.w) * alpha;
+ return this;
+ }
+
+ equals(v) {
+ return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w;
+ }
+
+ fromArray(array, offset = 0) {
+ this.x = array[offset];
+ this.y = array[offset + 1];
+ this.z = array[offset + 2];
+ this.w = array[offset + 3];
+ return this;
+ }
+
+ toArray(array = [], offset = 0) {
+ array[offset] = this.x;
+ array[offset + 1] = this.y;
+ array[offset + 2] = this.z;
+ array[offset + 3] = this.w;
+ return array;
+ }
+
+ fromBufferAttribute(attribute, index, offset) {
+ if (offset !== undefined) {
+ console.warn('THREE.Vector4: offset has been removed from .fromBufferAttribute().');
+ }
+
+ this.x = attribute.getX(index);
+ this.y = attribute.getY(index);
+ this.z = attribute.getZ(index);
+ this.w = attribute.getW(index);
+ return this;
+ }
+
+ random() {
+ this.x = Math.random();
+ this.y = Math.random();
+ this.z = Math.random();
+ this.w = Math.random();
+ return this;
+ }
+
+ }
+
+ Vector4.prototype.isVector4 = true;
+
+ /*
+ In options, we can specify:
+ * Texture parameters for an auto-generated target texture
+ * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers
+ */
+
+ class WebGLRenderTarget extends EventDispatcher {
+ constructor(width, height, options = {}) {
+ super();
+ this.width = width;
+ this.height = height;
+ this.depth = 1;
+ this.scissor = new Vector4(0, 0, width, height);
+ this.scissorTest = false;
+ this.viewport = new Vector4(0, 0, width, height);
+ this.texture = new Texture(undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding);
+ this.texture.isRenderTargetTexture = true;
+ this.texture.image = {
+ width: width,
+ height: height,
+ depth: 1
+ };
+ this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;
+ this.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null;
+ this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;
+ this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;
+ this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;
+ this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;
+ }
+
+ setTexture(texture) {
+ texture.image = {
+ width: this.width,
+ height: this.height,
+ depth: this.depth
+ };
+ this.texture = texture;
+ }
+
+ setSize(width, height, depth = 1) {
+ if (this.width !== width || this.height !== height || this.depth !== depth) {
+ this.width = width;
+ this.height = height;
+ this.depth = depth;
+ this.texture.image.width = width;
+ this.texture.image.height = height;
+ this.texture.image.depth = depth;
+ this.dispose();
+ }
+
+ this.viewport.set(0, 0, width, height);
+ this.scissor.set(0, 0, width, height);
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ copy(source) {
+ this.width = source.width;
+ this.height = source.height;
+ this.depth = source.depth;
+ this.viewport.copy(source.viewport);
+ this.texture = source.texture.clone();
+ this.texture.image = { ...this.texture.image
+ }; // See #20328.
+
+ this.depthBuffer = source.depthBuffer;
+ this.stencilBuffer = source.stencilBuffer;
+ this.depthTexture = source.depthTexture;
+ return this;
+ }
+
+ dispose() {
+ this.dispatchEvent({
+ type: 'dispose'
+ });
+ }
+
+ }
+
+ WebGLRenderTarget.prototype.isWebGLRenderTarget = true;
+
+ class WebGLMultipleRenderTargets extends WebGLRenderTarget {
+ constructor(width, height, count) {
+ super(width, height);
+ const texture = this.texture;
+ this.texture = [];
+
+ for (let i = 0; i < count; i++) {
+ this.texture[i] = texture.clone();
+ }
+ }
+
+ setSize(width, height, depth = 1) {
+ if (this.width !== width || this.height !== height || this.depth !== depth) {
+ this.width = width;
+ this.height = height;
+ this.depth = depth;
+
+ for (let i = 0, il = this.texture.length; i < il; i++) {
+ this.texture[i].image.width = width;
+ this.texture[i].image.height = height;
+ this.texture[i].image.depth = depth;
+ }
+
+ this.dispose();
+ }
+
+ this.viewport.set(0, 0, width, height);
+ this.scissor.set(0, 0, width, height);
+ return this;
+ }
+
+ copy(source) {
+ this.dispose();
+ this.width = source.width;
+ this.height = source.height;
+ this.depth = source.depth;
+ this.viewport.set(0, 0, this.width, this.height);
+ this.scissor.set(0, 0, this.width, this.height);
+ this.depthBuffer = source.depthBuffer;
+ this.stencilBuffer = source.stencilBuffer;
+ this.depthTexture = source.depthTexture;
+ this.texture.length = 0;
+
+ for (let i = 0, il = source.texture.length; i < il; i++) {
+ this.texture[i] = source.texture[i].clone();
+ }
+
+ return this;
+ }
+
+ }
+
+ WebGLMultipleRenderTargets.prototype.isWebGLMultipleRenderTargets = true;
+
+ class WebGLMultisampleRenderTarget extends WebGLRenderTarget {
+ constructor(width, height, options) {
+ super(width, height, options);
+ this.samples = 4;
+ }
+
+ copy(source) {
+ super.copy.call(this, source);
+ this.samples = source.samples;
+ return this;
+ }
+
+ }
+
+ WebGLMultisampleRenderTarget.prototype.isWebGLMultisampleRenderTarget = true;
+
+ class Quaternion {
+ constructor(x = 0, y = 0, z = 0, w = 1) {
+ this._x = x;
+ this._y = y;
+ this._z = z;
+ this._w = w;
+ }
+
+ static slerp(qa, qb, qm, t) {
+ console.warn('THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.');
+ return qm.slerpQuaternions(qa, qb, t);
+ }
+
+ static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {
+ // fuzz-free, array-based Quaternion SLERP operation
+ let x0 = src0[srcOffset0 + 0],
+ y0 = src0[srcOffset0 + 1],
+ z0 = src0[srcOffset0 + 2],
+ w0 = src0[srcOffset0 + 3];
+ const x1 = src1[srcOffset1 + 0],
+ y1 = src1[srcOffset1 + 1],
+ z1 = src1[srcOffset1 + 2],
+ w1 = src1[srcOffset1 + 3];
+
+ if (t === 0) {
+ dst[dstOffset + 0] = x0;
+ dst[dstOffset + 1] = y0;
+ dst[dstOffset + 2] = z0;
+ dst[dstOffset + 3] = w0;
+ return;
+ }
+
+ if (t === 1) {
+ dst[dstOffset + 0] = x1;
+ dst[dstOffset + 1] = y1;
+ dst[dstOffset + 2] = z1;
+ dst[dstOffset + 3] = w1;
+ return;
+ }
+
+ if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {
+ let s = 1 - t;
+ const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,
+ dir = cos >= 0 ? 1 : -1,
+ sqrSin = 1 - cos * cos; // Skip the Slerp for tiny steps to avoid numeric problems:
+
+ if (sqrSin > Number.EPSILON) {
+ const sin = Math.sqrt(sqrSin),
+ len = Math.atan2(sin, cos * dir);
+ s = Math.sin(s * len) / sin;
+ t = Math.sin(t * len) / sin;
+ }
+
+ const tDir = t * dir;
+ x0 = x0 * s + x1 * tDir;
+ y0 = y0 * s + y1 * tDir;
+ z0 = z0 * s + z1 * tDir;
+ w0 = w0 * s + w1 * tDir; // Normalize in case we just did a lerp:
+
+ if (s === 1 - t) {
+ const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);
+ x0 *= f;
+ y0 *= f;
+ z0 *= f;
+ w0 *= f;
+ }
+ }
+
+ dst[dstOffset] = x0;
+ dst[dstOffset + 1] = y0;
+ dst[dstOffset + 2] = z0;
+ dst[dstOffset + 3] = w0;
+ }
+
+ static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) {
+ const x0 = src0[srcOffset0];
+ const y0 = src0[srcOffset0 + 1];
+ const z0 = src0[srcOffset0 + 2];
+ const w0 = src0[srcOffset0 + 3];
+ const x1 = src1[srcOffset1];
+ const y1 = src1[srcOffset1 + 1];
+ const z1 = src1[srcOffset1 + 2];
+ const w1 = src1[srcOffset1 + 3];
+ dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;
+ dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;
+ dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;
+ dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;
+ return dst;
+ }
+
+ get x() {
+ return this._x;
+ }
+
+ set x(value) {
+ this._x = value;
+
+ this._onChangeCallback();
+ }
+
+ get y() {
+ return this._y;
+ }
+
+ set y(value) {
+ this._y = value;
+
+ this._onChangeCallback();
+ }
+
+ get z() {
+ return this._z;
+ }
+
+ set z(value) {
+ this._z = value;
+
+ this._onChangeCallback();
+ }
+
+ get w() {
+ return this._w;
+ }
+
+ set w(value) {
+ this._w = value;
+
+ this._onChangeCallback();
+ }
+
+ set(x, y, z, w) {
+ this._x = x;
+ this._y = y;
+ this._z = z;
+ this._w = w;
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ clone() {
+ return new this.constructor(this._x, this._y, this._z, this._w);
+ }
+
+ copy(quaternion) {
+ this._x = quaternion.x;
+ this._y = quaternion.y;
+ this._z = quaternion.z;
+ this._w = quaternion.w;
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ setFromEuler(euler, update) {
+ if (!(euler && euler.isEuler)) {
+ throw new Error('THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.');
+ }
+
+ const x = euler._x,
+ y = euler._y,
+ z = euler._z,
+ order = euler._order; // http://www.mathworks.com/matlabcentral/fileexchange/
+ // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/
+ // content/SpinCalc.m
+
+ const cos = Math.cos;
+ const sin = Math.sin;
+ const c1 = cos(x / 2);
+ const c2 = cos(y / 2);
+ const c3 = cos(z / 2);
+ const s1 = sin(x / 2);
+ const s2 = sin(y / 2);
+ const s3 = sin(z / 2);
+
+ switch (order) {
+ case 'XYZ':
+ this._x = s1 * c2 * c3 + c1 * s2 * s3;
+ this._y = c1 * s2 * c3 - s1 * c2 * s3;
+ this._z = c1 * c2 * s3 + s1 * s2 * c3;
+ this._w = c1 * c2 * c3 - s1 * s2 * s3;
+ break;
+
+ case 'YXZ':
+ this._x = s1 * c2 * c3 + c1 * s2 * s3;
+ this._y = c1 * s2 * c3 - s1 * c2 * s3;
+ this._z = c1 * c2 * s3 - s1 * s2 * c3;
+ this._w = c1 * c2 * c3 + s1 * s2 * s3;
+ break;
+
+ case 'ZXY':
+ this._x = s1 * c2 * c3 - c1 * s2 * s3;
+ this._y = c1 * s2 * c3 + s1 * c2 * s3;
+ this._z = c1 * c2 * s3 + s1 * s2 * c3;
+ this._w = c1 * c2 * c3 - s1 * s2 * s3;
+ break;
+
+ case 'ZYX':
+ this._x = s1 * c2 * c3 - c1 * s2 * s3;
+ this._y = c1 * s2 * c3 + s1 * c2 * s3;
+ this._z = c1 * c2 * s3 - s1 * s2 * c3;
+ this._w = c1 * c2 * c3 + s1 * s2 * s3;
+ break;
+
+ case 'YZX':
+ this._x = s1 * c2 * c3 + c1 * s2 * s3;
+ this._y = c1 * s2 * c3 + s1 * c2 * s3;
+ this._z = c1 * c2 * s3 - s1 * s2 * c3;
+ this._w = c1 * c2 * c3 - s1 * s2 * s3;
+ break;
+
+ case 'XZY':
+ this._x = s1 * c2 * c3 - c1 * s2 * s3;
+ this._y = c1 * s2 * c3 - s1 * c2 * s3;
+ this._z = c1 * c2 * s3 + s1 * s2 * c3;
+ this._w = c1 * c2 * c3 + s1 * s2 * s3;
+ break;
+
+ default:
+ console.warn('THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order);
+ }
+
+ if (update !== false) this._onChangeCallback();
+ return this;
+ }
+
+ setFromAxisAngle(axis, angle) {
+ // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm
+ // assumes axis is normalized
+ const halfAngle = angle / 2,
+ s = Math.sin(halfAngle);
+ this._x = axis.x * s;
+ this._y = axis.y * s;
+ this._z = axis.z * s;
+ this._w = Math.cos(halfAngle);
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ setFromRotationMatrix(m) {
+ // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
+ // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
+ const te = m.elements,
+ m11 = te[0],
+ m12 = te[4],
+ m13 = te[8],
+ m21 = te[1],
+ m22 = te[5],
+ m23 = te[9],
+ m31 = te[2],
+ m32 = te[6],
+ m33 = te[10],
+ trace = m11 + m22 + m33;
+
+ if (trace > 0) {
+ const s = 0.5 / Math.sqrt(trace + 1.0);
+ this._w = 0.25 / s;
+ this._x = (m32 - m23) * s;
+ this._y = (m13 - m31) * s;
+ this._z = (m21 - m12) * s;
+ } else if (m11 > m22 && m11 > m33) {
+ const s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);
+ this._w = (m32 - m23) / s;
+ this._x = 0.25 * s;
+ this._y = (m12 + m21) / s;
+ this._z = (m13 + m31) / s;
+ } else if (m22 > m33) {
+ const s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);
+ this._w = (m13 - m31) / s;
+ this._x = (m12 + m21) / s;
+ this._y = 0.25 * s;
+ this._z = (m23 + m32) / s;
+ } else {
+ const s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);
+ this._w = (m21 - m12) / s;
+ this._x = (m13 + m31) / s;
+ this._y = (m23 + m32) / s;
+ this._z = 0.25 * s;
+ }
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ setFromUnitVectors(vFrom, vTo) {
+ // assumes direction vectors vFrom and vTo are normalized
+ let r = vFrom.dot(vTo) + 1;
+
+ if (r < Number.EPSILON) {
+ // vFrom and vTo point in opposite directions
+ r = 0;
+
+ if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {
+ this._x = -vFrom.y;
+ this._y = vFrom.x;
+ this._z = 0;
+ this._w = r;
+ } else {
+ this._x = 0;
+ this._y = -vFrom.z;
+ this._z = vFrom.y;
+ this._w = r;
+ }
+ } else {
+ // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3
+ this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;
+ this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;
+ this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;
+ this._w = r;
+ }
+
+ return this.normalize();
+ }
+
+ angleTo(q) {
+ return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));
+ }
+
+ rotateTowards(q, step) {
+ const angle = this.angleTo(q);
+ if (angle === 0) return this;
+ const t = Math.min(1, step / angle);
+ this.slerp(q, t);
+ return this;
+ }
+
+ identity() {
+ return this.set(0, 0, 0, 1);
+ }
+
+ invert() {
+ // quaternion is assumed to have unit length
+ return this.conjugate();
+ }
+
+ conjugate() {
+ this._x *= -1;
+ this._y *= -1;
+ this._z *= -1;
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ dot(v) {
+ return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;
+ }
+
+ lengthSq() {
+ return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;
+ }
+
+ length() {
+ return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);
+ }
+
+ normalize() {
+ let l = this.length();
+
+ if (l === 0) {
+ this._x = 0;
+ this._y = 0;
+ this._z = 0;
+ this._w = 1;
+ } else {
+ l = 1 / l;
+ this._x = this._x * l;
+ this._y = this._y * l;
+ this._z = this._z * l;
+ this._w = this._w * l;
+ }
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ multiply(q, p) {
+ if (p !== undefined) {
+ console.warn('THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.');
+ return this.multiplyQuaternions(q, p);
+ }
+
+ return this.multiplyQuaternions(this, q);
+ }
+
+ premultiply(q) {
+ return this.multiplyQuaternions(q, this);
+ }
+
+ multiplyQuaternions(a, b) {
+ // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm
+ const qax = a._x,
+ qay = a._y,
+ qaz = a._z,
+ qaw = a._w;
+ const qbx = b._x,
+ qby = b._y,
+ qbz = b._z,
+ qbw = b._w;
+ this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;
+ this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;
+ this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;
+ this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ slerp(qb, t) {
+ if (t === 0) return this;
+ if (t === 1) return this.copy(qb);
+ const x = this._x,
+ y = this._y,
+ z = this._z,
+ w = this._w; // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/
+
+ let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;
+
+ if (cosHalfTheta < 0) {
+ this._w = -qb._w;
+ this._x = -qb._x;
+ this._y = -qb._y;
+ this._z = -qb._z;
+ cosHalfTheta = -cosHalfTheta;
+ } else {
+ this.copy(qb);
+ }
+
+ if (cosHalfTheta >= 1.0) {
+ this._w = w;
+ this._x = x;
+ this._y = y;
+ this._z = z;
+ return this;
+ }
+
+ const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;
+
+ if (sqrSinHalfTheta <= Number.EPSILON) {
+ const s = 1 - t;
+ this._w = s * w + t * this._w;
+ this._x = s * x + t * this._x;
+ this._y = s * y + t * this._y;
+ this._z = s * z + t * this._z;
+ this.normalize();
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);
+ const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);
+ const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta,
+ ratioB = Math.sin(t * halfTheta) / sinHalfTheta;
+ this._w = w * ratioA + this._w * ratioB;
+ this._x = x * ratioA + this._x * ratioB;
+ this._y = y * ratioA + this._y * ratioB;
+ this._z = z * ratioA + this._z * ratioB;
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ slerpQuaternions(qa, qb, t) {
+ this.copy(qa).slerp(qb, t);
+ }
+
+ equals(quaternion) {
+ return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w;
+ }
+
+ fromArray(array, offset = 0) {
+ this._x = array[offset];
+ this._y = array[offset + 1];
+ this._z = array[offset + 2];
+ this._w = array[offset + 3];
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ toArray(array = [], offset = 0) {
+ array[offset] = this._x;
+ array[offset + 1] = this._y;
+ array[offset + 2] = this._z;
+ array[offset + 3] = this._w;
+ return array;
+ }
+
+ fromBufferAttribute(attribute, index) {
+ this._x = attribute.getX(index);
+ this._y = attribute.getY(index);
+ this._z = attribute.getZ(index);
+ this._w = attribute.getW(index);
+ return this;
+ }
+
+ _onChange(callback) {
+ this._onChangeCallback = callback;
+ return this;
+ }
+
+ _onChangeCallback() {}
+
+ }
+
+ Quaternion.prototype.isQuaternion = true;
+
+ class Vector3 {
+ constructor(x = 0, y = 0, z = 0) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ set(x, y, z) {
+ if (z === undefined) z = this.z; // sprite.scale.set(x,y)
+
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ return this;
+ }
+
+ setScalar(scalar) {
+ this.x = scalar;
+ this.y = scalar;
+ this.z = scalar;
+ return this;
+ }
+
+ setX(x) {
+ this.x = x;
+ return this;
+ }
+
+ setY(y) {
+ this.y = y;
+ return this;
+ }
+
+ setZ(z) {
+ this.z = z;
+ return this;
+ }
+
+ setComponent(index, value) {
+ switch (index) {
+ case 0:
+ this.x = value;
+ break;
+
+ case 1:
+ this.y = value;
+ break;
+
+ case 2:
+ this.z = value;
+ break;
+
+ default:
+ throw new Error('index is out of range: ' + index);
+ }
+
+ return this;
+ }
+
+ getComponent(index) {
+ switch (index) {
+ case 0:
+ return this.x;
+
+ case 1:
+ return this.y;
+
+ case 2:
+ return this.z;
+
+ default:
+ throw new Error('index is out of range: ' + index);
+ }
+ }
+
+ clone() {
+ return new this.constructor(this.x, this.y, this.z);
+ }
+
+ copy(v) {
+ this.x = v.x;
+ this.y = v.y;
+ this.z = v.z;
+ return this;
+ }
+
+ add(v, w) {
+ if (w !== undefined) {
+ console.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');
+ return this.addVectors(v, w);
+ }
+
+ this.x += v.x;
+ this.y += v.y;
+ this.z += v.z;
+ return this;
+ }
+
+ addScalar(s) {
+ this.x += s;
+ this.y += s;
+ this.z += s;
+ return this;
+ }
+
+ addVectors(a, b) {
+ this.x = a.x + b.x;
+ this.y = a.y + b.y;
+ this.z = a.z + b.z;
+ return this;
+ }
+
+ addScaledVector(v, s) {
+ this.x += v.x * s;
+ this.y += v.y * s;
+ this.z += v.z * s;
+ return this;
+ }
+
+ sub(v, w) {
+ if (w !== undefined) {
+ console.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');
+ return this.subVectors(v, w);
+ }
+
+ this.x -= v.x;
+ this.y -= v.y;
+ this.z -= v.z;
+ return this;
+ }
+
+ subScalar(s) {
+ this.x -= s;
+ this.y -= s;
+ this.z -= s;
+ return this;
+ }
+
+ subVectors(a, b) {
+ this.x = a.x - b.x;
+ this.y = a.y - b.y;
+ this.z = a.z - b.z;
+ return this;
+ }
+
+ multiply(v, w) {
+ if (w !== undefined) {
+ console.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');
+ return this.multiplyVectors(v, w);
+ }
+
+ this.x *= v.x;
+ this.y *= v.y;
+ this.z *= v.z;
+ return this;
+ }
+
+ multiplyScalar(scalar) {
+ this.x *= scalar;
+ this.y *= scalar;
+ this.z *= scalar;
+ return this;
+ }
+
+ multiplyVectors(a, b) {
+ this.x = a.x * b.x;
+ this.y = a.y * b.y;
+ this.z = a.z * b.z;
+ return this;
+ }
+
+ applyEuler(euler) {
+ if (!(euler && euler.isEuler)) {
+ console.error('THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.');
+ }
+
+ return this.applyQuaternion(_quaternion$4.setFromEuler(euler));
+ }
+
+ applyAxisAngle(axis, angle) {
+ return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle));
+ }
+
+ applyMatrix3(m) {
+ const x = this.x,
+ y = this.y,
+ z = this.z;
+ const e = m.elements;
+ this.x = e[0] * x + e[3] * y + e[6] * z;
+ this.y = e[1] * x + e[4] * y + e[7] * z;
+ this.z = e[2] * x + e[5] * y + e[8] * z;
+ return this;
+ }
+
+ applyNormalMatrix(m) {
+ return this.applyMatrix3(m).normalize();
+ }
+
+ applyMatrix4(m) {
+ const x = this.x,
+ y = this.y,
+ z = this.z;
+ const e = m.elements;
+ const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);
+ this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;
+ this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;
+ this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;
+ return this;
+ }
+
+ applyQuaternion(q) {
+ const x = this.x,
+ y = this.y,
+ z = this.z;
+ const qx = q.x,
+ qy = q.y,
+ qz = q.z,
+ qw = q.w; // calculate quat * vector
+
+ const ix = qw * x + qy * z - qz * y;
+ const iy = qw * y + qz * x - qx * z;
+ const iz = qw * z + qx * y - qy * x;
+ const iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat
+
+ this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;
+ this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;
+ this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;
+ return this;
+ }
+
+ project(camera) {
+ return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);
+ }
+
+ unproject(camera) {
+ return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);
+ }
+
+ transformDirection(m) {
+ // input: THREE.Matrix4 affine matrix
+ // vector interpreted as a direction
+ const x = this.x,
+ y = this.y,
+ z = this.z;
+ const e = m.elements;
+ this.x = e[0] * x + e[4] * y + e[8] * z;
+ this.y = e[1] * x + e[5] * y + e[9] * z;
+ this.z = e[2] * x + e[6] * y + e[10] * z;
+ return this.normalize();
+ }
+
+ divide(v) {
+ this.x /= v.x;
+ this.y /= v.y;
+ this.z /= v.z;
+ return this;
+ }
+
+ divideScalar(scalar) {
+ return this.multiplyScalar(1 / scalar);
+ }
+
+ min(v) {
+ this.x = Math.min(this.x, v.x);
+ this.y = Math.min(this.y, v.y);
+ this.z = Math.min(this.z, v.z);
+ return this;
+ }
+
+ max(v) {
+ this.x = Math.max(this.x, v.x);
+ this.y = Math.max(this.y, v.y);
+ this.z = Math.max(this.z, v.z);
+ return this;
+ }
+
+ clamp(min, max) {
+ // assumes min < max, componentwise
+ this.x = Math.max(min.x, Math.min(max.x, this.x));
+ this.y = Math.max(min.y, Math.min(max.y, this.y));
+ this.z = Math.max(min.z, Math.min(max.z, this.z));
+ return this;
+ }
+
+ clampScalar(minVal, maxVal) {
+ this.x = Math.max(minVal, Math.min(maxVal, this.x));
+ this.y = Math.max(minVal, Math.min(maxVal, this.y));
+ this.z = Math.max(minVal, Math.min(maxVal, this.z));
+ return this;
+ }
+
+ clampLength(min, max) {
+ const length = this.length();
+ return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));
+ }
+
+ floor() {
+ this.x = Math.floor(this.x);
+ this.y = Math.floor(this.y);
+ this.z = Math.floor(this.z);
+ return this;
+ }
+
+ ceil() {
+ this.x = Math.ceil(this.x);
+ this.y = Math.ceil(this.y);
+ this.z = Math.ceil(this.z);
+ return this;
+ }
+
+ round() {
+ this.x = Math.round(this.x);
+ this.y = Math.round(this.y);
+ this.z = Math.round(this.z);
+ return this;
+ }
+
+ roundToZero() {
+ this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);
+ this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);
+ this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);
+ return this;
+ }
+
+ negate() {
+ this.x = -this.x;
+ this.y = -this.y;
+ this.z = -this.z;
+ return this;
+ }
+
+ dot(v) {
+ return this.x * v.x + this.y * v.y + this.z * v.z;
+ } // TODO lengthSquared?
+
+
+ lengthSq() {
+ return this.x * this.x + this.y * this.y + this.z * this.z;
+ }
+
+ length() {
+ return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
+ }
+
+ manhattanLength() {
+ return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);
+ }
+
+ normalize() {
+ return this.divideScalar(this.length() || 1);
+ }
+
+ setLength(length) {
+ return this.normalize().multiplyScalar(length);
+ }
+
+ lerp(v, alpha) {
+ this.x += (v.x - this.x) * alpha;
+ this.y += (v.y - this.y) * alpha;
+ this.z += (v.z - this.z) * alpha;
+ return this;
+ }
+
+ lerpVectors(v1, v2, alpha) {
+ this.x = v1.x + (v2.x - v1.x) * alpha;
+ this.y = v1.y + (v2.y - v1.y) * alpha;
+ this.z = v1.z + (v2.z - v1.z) * alpha;
+ return this;
+ }
+
+ cross(v, w) {
+ if (w !== undefined) {
+ console.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.');
+ return this.crossVectors(v, w);
+ }
+
+ return this.crossVectors(this, v);
+ }
+
+ crossVectors(a, b) {
+ const ax = a.x,
+ ay = a.y,
+ az = a.z;
+ const bx = b.x,
+ by = b.y,
+ bz = b.z;
+ this.x = ay * bz - az * by;
+ this.y = az * bx - ax * bz;
+ this.z = ax * by - ay * bx;
+ return this;
+ }
+
+ projectOnVector(v) {
+ const denominator = v.lengthSq();
+ if (denominator === 0) return this.set(0, 0, 0);
+ const scalar = v.dot(this) / denominator;
+ return this.copy(v).multiplyScalar(scalar);
+ }
+
+ projectOnPlane(planeNormal) {
+ _vector$c.copy(this).projectOnVector(planeNormal);
+
+ return this.sub(_vector$c);
+ }
+
+ reflect(normal) {
+ // reflect incident vector off plane orthogonal to normal
+ // normal is assumed to have unit length
+ return this.sub(_vector$c.copy(normal).multiplyScalar(2 * this.dot(normal)));
+ }
+
+ angleTo(v) {
+ const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());
+ if (denominator === 0) return Math.PI / 2;
+ const theta = this.dot(v) / denominator; // clamp, to handle numerical problems
+
+ return Math.acos(clamp(theta, -1, 1));
+ }
+
+ distanceTo(v) {
+ return Math.sqrt(this.distanceToSquared(v));
+ }
+
+ distanceToSquared(v) {
+ const dx = this.x - v.x,
+ dy = this.y - v.y,
+ dz = this.z - v.z;
+ return dx * dx + dy * dy + dz * dz;
+ }
+
+ manhattanDistanceTo(v) {
+ return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);
+ }
+
+ setFromSpherical(s) {
+ return this.setFromSphericalCoords(s.radius, s.phi, s.theta);
+ }
+
+ setFromSphericalCoords(radius, phi, theta) {
+ const sinPhiRadius = Math.sin(phi) * radius;
+ this.x = sinPhiRadius * Math.sin(theta);
+ this.y = Math.cos(phi) * radius;
+ this.z = sinPhiRadius * Math.cos(theta);
+ return this;
+ }
+
+ setFromCylindrical(c) {
+ return this.setFromCylindricalCoords(c.radius, c.theta, c.y);
+ }
+
+ setFromCylindricalCoords(radius, theta, y) {
+ this.x = radius * Math.sin(theta);
+ this.y = y;
+ this.z = radius * Math.cos(theta);
+ return this;
+ }
+
+ setFromMatrixPosition(m) {
+ const e = m.elements;
+ this.x = e[12];
+ this.y = e[13];
+ this.z = e[14];
+ return this;
+ }
+
+ setFromMatrixScale(m) {
+ const sx = this.setFromMatrixColumn(m, 0).length();
+ const sy = this.setFromMatrixColumn(m, 1).length();
+ const sz = this.setFromMatrixColumn(m, 2).length();
+ this.x = sx;
+ this.y = sy;
+ this.z = sz;
+ return this;
+ }
+
+ setFromMatrixColumn(m, index) {
+ return this.fromArray(m.elements, index * 4);
+ }
+
+ setFromMatrix3Column(m, index) {
+ return this.fromArray(m.elements, index * 3);
+ }
+
+ equals(v) {
+ return v.x === this.x && v.y === this.y && v.z === this.z;
+ }
+
+ fromArray(array, offset = 0) {
+ this.x = array[offset];
+ this.y = array[offset + 1];
+ this.z = array[offset + 2];
+ return this;
+ }
+
+ toArray(array = [], offset = 0) {
+ array[offset] = this.x;
+ array[offset + 1] = this.y;
+ array[offset + 2] = this.z;
+ return array;
+ }
+
+ fromBufferAttribute(attribute, index, offset) {
+ if (offset !== undefined) {
+ console.warn('THREE.Vector3: offset has been removed from .fromBufferAttribute().');
+ }
+
+ this.x = attribute.getX(index);
+ this.y = attribute.getY(index);
+ this.z = attribute.getZ(index);
+ return this;
+ }
+
+ random() {
+ this.x = Math.random();
+ this.y = Math.random();
+ this.z = Math.random();
+ return this;
+ }
+
+ }
+
+ Vector3.prototype.isVector3 = true;
+
+ const _vector$c = /*@__PURE__*/new Vector3();
+
+ const _quaternion$4 = /*@__PURE__*/new Quaternion();
+
+ class Box3 {
+ constructor(min = new Vector3(+Infinity, +Infinity, +Infinity), max = new Vector3(-Infinity, -Infinity, -Infinity)) {
+ this.min = min;
+ this.max = max;
+ }
+
+ set(min, max) {
+ this.min.copy(min);
+ this.max.copy(max);
+ return this;
+ }
+
+ setFromArray(array) {
+ let minX = +Infinity;
+ let minY = +Infinity;
+ let minZ = +Infinity;
+ let maxX = -Infinity;
+ let maxY = -Infinity;
+ let maxZ = -Infinity;
+
+ for (let i = 0, l = array.length; i < l; i += 3) {
+ const x = array[i];
+ const y = array[i + 1];
+ const z = array[i + 2];
+ if (x < minX) minX = x;
+ if (y < minY) minY = y;
+ if (z < minZ) minZ = z;
+ if (x > maxX) maxX = x;
+ if (y > maxY) maxY = y;
+ if (z > maxZ) maxZ = z;
+ }
+
+ this.min.set(minX, minY, minZ);
+ this.max.set(maxX, maxY, maxZ);
+ return this;
+ }
+
+ setFromBufferAttribute(attribute) {
+ let minX = +Infinity;
+ let minY = +Infinity;
+ let minZ = +Infinity;
+ let maxX = -Infinity;
+ let maxY = -Infinity;
+ let maxZ = -Infinity;
+
+ for (let i = 0, l = attribute.count; i < l; i++) {
+ const x = attribute.getX(i);
+ const y = attribute.getY(i);
+ const z = attribute.getZ(i);
+ if (x < minX) minX = x;
+ if (y < minY) minY = y;
+ if (z < minZ) minZ = z;
+ if (x > maxX) maxX = x;
+ if (y > maxY) maxY = y;
+ if (z > maxZ) maxZ = z;
+ }
+
+ this.min.set(minX, minY, minZ);
+ this.max.set(maxX, maxY, maxZ);
+ return this;
+ }
+
+ setFromPoints(points) {
+ this.makeEmpty();
+
+ for (let i = 0, il = points.length; i < il; i++) {
+ this.expandByPoint(points[i]);
+ }
+
+ return this;
+ }
+
+ setFromCenterAndSize(center, size) {
+ const halfSize = _vector$b.copy(size).multiplyScalar(0.5);
+
+ this.min.copy(center).sub(halfSize);
+ this.max.copy(center).add(halfSize);
+ return this;
+ }
+
+ setFromObject(object) {
+ this.makeEmpty();
+ return this.expandByObject(object);
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ copy(box) {
+ this.min.copy(box.min);
+ this.max.copy(box.max);
+ return this;
+ }
+
+ makeEmpty() {
+ this.min.x = this.min.y = this.min.z = +Infinity;
+ this.max.x = this.max.y = this.max.z = -Infinity;
+ return this;
+ }
+
+ isEmpty() {
+ // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes
+ return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z;
+ }
+
+ getCenter(target) {
+ return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5);
+ }
+
+ getSize(target) {
+ return this.isEmpty() ? target.set(0, 0, 0) : target.subVectors(this.max, this.min);
+ }
+
+ expandByPoint(point) {
+ this.min.min(point);
+ this.max.max(point);
+ return this;
+ }
+
+ expandByVector(vector) {
+ this.min.sub(vector);
+ this.max.add(vector);
+ return this;
+ }
+
+ expandByScalar(scalar) {
+ this.min.addScalar(-scalar);
+ this.max.addScalar(scalar);
+ return this;
+ }
+
+ expandByObject(object) {
+ // Computes the world-axis-aligned bounding box of an object (including its children),
+ // accounting for both the object's, and children's, world transforms
+ object.updateWorldMatrix(false, false);
+ const geometry = object.geometry;
+
+ if (geometry !== undefined) {
+ if (geometry.boundingBox === null) {
+ geometry.computeBoundingBox();
+ }
+
+ _box$3.copy(geometry.boundingBox);
+
+ _box$3.applyMatrix4(object.matrixWorld);
+
+ this.union(_box$3);
+ }
+
+ const children = object.children;
+
+ for (let i = 0, l = children.length; i < l; i++) {
+ this.expandByObject(children[i]);
+ }
+
+ return this;
+ }
+
+ containsPoint(point) {
+ return point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y || point.z < this.min.z || point.z > this.max.z ? false : true;
+ }
+
+ containsBox(box) {
+ return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z;
+ }
+
+ getParameter(point, target) {
+ // This can potentially have a divide by zero if the box
+ // has a size dimension of 0.
+ return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y), (point.z - this.min.z) / (this.max.z - this.min.z));
+ }
+
+ intersectsBox(box) {
+ // using 6 splitting planes to rule out intersections.
+ return box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y || box.max.z < this.min.z || box.min.z > this.max.z ? false : true;
+ }
+
+ intersectsSphere(sphere) {
+ // Find the point on the AABB closest to the sphere center.
+ this.clampPoint(sphere.center, _vector$b); // If that point is inside the sphere, the AABB and sphere intersect.
+
+ return _vector$b.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius;
+ }
+
+ intersectsPlane(plane) {
+ // We compute the minimum and maximum dot product values. If those values
+ // are on the same side (back or front) of the plane, then there is no intersection.
+ let min, max;
+
+ if (plane.normal.x > 0) {
+ min = plane.normal.x * this.min.x;
+ max = plane.normal.x * this.max.x;
+ } else {
+ min = plane.normal.x * this.max.x;
+ max = plane.normal.x * this.min.x;
+ }
+
+ if (plane.normal.y > 0) {
+ min += plane.normal.y * this.min.y;
+ max += plane.normal.y * this.max.y;
+ } else {
+ min += plane.normal.y * this.max.y;
+ max += plane.normal.y * this.min.y;
+ }
+
+ if (plane.normal.z > 0) {
+ min += plane.normal.z * this.min.z;
+ max += plane.normal.z * this.max.z;
+ } else {
+ min += plane.normal.z * this.max.z;
+ max += plane.normal.z * this.min.z;
+ }
+
+ return min <= -plane.constant && max >= -plane.constant;
+ }
+
+ intersectsTriangle(triangle) {
+ if (this.isEmpty()) {
+ return false;
+ } // compute box center and extents
+
+
+ this.getCenter(_center);
+
+ _extents.subVectors(this.max, _center); // translate triangle to aabb origin
+
+
+ _v0$2.subVectors(triangle.a, _center);
+
+ _v1$7.subVectors(triangle.b, _center);
+
+ _v2$3.subVectors(triangle.c, _center); // compute edge vectors for triangle
+
+
+ _f0.subVectors(_v1$7, _v0$2);
+
+ _f1.subVectors(_v2$3, _v1$7);
+
+ _f2.subVectors(_v0$2, _v2$3); // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb
+ // make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation
+ // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)
+
+
+ let axes = [0, -_f0.z, _f0.y, 0, -_f1.z, _f1.y, 0, -_f2.z, _f2.y, _f0.z, 0, -_f0.x, _f1.z, 0, -_f1.x, _f2.z, 0, -_f2.x, -_f0.y, _f0.x, 0, -_f1.y, _f1.x, 0, -_f2.y, _f2.x, 0];
+
+ if (!satForAxes(axes, _v0$2, _v1$7, _v2$3, _extents)) {
+ return false;
+ } // test 3 face normals from the aabb
+
+
+ axes = [1, 0, 0, 0, 1, 0, 0, 0, 1];
+
+ if (!satForAxes(axes, _v0$2, _v1$7, _v2$3, _extents)) {
+ return false;
+ } // finally testing the face normal of the triangle
+ // use already existing triangle edge vectors here
+
+
+ _triangleNormal.crossVectors(_f0, _f1);
+
+ axes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z];
+ return satForAxes(axes, _v0$2, _v1$7, _v2$3, _extents);
+ }
+
+ clampPoint(point, target) {
+ return target.copy(point).clamp(this.min, this.max);
+ }
+
+ distanceToPoint(point) {
+ const clampedPoint = _vector$b.copy(point).clamp(this.min, this.max);
+
+ return clampedPoint.sub(point).length();
+ }
+
+ getBoundingSphere(target) {
+ this.getCenter(target.center);
+ target.radius = this.getSize(_vector$b).length() * 0.5;
+ return target;
+ }
+
+ intersect(box) {
+ this.min.max(box.min);
+ this.max.min(box.max); // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.
+
+ if (this.isEmpty()) this.makeEmpty();
+ return this;
+ }
+
+ union(box) {
+ this.min.min(box.min);
+ this.max.max(box.max);
+ return this;
+ }
+
+ applyMatrix4(matrix) {
+ // transform of empty box is an empty box.
+ if (this.isEmpty()) return this; // NOTE: I am using a binary pattern to specify all 2^3 combinations below
+
+ _points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); // 000
+
+
+ _points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); // 001
+
+
+ _points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); // 010
+
+
+ _points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); // 011
+
+
+ _points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); // 100
+
+
+ _points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); // 101
+
+
+ _points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); // 110
+
+
+ _points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); // 111
+
+
+ this.setFromPoints(_points);
+ return this;
+ }
+
+ translate(offset) {
+ this.min.add(offset);
+ this.max.add(offset);
+ return this;
+ }
+
+ equals(box) {
+ return box.min.equals(this.min) && box.max.equals(this.max);
+ }
+
+ }
+
+ Box3.prototype.isBox3 = true;
+ const _points = [/*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3()];
+
+ const _vector$b = /*@__PURE__*/new Vector3();
+
+ const _box$3 = /*@__PURE__*/new Box3(); // triangle centered vertices
+
+
+ const _v0$2 = /*@__PURE__*/new Vector3();
+
+ const _v1$7 = /*@__PURE__*/new Vector3();
+
+ const _v2$3 = /*@__PURE__*/new Vector3(); // triangle edge vectors
+
+
+ const _f0 = /*@__PURE__*/new Vector3();
+
+ const _f1 = /*@__PURE__*/new Vector3();
+
+ const _f2 = /*@__PURE__*/new Vector3();
+
+ const _center = /*@__PURE__*/new Vector3();
+
+ const _extents = /*@__PURE__*/new Vector3();
+
+ const _triangleNormal = /*@__PURE__*/new Vector3();
+
+ const _testAxis = /*@__PURE__*/new Vector3();
+
+ function satForAxes(axes, v0, v1, v2, extents) {
+ for (let i = 0, j = axes.length - 3; i <= j; i += 3) {
+ _testAxis.fromArray(axes, i); // project the aabb onto the seperating axis
+
+
+ const r = extents.x * Math.abs(_testAxis.x) + extents.y * Math.abs(_testAxis.y) + extents.z * Math.abs(_testAxis.z); // project all 3 vertices of the triangle onto the seperating axis
+
+ const p0 = v0.dot(_testAxis);
+ const p1 = v1.dot(_testAxis);
+ const p2 = v2.dot(_testAxis); // actual test, basically see if either of the most extreme of the triangle points intersects r
+
+ if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {
+ // points of the projected triangle are outside the projected half-length of the aabb
+ // the axis is seperating and we can exit
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ const _box$2 = /*@__PURE__*/new Box3();
+
+ const _v1$6 = /*@__PURE__*/new Vector3();
+
+ const _toFarthestPoint = /*@__PURE__*/new Vector3();
+
+ const _toPoint = /*@__PURE__*/new Vector3();
+
+ class Sphere {
+ constructor(center = new Vector3(), radius = -1) {
+ this.center = center;
+ this.radius = radius;
+ }
+
+ set(center, radius) {
+ this.center.copy(center);
+ this.radius = radius;
+ return this;
+ }
+
+ setFromPoints(points, optionalCenter) {
+ const center = this.center;
+
+ if (optionalCenter !== undefined) {
+ center.copy(optionalCenter);
+ } else {
+ _box$2.setFromPoints(points).getCenter(center);
+ }
+
+ let maxRadiusSq = 0;
+
+ for (let i = 0, il = points.length; i < il; i++) {
+ maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(points[i]));
+ }
+
+ this.radius = Math.sqrt(maxRadiusSq);
+ return this;
+ }
+
+ copy(sphere) {
+ this.center.copy(sphere.center);
+ this.radius = sphere.radius;
+ return this;
+ }
+
+ isEmpty() {
+ return this.radius < 0;
+ }
+
+ makeEmpty() {
+ this.center.set(0, 0, 0);
+ this.radius = -1;
+ return this;
+ }
+
+ containsPoint(point) {
+ return point.distanceToSquared(this.center) <= this.radius * this.radius;
+ }
+
+ distanceToPoint(point) {
+ return point.distanceTo(this.center) - this.radius;
+ }
+
+ intersectsSphere(sphere) {
+ const radiusSum = this.radius + sphere.radius;
+ return sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum;
+ }
+
+ intersectsBox(box) {
+ return box.intersectsSphere(this);
+ }
+
+ intersectsPlane(plane) {
+ return Math.abs(plane.distanceToPoint(this.center)) <= this.radius;
+ }
+
+ clampPoint(point, target) {
+ const deltaLengthSq = this.center.distanceToSquared(point);
+ target.copy(point);
+
+ if (deltaLengthSq > this.radius * this.radius) {
+ target.sub(this.center).normalize();
+ target.multiplyScalar(this.radius).add(this.center);
+ }
+
+ return target;
+ }
+
+ getBoundingBox(target) {
+ if (this.isEmpty()) {
+ // Empty sphere produces empty bounding box
+ target.makeEmpty();
+ return target;
+ }
+
+ target.set(this.center, this.center);
+ target.expandByScalar(this.radius);
+ return target;
+ }
+
+ applyMatrix4(matrix) {
+ this.center.applyMatrix4(matrix);
+ this.radius = this.radius * matrix.getMaxScaleOnAxis();
+ return this;
+ }
+
+ translate(offset) {
+ this.center.add(offset);
+ return this;
+ }
+
+ expandByPoint(point) {
+ // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671
+ _toPoint.subVectors(point, this.center);
+
+ const lengthSq = _toPoint.lengthSq();
+
+ if (lengthSq > this.radius * this.radius) {
+ const length = Math.sqrt(lengthSq);
+ const missingRadiusHalf = (length - this.radius) * 0.5; // Nudge this sphere towards the target point. Add half the missing distance to radius,
+ // and the other half to position. This gives a tighter enclosure, instead of if
+ // the whole missing distance were just added to radius.
+
+ this.center.add(_toPoint.multiplyScalar(missingRadiusHalf / length));
+ this.radius += missingRadiusHalf;
+ }
+
+ return this;
+ }
+
+ union(sphere) {
+ // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769
+ // To enclose another sphere into this sphere, we only need to enclose two points:
+ // 1) Enclose the farthest point on the other sphere into this sphere.
+ // 2) Enclose the opposite point of the farthest point into this sphere.
+ _toFarthestPoint.subVectors(sphere.center, this.center).normalize().multiplyScalar(sphere.radius);
+
+ this.expandByPoint(_v1$6.copy(sphere.center).add(_toFarthestPoint));
+ this.expandByPoint(_v1$6.copy(sphere.center).sub(_toFarthestPoint));
+ return this;
+ }
+
+ equals(sphere) {
+ return sphere.center.equals(this.center) && sphere.radius === this.radius;
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ }
+
+ const _vector$a = /*@__PURE__*/new Vector3();
+
+ const _segCenter = /*@__PURE__*/new Vector3();
+
+ const _segDir = /*@__PURE__*/new Vector3();
+
+ const _diff = /*@__PURE__*/new Vector3();
+
+ const _edge1 = /*@__PURE__*/new Vector3();
+
+ const _edge2 = /*@__PURE__*/new Vector3();
+
+ const _normal$1 = /*@__PURE__*/new Vector3();
+
+ class Ray {
+ constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) {
+ this.origin = origin;
+ this.direction = direction;
+ }
+
+ set(origin, direction) {
+ this.origin.copy(origin);
+ this.direction.copy(direction);
+ return this;
+ }
+
+ copy(ray) {
+ this.origin.copy(ray.origin);
+ this.direction.copy(ray.direction);
+ return this;
+ }
+
+ at(t, target) {
+ return target.copy(this.direction).multiplyScalar(t).add(this.origin);
+ }
+
+ lookAt(v) {
+ this.direction.copy(v).sub(this.origin).normalize();
+ return this;
+ }
+
+ recast(t) {
+ this.origin.copy(this.at(t, _vector$a));
+ return this;
+ }
+
+ closestPointToPoint(point, target) {
+ target.subVectors(point, this.origin);
+ const directionDistance = target.dot(this.direction);
+
+ if (directionDistance < 0) {
+ return target.copy(this.origin);
+ }
+
+ return target.copy(this.direction).multiplyScalar(directionDistance).add(this.origin);
+ }
+
+ distanceToPoint(point) {
+ return Math.sqrt(this.distanceSqToPoint(point));
+ }
+
+ distanceSqToPoint(point) {
+ const directionDistance = _vector$a.subVectors(point, this.origin).dot(this.direction); // point behind the ray
+
+
+ if (directionDistance < 0) {
+ return this.origin.distanceToSquared(point);
+ }
+
+ _vector$a.copy(this.direction).multiplyScalar(directionDistance).add(this.origin);
+
+ return _vector$a.distanceToSquared(point);
+ }
+
+ distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) {
+ // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h
+ // It returns the min distance between the ray and the segment
+ // defined by v0 and v1
+ // It can also set two optional targets :
+ // - The closest point on the ray
+ // - The closest point on the segment
+ _segCenter.copy(v0).add(v1).multiplyScalar(0.5);
+
+ _segDir.copy(v1).sub(v0).normalize();
+
+ _diff.copy(this.origin).sub(_segCenter);
+
+ const segExtent = v0.distanceTo(v1) * 0.5;
+ const a01 = -this.direction.dot(_segDir);
+
+ const b0 = _diff.dot(this.direction);
+
+ const b1 = -_diff.dot(_segDir);
+
+ const c = _diff.lengthSq();
+
+ const det = Math.abs(1 - a01 * a01);
+ let s0, s1, sqrDist, extDet;
+
+ if (det > 0) {
+ // The ray and segment are not parallel.
+ s0 = a01 * b1 - b0;
+ s1 = a01 * b0 - b1;
+ extDet = segExtent * det;
+
+ if (s0 >= 0) {
+ if (s1 >= -extDet) {
+ if (s1 <= extDet) {
+ // region 0
+ // Minimum at interior points of ray and segment.
+ const invDet = 1 / det;
+ s0 *= invDet;
+ s1 *= invDet;
+ sqrDist = s0 * (s0 + a01 * s1 + 2 * b0) + s1 * (a01 * s0 + s1 + 2 * b1) + c;
+ } else {
+ // region 1
+ s1 = segExtent;
+ s0 = Math.max(0, -(a01 * s1 + b0));
+ sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;
+ }
+ } else {
+ // region 5
+ s1 = -segExtent;
+ s0 = Math.max(0, -(a01 * s1 + b0));
+ sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;
+ }
+ } else {
+ if (s1 <= -extDet) {
+ // region 4
+ s0 = Math.max(0, -(-a01 * segExtent + b0));
+ s1 = s0 > 0 ? -segExtent : Math.min(Math.max(-segExtent, -b1), segExtent);
+ sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;
+ } else if (s1 <= extDet) {
+ // region 3
+ s0 = 0;
+ s1 = Math.min(Math.max(-segExtent, -b1), segExtent);
+ sqrDist = s1 * (s1 + 2 * b1) + c;
+ } else {
+ // region 2
+ s0 = Math.max(0, -(a01 * segExtent + b0));
+ s1 = s0 > 0 ? segExtent : Math.min(Math.max(-segExtent, -b1), segExtent);
+ sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;
+ }
+ }
+ } else {
+ // Ray and segment are parallel.
+ s1 = a01 > 0 ? -segExtent : segExtent;
+ s0 = Math.max(0, -(a01 * s1 + b0));
+ sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;
+ }
+
+ if (optionalPointOnRay) {
+ optionalPointOnRay.copy(this.direction).multiplyScalar(s0).add(this.origin);
+ }
+
+ if (optionalPointOnSegment) {
+ optionalPointOnSegment.copy(_segDir).multiplyScalar(s1).add(_segCenter);
+ }
+
+ return sqrDist;
+ }
+
+ intersectSphere(sphere, target) {
+ _vector$a.subVectors(sphere.center, this.origin);
+
+ const tca = _vector$a.dot(this.direction);
+
+ const d2 = _vector$a.dot(_vector$a) - tca * tca;
+ const radius2 = sphere.radius * sphere.radius;
+ if (d2 > radius2) return null;
+ const thc = Math.sqrt(radius2 - d2); // t0 = first intersect point - entrance on front of sphere
+
+ const t0 = tca - thc; // t1 = second intersect point - exit point on back of sphere
+
+ const t1 = tca + thc; // test to see if both t0 and t1 are behind the ray - if so, return null
+
+ if (t0 < 0 && t1 < 0) return null; // test to see if t0 is behind the ray:
+ // if it is, the ray is inside the sphere, so return the second exit point scaled by t1,
+ // in order to always return an intersect point that is in front of the ray.
+
+ if (t0 < 0) return this.at(t1, target); // else t0 is in front of the ray, so return the first collision point scaled by t0
+
+ return this.at(t0, target);
+ }
+
+ intersectsSphere(sphere) {
+ return this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius;
+ }
+
+ distanceToPlane(plane) {
+ const denominator = plane.normal.dot(this.direction);
+
+ if (denominator === 0) {
+ // line is coplanar, return origin
+ if (plane.distanceToPoint(this.origin) === 0) {
+ return 0;
+ } // Null is preferable to undefined since undefined means.... it is undefined
+
+
+ return null;
+ }
+
+ const t = -(this.origin.dot(plane.normal) + plane.constant) / denominator; // Return if the ray never intersects the plane
+
+ return t >= 0 ? t : null;
+ }
+
+ intersectPlane(plane, target) {
+ const t = this.distanceToPlane(plane);
+
+ if (t === null) {
+ return null;
+ }
+
+ return this.at(t, target);
+ }
+
+ intersectsPlane(plane) {
+ // check if the ray lies on the plane first
+ const distToPoint = plane.distanceToPoint(this.origin);
+
+ if (distToPoint === 0) {
+ return true;
+ }
+
+ const denominator = plane.normal.dot(this.direction);
+
+ if (denominator * distToPoint < 0) {
+ return true;
+ } // ray origin is behind the plane (and is pointing behind it)
+
+
+ return false;
+ }
+
+ intersectBox(box, target) {
+ let tmin, tmax, tymin, tymax, tzmin, tzmax;
+ const invdirx = 1 / this.direction.x,
+ invdiry = 1 / this.direction.y,
+ invdirz = 1 / this.direction.z;
+ const origin = this.origin;
+
+ if (invdirx >= 0) {
+ tmin = (box.min.x - origin.x) * invdirx;
+ tmax = (box.max.x - origin.x) * invdirx;
+ } else {
+ tmin = (box.max.x - origin.x) * invdirx;
+ tmax = (box.min.x - origin.x) * invdirx;
+ }
+
+ if (invdiry >= 0) {
+ tymin = (box.min.y - origin.y) * invdiry;
+ tymax = (box.max.y - origin.y) * invdiry;
+ } else {
+ tymin = (box.max.y - origin.y) * invdiry;
+ tymax = (box.min.y - origin.y) * invdiry;
+ }
+
+ if (tmin > tymax || tymin > tmax) return null; // These lines also handle the case where tmin or tmax is NaN
+ // (result of 0 * Infinity). x !== x returns true if x is NaN
+
+ if (tymin > tmin || tmin !== tmin) tmin = tymin;
+ if (tymax < tmax || tmax !== tmax) tmax = tymax;
+
+ if (invdirz >= 0) {
+ tzmin = (box.min.z - origin.z) * invdirz;
+ tzmax = (box.max.z - origin.z) * invdirz;
+ } else {
+ tzmin = (box.max.z - origin.z) * invdirz;
+ tzmax = (box.min.z - origin.z) * invdirz;
+ }
+
+ if (tmin > tzmax || tzmin > tmax) return null;
+ if (tzmin > tmin || tmin !== tmin) tmin = tzmin;
+ if (tzmax < tmax || tmax !== tmax) tmax = tzmax; //return point closest to the ray (positive side)
+
+ if (tmax < 0) return null;
+ return this.at(tmin >= 0 ? tmin : tmax, target);
+ }
+
+ intersectsBox(box) {
+ return this.intersectBox(box, _vector$a) !== null;
+ }
+
+ intersectTriangle(a, b, c, backfaceCulling, target) {
+ // Compute the offset origin, edges, and normal.
+ // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h
+ _edge1.subVectors(b, a);
+
+ _edge2.subVectors(c, a);
+
+ _normal$1.crossVectors(_edge1, _edge2); // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,
+ // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by
+ // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))
+ // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))
+ // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)
+
+
+ let DdN = this.direction.dot(_normal$1);
+ let sign;
+
+ if (DdN > 0) {
+ if (backfaceCulling) return null;
+ sign = 1;
+ } else if (DdN < 0) {
+ sign = -1;
+ DdN = -DdN;
+ } else {
+ return null;
+ }
+
+ _diff.subVectors(this.origin, a);
+
+ const DdQxE2 = sign * this.direction.dot(_edge2.crossVectors(_diff, _edge2)); // b1 < 0, no intersection
+
+ if (DdQxE2 < 0) {
+ return null;
+ }
+
+ const DdE1xQ = sign * this.direction.dot(_edge1.cross(_diff)); // b2 < 0, no intersection
+
+ if (DdE1xQ < 0) {
+ return null;
+ } // b1+b2 > 1, no intersection
+
+
+ if (DdQxE2 + DdE1xQ > DdN) {
+ return null;
+ } // Line intersects triangle, check if ray does.
+
+
+ const QdN = -sign * _diff.dot(_normal$1); // t < 0, no intersection
+
+
+ if (QdN < 0) {
+ return null;
+ } // Ray intersects triangle.
+
+
+ return this.at(QdN / DdN, target);
+ }
+
+ applyMatrix4(matrix4) {
+ this.origin.applyMatrix4(matrix4);
+ this.direction.transformDirection(matrix4);
+ return this;
+ }
+
+ equals(ray) {
+ return ray.origin.equals(this.origin) && ray.direction.equals(this.direction);
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ }
+
+ class Matrix4 {
+ constructor() {
+ this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
+
+ if (arguments.length > 0) {
+ console.error('THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.');
+ }
+ }
+
+ set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {
+ const te = this.elements;
+ te[0] = n11;
+ te[4] = n12;
+ te[8] = n13;
+ te[12] = n14;
+ te[1] = n21;
+ te[5] = n22;
+ te[9] = n23;
+ te[13] = n24;
+ te[2] = n31;
+ te[6] = n32;
+ te[10] = n33;
+ te[14] = n34;
+ te[3] = n41;
+ te[7] = n42;
+ te[11] = n43;
+ te[15] = n44;
+ return this;
+ }
+
+ identity() {
+ this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ clone() {
+ return new Matrix4().fromArray(this.elements);
+ }
+
+ copy(m) {
+ const te = this.elements;
+ const me = m.elements;
+ te[0] = me[0];
+ te[1] = me[1];
+ te[2] = me[2];
+ te[3] = me[3];
+ te[4] = me[4];
+ te[5] = me[5];
+ te[6] = me[6];
+ te[7] = me[7];
+ te[8] = me[8];
+ te[9] = me[9];
+ te[10] = me[10];
+ te[11] = me[11];
+ te[12] = me[12];
+ te[13] = me[13];
+ te[14] = me[14];
+ te[15] = me[15];
+ return this;
+ }
+
+ copyPosition(m) {
+ const te = this.elements,
+ me = m.elements;
+ te[12] = me[12];
+ te[13] = me[13];
+ te[14] = me[14];
+ return this;
+ }
+
+ setFromMatrix3(m) {
+ const me = m.elements;
+ this.set(me[0], me[3], me[6], 0, me[1], me[4], me[7], 0, me[2], me[5], me[8], 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ extractBasis(xAxis, yAxis, zAxis) {
+ xAxis.setFromMatrixColumn(this, 0);
+ yAxis.setFromMatrixColumn(this, 1);
+ zAxis.setFromMatrixColumn(this, 2);
+ return this;
+ }
+
+ makeBasis(xAxis, yAxis, zAxis) {
+ this.set(xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ extractRotation(m) {
+ // this method does not support reflection matrices
+ const te = this.elements;
+ const me = m.elements;
+
+ const scaleX = 1 / _v1$5.setFromMatrixColumn(m, 0).length();
+
+ const scaleY = 1 / _v1$5.setFromMatrixColumn(m, 1).length();
+
+ const scaleZ = 1 / _v1$5.setFromMatrixColumn(m, 2).length();
+
+ te[0] = me[0] * scaleX;
+ te[1] = me[1] * scaleX;
+ te[2] = me[2] * scaleX;
+ te[3] = 0;
+ te[4] = me[4] * scaleY;
+ te[5] = me[5] * scaleY;
+ te[6] = me[6] * scaleY;
+ te[7] = 0;
+ te[8] = me[8] * scaleZ;
+ te[9] = me[9] * scaleZ;
+ te[10] = me[10] * scaleZ;
+ te[11] = 0;
+ te[12] = 0;
+ te[13] = 0;
+ te[14] = 0;
+ te[15] = 1;
+ return this;
+ }
+
+ makeRotationFromEuler(euler) {
+ if (!(euler && euler.isEuler)) {
+ console.error('THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.');
+ }
+
+ const te = this.elements;
+ const x = euler.x,
+ y = euler.y,
+ z = euler.z;
+ const a = Math.cos(x),
+ b = Math.sin(x);
+ const c = Math.cos(y),
+ d = Math.sin(y);
+ const e = Math.cos(z),
+ f = Math.sin(z);
+
+ if (euler.order === 'XYZ') {
+ const ae = a * e,
+ af = a * f,
+ be = b * e,
+ bf = b * f;
+ te[0] = c * e;
+ te[4] = -c * f;
+ te[8] = d;
+ te[1] = af + be * d;
+ te[5] = ae - bf * d;
+ te[9] = -b * c;
+ te[2] = bf - ae * d;
+ te[6] = be + af * d;
+ te[10] = a * c;
+ } else if (euler.order === 'YXZ') {
+ const ce = c * e,
+ cf = c * f,
+ de = d * e,
+ df = d * f;
+ te[0] = ce + df * b;
+ te[4] = de * b - cf;
+ te[8] = a * d;
+ te[1] = a * f;
+ te[5] = a * e;
+ te[9] = -b;
+ te[2] = cf * b - de;
+ te[6] = df + ce * b;
+ te[10] = a * c;
+ } else if (euler.order === 'ZXY') {
+ const ce = c * e,
+ cf = c * f,
+ de = d * e,
+ df = d * f;
+ te[0] = ce - df * b;
+ te[4] = -a * f;
+ te[8] = de + cf * b;
+ te[1] = cf + de * b;
+ te[5] = a * e;
+ te[9] = df - ce * b;
+ te[2] = -a * d;
+ te[6] = b;
+ te[10] = a * c;
+ } else if (euler.order === 'ZYX') {
+ const ae = a * e,
+ af = a * f,
+ be = b * e,
+ bf = b * f;
+ te[0] = c * e;
+ te[4] = be * d - af;
+ te[8] = ae * d + bf;
+ te[1] = c * f;
+ te[5] = bf * d + ae;
+ te[9] = af * d - be;
+ te[2] = -d;
+ te[6] = b * c;
+ te[10] = a * c;
+ } else if (euler.order === 'YZX') {
+ const ac = a * c,
+ ad = a * d,
+ bc = b * c,
+ bd = b * d;
+ te[0] = c * e;
+ te[4] = bd - ac * f;
+ te[8] = bc * f + ad;
+ te[1] = f;
+ te[5] = a * e;
+ te[9] = -b * e;
+ te[2] = -d * e;
+ te[6] = ad * f + bc;
+ te[10] = ac - bd * f;
+ } else if (euler.order === 'XZY') {
+ const ac = a * c,
+ ad = a * d,
+ bc = b * c,
+ bd = b * d;
+ te[0] = c * e;
+ te[4] = -f;
+ te[8] = d * e;
+ te[1] = ac * f + bd;
+ te[5] = a * e;
+ te[9] = ad * f - bc;
+ te[2] = bc * f - ad;
+ te[6] = b * e;
+ te[10] = bd * f + ac;
+ } // bottom row
+
+
+ te[3] = 0;
+ te[7] = 0;
+ te[11] = 0; // last column
+
+ te[12] = 0;
+ te[13] = 0;
+ te[14] = 0;
+ te[15] = 1;
+ return this;
+ }
+
+ makeRotationFromQuaternion(q) {
+ return this.compose(_zero, q, _one);
+ }
+
+ lookAt(eye, target, up) {
+ const te = this.elements;
+
+ _z.subVectors(eye, target);
+
+ if (_z.lengthSq() === 0) {
+ // eye and target are in the same position
+ _z.z = 1;
+ }
+
+ _z.normalize();
+
+ _x.crossVectors(up, _z);
+
+ if (_x.lengthSq() === 0) {
+ // up and z are parallel
+ if (Math.abs(up.z) === 1) {
+ _z.x += 0.0001;
+ } else {
+ _z.z += 0.0001;
+ }
+
+ _z.normalize();
+
+ _x.crossVectors(up, _z);
+ }
+
+ _x.normalize();
+
+ _y.crossVectors(_z, _x);
+
+ te[0] = _x.x;
+ te[4] = _y.x;
+ te[8] = _z.x;
+ te[1] = _x.y;
+ te[5] = _y.y;
+ te[9] = _z.y;
+ te[2] = _x.z;
+ te[6] = _y.z;
+ te[10] = _z.z;
+ return this;
+ }
+
+ multiply(m, n) {
+ if (n !== undefined) {
+ console.warn('THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.');
+ return this.multiplyMatrices(m, n);
+ }
+
+ return this.multiplyMatrices(this, m);
+ }
+
+ premultiply(m) {
+ return this.multiplyMatrices(m, this);
+ }
+
+ multiplyMatrices(a, b) {
+ const ae = a.elements;
+ const be = b.elements;
+ const te = this.elements;
+ const a11 = ae[0],
+ a12 = ae[4],
+ a13 = ae[8],
+ a14 = ae[12];
+ const a21 = ae[1],
+ a22 = ae[5],
+ a23 = ae[9],
+ a24 = ae[13];
+ const a31 = ae[2],
+ a32 = ae[6],
+ a33 = ae[10],
+ a34 = ae[14];
+ const a41 = ae[3],
+ a42 = ae[7],
+ a43 = ae[11],
+ a44 = ae[15];
+ const b11 = be[0],
+ b12 = be[4],
+ b13 = be[8],
+ b14 = be[12];
+ const b21 = be[1],
+ b22 = be[5],
+ b23 = be[9],
+ b24 = be[13];
+ const b31 = be[2],
+ b32 = be[6],
+ b33 = be[10],
+ b34 = be[14];
+ const b41 = be[3],
+ b42 = be[7],
+ b43 = be[11],
+ b44 = be[15];
+ te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;
+ te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;
+ te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;
+ te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;
+ te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;
+ te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;
+ te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;
+ te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;
+ te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;
+ te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;
+ te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;
+ te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;
+ te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;
+ te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;
+ te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;
+ te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;
+ return this;
+ }
+
+ multiplyScalar(s) {
+ const te = this.elements;
+ te[0] *= s;
+ te[4] *= s;
+ te[8] *= s;
+ te[12] *= s;
+ te[1] *= s;
+ te[5] *= s;
+ te[9] *= s;
+ te[13] *= s;
+ te[2] *= s;
+ te[6] *= s;
+ te[10] *= s;
+ te[14] *= s;
+ te[3] *= s;
+ te[7] *= s;
+ te[11] *= s;
+ te[15] *= s;
+ return this;
+ }
+
+ determinant() {
+ const te = this.elements;
+ const n11 = te[0],
+ n12 = te[4],
+ n13 = te[8],
+ n14 = te[12];
+ const n21 = te[1],
+ n22 = te[5],
+ n23 = te[9],
+ n24 = te[13];
+ const n31 = te[2],
+ n32 = te[6],
+ n33 = te[10],
+ n34 = te[14];
+ const n41 = te[3],
+ n42 = te[7],
+ n43 = te[11],
+ n44 = te[15]; //TODO: make this more efficient
+ //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )
+
+ return n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31);
+ }
+
+ transpose() {
+ const te = this.elements;
+ let tmp;
+ tmp = te[1];
+ te[1] = te[4];
+ te[4] = tmp;
+ tmp = te[2];
+ te[2] = te[8];
+ te[8] = tmp;
+ tmp = te[6];
+ te[6] = te[9];
+ te[9] = tmp;
+ tmp = te[3];
+ te[3] = te[12];
+ te[12] = tmp;
+ tmp = te[7];
+ te[7] = te[13];
+ te[13] = tmp;
+ tmp = te[11];
+ te[11] = te[14];
+ te[14] = tmp;
+ return this;
+ }
+
+ setPosition(x, y, z) {
+ const te = this.elements;
+
+ if (x.isVector3) {
+ te[12] = x.x;
+ te[13] = x.y;
+ te[14] = x.z;
+ } else {
+ te[12] = x;
+ te[13] = y;
+ te[14] = z;
+ }
+
+ return this;
+ }
+
+ invert() {
+ // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
+ const te = this.elements,
+ n11 = te[0],
+ n21 = te[1],
+ n31 = te[2],
+ n41 = te[3],
+ n12 = te[4],
+ n22 = te[5],
+ n32 = te[6],
+ n42 = te[7],
+ n13 = te[8],
+ n23 = te[9],
+ n33 = te[10],
+ n43 = te[11],
+ n14 = te[12],
+ n24 = te[13],
+ n34 = te[14],
+ n44 = te[15],
+ t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,
+ t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,
+ t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,
+ t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;
+ const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;
+ if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ const detInv = 1 / det;
+ te[0] = t11 * detInv;
+ te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;
+ te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;
+ te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;
+ te[4] = t12 * detInv;
+ te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;
+ te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;
+ te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;
+ te[8] = t13 * detInv;
+ te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;
+ te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;
+ te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;
+ te[12] = t14 * detInv;
+ te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;
+ te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;
+ te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;
+ return this;
+ }
+
+ scale(v) {
+ const te = this.elements;
+ const x = v.x,
+ y = v.y,
+ z = v.z;
+ te[0] *= x;
+ te[4] *= y;
+ te[8] *= z;
+ te[1] *= x;
+ te[5] *= y;
+ te[9] *= z;
+ te[2] *= x;
+ te[6] *= y;
+ te[10] *= z;
+ te[3] *= x;
+ te[7] *= y;
+ te[11] *= z;
+ return this;
+ }
+
+ getMaxScaleOnAxis() {
+ const te = this.elements;
+ const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];
+ const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];
+ const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];
+ return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));
+ }
+
+ makeTranslation(x, y, z) {
+ this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);
+ return this;
+ }
+
+ makeRotationX(theta) {
+ const c = Math.cos(theta),
+ s = Math.sin(theta);
+ this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ makeRotationY(theta) {
+ const c = Math.cos(theta),
+ s = Math.sin(theta);
+ this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ makeRotationZ(theta) {
+ const c = Math.cos(theta),
+ s = Math.sin(theta);
+ this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ makeRotationAxis(axis, angle) {
+ // Based on http://www.gamedev.net/reference/articles/article1199.asp
+ const c = Math.cos(angle);
+ const s = Math.sin(angle);
+ const t = 1 - c;
+ const x = axis.x,
+ y = axis.y,
+ z = axis.z;
+ const tx = t * x,
+ ty = t * y;
+ this.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ makeScale(x, y, z) {
+ this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ makeShear(xy, xz, yx, yz, zx, zy) {
+ this.set(1, yx, zx, 0, xy, 1, zy, 0, xz, yz, 1, 0, 0, 0, 0, 1);
+ return this;
+ }
+
+ compose(position, quaternion, scale) {
+ const te = this.elements;
+ const x = quaternion._x,
+ y = quaternion._y,
+ z = quaternion._z,
+ w = quaternion._w;
+ const x2 = x + x,
+ y2 = y + y,
+ z2 = z + z;
+ const xx = x * x2,
+ xy = x * y2,
+ xz = x * z2;
+ const yy = y * y2,
+ yz = y * z2,
+ zz = z * z2;
+ const wx = w * x2,
+ wy = w * y2,
+ wz = w * z2;
+ const sx = scale.x,
+ sy = scale.y,
+ sz = scale.z;
+ te[0] = (1 - (yy + zz)) * sx;
+ te[1] = (xy + wz) * sx;
+ te[2] = (xz - wy) * sx;
+ te[3] = 0;
+ te[4] = (xy - wz) * sy;
+ te[5] = (1 - (xx + zz)) * sy;
+ te[6] = (yz + wx) * sy;
+ te[7] = 0;
+ te[8] = (xz + wy) * sz;
+ te[9] = (yz - wx) * sz;
+ te[10] = (1 - (xx + yy)) * sz;
+ te[11] = 0;
+ te[12] = position.x;
+ te[13] = position.y;
+ te[14] = position.z;
+ te[15] = 1;
+ return this;
+ }
+
+ decompose(position, quaternion, scale) {
+ const te = this.elements;
+
+ let sx = _v1$5.set(te[0], te[1], te[2]).length();
+
+ const sy = _v1$5.set(te[4], te[5], te[6]).length();
+
+ const sz = _v1$5.set(te[8], te[9], te[10]).length(); // if determine is negative, we need to invert one scale
+
+
+ const det = this.determinant();
+ if (det < 0) sx = -sx;
+ position.x = te[12];
+ position.y = te[13];
+ position.z = te[14]; // scale the rotation part
+
+ _m1$2.copy(this);
+
+ const invSX = 1 / sx;
+ const invSY = 1 / sy;
+ const invSZ = 1 / sz;
+ _m1$2.elements[0] *= invSX;
+ _m1$2.elements[1] *= invSX;
+ _m1$2.elements[2] *= invSX;
+ _m1$2.elements[4] *= invSY;
+ _m1$2.elements[5] *= invSY;
+ _m1$2.elements[6] *= invSY;
+ _m1$2.elements[8] *= invSZ;
+ _m1$2.elements[9] *= invSZ;
+ _m1$2.elements[10] *= invSZ;
+ quaternion.setFromRotationMatrix(_m1$2);
+ scale.x = sx;
+ scale.y = sy;
+ scale.z = sz;
+ return this;
+ }
+
+ makePerspective(left, right, top, bottom, near, far) {
+ if (far === undefined) {
+ console.warn('THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.');
+ }
+
+ const te = this.elements;
+ const x = 2 * near / (right - left);
+ const y = 2 * near / (top - bottom);
+ const a = (right + left) / (right - left);
+ const b = (top + bottom) / (top - bottom);
+ const c = -(far + near) / (far - near);
+ const d = -2 * far * near / (far - near);
+ te[0] = x;
+ te[4] = 0;
+ te[8] = a;
+ te[12] = 0;
+ te[1] = 0;
+ te[5] = y;
+ te[9] = b;
+ te[13] = 0;
+ te[2] = 0;
+ te[6] = 0;
+ te[10] = c;
+ te[14] = d;
+ te[3] = 0;
+ te[7] = 0;
+ te[11] = -1;
+ te[15] = 0;
+ return this;
+ }
+
+ makeOrthographic(left, right, top, bottom, near, far) {
+ const te = this.elements;
+ const w = 1.0 / (right - left);
+ const h = 1.0 / (top - bottom);
+ const p = 1.0 / (far - near);
+ const x = (right + left) * w;
+ const y = (top + bottom) * h;
+ const z = (far + near) * p;
+ te[0] = 2 * w;
+ te[4] = 0;
+ te[8] = 0;
+ te[12] = -x;
+ te[1] = 0;
+ te[5] = 2 * h;
+ te[9] = 0;
+ te[13] = -y;
+ te[2] = 0;
+ te[6] = 0;
+ te[10] = -2 * p;
+ te[14] = -z;
+ te[3] = 0;
+ te[7] = 0;
+ te[11] = 0;
+ te[15] = 1;
+ return this;
+ }
+
+ equals(matrix) {
+ const te = this.elements;
+ const me = matrix.elements;
+
+ for (let i = 0; i < 16; i++) {
+ if (te[i] !== me[i]) return false;
+ }
+
+ return true;
+ }
+
+ fromArray(array, offset = 0) {
+ for (let i = 0; i < 16; i++) {
+ this.elements[i] = array[i + offset];
+ }
+
+ return this;
+ }
+
+ toArray(array = [], offset = 0) {
+ const te = this.elements;
+ array[offset] = te[0];
+ array[offset + 1] = te[1];
+ array[offset + 2] = te[2];
+ array[offset + 3] = te[3];
+ array[offset + 4] = te[4];
+ array[offset + 5] = te[5];
+ array[offset + 6] = te[6];
+ array[offset + 7] = te[7];
+ array[offset + 8] = te[8];
+ array[offset + 9] = te[9];
+ array[offset + 10] = te[10];
+ array[offset + 11] = te[11];
+ array[offset + 12] = te[12];
+ array[offset + 13] = te[13];
+ array[offset + 14] = te[14];
+ array[offset + 15] = te[15];
+ return array;
+ }
+
+ }
+
+ Matrix4.prototype.isMatrix4 = true;
+
+ const _v1$5 = /*@__PURE__*/new Vector3();
+
+ const _m1$2 = /*@__PURE__*/new Matrix4();
+
+ const _zero = /*@__PURE__*/new Vector3(0, 0, 0);
+
+ const _one = /*@__PURE__*/new Vector3(1, 1, 1);
+
+ const _x = /*@__PURE__*/new Vector3();
+
+ const _y = /*@__PURE__*/new Vector3();
+
+ const _z = /*@__PURE__*/new Vector3();
+
+ const _matrix$1 = /*@__PURE__*/new Matrix4();
+
+ const _quaternion$3 = /*@__PURE__*/new Quaternion();
+
+ class Euler {
+ constructor(x = 0, y = 0, z = 0, order = Euler.DefaultOrder) {
+ this._x = x;
+ this._y = y;
+ this._z = z;
+ this._order = order;
+ }
+
+ get x() {
+ return this._x;
+ }
+
+ set x(value) {
+ this._x = value;
+
+ this._onChangeCallback();
+ }
+
+ get y() {
+ return this._y;
+ }
+
+ set y(value) {
+ this._y = value;
+
+ this._onChangeCallback();
+ }
+
+ get z() {
+ return this._z;
+ }
+
+ set z(value) {
+ this._z = value;
+
+ this._onChangeCallback();
+ }
+
+ get order() {
+ return this._order;
+ }
+
+ set order(value) {
+ this._order = value;
+
+ this._onChangeCallback();
+ }
+
+ set(x, y, z, order = this._order) {
+ this._x = x;
+ this._y = y;
+ this._z = z;
+ this._order = order;
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ clone() {
+ return new this.constructor(this._x, this._y, this._z, this._order);
+ }
+
+ copy(euler) {
+ this._x = euler._x;
+ this._y = euler._y;
+ this._z = euler._z;
+ this._order = euler._order;
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ setFromRotationMatrix(m, order = this._order, update = true) {
+ // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
+ const te = m.elements;
+ const m11 = te[0],
+ m12 = te[4],
+ m13 = te[8];
+ const m21 = te[1],
+ m22 = te[5],
+ m23 = te[9];
+ const m31 = te[2],
+ m32 = te[6],
+ m33 = te[10];
+
+ switch (order) {
+ case 'XYZ':
+ this._y = Math.asin(clamp(m13, -1, 1));
+
+ if (Math.abs(m13) < 0.9999999) {
+ this._x = Math.atan2(-m23, m33);
+ this._z = Math.atan2(-m12, m11);
+ } else {
+ this._x = Math.atan2(m32, m22);
+ this._z = 0;
+ }
+
+ break;
+
+ case 'YXZ':
+ this._x = Math.asin(-clamp(m23, -1, 1));
+
+ if (Math.abs(m23) < 0.9999999) {
+ this._y = Math.atan2(m13, m33);
+ this._z = Math.atan2(m21, m22);
+ } else {
+ this._y = Math.atan2(-m31, m11);
+ this._z = 0;
+ }
+
+ break;
+
+ case 'ZXY':
+ this._x = Math.asin(clamp(m32, -1, 1));
+
+ if (Math.abs(m32) < 0.9999999) {
+ this._y = Math.atan2(-m31, m33);
+ this._z = Math.atan2(-m12, m22);
+ } else {
+ this._y = 0;
+ this._z = Math.atan2(m21, m11);
+ }
+
+ break;
+
+ case 'ZYX':
+ this._y = Math.asin(-clamp(m31, -1, 1));
+
+ if (Math.abs(m31) < 0.9999999) {
+ this._x = Math.atan2(m32, m33);
+ this._z = Math.atan2(m21, m11);
+ } else {
+ this._x = 0;
+ this._z = Math.atan2(-m12, m22);
+ }
+
+ break;
+
+ case 'YZX':
+ this._z = Math.asin(clamp(m21, -1, 1));
+
+ if (Math.abs(m21) < 0.9999999) {
+ this._x = Math.atan2(-m23, m22);
+ this._y = Math.atan2(-m31, m11);
+ } else {
+ this._x = 0;
+ this._y = Math.atan2(m13, m33);
+ }
+
+ break;
+
+ case 'XZY':
+ this._z = Math.asin(-clamp(m12, -1, 1));
+
+ if (Math.abs(m12) < 0.9999999) {
+ this._x = Math.atan2(m32, m22);
+ this._y = Math.atan2(m13, m11);
+ } else {
+ this._x = Math.atan2(-m23, m33);
+ this._y = 0;
+ }
+
+ break;
+
+ default:
+ console.warn('THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order);
+ }
+
+ this._order = order;
+ if (update === true) this._onChangeCallback();
+ return this;
+ }
+
+ setFromQuaternion(q, order, update) {
+ _matrix$1.makeRotationFromQuaternion(q);
+
+ return this.setFromRotationMatrix(_matrix$1, order, update);
+ }
+
+ setFromVector3(v, order = this._order) {
+ return this.set(v.x, v.y, v.z, order);
+ }
+
+ reorder(newOrder) {
+ // WARNING: this discards revolution information -bhouston
+ _quaternion$3.setFromEuler(this);
+
+ return this.setFromQuaternion(_quaternion$3, newOrder);
+ }
+
+ equals(euler) {
+ return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order;
+ }
+
+ fromArray(array) {
+ this._x = array[0];
+ this._y = array[1];
+ this._z = array[2];
+ if (array[3] !== undefined) this._order = array[3];
+
+ this._onChangeCallback();
+
+ return this;
+ }
+
+ toArray(array = [], offset = 0) {
+ array[offset] = this._x;
+ array[offset + 1] = this._y;
+ array[offset + 2] = this._z;
+ array[offset + 3] = this._order;
+ return array;
+ }
+
+ toVector3(optionalResult) {
+ if (optionalResult) {
+ return optionalResult.set(this._x, this._y, this._z);
+ } else {
+ return new Vector3(this._x, this._y, this._z);
+ }
+ }
+
+ _onChange(callback) {
+ this._onChangeCallback = callback;
+ return this;
+ }
+
+ _onChangeCallback() {}
+
+ }
+
+ Euler.prototype.isEuler = true;
+ Euler.DefaultOrder = 'XYZ';
+ Euler.RotationOrders = ['XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX'];
+
+ class Layers {
+ constructor() {
+ this.mask = 1 | 0;
+ }
+
+ set(channel) {
+ this.mask = 1 << channel | 0;
+ }
+
+ enable(channel) {
+ this.mask |= 1 << channel | 0;
+ }
+
+ enableAll() {
+ this.mask = 0xffffffff | 0;
+ }
+
+ toggle(channel) {
+ this.mask ^= 1 << channel | 0;
+ }
+
+ disable(channel) {
+ this.mask &= ~(1 << channel | 0);
+ }
+
+ disableAll() {
+ this.mask = 0;
+ }
+
+ test(layers) {
+ return (this.mask & layers.mask) !== 0;
+ }
+
+ }
+
+ let _object3DId = 0;
+
+ const _v1$4 = /*@__PURE__*/new Vector3();
+
+ const _q1 = /*@__PURE__*/new Quaternion();
+
+ const _m1$1 = /*@__PURE__*/new Matrix4();
+
+ const _target = /*@__PURE__*/new Vector3();
+
+ const _position$3 = /*@__PURE__*/new Vector3();
+
+ const _scale$2 = /*@__PURE__*/new Vector3();
+
+ const _quaternion$2 = /*@__PURE__*/new Quaternion();
+
+ const _xAxis = /*@__PURE__*/new Vector3(1, 0, 0);
+
+ const _yAxis = /*@__PURE__*/new Vector3(0, 1, 0);
+
+ const _zAxis = /*@__PURE__*/new Vector3(0, 0, 1);
+
+ const _addedEvent = {
+ type: 'added'
+ };
+ const _removedEvent = {
+ type: 'removed'
+ };
+
+ class Object3D extends EventDispatcher {
+ constructor() {
+ super();
+ Object.defineProperty(this, 'id', {
+ value: _object3DId++
+ });
+ this.uuid = generateUUID();
+ this.name = '';
+ this.type = 'Object3D';
+ this.parent = null;
+ this.children = [];
+ this.up = Object3D.DefaultUp.clone();
+ const position = new Vector3();
+ const rotation = new Euler();
+ const quaternion = new Quaternion();
+ const scale = new Vector3(1, 1, 1);
+
+ function onRotationChange() {
+ quaternion.setFromEuler(rotation, false);
+ }
+
+ function onQuaternionChange() {
+ rotation.setFromQuaternion(quaternion, undefined, false);
+ }
+
+ rotation._onChange(onRotationChange);
+
+ quaternion._onChange(onQuaternionChange);
+
+ Object.defineProperties(this, {
+ position: {
+ configurable: true,
+ enumerable: true,
+ value: position
+ },
+ rotation: {
+ configurable: true,
+ enumerable: true,
+ value: rotation
+ },
+ quaternion: {
+ configurable: true,
+ enumerable: true,
+ value: quaternion
+ },
+ scale: {
+ configurable: true,
+ enumerable: true,
+ value: scale
+ },
+ modelViewMatrix: {
+ value: new Matrix4()
+ },
+ normalMatrix: {
+ value: new Matrix3()
+ }
+ });
+ this.matrix = new Matrix4();
+ this.matrixWorld = new Matrix4();
+ this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;
+ this.matrixWorldNeedsUpdate = false;
+ this.layers = new Layers();
+ this.visible = true;
+ this.castShadow = false;
+ this.receiveShadow = false;
+ this.frustumCulled = true;
+ this.renderOrder = 0;
+ this.animations = [];
+ this.userData = {};
+ }
+
+ onBeforeRender() {}
+
+ onAfterRender() {}
+
+ applyMatrix4(matrix) {
+ if (this.matrixAutoUpdate) this.updateMatrix();
+ this.matrix.premultiply(matrix);
+ this.matrix.decompose(this.position, this.quaternion, this.scale);
+ }
+
+ applyQuaternion(q) {
+ this.quaternion.premultiply(q);
+ return this;
+ }
+
+ setRotationFromAxisAngle(axis, angle) {
+ // assumes axis is normalized
+ this.quaternion.setFromAxisAngle(axis, angle);
+ }
+
+ setRotationFromEuler(euler) {
+ this.quaternion.setFromEuler(euler, true);
+ }
+
+ setRotationFromMatrix(m) {
+ // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
+ this.quaternion.setFromRotationMatrix(m);
+ }
+
+ setRotationFromQuaternion(q) {
+ // assumes q is normalized
+ this.quaternion.copy(q);
+ }
+
+ rotateOnAxis(axis, angle) {
+ // rotate object on axis in object space
+ // axis is assumed to be normalized
+ _q1.setFromAxisAngle(axis, angle);
+
+ this.quaternion.multiply(_q1);
+ return this;
+ }
+
+ rotateOnWorldAxis(axis, angle) {
+ // rotate object on axis in world space
+ // axis is assumed to be normalized
+ // method assumes no rotated parent
+ _q1.setFromAxisAngle(axis, angle);
+
+ this.quaternion.premultiply(_q1);
+ return this;
+ }
+
+ rotateX(angle) {
+ return this.rotateOnAxis(_xAxis, angle);
+ }
+
+ rotateY(angle) {
+ return this.rotateOnAxis(_yAxis, angle);
+ }
+
+ rotateZ(angle) {
+ return this.rotateOnAxis(_zAxis, angle);
+ }
+
+ translateOnAxis(axis, distance) {
+ // translate object by distance along axis in object space
+ // axis is assumed to be normalized
+ _v1$4.copy(axis).applyQuaternion(this.quaternion);
+
+ this.position.add(_v1$4.multiplyScalar(distance));
+ return this;
+ }
+
+ translateX(distance) {
+ return this.translateOnAxis(_xAxis, distance);
+ }
+
+ translateY(distance) {
+ return this.translateOnAxis(_yAxis, distance);
+ }
+
+ translateZ(distance) {
+ return this.translateOnAxis(_zAxis, distance);
+ }
+
+ localToWorld(vector) {
+ return vector.applyMatrix4(this.matrixWorld);
+ }
+
+ worldToLocal(vector) {
+ return vector.applyMatrix4(_m1$1.copy(this.matrixWorld).invert());
+ }
+
+ lookAt(x, y, z) {
+ // This method does not support objects having non-uniformly-scaled parent(s)
+ if (x.isVector3) {
+ _target.copy(x);
+ } else {
+ _target.set(x, y, z);
+ }
+
+ const parent = this.parent;
+ this.updateWorldMatrix(true, false);
+
+ _position$3.setFromMatrixPosition(this.matrixWorld);
+
+ if (this.isCamera || this.isLight) {
+ _m1$1.lookAt(_position$3, _target, this.up);
+ } else {
+ _m1$1.lookAt(_target, _position$3, this.up);
+ }
+
+ this.quaternion.setFromRotationMatrix(_m1$1);
+
+ if (parent) {
+ _m1$1.extractRotation(parent.matrixWorld);
+
+ _q1.setFromRotationMatrix(_m1$1);
+
+ this.quaternion.premultiply(_q1.invert());
+ }
+ }
+
+ add(object) {
+ if (arguments.length > 1) {
+ for (let i = 0; i < arguments.length; i++) {
+ this.add(arguments[i]);
+ }
+
+ return this;
+ }
+
+ if (object === this) {
+ console.error('THREE.Object3D.add: object can\'t be added as a child of itself.', object);
+ return this;
+ }
+
+ if (object && object.isObject3D) {
+ if (object.parent !== null) {
+ object.parent.remove(object);
+ }
+
+ object.parent = this;
+ this.children.push(object);
+ object.dispatchEvent(_addedEvent);
+ } else {
+ console.error('THREE.Object3D.add: object not an instance of THREE.Object3D.', object);
+ }
+
+ return this;
+ }
+
+ remove(object) {
+ if (arguments.length > 1) {
+ for (let i = 0; i < arguments.length; i++) {
+ this.remove(arguments[i]);
+ }
+
+ return this;
+ }
+
+ const index = this.children.indexOf(object);
+
+ if (index !== -1) {
+ object.parent = null;
+ this.children.splice(index, 1);
+ object.dispatchEvent(_removedEvent);
+ }
+
+ return this;
+ }
+
+ removeFromParent() {
+ const parent = this.parent;
+
+ if (parent !== null) {
+ parent.remove(this);
+ }
+
+ return this;
+ }
+
+ clear() {
+ for (let i = 0; i < this.children.length; i++) {
+ const object = this.children[i];
+ object.parent = null;
+ object.dispatchEvent(_removedEvent);
+ }
+
+ this.children.length = 0;
+ return this;
+ }
+
+ attach(object) {
+ // adds object as a child of this, while maintaining the object's world transform
+ this.updateWorldMatrix(true, false);
+
+ _m1$1.copy(this.matrixWorld).invert();
+
+ if (object.parent !== null) {
+ object.parent.updateWorldMatrix(true, false);
+
+ _m1$1.multiply(object.parent.matrixWorld);
+ }
+
+ object.applyMatrix4(_m1$1);
+ this.add(object);
+ object.updateWorldMatrix(false, true);
+ return this;
+ }
+
+ getObjectById(id) {
+ return this.getObjectByProperty('id', id);
+ }
+
+ getObjectByName(name) {
+ return this.getObjectByProperty('name', name);
+ }
+
+ getObjectByProperty(name, value) {
+ if (this[name] === value) return this;
+
+ for (let i = 0, l = this.children.length; i < l; i++) {
+ const child = this.children[i];
+ const object = child.getObjectByProperty(name, value);
+
+ if (object !== undefined) {
+ return object;
+ }
+ }
+
+ return undefined;
+ }
+
+ getWorldPosition(target) {
+ this.updateWorldMatrix(true, false);
+ return target.setFromMatrixPosition(this.matrixWorld);
+ }
+
+ getWorldQuaternion(target) {
+ this.updateWorldMatrix(true, false);
+ this.matrixWorld.decompose(_position$3, target, _scale$2);
+ return target;
+ }
+
+ getWorldScale(target) {
+ this.updateWorldMatrix(true, false);
+ this.matrixWorld.decompose(_position$3, _quaternion$2, target);
+ return target;
+ }
+
+ getWorldDirection(target) {
+ this.updateWorldMatrix(true, false);
+ const e = this.matrixWorld.elements;
+ return target.set(e[8], e[9], e[10]).normalize();
+ }
+
+ raycast() {}
+
+ traverse(callback) {
+ callback(this);
+ const children = this.children;
+
+ for (let i = 0, l = children.length; i < l; i++) {
+ children[i].traverse(callback);
+ }
+ }
+
+ traverseVisible(callback) {
+ if (this.visible === false) return;
+ callback(this);
+ const children = this.children;
+
+ for (let i = 0, l = children.length; i < l; i++) {
+ children[i].traverseVisible(callback);
+ }
+ }
+
+ traverseAncestors(callback) {
+ const parent = this.parent;
+
+ if (parent !== null) {
+ callback(parent);
+ parent.traverseAncestors(callback);
+ }
+ }
+
+ updateMatrix() {
+ this.matrix.compose(this.position, this.quaternion, this.scale);
+ this.matrixWorldNeedsUpdate = true;
+ }
+
+ updateMatrixWorld(force) {
+ if (this.matrixAutoUpdate) this.updateMatrix();
+
+ if (this.matrixWorldNeedsUpdate || force) {
+ if (this.parent === null) {
+ this.matrixWorld.copy(this.matrix);
+ } else {
+ this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);
+ }
+
+ this.matrixWorldNeedsUpdate = false;
+ force = true;
+ } // update children
+
+
+ const children = this.children;
+
+ for (let i = 0, l = children.length; i < l; i++) {
+ children[i].updateMatrixWorld(force);
+ }
+ }
+
+ updateWorldMatrix(updateParents, updateChildren) {
+ const parent = this.parent;
+
+ if (updateParents === true && parent !== null) {
+ parent.updateWorldMatrix(true, false);
+ }
+
+ if (this.matrixAutoUpdate) this.updateMatrix();
+
+ if (this.parent === null) {
+ this.matrixWorld.copy(this.matrix);
+ } else {
+ this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);
+ } // update children
+
+
+ if (updateChildren === true) {
+ const children = this.children;
+
+ for (let i = 0, l = children.length; i < l; i++) {
+ children[i].updateWorldMatrix(false, true);
+ }
+ }
+ }
+
+ toJSON(meta) {
+ // meta is a string when called from JSON.stringify
+ const isRootObject = meta === undefined || typeof meta === 'string';
+ const output = {}; // meta is a hash used to collect geometries, materials.
+ // not providing it implies that this is the root object
+ // being serialized.
+
+ if (isRootObject) {
+ // initialize meta obj
+ meta = {
+ geometries: {},
+ materials: {},
+ textures: {},
+ images: {},
+ shapes: {},
+ skeletons: {},
+ animations: {}
+ };
+ output.metadata = {
+ version: 4.5,
+ type: 'Object',
+ generator: 'Object3D.toJSON'
+ };
+ } // standard Object3D serialization
+
+
+ const object = {};
+ object.uuid = this.uuid;
+ object.type = this.type;
+ if (this.name !== '') object.name = this.name;
+ if (this.castShadow === true) object.castShadow = true;
+ if (this.receiveShadow === true) object.receiveShadow = true;
+ if (this.visible === false) object.visible = false;
+ if (this.frustumCulled === false) object.frustumCulled = false;
+ if (this.renderOrder !== 0) object.renderOrder = this.renderOrder;
+ if (JSON.stringify(this.userData) !== '{}') object.userData = this.userData;
+ object.layers = this.layers.mask;
+ object.matrix = this.matrix.toArray();
+ if (this.matrixAutoUpdate === false) object.matrixAutoUpdate = false; // object specific properties
+
+ if (this.isInstancedMesh) {
+ object.type = 'InstancedMesh';
+ object.count = this.count;
+ object.instanceMatrix = this.instanceMatrix.toJSON();
+ if (this.instanceColor !== null) object.instanceColor = this.instanceColor.toJSON();
+ } //
+
+
+ function serialize(library, element) {
+ if (library[element.uuid] === undefined) {
+ library[element.uuid] = element.toJSON(meta);
+ }
+
+ return element.uuid;
+ }
+
+ if (this.isScene) {
+ if (this.background) {
+ if (this.background.isColor) {
+ object.background = this.background.toJSON();
+ } else if (this.background.isTexture) {
+ object.background = this.background.toJSON(meta).uuid;
+ }
+ }
+
+ if (this.environment && this.environment.isTexture) {
+ object.environment = this.environment.toJSON(meta).uuid;
+ }
+ } else if (this.isMesh || this.isLine || this.isPoints) {
+ object.geometry = serialize(meta.geometries, this.geometry);
+ const parameters = this.geometry.parameters;
+
+ if (parameters !== undefined && parameters.shapes !== undefined) {
+ const shapes = parameters.shapes;
+
+ if (Array.isArray(shapes)) {
+ for (let i = 0, l = shapes.length; i < l; i++) {
+ const shape = shapes[i];
+ serialize(meta.shapes, shape);
+ }
+ } else {
+ serialize(meta.shapes, shapes);
+ }
+ }
+ }
+
+ if (this.isSkinnedMesh) {
+ object.bindMode = this.bindMode;
+ object.bindMatrix = this.bindMatrix.toArray();
+
+ if (this.skeleton !== undefined) {
+ serialize(meta.skeletons, this.skeleton);
+ object.skeleton = this.skeleton.uuid;
+ }
+ }
+
+ if (this.material !== undefined) {
+ if (Array.isArray(this.material)) {
+ const uuids = [];
+
+ for (let i = 0, l = this.material.length; i < l; i++) {
+ uuids.push(serialize(meta.materials, this.material[i]));
+ }
+
+ object.material = uuids;
+ } else {
+ object.material = serialize(meta.materials, this.material);
+ }
+ } //
+
+
+ if (this.children.length > 0) {
+ object.children = [];
+
+ for (let i = 0; i < this.children.length; i++) {
+ object.children.push(this.children[i].toJSON(meta).object);
+ }
+ } //
+
+
+ if (this.animations.length > 0) {
+ object.animations = [];
+
+ for (let i = 0; i < this.animations.length; i++) {
+ const animation = this.animations[i];
+ object.animations.push(serialize(meta.animations, animation));
+ }
+ }
+
+ if (isRootObject) {
+ const geometries = extractFromCache(meta.geometries);
+ const materials = extractFromCache(meta.materials);
+ const textures = extractFromCache(meta.textures);
+ const images = extractFromCache(meta.images);
+ const shapes = extractFromCache(meta.shapes);
+ const skeletons = extractFromCache(meta.skeletons);
+ const animations = extractFromCache(meta.animations);
+ if (geometries.length > 0) output.geometries = geometries;
+ if (materials.length > 0) output.materials = materials;
+ if (textures.length > 0) output.textures = textures;
+ if (images.length > 0) output.images = images;
+ if (shapes.length > 0) output.shapes = shapes;
+ if (skeletons.length > 0) output.skeletons = skeletons;
+ if (animations.length > 0) output.animations = animations;
+ }
+
+ output.object = object;
+ return output; // extract data from the cache hash
+ // remove metadata on each item
+ // and return as array
+
+ function extractFromCache(cache) {
+ const values = [];
+
+ for (const key in cache) {
+ const data = cache[key];
+ delete data.metadata;
+ values.push(data);
+ }
+
+ return values;
+ }
+ }
+
+ clone(recursive) {
+ return new this.constructor().copy(this, recursive);
+ }
+
+ copy(source, recursive = true) {
+ this.name = source.name;
+ this.up.copy(source.up);
+ this.position.copy(source.position);
+ this.rotation.order = source.rotation.order;
+ this.quaternion.copy(source.quaternion);
+ this.scale.copy(source.scale);
+ this.matrix.copy(source.matrix);
+ this.matrixWorld.copy(source.matrixWorld);
+ this.matrixAutoUpdate = source.matrixAutoUpdate;
+ this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;
+ this.layers.mask = source.layers.mask;
+ this.visible = source.visible;
+ this.castShadow = source.castShadow;
+ this.receiveShadow = source.receiveShadow;
+ this.frustumCulled = source.frustumCulled;
+ this.renderOrder = source.renderOrder;
+ this.userData = JSON.parse(JSON.stringify(source.userData));
+
+ if (recursive === true) {
+ for (let i = 0; i < source.children.length; i++) {
+ const child = source.children[i];
+ this.add(child.clone());
+ }
+ }
+
+ return this;
+ }
+
+ }
+
+ Object3D.DefaultUp = new Vector3(0, 1, 0);
+ Object3D.DefaultMatrixAutoUpdate = true;
+ Object3D.prototype.isObject3D = true;
+
+ const _v0$1 = /*@__PURE__*/new Vector3();
+
+ const _v1$3 = /*@__PURE__*/new Vector3();
+
+ const _v2$2 = /*@__PURE__*/new Vector3();
+
+ const _v3$1 = /*@__PURE__*/new Vector3();
+
+ const _vab = /*@__PURE__*/new Vector3();
+
+ const _vac = /*@__PURE__*/new Vector3();
+
+ const _vbc = /*@__PURE__*/new Vector3();
+
+ const _vap = /*@__PURE__*/new Vector3();
+
+ const _vbp = /*@__PURE__*/new Vector3();
+
+ const _vcp = /*@__PURE__*/new Vector3();
+
+ class Triangle {
+ constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) {
+ this.a = a;
+ this.b = b;
+ this.c = c;
+ }
+
+ static getNormal(a, b, c, target) {
+ target.subVectors(c, b);
+
+ _v0$1.subVectors(a, b);
+
+ target.cross(_v0$1);
+ const targetLengthSq = target.lengthSq();
+
+ if (targetLengthSq > 0) {
+ return target.multiplyScalar(1 / Math.sqrt(targetLengthSq));
+ }
+
+ return target.set(0, 0, 0);
+ } // static/instance method to calculate barycentric coordinates
+ // based on: http://www.blackpawn.com/texts/pointinpoly/default.html
+
+
+ static getBarycoord(point, a, b, c, target) {
+ _v0$1.subVectors(c, a);
+
+ _v1$3.subVectors(b, a);
+
+ _v2$2.subVectors(point, a);
+
+ const dot00 = _v0$1.dot(_v0$1);
+
+ const dot01 = _v0$1.dot(_v1$3);
+
+ const dot02 = _v0$1.dot(_v2$2);
+
+ const dot11 = _v1$3.dot(_v1$3);
+
+ const dot12 = _v1$3.dot(_v2$2);
+
+ const denom = dot00 * dot11 - dot01 * dot01; // collinear or singular triangle
+
+ if (denom === 0) {
+ // arbitrary location outside of triangle?
+ // not sure if this is the best idea, maybe should be returning undefined
+ return target.set(-2, -1, -1);
+ }
+
+ const invDenom = 1 / denom;
+ const u = (dot11 * dot02 - dot01 * dot12) * invDenom;
+ const v = (dot00 * dot12 - dot01 * dot02) * invDenom; // barycentric coordinates must always sum to 1
+
+ return target.set(1 - u - v, v, u);
+ }
+
+ static containsPoint(point, a, b, c) {
+ this.getBarycoord(point, a, b, c, _v3$1);
+ return _v3$1.x >= 0 && _v3$1.y >= 0 && _v3$1.x + _v3$1.y <= 1;
+ }
+
+ static getUV(point, p1, p2, p3, uv1, uv2, uv3, target) {
+ this.getBarycoord(point, p1, p2, p3, _v3$1);
+ target.set(0, 0);
+ target.addScaledVector(uv1, _v3$1.x);
+ target.addScaledVector(uv2, _v3$1.y);
+ target.addScaledVector(uv3, _v3$1.z);
+ return target;
+ }
+
+ static isFrontFacing(a, b, c, direction) {
+ _v0$1.subVectors(c, b);
+
+ _v1$3.subVectors(a, b); // strictly front facing
+
+
+ return _v0$1.cross(_v1$3).dot(direction) < 0 ? true : false;
+ }
+
+ set(a, b, c) {
+ this.a.copy(a);
+ this.b.copy(b);
+ this.c.copy(c);
+ return this;
+ }
+
+ setFromPointsAndIndices(points, i0, i1, i2) {
+ this.a.copy(points[i0]);
+ this.b.copy(points[i1]);
+ this.c.copy(points[i2]);
+ return this;
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ copy(triangle) {
+ this.a.copy(triangle.a);
+ this.b.copy(triangle.b);
+ this.c.copy(triangle.c);
+ return this;
+ }
+
+ getArea() {
+ _v0$1.subVectors(this.c, this.b);
+
+ _v1$3.subVectors(this.a, this.b);
+
+ return _v0$1.cross(_v1$3).length() * 0.5;
+ }
+
+ getMidpoint(target) {
+ return target.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3);
+ }
+
+ getNormal(target) {
+ return Triangle.getNormal(this.a, this.b, this.c, target);
+ }
+
+ getPlane(target) {
+ return target.setFromCoplanarPoints(this.a, this.b, this.c);
+ }
+
+ getBarycoord(point, target) {
+ return Triangle.getBarycoord(point, this.a, this.b, this.c, target);
+ }
+
+ getUV(point, uv1, uv2, uv3, target) {
+ return Triangle.getUV(point, this.a, this.b, this.c, uv1, uv2, uv3, target);
+ }
+
+ containsPoint(point) {
+ return Triangle.containsPoint(point, this.a, this.b, this.c);
+ }
+
+ isFrontFacing(direction) {
+ return Triangle.isFrontFacing(this.a, this.b, this.c, direction);
+ }
+
+ intersectsBox(box) {
+ return box.intersectsTriangle(this);
+ }
+
+ closestPointToPoint(p, target) {
+ const a = this.a,
+ b = this.b,
+ c = this.c;
+ let v, w; // algorithm thanks to Real-Time Collision Detection by Christer Ericson,
+ // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,
+ // under the accompanying license; see chapter 5.1.5 for detailed explanation.
+ // basically, we're distinguishing which of the voronoi regions of the triangle
+ // the point lies in with the minimum amount of redundant computation.
+
+ _vab.subVectors(b, a);
+
+ _vac.subVectors(c, a);
+
+ _vap.subVectors(p, a);
+
+ const d1 = _vab.dot(_vap);
+
+ const d2 = _vac.dot(_vap);
+
+ if (d1 <= 0 && d2 <= 0) {
+ // vertex region of A; barycentric coords (1, 0, 0)
+ return target.copy(a);
+ }
+
+ _vbp.subVectors(p, b);
+
+ const d3 = _vab.dot(_vbp);
+
+ const d4 = _vac.dot(_vbp);
+
+ if (d3 >= 0 && d4 <= d3) {
+ // vertex region of B; barycentric coords (0, 1, 0)
+ return target.copy(b);
+ }
+
+ const vc = d1 * d4 - d3 * d2;
+
+ if (vc <= 0 && d1 >= 0 && d3 <= 0) {
+ v = d1 / (d1 - d3); // edge region of AB; barycentric coords (1-v, v, 0)
+
+ return target.copy(a).addScaledVector(_vab, v);
+ }
+
+ _vcp.subVectors(p, c);
+
+ const d5 = _vab.dot(_vcp);
+
+ const d6 = _vac.dot(_vcp);
+
+ if (d6 >= 0 && d5 <= d6) {
+ // vertex region of C; barycentric coords (0, 0, 1)
+ return target.copy(c);
+ }
+
+ const vb = d5 * d2 - d1 * d6;
+
+ if (vb <= 0 && d2 >= 0 && d6 <= 0) {
+ w = d2 / (d2 - d6); // edge region of AC; barycentric coords (1-w, 0, w)
+
+ return target.copy(a).addScaledVector(_vac, w);
+ }
+
+ const va = d3 * d6 - d5 * d4;
+
+ if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) {
+ _vbc.subVectors(c, b);
+
+ w = (d4 - d3) / (d4 - d3 + (d5 - d6)); // edge region of BC; barycentric coords (0, 1-w, w)
+
+ return target.copy(b).addScaledVector(_vbc, w); // edge region of BC
+ } // face region
+
+
+ const denom = 1 / (va + vb + vc); // u = va * denom
+
+ v = vb * denom;
+ w = vc * denom;
+ return target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w);
+ }
+
+ equals(triangle) {
+ return triangle.a.equals(this.a) && triangle.b.equals(this.b) && triangle.c.equals(this.c);
+ }
+
+ }
+
+ let materialId = 0;
+
+ class Material extends EventDispatcher {
+ constructor() {
+ super();
+ Object.defineProperty(this, 'id', {
+ value: materialId++
+ });
+ this.uuid = generateUUID();
+ this.name = '';
+ this.type = 'Material';
+ this.fog = true;
+ this.blending = NormalBlending;
+ this.side = FrontSide;
+ this.vertexColors = false;
+ this.opacity = 1;
+ this.format = RGBAFormat;
+ this.transparent = false;
+ this.blendSrc = SrcAlphaFactor;
+ this.blendDst = OneMinusSrcAlphaFactor;
+ this.blendEquation = AddEquation;
+ this.blendSrcAlpha = null;
+ this.blendDstAlpha = null;
+ this.blendEquationAlpha = null;
+ this.depthFunc = LessEqualDepth;
+ this.depthTest = true;
+ this.depthWrite = true;
+ this.stencilWriteMask = 0xff;
+ this.stencilFunc = AlwaysStencilFunc;
+ this.stencilRef = 0;
+ this.stencilFuncMask = 0xff;
+ this.stencilFail = KeepStencilOp;
+ this.stencilZFail = KeepStencilOp;
+ this.stencilZPass = KeepStencilOp;
+ this.stencilWrite = false;
+ this.clippingPlanes = null;
+ this.clipIntersection = false;
+ this.clipShadows = false;
+ this.shadowSide = null;
+ this.colorWrite = true;
+ this.precision = null; // override the renderer's default precision for this material
+
+ this.polygonOffset = false;
+ this.polygonOffsetFactor = 0;
+ this.polygonOffsetUnits = 0;
+ this.dithering = false;
+ this.alphaToCoverage = false;
+ this.premultipliedAlpha = false;
+ this.visible = true;
+ this.toneMapped = true;
+ this.userData = {};
+ this.version = 0;
+ this._alphaTest = 0;
+ }
+
+ get alphaTest() {
+ return this._alphaTest;
+ }
+
+ set alphaTest(value) {
+ if (this._alphaTest > 0 !== value > 0) {
+ this.version++;
+ }
+
+ this._alphaTest = value;
+ }
+
+ onBuild() {}
+
+ onBeforeCompile() {}
+
+ customProgramCacheKey() {
+ return this.onBeforeCompile.toString();
+ }
+
+ setValues(values) {
+ if (values === undefined) return;
+
+ for (const key in values) {
+ const newValue = values[key];
+
+ if (newValue === undefined) {
+ console.warn('THREE.Material: \'' + key + '\' parameter is undefined.');
+ continue;
+ } // for backward compatability if shading is set in the constructor
+
+
+ if (key === 'shading') {
+ console.warn('THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.');
+ this.flatShading = newValue === FlatShading ? true : false;
+ continue;
+ }
+
+ const currentValue = this[key];
+
+ if (currentValue === undefined) {
+ console.warn('THREE.' + this.type + ': \'' + key + '\' is not a property of this material.');
+ continue;
+ }
+
+ if (currentValue && currentValue.isColor) {
+ currentValue.set(newValue);
+ } else if (currentValue && currentValue.isVector3 && newValue && newValue.isVector3) {
+ currentValue.copy(newValue);
+ } else {
+ this[key] = newValue;
+ }
+ }
+ }
+
+ toJSON(meta) {
+ const isRoot = meta === undefined || typeof meta === 'string';
+
+ if (isRoot) {
+ meta = {
+ textures: {},
+ images: {}
+ };
+ }
+
+ const data = {
+ metadata: {
+ version: 4.5,
+ type: 'Material',
+ generator: 'Material.toJSON'
+ }
+ }; // standard Material serialization
+
+ data.uuid = this.uuid;
+ data.type = this.type;
+ if (this.name !== '') data.name = this.name;
+ if (this.color && this.color.isColor) data.color = this.color.getHex();
+ if (this.roughness !== undefined) data.roughness = this.roughness;
+ if (this.metalness !== undefined) data.metalness = this.metalness;
+ if (this.sheenTint && this.sheenTint.isColor) data.sheenTint = this.sheenTint.getHex();
+ if (this.emissive && this.emissive.isColor) data.emissive = this.emissive.getHex();
+ if (this.emissiveIntensity && this.emissiveIntensity !== 1) data.emissiveIntensity = this.emissiveIntensity;
+ if (this.specular && this.specular.isColor) data.specular = this.specular.getHex();
+ if (this.specularIntensity !== undefined) data.specularIntensity = this.specularIntensity;
+ if (this.specularTint && this.specularTint.isColor) data.specularTint = this.specularTint.getHex();
+ if (this.shininess !== undefined) data.shininess = this.shininess;
+ if (this.clearcoat !== undefined) data.clearcoat = this.clearcoat;
+ if (this.clearcoatRoughness !== undefined) data.clearcoatRoughness = this.clearcoatRoughness;
+
+ if (this.clearcoatMap && this.clearcoatMap.isTexture) {
+ data.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid;
+ }
+
+ if (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) {
+ data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(meta).uuid;
+ }
+
+ if (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) {
+ data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid;
+ data.clearcoatNormalScale = this.clearcoatNormalScale.toArray();
+ }
+
+ if (this.map && this.map.isTexture) data.map = this.map.toJSON(meta).uuid;
+ if (this.matcap && this.matcap.isTexture) data.matcap = this.matcap.toJSON(meta).uuid;
+ if (this.alphaMap && this.alphaMap.isTexture) data.alphaMap = this.alphaMap.toJSON(meta).uuid;
+
+ if (this.lightMap && this.lightMap.isTexture) {
+ data.lightMap = this.lightMap.toJSON(meta).uuid;
+ data.lightMapIntensity = this.lightMapIntensity;
+ }
+
+ if (this.aoMap && this.aoMap.isTexture) {
+ data.aoMap = this.aoMap.toJSON(meta).uuid;
+ data.aoMapIntensity = this.aoMapIntensity;
+ }
+
+ if (this.bumpMap && this.bumpMap.isTexture) {
+ data.bumpMap = this.bumpMap.toJSON(meta).uuid;
+ data.bumpScale = this.bumpScale;
+ }
+
+ if (this.normalMap && this.normalMap.isTexture) {
+ data.normalMap = this.normalMap.toJSON(meta).uuid;
+ data.normalMapType = this.normalMapType;
+ data.normalScale = this.normalScale.toArray();
+ }
+
+ if (this.displacementMap && this.displacementMap.isTexture) {
+ data.displacementMap = this.displacementMap.toJSON(meta).uuid;
+ data.displacementScale = this.displacementScale;
+ data.displacementBias = this.displacementBias;
+ }
+
+ if (this.roughnessMap && this.roughnessMap.isTexture) data.roughnessMap = this.roughnessMap.toJSON(meta).uuid;
+ if (this.metalnessMap && this.metalnessMap.isTexture) data.metalnessMap = this.metalnessMap.toJSON(meta).uuid;
+ if (this.emissiveMap && this.emissiveMap.isTexture) data.emissiveMap = this.emissiveMap.toJSON(meta).uuid;
+ if (this.specularMap && this.specularMap.isTexture) data.specularMap = this.specularMap.toJSON(meta).uuid;
+ if (this.specularIntensityMap && this.specularIntensityMap.isTexture) data.specularIntensityMap = this.specularIntensityMap.toJSON(meta).uuid;
+ if (this.specularTintMap && this.specularTintMap.isTexture) data.specularTintMap = this.specularTintMap.toJSON(meta).uuid;
+
+ if (this.envMap && this.envMap.isTexture) {
+ data.envMap = this.envMap.toJSON(meta).uuid;
+ if (this.combine !== undefined) data.combine = this.combine;
+ }
+
+ if (this.envMapIntensity !== undefined) data.envMapIntensity = this.envMapIntensity;
+ if (this.reflectivity !== undefined) data.reflectivity = this.reflectivity;
+ if (this.refractionRatio !== undefined) data.refractionRatio = this.refractionRatio;
+
+ if (this.gradientMap && this.gradientMap.isTexture) {
+ data.gradientMap = this.gradientMap.toJSON(meta).uuid;
+ }
+
+ if (this.transmission !== undefined) data.transmission = this.transmission;
+ if (this.transmissionMap && this.transmissionMap.isTexture) data.transmissionMap = this.transmissionMap.toJSON(meta).uuid;
+ if (this.thickness !== undefined) data.thickness = this.thickness;
+ if (this.thicknessMap && this.thicknessMap.isTexture) data.thicknessMap = this.thicknessMap.toJSON(meta).uuid;
+ if (this.attenuationDistance !== undefined) data.attenuationDistance = this.attenuationDistance;
+ if (this.attenuationTint !== undefined) data.attenuationTint = this.attenuationTint.getHex();
+ if (this.size !== undefined) data.size = this.size;
+ if (this.shadowSide !== null) data.shadowSide = this.shadowSide;
+ if (this.sizeAttenuation !== undefined) data.sizeAttenuation = this.sizeAttenuation;
+ if (this.blending !== NormalBlending) data.blending = this.blending;
+ if (this.side !== FrontSide) data.side = this.side;
+ if (this.vertexColors) data.vertexColors = true;
+ if (this.opacity < 1) data.opacity = this.opacity;
+ if (this.format !== RGBAFormat) data.format = this.format;
+ if (this.transparent === true) data.transparent = this.transparent;
+ data.depthFunc = this.depthFunc;
+ data.depthTest = this.depthTest;
+ data.depthWrite = this.depthWrite;
+ data.colorWrite = this.colorWrite;
+ data.stencilWrite = this.stencilWrite;
+ data.stencilWriteMask = this.stencilWriteMask;
+ data.stencilFunc = this.stencilFunc;
+ data.stencilRef = this.stencilRef;
+ data.stencilFuncMask = this.stencilFuncMask;
+ data.stencilFail = this.stencilFail;
+ data.stencilZFail = this.stencilZFail;
+ data.stencilZPass = this.stencilZPass; // rotation (SpriteMaterial)
+
+ if (this.rotation && this.rotation !== 0) data.rotation = this.rotation;
+ if (this.polygonOffset === true) data.polygonOffset = true;
+ if (this.polygonOffsetFactor !== 0) data.polygonOffsetFactor = this.polygonOffsetFactor;
+ if (this.polygonOffsetUnits !== 0) data.polygonOffsetUnits = this.polygonOffsetUnits;
+ if (this.linewidth && this.linewidth !== 1) data.linewidth = this.linewidth;
+ if (this.dashSize !== undefined) data.dashSize = this.dashSize;
+ if (this.gapSize !== undefined) data.gapSize = this.gapSize;
+ if (this.scale !== undefined) data.scale = this.scale;
+ if (this.dithering === true) data.dithering = true;
+ if (this.alphaTest > 0) data.alphaTest = this.alphaTest;
+ if (this.alphaToCoverage === true) data.alphaToCoverage = this.alphaToCoverage;
+ if (this.premultipliedAlpha === true) data.premultipliedAlpha = this.premultipliedAlpha;
+ if (this.wireframe === true) data.wireframe = this.wireframe;
+ if (this.wireframeLinewidth > 1) data.wireframeLinewidth = this.wireframeLinewidth;
+ if (this.wireframeLinecap !== 'round') data.wireframeLinecap = this.wireframeLinecap;
+ if (this.wireframeLinejoin !== 'round') data.wireframeLinejoin = this.wireframeLinejoin;
+ if (this.flatShading === true) data.flatShading = this.flatShading;
+ if (this.visible === false) data.visible = false;
+ if (this.toneMapped === false) data.toneMapped = false;
+ if (JSON.stringify(this.userData) !== '{}') data.userData = this.userData; // TODO: Copied from Object3D.toJSON
+
+ function extractFromCache(cache) {
+ const values = [];
+
+ for (const key in cache) {
+ const data = cache[key];
+ delete data.metadata;
+ values.push(data);
+ }
+
+ return values;
+ }
+
+ if (isRoot) {
+ const textures = extractFromCache(meta.textures);
+ const images = extractFromCache(meta.images);
+ if (textures.length > 0) data.textures = textures;
+ if (images.length > 0) data.images = images;
+ }
+
+ return data;
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ copy(source) {
+ this.name = source.name;
+ this.fog = source.fog;
+ this.blending = source.blending;
+ this.side = source.side;
+ this.vertexColors = source.vertexColors;
+ this.opacity = source.opacity;
+ this.format = source.format;
+ this.transparent = source.transparent;
+ this.blendSrc = source.blendSrc;
+ this.blendDst = source.blendDst;
+ this.blendEquation = source.blendEquation;
+ this.blendSrcAlpha = source.blendSrcAlpha;
+ this.blendDstAlpha = source.blendDstAlpha;
+ this.blendEquationAlpha = source.blendEquationAlpha;
+ this.depthFunc = source.depthFunc;
+ this.depthTest = source.depthTest;
+ this.depthWrite = source.depthWrite;
+ this.stencilWriteMask = source.stencilWriteMask;
+ this.stencilFunc = source.stencilFunc;
+ this.stencilRef = source.stencilRef;
+ this.stencilFuncMask = source.stencilFuncMask;
+ this.stencilFail = source.stencilFail;
+ this.stencilZFail = source.stencilZFail;
+ this.stencilZPass = source.stencilZPass;
+ this.stencilWrite = source.stencilWrite;
+ const srcPlanes = source.clippingPlanes;
+ let dstPlanes = null;
+
+ if (srcPlanes !== null) {
+ const n = srcPlanes.length;
+ dstPlanes = new Array(n);
+
+ for (let i = 0; i !== n; ++i) {
+ dstPlanes[i] = srcPlanes[i].clone();
+ }
+ }
+
+ this.clippingPlanes = dstPlanes;
+ this.clipIntersection = source.clipIntersection;
+ this.clipShadows = source.clipShadows;
+ this.shadowSide = source.shadowSide;
+ this.colorWrite = source.colorWrite;
+ this.precision = source.precision;
+ this.polygonOffset = source.polygonOffset;
+ this.polygonOffsetFactor = source.polygonOffsetFactor;
+ this.polygonOffsetUnits = source.polygonOffsetUnits;
+ this.dithering = source.dithering;
+ this.alphaTest = source.alphaTest;
+ this.alphaToCoverage = source.alphaToCoverage;
+ this.premultipliedAlpha = source.premultipliedAlpha;
+ this.visible = source.visible;
+ this.toneMapped = source.toneMapped;
+ this.userData = JSON.parse(JSON.stringify(source.userData));
+ return this;
+ }
+
+ dispose() {
+ this.dispatchEvent({
+ type: 'dispose'
+ });
+ }
+
+ set needsUpdate(value) {
+ if (value === true) this.version++;
+ }
+
+ }
+
+ Material.prototype.isMaterial = true;
+
+ const _colorKeywords = {
+ 'aliceblue': 0xF0F8FF,
+ 'antiquewhite': 0xFAEBD7,
+ 'aqua': 0x00FFFF,
+ 'aquamarine': 0x7FFFD4,
+ 'azure': 0xF0FFFF,
+ 'beige': 0xF5F5DC,
+ 'bisque': 0xFFE4C4,
+ 'black': 0x000000,
+ 'blanchedalmond': 0xFFEBCD,
+ 'blue': 0x0000FF,
+ 'blueviolet': 0x8A2BE2,
+ 'brown': 0xA52A2A,
+ 'burlywood': 0xDEB887,
+ 'cadetblue': 0x5F9EA0,
+ 'chartreuse': 0x7FFF00,
+ 'chocolate': 0xD2691E,
+ 'coral': 0xFF7F50,
+ 'cornflowerblue': 0x6495ED,
+ 'cornsilk': 0xFFF8DC,
+ 'crimson': 0xDC143C,
+ 'cyan': 0x00FFFF,
+ 'darkblue': 0x00008B,
+ 'darkcyan': 0x008B8B,
+ 'darkgoldenrod': 0xB8860B,
+ 'darkgray': 0xA9A9A9,
+ 'darkgreen': 0x006400,
+ 'darkgrey': 0xA9A9A9,
+ 'darkkhaki': 0xBDB76B,
+ 'darkmagenta': 0x8B008B,
+ 'darkolivegreen': 0x556B2F,
+ 'darkorange': 0xFF8C00,
+ 'darkorchid': 0x9932CC,
+ 'darkred': 0x8B0000,
+ 'darksalmon': 0xE9967A,
+ 'darkseagreen': 0x8FBC8F,
+ 'darkslateblue': 0x483D8B,
+ 'darkslategray': 0x2F4F4F,
+ 'darkslategrey': 0x2F4F4F,
+ 'darkturquoise': 0x00CED1,
+ 'darkviolet': 0x9400D3,
+ 'deeppink': 0xFF1493,
+ 'deepskyblue': 0x00BFFF,
+ 'dimgray': 0x696969,
+ 'dimgrey': 0x696969,
+ 'dodgerblue': 0x1E90FF,
+ 'firebrick': 0xB22222,
+ 'floralwhite': 0xFFFAF0,
+ 'forestgreen': 0x228B22,
+ 'fuchsia': 0xFF00FF,
+ 'gainsboro': 0xDCDCDC,
+ 'ghostwhite': 0xF8F8FF,
+ 'gold': 0xFFD700,
+ 'goldenrod': 0xDAA520,
+ 'gray': 0x808080,
+ 'green': 0x008000,
+ 'greenyellow': 0xADFF2F,
+ 'grey': 0x808080,
+ 'honeydew': 0xF0FFF0,
+ 'hotpink': 0xFF69B4,
+ 'indianred': 0xCD5C5C,
+ 'indigo': 0x4B0082,
+ 'ivory': 0xFFFFF0,
+ 'khaki': 0xF0E68C,
+ 'lavender': 0xE6E6FA,
+ 'lavenderblush': 0xFFF0F5,
+ 'lawngreen': 0x7CFC00,
+ 'lemonchiffon': 0xFFFACD,
+ 'lightblue': 0xADD8E6,
+ 'lightcoral': 0xF08080,
+ 'lightcyan': 0xE0FFFF,
+ 'lightgoldenrodyellow': 0xFAFAD2,
+ 'lightgray': 0xD3D3D3,
+ 'lightgreen': 0x90EE90,
+ 'lightgrey': 0xD3D3D3,
+ 'lightpink': 0xFFB6C1,
+ 'lightsalmon': 0xFFA07A,
+ 'lightseagreen': 0x20B2AA,
+ 'lightskyblue': 0x87CEFA,
+ 'lightslategray': 0x778899,
+ 'lightslategrey': 0x778899,
+ 'lightsteelblue': 0xB0C4DE,
+ 'lightyellow': 0xFFFFE0,
+ 'lime': 0x00FF00,
+ 'limegreen': 0x32CD32,
+ 'linen': 0xFAF0E6,
+ 'magenta': 0xFF00FF,
+ 'maroon': 0x800000,
+ 'mediumaquamarine': 0x66CDAA,
+ 'mediumblue': 0x0000CD,
+ 'mediumorchid': 0xBA55D3,
+ 'mediumpurple': 0x9370DB,
+ 'mediumseagreen': 0x3CB371,
+ 'mediumslateblue': 0x7B68EE,
+ 'mediumspringgreen': 0x00FA9A,
+ 'mediumturquoise': 0x48D1CC,
+ 'mediumvioletred': 0xC71585,
+ 'midnightblue': 0x191970,
+ 'mintcream': 0xF5FFFA,
+ 'mistyrose': 0xFFE4E1,
+ 'moccasin': 0xFFE4B5,
+ 'navajowhite': 0xFFDEAD,
+ 'navy': 0x000080,
+ 'oldlace': 0xFDF5E6,
+ 'olive': 0x808000,
+ 'olivedrab': 0x6B8E23,
+ 'orange': 0xFFA500,
+ 'orangered': 0xFF4500,
+ 'orchid': 0xDA70D6,
+ 'palegoldenrod': 0xEEE8AA,
+ 'palegreen': 0x98FB98,
+ 'paleturquoise': 0xAFEEEE,
+ 'palevioletred': 0xDB7093,
+ 'papayawhip': 0xFFEFD5,
+ 'peachpuff': 0xFFDAB9,
+ 'peru': 0xCD853F,
+ 'pink': 0xFFC0CB,
+ 'plum': 0xDDA0DD,
+ 'powderblue': 0xB0E0E6,
+ 'purple': 0x800080,
+ 'rebeccapurple': 0x663399,
+ 'red': 0xFF0000,
+ 'rosybrown': 0xBC8F8F,
+ 'royalblue': 0x4169E1,
+ 'saddlebrown': 0x8B4513,
+ 'salmon': 0xFA8072,
+ 'sandybrown': 0xF4A460,
+ 'seagreen': 0x2E8B57,
+ 'seashell': 0xFFF5EE,
+ 'sienna': 0xA0522D,
+ 'silver': 0xC0C0C0,
+ 'skyblue': 0x87CEEB,
+ 'slateblue': 0x6A5ACD,
+ 'slategray': 0x708090,
+ 'slategrey': 0x708090,
+ 'snow': 0xFFFAFA,
+ 'springgreen': 0x00FF7F,
+ 'steelblue': 0x4682B4,
+ 'tan': 0xD2B48C,
+ 'teal': 0x008080,
+ 'thistle': 0xD8BFD8,
+ 'tomato': 0xFF6347,
+ 'turquoise': 0x40E0D0,
+ 'violet': 0xEE82EE,
+ 'wheat': 0xF5DEB3,
+ 'white': 0xFFFFFF,
+ 'whitesmoke': 0xF5F5F5,
+ 'yellow': 0xFFFF00,
+ 'yellowgreen': 0x9ACD32
+ };
+ const _hslA = {
+ h: 0,
+ s: 0,
+ l: 0
+ };
+ const _hslB = {
+ h: 0,
+ s: 0,
+ l: 0
+ };
+
+ function hue2rgb(p, q, t) {
+ if (t < 0) t += 1;
+ if (t > 1) t -= 1;
+ if (t < 1 / 6) return p + (q - p) * 6 * t;
+ if (t < 1 / 2) return q;
+ if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t);
+ return p;
+ }
+
+ function SRGBToLinear(c) {
+ return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);
+ }
+
+ function LinearToSRGB(c) {
+ return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;
+ }
+
+ class Color {
+ constructor(r, g, b) {
+ if (g === undefined && b === undefined) {
+ // r is THREE.Color, hex or string
+ return this.set(r);
+ }
+
+ return this.setRGB(r, g, b);
+ }
+
+ set(value) {
+ if (value && value.isColor) {
+ this.copy(value);
+ } else if (typeof value === 'number') {
+ this.setHex(value);
+ } else if (typeof value === 'string') {
+ this.setStyle(value);
+ }
+
+ return this;
+ }
+
+ setScalar(scalar) {
+ this.r = scalar;
+ this.g = scalar;
+ this.b = scalar;
+ return this;
+ }
+
+ setHex(hex) {
+ hex = Math.floor(hex);
+ this.r = (hex >> 16 & 255) / 255;
+ this.g = (hex >> 8 & 255) / 255;
+ this.b = (hex & 255) / 255;
+ return this;
+ }
+
+ setRGB(r, g, b) {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ return this;
+ }
+
+ setHSL(h, s, l) {
+ // h,s,l ranges are in 0.0 - 1.0
+ h = euclideanModulo(h, 1);
+ s = clamp(s, 0, 1);
+ l = clamp(l, 0, 1);
+
+ if (s === 0) {
+ this.r = this.g = this.b = l;
+ } else {
+ const p = l <= 0.5 ? l * (1 + s) : l + s - l * s;
+ const q = 2 * l - p;
+ this.r = hue2rgb(q, p, h + 1 / 3);
+ this.g = hue2rgb(q, p, h);
+ this.b = hue2rgb(q, p, h - 1 / 3);
+ }
+
+ return this;
+ }
+
+ setStyle(style) {
+ function handleAlpha(string) {
+ if (string === undefined) return;
+
+ if (parseFloat(string) < 1) {
+ console.warn('THREE.Color: Alpha component of ' + style + ' will be ignored.');
+ }
+ }
+
+ let m;
+
+ if (m = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(style)) {
+ // rgb / hsl
+ let color;
+ const name = m[1];
+ const components = m[2];
+
+ switch (name) {
+ case 'rgb':
+ case 'rgba':
+ if (color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) {
+ // rgb(255,0,0) rgba(255,0,0,0.5)
+ this.r = Math.min(255, parseInt(color[1], 10)) / 255;
+ this.g = Math.min(255, parseInt(color[2], 10)) / 255;
+ this.b = Math.min(255, parseInt(color[3], 10)) / 255;
+ handleAlpha(color[4]);
+ return this;
+ }
+
+ if (color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) {
+ // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)
+ this.r = Math.min(100, parseInt(color[1], 10)) / 100;
+ this.g = Math.min(100, parseInt(color[2], 10)) / 100;
+ this.b = Math.min(100, parseInt(color[3], 10)) / 100;
+ handleAlpha(color[4]);
+ return this;
+ }
+
+ break;
+
+ case 'hsl':
+ case 'hsla':
+ if (color = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) {
+ // hsl(120,50%,50%) hsla(120,50%,50%,0.5)
+ const h = parseFloat(color[1]) / 360;
+ const s = parseInt(color[2], 10) / 100;
+ const l = parseInt(color[3], 10) / 100;
+ handleAlpha(color[4]);
+ return this.setHSL(h, s, l);
+ }
+
+ break;
+ }
+ } else if (m = /^\#([A-Fa-f\d]+)$/.exec(style)) {
+ // hex color
+ const hex = m[1];
+ const size = hex.length;
+
+ if (size === 3) {
+ // #ff0
+ this.r = parseInt(hex.charAt(0) + hex.charAt(0), 16) / 255;
+ this.g = parseInt(hex.charAt(1) + hex.charAt(1), 16) / 255;
+ this.b = parseInt(hex.charAt(2) + hex.charAt(2), 16) / 255;
+ return this;
+ } else if (size === 6) {
+ // #ff0000
+ this.r = parseInt(hex.charAt(0) + hex.charAt(1), 16) / 255;
+ this.g = parseInt(hex.charAt(2) + hex.charAt(3), 16) / 255;
+ this.b = parseInt(hex.charAt(4) + hex.charAt(5), 16) / 255;
+ return this;
+ }
+ }
+
+ if (style && style.length > 0) {
+ return this.setColorName(style);
+ }
+
+ return this;
+ }
+
+ setColorName(style) {
+ // color keywords
+ const hex = _colorKeywords[style.toLowerCase()];
+
+ if (hex !== undefined) {
+ // red
+ this.setHex(hex);
+ } else {
+ // unknown color
+ console.warn('THREE.Color: Unknown color ' + style);
+ }
+
+ return this;
+ }
+
+ clone() {
+ return new this.constructor(this.r, this.g, this.b);
+ }
+
+ copy(color) {
+ this.r = color.r;
+ this.g = color.g;
+ this.b = color.b;
+ return this;
+ }
+
+ copyGammaToLinear(color, gammaFactor = 2.0) {
+ this.r = Math.pow(color.r, gammaFactor);
+ this.g = Math.pow(color.g, gammaFactor);
+ this.b = Math.pow(color.b, gammaFactor);
+ return this;
+ }
+
+ copyLinearToGamma(color, gammaFactor = 2.0) {
+ const safeInverse = gammaFactor > 0 ? 1.0 / gammaFactor : 1.0;
+ this.r = Math.pow(color.r, safeInverse);
+ this.g = Math.pow(color.g, safeInverse);
+ this.b = Math.pow(color.b, safeInverse);
+ return this;
+ }
+
+ convertGammaToLinear(gammaFactor) {
+ this.copyGammaToLinear(this, gammaFactor);
+ return this;
+ }
+
+ convertLinearToGamma(gammaFactor) {
+ this.copyLinearToGamma(this, gammaFactor);
+ return this;
+ }
+
+ copySRGBToLinear(color) {
+ this.r = SRGBToLinear(color.r);
+ this.g = SRGBToLinear(color.g);
+ this.b = SRGBToLinear(color.b);
+ return this;
+ }
+
+ copyLinearToSRGB(color) {
+ this.r = LinearToSRGB(color.r);
+ this.g = LinearToSRGB(color.g);
+ this.b = LinearToSRGB(color.b);
+ return this;
+ }
+
+ convertSRGBToLinear() {
+ this.copySRGBToLinear(this);
+ return this;
+ }
+
+ convertLinearToSRGB() {
+ this.copyLinearToSRGB(this);
+ return this;
+ }
+
+ getHex() {
+ return this.r * 255 << 16 ^ this.g * 255 << 8 ^ this.b * 255 << 0;
+ }
+
+ getHexString() {
+ return ('000000' + this.getHex().toString(16)).slice(-6);
+ }
+
+ getHSL(target) {
+ // h,s,l ranges are in 0.0 - 1.0
+ const r = this.r,
+ g = this.g,
+ b = this.b;
+ const max = Math.max(r, g, b);
+ const min = Math.min(r, g, b);
+ let hue, saturation;
+ const lightness = (min + max) / 2.0;
+
+ if (min === max) {
+ hue = 0;
+ saturation = 0;
+ } else {
+ const delta = max - min;
+ saturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min);
+
+ switch (max) {
+ case r:
+ hue = (g - b) / delta + (g < b ? 6 : 0);
+ break;
+
+ case g:
+ hue = (b - r) / delta + 2;
+ break;
+
+ case b:
+ hue = (r - g) / delta + 4;
+ break;
+ }
+
+ hue /= 6;
+ }
+
+ target.h = hue;
+ target.s = saturation;
+ target.l = lightness;
+ return target;
+ }
+
+ getStyle() {
+ return 'rgb(' + (this.r * 255 | 0) + ',' + (this.g * 255 | 0) + ',' + (this.b * 255 | 0) + ')';
+ }
+
+ offsetHSL(h, s, l) {
+ this.getHSL(_hslA);
+ _hslA.h += h;
+ _hslA.s += s;
+ _hslA.l += l;
+ this.setHSL(_hslA.h, _hslA.s, _hslA.l);
+ return this;
+ }
+
+ add(color) {
+ this.r += color.r;
+ this.g += color.g;
+ this.b += color.b;
+ return this;
+ }
+
+ addColors(color1, color2) {
+ this.r = color1.r + color2.r;
+ this.g = color1.g + color2.g;
+ this.b = color1.b + color2.b;
+ return this;
+ }
+
+ addScalar(s) {
+ this.r += s;
+ this.g += s;
+ this.b += s;
+ return this;
+ }
+
+ sub(color) {
+ this.r = Math.max(0, this.r - color.r);
+ this.g = Math.max(0, this.g - color.g);
+ this.b = Math.max(0, this.b - color.b);
+ return this;
+ }
+
+ multiply(color) {
+ this.r *= color.r;
+ this.g *= color.g;
+ this.b *= color.b;
+ return this;
+ }
+
+ multiplyScalar(s) {
+ this.r *= s;
+ this.g *= s;
+ this.b *= s;
+ return this;
+ }
+
+ lerp(color, alpha) {
+ this.r += (color.r - this.r) * alpha;
+ this.g += (color.g - this.g) * alpha;
+ this.b += (color.b - this.b) * alpha;
+ return this;
+ }
+
+ lerpColors(color1, color2, alpha) {
+ this.r = color1.r + (color2.r - color1.r) * alpha;
+ this.g = color1.g + (color2.g - color1.g) * alpha;
+ this.b = color1.b + (color2.b - color1.b) * alpha;
+ return this;
+ }
+
+ lerpHSL(color, alpha) {
+ this.getHSL(_hslA);
+ color.getHSL(_hslB);
+ const h = lerp(_hslA.h, _hslB.h, alpha);
+ const s = lerp(_hslA.s, _hslB.s, alpha);
+ const l = lerp(_hslA.l, _hslB.l, alpha);
+ this.setHSL(h, s, l);
+ return this;
+ }
+
+ equals(c) {
+ return c.r === this.r && c.g === this.g && c.b === this.b;
+ }
+
+ fromArray(array, offset = 0) {
+ this.r = array[offset];
+ this.g = array[offset + 1];
+ this.b = array[offset + 2];
+ return this;
+ }
+
+ toArray(array = [], offset = 0) {
+ array[offset] = this.r;
+ array[offset + 1] = this.g;
+ array[offset + 2] = this.b;
+ return array;
+ }
+
+ fromBufferAttribute(attribute, index) {
+ this.r = attribute.getX(index);
+ this.g = attribute.getY(index);
+ this.b = attribute.getZ(index);
+
+ if (attribute.normalized === true) {
+ // assuming Uint8Array
+ this.r /= 255;
+ this.g /= 255;
+ this.b /= 255;
+ }
+
+ return this;
+ }
+
+ toJSON() {
+ return this.getHex();
+ }
+
+ }
+
+ Color.NAMES = _colorKeywords;
+ Color.prototype.isColor = true;
+ Color.prototype.r = 1;
+ Color.prototype.g = 1;
+ Color.prototype.b = 1;
+
+ /**
+ * parameters = {
+ * color: ,
+ * opacity: ,
+ * map: new THREE.Texture( ),
+ *
+ * lightMap: new THREE.Texture( ),
+ * lightMapIntensity:
+ *
+ * aoMap: new THREE.Texture( ),
+ * aoMapIntensity:
+ *
+ * specularMap: new THREE.Texture( ),
+ *
+ * alphaMap: new THREE.Texture( ),
+ *
+ * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),
+ * combine: THREE.Multiply,
+ * reflectivity: ,
+ * refractionRatio: ,
+ *
+ * depthTest: ,
+ * depthWrite: ,
+ *
+ * wireframe: ,
+ * wireframeLinewidth: ,
+ * }
+ */
+
+ class MeshBasicMaterial extends Material {
+ constructor(parameters) {
+ super();
+ this.type = 'MeshBasicMaterial';
+ this.color = new Color(0xffffff); // emissive
+
+ this.map = null;
+ this.lightMap = null;
+ this.lightMapIntensity = 1.0;
+ this.aoMap = null;
+ this.aoMapIntensity = 1.0;
+ this.specularMap = null;
+ this.alphaMap = null;
+ this.envMap = null;
+ this.combine = MultiplyOperation;
+ this.reflectivity = 1;
+ this.refractionRatio = 0.98;
+ this.wireframe = false;
+ this.wireframeLinewidth = 1;
+ this.wireframeLinecap = 'round';
+ this.wireframeLinejoin = 'round';
+ this.setValues(parameters);
+ }
+
+ copy(source) {
+ super.copy(source);
+ this.color.copy(source.color);
+ this.map = source.map;
+ this.lightMap = source.lightMap;
+ this.lightMapIntensity = source.lightMapIntensity;
+ this.aoMap = source.aoMap;
+ this.aoMapIntensity = source.aoMapIntensity;
+ this.specularMap = source.specularMap;
+ this.alphaMap = source.alphaMap;
+ this.envMap = source.envMap;
+ this.combine = source.combine;
+ this.reflectivity = source.reflectivity;
+ this.refractionRatio = source.refractionRatio;
+ this.wireframe = source.wireframe;
+ this.wireframeLinewidth = source.wireframeLinewidth;
+ this.wireframeLinecap = source.wireframeLinecap;
+ this.wireframeLinejoin = source.wireframeLinejoin;
+ return this;
+ }
+
+ }
+
+ MeshBasicMaterial.prototype.isMeshBasicMaterial = true;
+
+ const _vector$9 = /*@__PURE__*/new Vector3();
+
+ const _vector2$1 = /*@__PURE__*/new Vector2();
+
+ class BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ if (Array.isArray(array)) {
+ throw new TypeError('THREE.BufferAttribute: array should be a Typed Array.');
+ }
+
+ this.name = '';
+ this.array = array;
+ this.itemSize = itemSize;
+ this.count = array !== undefined ? array.length / itemSize : 0;
+ this.normalized = normalized === true;
+ this.usage = StaticDrawUsage;
+ this.updateRange = {
+ offset: 0,
+ count: -1
+ };
+ this.version = 0;
+ }
+
+ onUploadCallback() {}
+
+ set needsUpdate(value) {
+ if (value === true) this.version++;
+ }
+
+ setUsage(value) {
+ this.usage = value;
+ return this;
+ }
+
+ copy(source) {
+ this.name = source.name;
+ this.array = new source.array.constructor(source.array);
+ this.itemSize = source.itemSize;
+ this.count = source.count;
+ this.normalized = source.normalized;
+ this.usage = source.usage;
+ return this;
+ }
+
+ copyAt(index1, attribute, index2) {
+ index1 *= this.itemSize;
+ index2 *= attribute.itemSize;
+
+ for (let i = 0, l = this.itemSize; i < l; i++) {
+ this.array[index1 + i] = attribute.array[index2 + i];
+ }
+
+ return this;
+ }
+
+ copyArray(array) {
+ this.array.set(array);
+ return this;
+ }
+
+ copyColorsArray(colors) {
+ const array = this.array;
+ let offset = 0;
+
+ for (let i = 0, l = colors.length; i < l; i++) {
+ let color = colors[i];
+
+ if (color === undefined) {
+ console.warn('THREE.BufferAttribute.copyColorsArray(): color is undefined', i);
+ color = new Color();
+ }
+
+ array[offset++] = color.r;
+ array[offset++] = color.g;
+ array[offset++] = color.b;
+ }
+
+ return this;
+ }
+
+ copyVector2sArray(vectors) {
+ const array = this.array;
+ let offset = 0;
+
+ for (let i = 0, l = vectors.length; i < l; i++) {
+ let vector = vectors[i];
+
+ if (vector === undefined) {
+ console.warn('THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i);
+ vector = new Vector2();
+ }
+
+ array[offset++] = vector.x;
+ array[offset++] = vector.y;
+ }
+
+ return this;
+ }
+
+ copyVector3sArray(vectors) {
+ const array = this.array;
+ let offset = 0;
+
+ for (let i = 0, l = vectors.length; i < l; i++) {
+ let vector = vectors[i];
+
+ if (vector === undefined) {
+ console.warn('THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i);
+ vector = new Vector3();
+ }
+
+ array[offset++] = vector.x;
+ array[offset++] = vector.y;
+ array[offset++] = vector.z;
+ }
+
+ return this;
+ }
+
+ copyVector4sArray(vectors) {
+ const array = this.array;
+ let offset = 0;
+
+ for (let i = 0, l = vectors.length; i < l; i++) {
+ let vector = vectors[i];
+
+ if (vector === undefined) {
+ console.warn('THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i);
+ vector = new Vector4();
+ }
+
+ array[offset++] = vector.x;
+ array[offset++] = vector.y;
+ array[offset++] = vector.z;
+ array[offset++] = vector.w;
+ }
+
+ return this;
+ }
+
+ applyMatrix3(m) {
+ if (this.itemSize === 2) {
+ for (let i = 0, l = this.count; i < l; i++) {
+ _vector2$1.fromBufferAttribute(this, i);
+
+ _vector2$1.applyMatrix3(m);
+
+ this.setXY(i, _vector2$1.x, _vector2$1.y);
+ }
+ } else if (this.itemSize === 3) {
+ for (let i = 0, l = this.count; i < l; i++) {
+ _vector$9.fromBufferAttribute(this, i);
+
+ _vector$9.applyMatrix3(m);
+
+ this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z);
+ }
+ }
+
+ return this;
+ }
+
+ applyMatrix4(m) {
+ for (let i = 0, l = this.count; i < l; i++) {
+ _vector$9.x = this.getX(i);
+ _vector$9.y = this.getY(i);
+ _vector$9.z = this.getZ(i);
+
+ _vector$9.applyMatrix4(m);
+
+ this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z);
+ }
+
+ return this;
+ }
+
+ applyNormalMatrix(m) {
+ for (let i = 0, l = this.count; i < l; i++) {
+ _vector$9.x = this.getX(i);
+ _vector$9.y = this.getY(i);
+ _vector$9.z = this.getZ(i);
+
+ _vector$9.applyNormalMatrix(m);
+
+ this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z);
+ }
+
+ return this;
+ }
+
+ transformDirection(m) {
+ for (let i = 0, l = this.count; i < l; i++) {
+ _vector$9.x = this.getX(i);
+ _vector$9.y = this.getY(i);
+ _vector$9.z = this.getZ(i);
+
+ _vector$9.transformDirection(m);
+
+ this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z);
+ }
+
+ return this;
+ }
+
+ set(value, offset = 0) {
+ this.array.set(value, offset);
+ return this;
+ }
+
+ getX(index) {
+ return this.array[index * this.itemSize];
+ }
+
+ setX(index, x) {
+ this.array[index * this.itemSize] = x;
+ return this;
+ }
+
+ getY(index) {
+ return this.array[index * this.itemSize + 1];
+ }
+
+ setY(index, y) {
+ this.array[index * this.itemSize + 1] = y;
+ return this;
+ }
+
+ getZ(index) {
+ return this.array[index * this.itemSize + 2];
+ }
+
+ setZ(index, z) {
+ this.array[index * this.itemSize + 2] = z;
+ return this;
+ }
+
+ getW(index) {
+ return this.array[index * this.itemSize + 3];
+ }
+
+ setW(index, w) {
+ this.array[index * this.itemSize + 3] = w;
+ return this;
+ }
+
+ setXY(index, x, y) {
+ index *= this.itemSize;
+ this.array[index + 0] = x;
+ this.array[index + 1] = y;
+ return this;
+ }
+
+ setXYZ(index, x, y, z) {
+ index *= this.itemSize;
+ this.array[index + 0] = x;
+ this.array[index + 1] = y;
+ this.array[index + 2] = z;
+ return this;
+ }
+
+ setXYZW(index, x, y, z, w) {
+ index *= this.itemSize;
+ this.array[index + 0] = x;
+ this.array[index + 1] = y;
+ this.array[index + 2] = z;
+ this.array[index + 3] = w;
+ return this;
+ }
+
+ onUpload(callback) {
+ this.onUploadCallback = callback;
+ return this;
+ }
+
+ clone() {
+ return new this.constructor(this.array, this.itemSize).copy(this);
+ }
+
+ toJSON() {
+ const data = {
+ itemSize: this.itemSize,
+ type: this.array.constructor.name,
+ array: Array.prototype.slice.call(this.array),
+ normalized: this.normalized
+ };
+ if (this.name !== '') data.name = this.name;
+ if (this.usage !== StaticDrawUsage) data.usage = this.usage;
+ if (this.updateRange.offset !== 0 || this.updateRange.count !== -1) data.updateRange = this.updateRange;
+ return data;
+ }
+
+ }
+
+ BufferAttribute.prototype.isBufferAttribute = true; //
+
+ class Int8BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Int8Array(array), itemSize, normalized);
+ }
+
+ }
+
+ class Uint8BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Uint8Array(array), itemSize, normalized);
+ }
+
+ }
+
+ class Uint8ClampedBufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Uint8ClampedArray(array), itemSize, normalized);
+ }
+
+ }
+
+ class Int16BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Int16Array(array), itemSize, normalized);
+ }
+
+ }
+
+ class Uint16BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Uint16Array(array), itemSize, normalized);
+ }
+
+ }
+
+ class Int32BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Int32Array(array), itemSize, normalized);
+ }
+
+ }
+
+ class Uint32BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Uint32Array(array), itemSize, normalized);
+ }
+
+ }
+
+ class Float16BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Uint16Array(array), itemSize, normalized);
+ }
+
+ }
+
+ Float16BufferAttribute.prototype.isFloat16BufferAttribute = true;
+
+ class Float32BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Float32Array(array), itemSize, normalized);
+ }
+
+ }
+
+ class Float64BufferAttribute extends BufferAttribute {
+ constructor(array, itemSize, normalized) {
+ super(new Float64Array(array), itemSize, normalized);
+ }
+
+ } //
+
+ function arrayMax(array) {
+ if (array.length === 0) return -Infinity;
+ let max = array[0];
+
+ for (let i = 1, l = array.length; i < l; ++i) {
+ if (array[i] > max) max = array[i];
+ }
+
+ return max;
+ }
+
+ const TYPED_ARRAYS = {
+ Int8Array: Int8Array,
+ Uint8Array: Uint8Array,
+ Uint8ClampedArray: Uint8ClampedArray,
+ Int16Array: Int16Array,
+ Uint16Array: Uint16Array,
+ Int32Array: Int32Array,
+ Uint32Array: Uint32Array,
+ Float32Array: Float32Array,
+ Float64Array: Float64Array
+ };
+
+ function getTypedArray(type, buffer) {
+ return new TYPED_ARRAYS[type](buffer);
+ }
+
+ let _id = 0;
+
+ const _m1 = /*@__PURE__*/new Matrix4();
+
+ const _obj = /*@__PURE__*/new Object3D();
+
+ const _offset = /*@__PURE__*/new Vector3();
+
+ const _box$1 = /*@__PURE__*/new Box3();
+
+ const _boxMorphTargets = /*@__PURE__*/new Box3();
+
+ const _vector$8 = /*@__PURE__*/new Vector3();
+
+ class BufferGeometry extends EventDispatcher {
+ constructor() {
+ super();
+ Object.defineProperty(this, 'id', {
+ value: _id++
+ });
+ this.uuid = generateUUID();
+ this.name = '';
+ this.type = 'BufferGeometry';
+ this.index = null;
+ this.attributes = {};
+ this.morphAttributes = {};
+ this.morphTargetsRelative = false;
+ this.groups = [];
+ this.boundingBox = null;
+ this.boundingSphere = null;
+ this.drawRange = {
+ start: 0,
+ count: Infinity
+ };
+ this.userData = {};
+ }
+
+ getIndex() {
+ return this.index;
+ }
+
+ setIndex(index) {
+ if (Array.isArray(index)) {
+ this.index = new (arrayMax(index) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute)(index, 1);
+ } else {
+ this.index = index;
+ }
+
+ return this;
+ }
+
+ getAttribute(name) {
+ return this.attributes[name];
+ }
+
+ setAttribute(name, attribute) {
+ this.attributes[name] = attribute;
+ return this;
+ }
+
+ deleteAttribute(name) {
+ delete this.attributes[name];
+ return this;
+ }
+
+ hasAttribute(name) {
+ return this.attributes[name] !== undefined;
+ }
+
+ addGroup(start, count, materialIndex = 0) {
+ this.groups.push({
+ start: start,
+ count: count,
+ materialIndex: materialIndex
+ });
+ }
+
+ clearGroups() {
+ this.groups = [];
+ }
+
+ setDrawRange(start, count) {
+ this.drawRange.start = start;
+ this.drawRange.count = count;
+ }
+
+ applyMatrix4(matrix) {
+ const position = this.attributes.position;
+
+ if (position !== undefined) {
+ position.applyMatrix4(matrix);
+ position.needsUpdate = true;
+ }
+
+ const normal = this.attributes.normal;
+
+ if (normal !== undefined) {
+ const normalMatrix = new Matrix3().getNormalMatrix(matrix);
+ normal.applyNormalMatrix(normalMatrix);
+ normal.needsUpdate = true;
+ }
+
+ const tangent = this.attributes.tangent;
+
+ if (tangent !== undefined) {
+ tangent.transformDirection(matrix);
+ tangent.needsUpdate = true;
+ }
+
+ if (this.boundingBox !== null) {
+ this.computeBoundingBox();
+ }
+
+ if (this.boundingSphere !== null) {
+ this.computeBoundingSphere();
+ }
+
+ return this;
+ }
+
+ applyQuaternion(q) {
+ _m1.makeRotationFromQuaternion(q);
+
+ this.applyMatrix4(_m1);
+ return this;
+ }
+
+ rotateX(angle) {
+ // rotate geometry around world x-axis
+ _m1.makeRotationX(angle);
+
+ this.applyMatrix4(_m1);
+ return this;
+ }
+
+ rotateY(angle) {
+ // rotate geometry around world y-axis
+ _m1.makeRotationY(angle);
+
+ this.applyMatrix4(_m1);
+ return this;
+ }
+
+ rotateZ(angle) {
+ // rotate geometry around world z-axis
+ _m1.makeRotationZ(angle);
+
+ this.applyMatrix4(_m1);
+ return this;
+ }
+
+ translate(x, y, z) {
+ // translate geometry
+ _m1.makeTranslation(x, y, z);
+
+ this.applyMatrix4(_m1);
+ return this;
+ }
+
+ scale(x, y, z) {
+ // scale geometry
+ _m1.makeScale(x, y, z);
+
+ this.applyMatrix4(_m1);
+ return this;
+ }
+
+ lookAt(vector) {
+ _obj.lookAt(vector);
+
+ _obj.updateMatrix();
+
+ this.applyMatrix4(_obj.matrix);
+ return this;
+ }
+
+ center() {
+ this.computeBoundingBox();
+ this.boundingBox.getCenter(_offset).negate();
+ this.translate(_offset.x, _offset.y, _offset.z);
+ return this;
+ }
+
+ setFromPoints(points) {
+ const position = [];
+
+ for (let i = 0, l = points.length; i < l; i++) {
+ const point = points[i];
+ position.push(point.x, point.y, point.z || 0);
+ }
+
+ this.setAttribute('position', new Float32BufferAttribute(position, 3));
+ return this;
+ }
+
+ computeBoundingBox() {
+ if (this.boundingBox === null) {
+ this.boundingBox = new Box3();
+ }
+
+ const position = this.attributes.position;
+ const morphAttributesPosition = this.morphAttributes.position;
+
+ if (position && position.isGLBufferAttribute) {
+ console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this);
+ this.boundingBox.set(new Vector3(-Infinity, -Infinity, -Infinity), new Vector3(+Infinity, +Infinity, +Infinity));
+ return;
+ }
+
+ if (position !== undefined) {
+ this.boundingBox.setFromBufferAttribute(position); // process morph attributes if present
+
+ if (morphAttributesPosition) {
+ for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {
+ const morphAttribute = morphAttributesPosition[i];
+
+ _box$1.setFromBufferAttribute(morphAttribute);
+
+ if (this.morphTargetsRelative) {
+ _vector$8.addVectors(this.boundingBox.min, _box$1.min);
+
+ this.boundingBox.expandByPoint(_vector$8);
+
+ _vector$8.addVectors(this.boundingBox.max, _box$1.max);
+
+ this.boundingBox.expandByPoint(_vector$8);
+ } else {
+ this.boundingBox.expandByPoint(_box$1.min);
+ this.boundingBox.expandByPoint(_box$1.max);
+ }
+ }
+ }
+ } else {
+ this.boundingBox.makeEmpty();
+ }
+
+ if (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) {
+ console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this);
+ }
+ }
+
+ computeBoundingSphere() {
+ if (this.boundingSphere === null) {
+ this.boundingSphere = new Sphere();
+ }
+
+ const position = this.attributes.position;
+ const morphAttributesPosition = this.morphAttributes.position;
+
+ if (position && position.isGLBufferAttribute) {
+ console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this);
+ this.boundingSphere.set(new Vector3(), Infinity);
+ return;
+ }
+
+ if (position) {
+ // first, find the center of the bounding sphere
+ const center = this.boundingSphere.center;
+
+ _box$1.setFromBufferAttribute(position); // process morph attributes if present
+
+
+ if (morphAttributesPosition) {
+ for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {
+ const morphAttribute = morphAttributesPosition[i];
+
+ _boxMorphTargets.setFromBufferAttribute(morphAttribute);
+
+ if (this.morphTargetsRelative) {
+ _vector$8.addVectors(_box$1.min, _boxMorphTargets.min);
+
+ _box$1.expandByPoint(_vector$8);
+
+ _vector$8.addVectors(_box$1.max, _boxMorphTargets.max);
+
+ _box$1.expandByPoint(_vector$8);
+ } else {
+ _box$1.expandByPoint(_boxMorphTargets.min);
+
+ _box$1.expandByPoint(_boxMorphTargets.max);
+ }
+ }
+ }
+
+ _box$1.getCenter(center); // second, try to find a boundingSphere with a radius smaller than the
+ // boundingSphere of the boundingBox: sqrt(3) smaller in the best case
+
+
+ let maxRadiusSq = 0;
+
+ for (let i = 0, il = position.count; i < il; i++) {
+ _vector$8.fromBufferAttribute(position, i);
+
+ maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8));
+ } // process morph attributes if present
+
+
+ if (morphAttributesPosition) {
+ for (let i = 0, il = morphAttributesPosition.length; i < il; i++) {
+ const morphAttribute = morphAttributesPosition[i];
+ const morphTargetsRelative = this.morphTargetsRelative;
+
+ for (let j = 0, jl = morphAttribute.count; j < jl; j++) {
+ _vector$8.fromBufferAttribute(morphAttribute, j);
+
+ if (morphTargetsRelative) {
+ _offset.fromBufferAttribute(position, j);
+
+ _vector$8.add(_offset);
+ }
+
+ maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8));
+ }
+ }
+ }
+
+ this.boundingSphere.radius = Math.sqrt(maxRadiusSq);
+
+ if (isNaN(this.boundingSphere.radius)) {
+ console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this);
+ }
+ }
+ }
+
+ computeTangents() {
+ const index = this.index;
+ const attributes = this.attributes; // based on http://www.terathon.com/code/tangent.html
+ // (per vertex tangents)
+
+ if (index === null || attributes.position === undefined || attributes.normal === undefined || attributes.uv === undefined) {
+ console.error('THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)');
+ return;
+ }
+
+ const indices = index.array;
+ const positions = attributes.position.array;
+ const normals = attributes.normal.array;
+ const uvs = attributes.uv.array;
+ const nVertices = positions.length / 3;
+
+ if (attributes.tangent === undefined) {
+ this.setAttribute('tangent', new BufferAttribute(new Float32Array(4 * nVertices), 4));
+ }
+
+ const tangents = attributes.tangent.array;
+ const tan1 = [],
+ tan2 = [];
+
+ for (let i = 0; i < nVertices; i++) {
+ tan1[i] = new Vector3();
+ tan2[i] = new Vector3();
+ }
+
+ const vA = new Vector3(),
+ vB = new Vector3(),
+ vC = new Vector3(),
+ uvA = new Vector2(),
+ uvB = new Vector2(),
+ uvC = new Vector2(),
+ sdir = new Vector3(),
+ tdir = new Vector3();
+
+ function handleTriangle(a, b, c) {
+ vA.fromArray(positions, a * 3);
+ vB.fromArray(positions, b * 3);
+ vC.fromArray(positions, c * 3);
+ uvA.fromArray(uvs, a * 2);
+ uvB.fromArray(uvs, b * 2);
+ uvC.fromArray(uvs, c * 2);
+ vB.sub(vA);
+ vC.sub(vA);
+ uvB.sub(uvA);
+ uvC.sub(uvA);
+ const r = 1.0 / (uvB.x * uvC.y - uvC.x * uvB.y); // silently ignore degenerate uv triangles having coincident or colinear vertices
+
+ if (!isFinite(r)) return;
+ sdir.copy(vB).multiplyScalar(uvC.y).addScaledVector(vC, -uvB.y).multiplyScalar(r);
+ tdir.copy(vC).multiplyScalar(uvB.x).addScaledVector(vB, -uvC.x).multiplyScalar(r);
+ tan1[a].add(sdir);
+ tan1[b].add(sdir);
+ tan1[c].add(sdir);
+ tan2[a].add(tdir);
+ tan2[b].add(tdir);
+ tan2[c].add(tdir);
+ }
+
+ let groups = this.groups;
+
+ if (groups.length === 0) {
+ groups = [{
+ start: 0,
+ count: indices.length
+ }];
+ }
+
+ for (let i = 0, il = groups.length; i < il; ++i) {
+ const group = groups[i];
+ const start = group.start;
+ const count = group.count;
+
+ for (let j = start, jl = start + count; j < jl; j += 3) {
+ handleTriangle(indices[j + 0], indices[j + 1], indices[j + 2]);
+ }
+ }
+
+ const tmp = new Vector3(),
+ tmp2 = new Vector3();
+ const n = new Vector3(),
+ n2 = new Vector3();
+
+ function handleVertex(v) {
+ n.fromArray(normals, v * 3);
+ n2.copy(n);
+ const t = tan1[v]; // Gram-Schmidt orthogonalize
+
+ tmp.copy(t);
+ tmp.sub(n.multiplyScalar(n.dot(t))).normalize(); // Calculate handedness
+
+ tmp2.crossVectors(n2, t);
+ const test = tmp2.dot(tan2[v]);
+ const w = test < 0.0 ? -1.0 : 1.0;
+ tangents[v * 4] = tmp.x;
+ tangents[v * 4 + 1] = tmp.y;
+ tangents[v * 4 + 2] = tmp.z;
+ tangents[v * 4 + 3] = w;
+ }
+
+ for (let i = 0, il = groups.length; i < il; ++i) {
+ const group = groups[i];
+ const start = group.start;
+ const count = group.count;
+
+ for (let j = start, jl = start + count; j < jl; j += 3) {
+ handleVertex(indices[j + 0]);
+ handleVertex(indices[j + 1]);
+ handleVertex(indices[j + 2]);
+ }
+ }
+ }
+
+ computeVertexNormals() {
+ const index = this.index;
+ const positionAttribute = this.getAttribute('position');
+
+ if (positionAttribute !== undefined) {
+ let normalAttribute = this.getAttribute('normal');
+
+ if (normalAttribute === undefined) {
+ normalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3);
+ this.setAttribute('normal', normalAttribute);
+ } else {
+ // reset existing normals to zero
+ for (let i = 0, il = normalAttribute.count; i < il; i++) {
+ normalAttribute.setXYZ(i, 0, 0, 0);
+ }
+ }
+
+ const pA = new Vector3(),
+ pB = new Vector3(),
+ pC = new Vector3();
+ const nA = new Vector3(),
+ nB = new Vector3(),
+ nC = new Vector3();
+ const cb = new Vector3(),
+ ab = new Vector3(); // indexed elements
+
+ if (index) {
+ for (let i = 0, il = index.count; i < il; i += 3) {
+ const vA = index.getX(i + 0);
+ const vB = index.getX(i + 1);
+ const vC = index.getX(i + 2);
+ pA.fromBufferAttribute(positionAttribute, vA);
+ pB.fromBufferAttribute(positionAttribute, vB);
+ pC.fromBufferAttribute(positionAttribute, vC);
+ cb.subVectors(pC, pB);
+ ab.subVectors(pA, pB);
+ cb.cross(ab);
+ nA.fromBufferAttribute(normalAttribute, vA);
+ nB.fromBufferAttribute(normalAttribute, vB);
+ nC.fromBufferAttribute(normalAttribute, vC);
+ nA.add(cb);
+ nB.add(cb);
+ nC.add(cb);
+ normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z);
+ normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z);
+ normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z);
+ }
+ } else {
+ // non-indexed elements (unconnected triangle soup)
+ for (let i = 0, il = positionAttribute.count; i < il; i += 3) {
+ pA.fromBufferAttribute(positionAttribute, i + 0);
+ pB.fromBufferAttribute(positionAttribute, i + 1);
+ pC.fromBufferAttribute(positionAttribute, i + 2);
+ cb.subVectors(pC, pB);
+ ab.subVectors(pA, pB);
+ cb.cross(ab);
+ normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z);
+ normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z);
+ normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z);
+ }
+ }
+
+ this.normalizeNormals();
+ normalAttribute.needsUpdate = true;
+ }
+ }
+
+ merge(geometry, offset) {
+ if (!(geometry && geometry.isBufferGeometry)) {
+ console.error('THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry);
+ return;
+ }
+
+ if (offset === undefined) {
+ offset = 0;
+ console.warn('THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.');
+ }
+
+ const attributes = this.attributes;
+
+ for (const key in attributes) {
+ if (geometry.attributes[key] === undefined) continue;
+ const attribute1 = attributes[key];
+ const attributeArray1 = attribute1.array;
+ const attribute2 = geometry.attributes[key];
+ const attributeArray2 = attribute2.array;
+ const attributeOffset = attribute2.itemSize * offset;
+ const length = Math.min(attributeArray2.length, attributeArray1.length - attributeOffset);
+
+ for (let i = 0, j = attributeOffset; i < length; i++, j++) {
+ attributeArray1[j] = attributeArray2[i];
+ }
+ }
+
+ return this;
+ }
+
+ normalizeNormals() {
+ const normals = this.attributes.normal;
+
+ for (let i = 0, il = normals.count; i < il; i++) {
+ _vector$8.fromBufferAttribute(normals, i);
+
+ _vector$8.normalize();
+
+ normals.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z);
+ }
+ }
+
+ toNonIndexed() {
+ function convertBufferAttribute(attribute, indices) {
+ const array = attribute.array;
+ const itemSize = attribute.itemSize;
+ const normalized = attribute.normalized;
+ const array2 = new array.constructor(indices.length * itemSize);
+ let index = 0,
+ index2 = 0;
+
+ for (let i = 0, l = indices.length; i < l; i++) {
+ if (attribute.isInterleavedBufferAttribute) {
+ index = indices[i] * attribute.data.stride + attribute.offset;
+ } else {
+ index = indices[i] * itemSize;
+ }
+
+ for (let j = 0; j < itemSize; j++) {
+ array2[index2++] = array[index++];
+ }
+ }
+
+ return new BufferAttribute(array2, itemSize, normalized);
+ } //
+
+
+ if (this.index === null) {
+ console.warn('THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.');
+ return this;
+ }
+
+ const geometry2 = new BufferGeometry();
+ const indices = this.index.array;
+ const attributes = this.attributes; // attributes
+
+ for (const name in attributes) {
+ const attribute = attributes[name];
+ const newAttribute = convertBufferAttribute(attribute, indices);
+ geometry2.setAttribute(name, newAttribute);
+ } // morph attributes
+
+
+ const morphAttributes = this.morphAttributes;
+
+ for (const name in morphAttributes) {
+ const morphArray = [];
+ const morphAttribute = morphAttributes[name]; // morphAttribute: array of Float32BufferAttributes
+
+ for (let i = 0, il = morphAttribute.length; i < il; i++) {
+ const attribute = morphAttribute[i];
+ const newAttribute = convertBufferAttribute(attribute, indices);
+ morphArray.push(newAttribute);
+ }
+
+ geometry2.morphAttributes[name] = morphArray;
+ }
+
+ geometry2.morphTargetsRelative = this.morphTargetsRelative; // groups
+
+ const groups = this.groups;
+
+ for (let i = 0, l = groups.length; i < l; i++) {
+ const group = groups[i];
+ geometry2.addGroup(group.start, group.count, group.materialIndex);
+ }
+
+ return geometry2;
+ }
+
+ toJSON() {
+ const data = {
+ metadata: {
+ version: 4.5,
+ type: 'BufferGeometry',
+ generator: 'BufferGeometry.toJSON'
+ }
+ }; // standard BufferGeometry serialization
+
+ data.uuid = this.uuid;
+ data.type = this.type;
+ if (this.name !== '') data.name = this.name;
+ if (Object.keys(this.userData).length > 0) data.userData = this.userData;
+
+ if (this.parameters !== undefined) {
+ const parameters = this.parameters;
+
+ for (const key in parameters) {
+ if (parameters[key] !== undefined) data[key] = parameters[key];
+ }
+
+ return data;
+ } // for simplicity the code assumes attributes are not shared across geometries, see #15811
+
+
+ data.data = {
+ attributes: {}
+ };
+ const index = this.index;
+
+ if (index !== null) {
+ data.data.index = {
+ type: index.array.constructor.name,
+ array: Array.prototype.slice.call(index.array)
+ };
+ }
+
+ const attributes = this.attributes;
+
+ for (const key in attributes) {
+ const attribute = attributes[key];
+ data.data.attributes[key] = attribute.toJSON(data.data);
+ }
+
+ const morphAttributes = {};
+ let hasMorphAttributes = false;
+
+ for (const key in this.morphAttributes) {
+ const attributeArray = this.morphAttributes[key];
+ const array = [];
+
+ for (let i = 0, il = attributeArray.length; i < il; i++) {
+ const attribute = attributeArray[i];
+ array.push(attribute.toJSON(data.data));
+ }
+
+ if (array.length > 0) {
+ morphAttributes[key] = array;
+ hasMorphAttributes = true;
+ }
+ }
+
+ if (hasMorphAttributes) {
+ data.data.morphAttributes = morphAttributes;
+ data.data.morphTargetsRelative = this.morphTargetsRelative;
+ }
+
+ const groups = this.groups;
+
+ if (groups.length > 0) {
+ data.data.groups = JSON.parse(JSON.stringify(groups));
+ }
+
+ const boundingSphere = this.boundingSphere;
+
+ if (boundingSphere !== null) {
+ data.data.boundingSphere = {
+ center: boundingSphere.center.toArray(),
+ radius: boundingSphere.radius
+ };
+ }
+
+ return data;
+ }
+
+ clone() {
+ /*
+ // Handle primitives
+ const parameters = this.parameters;
+ if ( parameters !== undefined ) {
+ const values = [];
+ for ( const key in parameters ) {
+ values.push( parameters[ key ] );
+ }
+ const geometry = Object.create( this.constructor.prototype );
+ this.constructor.apply( geometry, values );
+ return geometry;
+ }
+ return new this.constructor().copy( this );
+ */
+ return new BufferGeometry().copy(this);
+ }
+
+ copy(source) {
+ // reset
+ this.index = null;
+ this.attributes = {};
+ this.morphAttributes = {};
+ this.groups = [];
+ this.boundingBox = null;
+ this.boundingSphere = null; // used for storing cloned, shared data
+
+ const data = {}; // name
+
+ this.name = source.name; // index
+
+ const index = source.index;
+
+ if (index !== null) {
+ this.setIndex(index.clone(data));
+ } // attributes
+
+
+ const attributes = source.attributes;
+
+ for (const name in attributes) {
+ const attribute = attributes[name];
+ this.setAttribute(name, attribute.clone(data));
+ } // morph attributes
+
+
+ const morphAttributes = source.morphAttributes;
+
+ for (const name in morphAttributes) {
+ const array = [];
+ const morphAttribute = morphAttributes[name]; // morphAttribute: array of Float32BufferAttributes
+
+ for (let i = 0, l = morphAttribute.length; i < l; i++) {
+ array.push(morphAttribute[i].clone(data));
+ }
+
+ this.morphAttributes[name] = array;
+ }
+
+ this.morphTargetsRelative = source.morphTargetsRelative; // groups
+
+ const groups = source.groups;
+
+ for (let i = 0, l = groups.length; i < l; i++) {
+ const group = groups[i];
+ this.addGroup(group.start, group.count, group.materialIndex);
+ } // bounding box
+
+
+ const boundingBox = source.boundingBox;
+
+ if (boundingBox !== null) {
+ this.boundingBox = boundingBox.clone();
+ } // bounding sphere
+
+
+ const boundingSphere = source.boundingSphere;
+
+ if (boundingSphere !== null) {
+ this.boundingSphere = boundingSphere.clone();
+ } // draw range
+
+
+ this.drawRange.start = source.drawRange.start;
+ this.drawRange.count = source.drawRange.count; // user data
+
+ this.userData = source.userData;
+ return this;
+ }
+
+ dispose() {
+ this.dispatchEvent({
+ type: 'dispose'
+ });
+ }
+
+ }
+
+ BufferGeometry.prototype.isBufferGeometry = true;
+
+ const _inverseMatrix$2 = /*@__PURE__*/new Matrix4();
+
+ const _ray$2 = /*@__PURE__*/new Ray();
+
+ const _sphere$3 = /*@__PURE__*/new Sphere();
+
+ const _vA$1 = /*@__PURE__*/new Vector3();
+
+ const _vB$1 = /*@__PURE__*/new Vector3();
+
+ const _vC$1 = /*@__PURE__*/new Vector3();
+
+ const _tempA = /*@__PURE__*/new Vector3();
+
+ const _tempB = /*@__PURE__*/new Vector3();
+
+ const _tempC = /*@__PURE__*/new Vector3();
+
+ const _morphA = /*@__PURE__*/new Vector3();
+
+ const _morphB = /*@__PURE__*/new Vector3();
+
+ const _morphC = /*@__PURE__*/new Vector3();
+
+ const _uvA$1 = /*@__PURE__*/new Vector2();
+
+ const _uvB$1 = /*@__PURE__*/new Vector2();
+
+ const _uvC$1 = /*@__PURE__*/new Vector2();
+
+ const _intersectionPoint = /*@__PURE__*/new Vector3();
+
+ const _intersectionPointWorld = /*@__PURE__*/new Vector3();
+
+ class Mesh extends Object3D {
+ constructor(geometry = new BufferGeometry(), material = new MeshBasicMaterial()) {
+ super();
+ this.type = 'Mesh';
+ this.geometry = geometry;
+ this.material = material;
+ this.updateMorphTargets();
+ }
+
+ copy(source) {
+ super.copy(source);
+
+ if (source.morphTargetInfluences !== undefined) {
+ this.morphTargetInfluences = source.morphTargetInfluences.slice();
+ }
+
+ if (source.morphTargetDictionary !== undefined) {
+ this.morphTargetDictionary = Object.assign({}, source.morphTargetDictionary);
+ }
+
+ this.material = source.material;
+ this.geometry = source.geometry;
+ return this;
+ }
+
+ updateMorphTargets() {
+ const geometry = this.geometry;
+
+ if (geometry.isBufferGeometry) {
+ const morphAttributes = geometry.morphAttributes;
+ const keys = Object.keys(morphAttributes);
+
+ if (keys.length > 0) {
+ const morphAttribute = morphAttributes[keys[0]];
+
+ if (morphAttribute !== undefined) {
+ this.morphTargetInfluences = [];
+ this.morphTargetDictionary = {};
+
+ for (let m = 0, ml = morphAttribute.length; m < ml; m++) {
+ const name = morphAttribute[m].name || String(m);
+ this.morphTargetInfluences.push(0);
+ this.morphTargetDictionary[name] = m;
+ }
+ }
+ }
+ } else {
+ const morphTargets = geometry.morphTargets;
+
+ if (morphTargets !== undefined && morphTargets.length > 0) {
+ console.error('THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.');
+ }
+ }
+ }
+
+ raycast(raycaster, intersects) {
+ const geometry = this.geometry;
+ const material = this.material;
+ const matrixWorld = this.matrixWorld;
+ if (material === undefined) return; // Checking boundingSphere distance to ray
+
+ if (geometry.boundingSphere === null) geometry.computeBoundingSphere();
+
+ _sphere$3.copy(geometry.boundingSphere);
+
+ _sphere$3.applyMatrix4(matrixWorld);
+
+ if (raycaster.ray.intersectsSphere(_sphere$3) === false) return; //
+
+ _inverseMatrix$2.copy(matrixWorld).invert();
+
+ _ray$2.copy(raycaster.ray).applyMatrix4(_inverseMatrix$2); // Check boundingBox before continuing
+
+
+ if (geometry.boundingBox !== null) {
+ if (_ray$2.intersectsBox(geometry.boundingBox) === false) return;
+ }
+
+ let intersection;
+
+ if (geometry.isBufferGeometry) {
+ const index = geometry.index;
+ const position = geometry.attributes.position;
+ const morphPosition = geometry.morphAttributes.position;
+ const morphTargetsRelative = geometry.morphTargetsRelative;
+ const uv = geometry.attributes.uv;
+ const uv2 = geometry.attributes.uv2;
+ const groups = geometry.groups;
+ const drawRange = geometry.drawRange;
+
+ if (index !== null) {
+ // indexed buffer geometry
+ if (Array.isArray(material)) {
+ for (let i = 0, il = groups.length; i < il; i++) {
+ const group = groups[i];
+ const groupMaterial = material[group.materialIndex];
+ const start = Math.max(group.start, drawRange.start);
+ const end = Math.min(group.start + group.count, drawRange.start + drawRange.count);
+
+ for (let j = start, jl = end; j < jl; j += 3) {
+ const a = index.getX(j);
+ const b = index.getX(j + 1);
+ const c = index.getX(j + 2);
+ intersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);
+
+ if (intersection) {
+ intersection.faceIndex = Math.floor(j / 3); // triangle number in indexed buffer semantics
+
+ intersection.face.materialIndex = group.materialIndex;
+ intersects.push(intersection);
+ }
+ }
+ }
+ } else {
+ const start = Math.max(0, drawRange.start);
+ const end = Math.min(index.count, drawRange.start + drawRange.count);
+
+ for (let i = start, il = end; i < il; i += 3) {
+ const a = index.getX(i);
+ const b = index.getX(i + 1);
+ const c = index.getX(i + 2);
+ intersection = checkBufferGeometryIntersection(this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);
+
+ if (intersection) {
+ intersection.faceIndex = Math.floor(i / 3); // triangle number in indexed buffer semantics
+
+ intersects.push(intersection);
+ }
+ }
+ }
+ } else if (position !== undefined) {
+ // non-indexed buffer geometry
+ if (Array.isArray(material)) {
+ for (let i = 0, il = groups.length; i < il; i++) {
+ const group = groups[i];
+ const groupMaterial = material[group.materialIndex];
+ const start = Math.max(group.start, drawRange.start);
+ const end = Math.min(group.start + group.count, drawRange.start + drawRange.count);
+
+ for (let j = start, jl = end; j < jl; j += 3) {
+ const a = j;
+ const b = j + 1;
+ const c = j + 2;
+ intersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);
+
+ if (intersection) {
+ intersection.faceIndex = Math.floor(j / 3); // triangle number in non-indexed buffer semantics
+
+ intersection.face.materialIndex = group.materialIndex;
+ intersects.push(intersection);
+ }
+ }
+ }
+ } else {
+ const start = Math.max(0, drawRange.start);
+ const end = Math.min(position.count, drawRange.start + drawRange.count);
+
+ for (let i = start, il = end; i < il; i += 3) {
+ const a = i;
+ const b = i + 1;
+ const c = i + 2;
+ intersection = checkBufferGeometryIntersection(this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);
+
+ if (intersection) {
+ intersection.faceIndex = Math.floor(i / 3); // triangle number in non-indexed buffer semantics
+
+ intersects.push(intersection);
+ }
+ }
+ }
+ }
+ } else if (geometry.isGeometry) {
+ console.error('THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.');
+ }
+ }
+
+ }
+
+ Mesh.prototype.isMesh = true;
+
+ function checkIntersection(object, material, raycaster, ray, pA, pB, pC, point) {
+ let intersect;
+
+ if (material.side === BackSide) {
+ intersect = ray.intersectTriangle(pC, pB, pA, true, point);
+ } else {
+ intersect = ray.intersectTriangle(pA, pB, pC, material.side !== DoubleSide, point);
+ }
+
+ if (intersect === null) return null;
+
+ _intersectionPointWorld.copy(point);
+
+ _intersectionPointWorld.applyMatrix4(object.matrixWorld);
+
+ const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld);
+ if (distance < raycaster.near || distance > raycaster.far) return null;
+ return {
+ distance: distance,
+ point: _intersectionPointWorld.clone(),
+ object: object
+ };
+ }
+
+ function checkBufferGeometryIntersection(object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c) {
+ _vA$1.fromBufferAttribute(position, a);
+
+ _vB$1.fromBufferAttribute(position, b);
+
+ _vC$1.fromBufferAttribute(position, c);
+
+ const morphInfluences = object.morphTargetInfluences;
+
+ if (morphPosition && morphInfluences) {
+ _morphA.set(0, 0, 0);
+
+ _morphB.set(0, 0, 0);
+
+ _morphC.set(0, 0, 0);
+
+ for (let i = 0, il = morphPosition.length; i < il; i++) {
+ const influence = morphInfluences[i];
+ const morphAttribute = morphPosition[i];
+ if (influence === 0) continue;
+
+ _tempA.fromBufferAttribute(morphAttribute, a);
+
+ _tempB.fromBufferAttribute(morphAttribute, b);
+
+ _tempC.fromBufferAttribute(morphAttribute, c);
+
+ if (morphTargetsRelative) {
+ _morphA.addScaledVector(_tempA, influence);
+
+ _morphB.addScaledVector(_tempB, influence);
+
+ _morphC.addScaledVector(_tempC, influence);
+ } else {
+ _morphA.addScaledVector(_tempA.sub(_vA$1), influence);
+
+ _morphB.addScaledVector(_tempB.sub(_vB$1), influence);
+
+ _morphC.addScaledVector(_tempC.sub(_vC$1), influence);
+ }
+ }
+
+ _vA$1.add(_morphA);
+
+ _vB$1.add(_morphB);
+
+ _vC$1.add(_morphC);
+ }
+
+ if (object.isSkinnedMesh) {
+ object.boneTransform(a, _vA$1);
+ object.boneTransform(b, _vB$1);
+ object.boneTransform(c, _vC$1);
+ }
+
+ const intersection = checkIntersection(object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint);
+
+ if (intersection) {
+ if (uv) {
+ _uvA$1.fromBufferAttribute(uv, a);
+
+ _uvB$1.fromBufferAttribute(uv, b);
+
+ _uvC$1.fromBufferAttribute(uv, c);
+
+ intersection.uv = Triangle.getUV(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2());
+ }
+
+ if (uv2) {
+ _uvA$1.fromBufferAttribute(uv2, a);
+
+ _uvB$1.fromBufferAttribute(uv2, b);
+
+ _uvC$1.fromBufferAttribute(uv2, c);
+
+ intersection.uv2 = Triangle.getUV(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2());
+ }
+
+ const face = {
+ a: a,
+ b: b,
+ c: c,
+ normal: new Vector3(),
+ materialIndex: 0
+ };
+ Triangle.getNormal(_vA$1, _vB$1, _vC$1, face.normal);
+ intersection.face = face;
+ }
+
+ return intersection;
+ }
+
+ class BoxGeometry extends BufferGeometry {
+ constructor(width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) {
+ super();
+ this.type = 'BoxGeometry';
+ this.parameters = {
+ width: width,
+ height: height,
+ depth: depth,
+ widthSegments: widthSegments,
+ heightSegments: heightSegments,
+ depthSegments: depthSegments
+ };
+ const scope = this; // segments
+
+ widthSegments = Math.floor(widthSegments);
+ heightSegments = Math.floor(heightSegments);
+ depthSegments = Math.floor(depthSegments); // buffers
+
+ const indices = [];
+ const vertices = [];
+ const normals = [];
+ const uvs = []; // helper variables
+
+ let numberOfVertices = 0;
+ let groupStart = 0; // build each side of the box geometry
+
+ buildPlane('z', 'y', 'x', -1, -1, depth, height, width, depthSegments, heightSegments, 0); // px
+
+ buildPlane('z', 'y', 'x', 1, -1, depth, height, -width, depthSegments, heightSegments, 1); // nx
+
+ buildPlane('x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2); // py
+
+ buildPlane('x', 'z', 'y', 1, -1, width, depth, -height, widthSegments, depthSegments, 3); // ny
+
+ buildPlane('x', 'y', 'z', 1, -1, width, height, depth, widthSegments, heightSegments, 4); // pz
+
+ buildPlane('x', 'y', 'z', -1, -1, width, height, -depth, widthSegments, heightSegments, 5); // nz
+ // build geometry
+
+ this.setIndex(indices);
+ this.setAttribute('position', new Float32BufferAttribute(vertices, 3));
+ this.setAttribute('normal', new Float32BufferAttribute(normals, 3));
+ this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));
+
+ function buildPlane(u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex) {
+ const segmentWidth = width / gridX;
+ const segmentHeight = height / gridY;
+ const widthHalf = width / 2;
+ const heightHalf = height / 2;
+ const depthHalf = depth / 2;
+ const gridX1 = gridX + 1;
+ const gridY1 = gridY + 1;
+ let vertexCounter = 0;
+ let groupCount = 0;
+ const vector = new Vector3(); // generate vertices, normals and uvs
+
+ for (let iy = 0; iy < gridY1; iy++) {
+ const y = iy * segmentHeight - heightHalf;
+
+ for (let ix = 0; ix < gridX1; ix++) {
+ const x = ix * segmentWidth - widthHalf; // set values to correct vector component
+
+ vector[u] = x * udir;
+ vector[v] = y * vdir;
+ vector[w] = depthHalf; // now apply vector to vertex buffer
+
+ vertices.push(vector.x, vector.y, vector.z); // set values to correct vector component
+
+ vector[u] = 0;
+ vector[v] = 0;
+ vector[w] = depth > 0 ? 1 : -1; // now apply vector to normal buffer
+
+ normals.push(vector.x, vector.y, vector.z); // uvs
+
+ uvs.push(ix / gridX);
+ uvs.push(1 - iy / gridY); // counters
+
+ vertexCounter += 1;
+ }
+ } // indices
+ // 1. you need three indices to draw a single face
+ // 2. a single segment consists of two faces
+ // 3. so we need to generate six (2*3) indices per segment
+
+
+ for (let iy = 0; iy < gridY; iy++) {
+ for (let ix = 0; ix < gridX; ix++) {
+ const a = numberOfVertices + ix + gridX1 * iy;
+ const b = numberOfVertices + ix + gridX1 * (iy + 1);
+ const c = numberOfVertices + (ix + 1) + gridX1 * (iy + 1);
+ const d = numberOfVertices + (ix + 1) + gridX1 * iy; // faces
+
+ indices.push(a, b, d);
+ indices.push(b, c, d); // increase counter
+
+ groupCount += 6;
+ }
+ } // add a group to the geometry. this will ensure multi material support
+
+
+ scope.addGroup(groupStart, groupCount, materialIndex); // calculate new start value for groups
+
+ groupStart += groupCount; // update total number of vertices
+
+ numberOfVertices += vertexCounter;
+ }
+ }
+
+ static fromJSON(data) {
+ return new BoxGeometry(data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments);
+ }
+
+ }
+
+ /**
+ * Uniform Utilities
+ */
+ function cloneUniforms(src) {
+ const dst = {};
+
+ for (const u in src) {
+ dst[u] = {};
+
+ for (const p in src[u]) {
+ const property = src[u][p];
+
+ if (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture || property.isQuaternion)) {
+ dst[u][p] = property.clone();
+ } else if (Array.isArray(property)) {
+ dst[u][p] = property.slice();
+ } else {
+ dst[u][p] = property;
+ }
+ }
+ }
+
+ return dst;
+ }
+ function mergeUniforms(uniforms) {
+ const merged = {};
+
+ for (let u = 0; u < uniforms.length; u++) {
+ const tmp = cloneUniforms(uniforms[u]);
+
+ for (const p in tmp) {
+ merged[p] = tmp[p];
+ }
+ }
+
+ return merged;
+ } // Legacy
+
+ const UniformsUtils = {
+ clone: cloneUniforms,
+ merge: mergeUniforms
+ };
+
+ var default_vertex = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";
+
+ var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";
+
+ /**
+ * parameters = {
+ * defines: { "label" : "value" },
+ * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } },
+ *
+ * fragmentShader: ,
+ * vertexShader: ,
+ *
+ * wireframe: ,
+ * wireframeLinewidth: ,
+ *
+ * lights:
+ * }
+ */
+
+ class ShaderMaterial extends Material {
+ constructor(parameters) {
+ super();
+ this.type = 'ShaderMaterial';
+ this.defines = {};
+ this.uniforms = {};
+ this.vertexShader = default_vertex;
+ this.fragmentShader = default_fragment;
+ this.linewidth = 1;
+ this.wireframe = false;
+ this.wireframeLinewidth = 1;
+ this.fog = false; // set to use scene fog
+
+ this.lights = false; // set to use scene lights
+
+ this.clipping = false; // set to use user-defined clipping planes
+
+ this.extensions = {
+ derivatives: false,
+ // set to use derivatives
+ fragDepth: false,
+ // set to use fragment depth values
+ drawBuffers: false,
+ // set to use draw buffers
+ shaderTextureLOD: false // set to use shader texture LOD
+
+ }; // When rendered geometry doesn't include these attributes but the material does,
+ // use these default values in WebGL. This avoids errors when buffer data is missing.
+
+ this.defaultAttributeValues = {
+ 'color': [1, 1, 1],
+ 'uv': [0, 0],
+ 'uv2': [0, 0]
+ };
+ this.index0AttributeName = undefined;
+ this.uniformsNeedUpdate = false;
+ this.glslVersion = null;
+
+ if (parameters !== undefined) {
+ if (parameters.attributes !== undefined) {
+ console.error('THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.');
+ }
+
+ this.setValues(parameters);
+ }
+ }
+
+ copy(source) {
+ super.copy(source);
+ this.fragmentShader = source.fragmentShader;
+ this.vertexShader = source.vertexShader;
+ this.uniforms = cloneUniforms(source.uniforms);
+ this.defines = Object.assign({}, source.defines);
+ this.wireframe = source.wireframe;
+ this.wireframeLinewidth = source.wireframeLinewidth;
+ this.lights = source.lights;
+ this.clipping = source.clipping;
+ this.extensions = Object.assign({}, source.extensions);
+ this.glslVersion = source.glslVersion;
+ return this;
+ }
+
+ toJSON(meta) {
+ const data = super.toJSON(meta);
+ data.glslVersion = this.glslVersion;
+ data.uniforms = {};
+
+ for (const name in this.uniforms) {
+ const uniform = this.uniforms[name];
+ const value = uniform.value;
+
+ if (value && value.isTexture) {
+ data.uniforms[name] = {
+ type: 't',
+ value: value.toJSON(meta).uuid
+ };
+ } else if (value && value.isColor) {
+ data.uniforms[name] = {
+ type: 'c',
+ value: value.getHex()
+ };
+ } else if (value && value.isVector2) {
+ data.uniforms[name] = {
+ type: 'v2',
+ value: value.toArray()
+ };
+ } else if (value && value.isVector3) {
+ data.uniforms[name] = {
+ type: 'v3',
+ value: value.toArray()
+ };
+ } else if (value && value.isVector4) {
+ data.uniforms[name] = {
+ type: 'v4',
+ value: value.toArray()
+ };
+ } else if (value && value.isMatrix3) {
+ data.uniforms[name] = {
+ type: 'm3',
+ value: value.toArray()
+ };
+ } else if (value && value.isMatrix4) {
+ data.uniforms[name] = {
+ type: 'm4',
+ value: value.toArray()
+ };
+ } else {
+ data.uniforms[name] = {
+ value: value
+ }; // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far
+ }
+ }
+
+ if (Object.keys(this.defines).length > 0) data.defines = this.defines;
+ data.vertexShader = this.vertexShader;
+ data.fragmentShader = this.fragmentShader;
+ const extensions = {};
+
+ for (const key in this.extensions) {
+ if (this.extensions[key] === true) extensions[key] = true;
+ }
+
+ if (Object.keys(extensions).length > 0) data.extensions = extensions;
+ return data;
+ }
+
+ }
+
+ ShaderMaterial.prototype.isShaderMaterial = true;
+
+ class Camera extends Object3D {
+ constructor() {
+ super();
+ this.type = 'Camera';
+ this.matrixWorldInverse = new Matrix4();
+ this.projectionMatrix = new Matrix4();
+ this.projectionMatrixInverse = new Matrix4();
+ }
+
+ copy(source, recursive) {
+ super.copy(source, recursive);
+ this.matrixWorldInverse.copy(source.matrixWorldInverse);
+ this.projectionMatrix.copy(source.projectionMatrix);
+ this.projectionMatrixInverse.copy(source.projectionMatrixInverse);
+ return this;
+ }
+
+ getWorldDirection(target) {
+ this.updateWorldMatrix(true, false);
+ const e = this.matrixWorld.elements;
+ return target.set(-e[8], -e[9], -e[10]).normalize();
+ }
+
+ updateMatrixWorld(force) {
+ super.updateMatrixWorld(force);
+ this.matrixWorldInverse.copy(this.matrixWorld).invert();
+ }
+
+ updateWorldMatrix(updateParents, updateChildren) {
+ super.updateWorldMatrix(updateParents, updateChildren);
+ this.matrixWorldInverse.copy(this.matrixWorld).invert();
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ }
+
+ Camera.prototype.isCamera = true;
+
+ class PerspectiveCamera extends Camera {
+ constructor(fov = 50, aspect = 1, near = 0.1, far = 2000) {
+ super();
+ this.type = 'PerspectiveCamera';
+ this.fov = fov;
+ this.zoom = 1;
+ this.near = near;
+ this.far = far;
+ this.focus = 10;
+ this.aspect = aspect;
+ this.view = null;
+ this.filmGauge = 35; // width of the film (default in millimeters)
+
+ this.filmOffset = 0; // horizontal film offset (same unit as gauge)
+
+ this.updateProjectionMatrix();
+ }
+
+ copy(source, recursive) {
+ super.copy(source, recursive);
+ this.fov = source.fov;
+ this.zoom = source.zoom;
+ this.near = source.near;
+ this.far = source.far;
+ this.focus = source.focus;
+ this.aspect = source.aspect;
+ this.view = source.view === null ? null : Object.assign({}, source.view);
+ this.filmGauge = source.filmGauge;
+ this.filmOffset = source.filmOffset;
+ return this;
+ }
+ /**
+ * Sets the FOV by focal length in respect to the current .filmGauge.
+ *
+ * The default film gauge is 35, so that the focal length can be specified for
+ * a 35mm (full frame) camera.
+ *
+ * Values for focal length and film gauge must have the same unit.
+ */
+
+
+ setFocalLength(focalLength) {
+ /** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */
+ const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;
+ this.fov = RAD2DEG * 2 * Math.atan(vExtentSlope);
+ this.updateProjectionMatrix();
+ }
+ /**
+ * Calculates the focal length from the current .fov and .filmGauge.
+ */
+
+
+ getFocalLength() {
+ const vExtentSlope = Math.tan(DEG2RAD * 0.5 * this.fov);
+ return 0.5 * this.getFilmHeight() / vExtentSlope;
+ }
+
+ getEffectiveFOV() {
+ return RAD2DEG * 2 * Math.atan(Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom);
+ }
+
+ getFilmWidth() {
+ // film not completely covered in portrait format (aspect < 1)
+ return this.filmGauge * Math.min(this.aspect, 1);
+ }
+
+ getFilmHeight() {
+ // film not completely covered in landscape format (aspect > 1)
+ return this.filmGauge / Math.max(this.aspect, 1);
+ }
+ /**
+ * Sets an offset in a larger frustum. This is useful for multi-window or
+ * multi-monitor/multi-machine setups.
+ *
+ * For example, if you have 3x2 monitors and each monitor is 1920x1080 and
+ * the monitors are in grid like this
+ *
+ * +---+---+---+
+ * | A | B | C |
+ * +---+---+---+
+ * | D | E | F |
+ * +---+---+---+
+ *
+ * then for each monitor you would call it like this
+ *
+ * const w = 1920;
+ * const h = 1080;
+ * const fullWidth = w * 3;
+ * const fullHeight = h * 2;
+ *
+ * --A--
+ * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );
+ * --B--
+ * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );
+ * --C--
+ * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );
+ * --D--
+ * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );
+ * --E--
+ * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );
+ * --F--
+ * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );
+ *
+ * Note there is no reason monitors have to be the same size or in a grid.
+ */
+
+
+ setViewOffset(fullWidth, fullHeight, x, y, width, height) {
+ this.aspect = fullWidth / fullHeight;
+
+ if (this.view === null) {
+ this.view = {
+ enabled: true,
+ fullWidth: 1,
+ fullHeight: 1,
+ offsetX: 0,
+ offsetY: 0,
+ width: 1,
+ height: 1
+ };
+ }
+
+ this.view.enabled = true;
+ this.view.fullWidth = fullWidth;
+ this.view.fullHeight = fullHeight;
+ this.view.offsetX = x;
+ this.view.offsetY = y;
+ this.view.width = width;
+ this.view.height = height;
+ this.updateProjectionMatrix();
+ }
+
+ clearViewOffset() {
+ if (this.view !== null) {
+ this.view.enabled = false;
+ }
+
+ this.updateProjectionMatrix();
+ }
+
+ updateProjectionMatrix() {
+ const near = this.near;
+ let top = near * Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom;
+ let height = 2 * top;
+ let width = this.aspect * height;
+ let left = -0.5 * width;
+ const view = this.view;
+
+ if (this.view !== null && this.view.enabled) {
+ const fullWidth = view.fullWidth,
+ fullHeight = view.fullHeight;
+ left += view.offsetX * width / fullWidth;
+ top -= view.offsetY * height / fullHeight;
+ width *= view.width / fullWidth;
+ height *= view.height / fullHeight;
+ }
+
+ const skew = this.filmOffset;
+ if (skew !== 0) left += near * skew / this.getFilmWidth();
+ this.projectionMatrix.makePerspective(left, left + width, top, top - height, near, this.far);
+ this.projectionMatrixInverse.copy(this.projectionMatrix).invert();
+ }
+
+ toJSON(meta) {
+ const data = super.toJSON(meta);
+ data.object.fov = this.fov;
+ data.object.zoom = this.zoom;
+ data.object.near = this.near;
+ data.object.far = this.far;
+ data.object.focus = this.focus;
+ data.object.aspect = this.aspect;
+ if (this.view !== null) data.object.view = Object.assign({}, this.view);
+ data.object.filmGauge = this.filmGauge;
+ data.object.filmOffset = this.filmOffset;
+ return data;
+ }
+
+ }
+
+ PerspectiveCamera.prototype.isPerspectiveCamera = true;
+
+ const fov = 90,
+ aspect = 1;
+
+ class CubeCamera extends Object3D {
+ constructor(near, far, renderTarget) {
+ super();
+ this.type = 'CubeCamera';
+
+ if (renderTarget.isWebGLCubeRenderTarget !== true) {
+ console.error('THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.');
+ return;
+ }
+
+ this.renderTarget = renderTarget;
+ const cameraPX = new PerspectiveCamera(fov, aspect, near, far);
+ cameraPX.layers = this.layers;
+ cameraPX.up.set(0, -1, 0);
+ cameraPX.lookAt(new Vector3(1, 0, 0));
+ this.add(cameraPX);
+ const cameraNX = new PerspectiveCamera(fov, aspect, near, far);
+ cameraNX.layers = this.layers;
+ cameraNX.up.set(0, -1, 0);
+ cameraNX.lookAt(new Vector3(-1, 0, 0));
+ this.add(cameraNX);
+ const cameraPY = new PerspectiveCamera(fov, aspect, near, far);
+ cameraPY.layers = this.layers;
+ cameraPY.up.set(0, 0, 1);
+ cameraPY.lookAt(new Vector3(0, 1, 0));
+ this.add(cameraPY);
+ const cameraNY = new PerspectiveCamera(fov, aspect, near, far);
+ cameraNY.layers = this.layers;
+ cameraNY.up.set(0, 0, -1);
+ cameraNY.lookAt(new Vector3(0, -1, 0));
+ this.add(cameraNY);
+ const cameraPZ = new PerspectiveCamera(fov, aspect, near, far);
+ cameraPZ.layers = this.layers;
+ cameraPZ.up.set(0, -1, 0);
+ cameraPZ.lookAt(new Vector3(0, 0, 1));
+ this.add(cameraPZ);
+ const cameraNZ = new PerspectiveCamera(fov, aspect, near, far);
+ cameraNZ.layers = this.layers;
+ cameraNZ.up.set(0, -1, 0);
+ cameraNZ.lookAt(new Vector3(0, 0, -1));
+ this.add(cameraNZ);
+ }
+
+ update(renderer, scene) {
+ if (this.parent === null) this.updateMatrixWorld();
+ const renderTarget = this.renderTarget;
+ const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = this.children;
+ const currentXrEnabled = renderer.xr.enabled;
+ const currentRenderTarget = renderer.getRenderTarget();
+ renderer.xr.enabled = false;
+ const generateMipmaps = renderTarget.texture.generateMipmaps;
+ renderTarget.texture.generateMipmaps = false;
+ renderer.setRenderTarget(renderTarget, 0);
+ renderer.render(scene, cameraPX);
+ renderer.setRenderTarget(renderTarget, 1);
+ renderer.render(scene, cameraNX);
+ renderer.setRenderTarget(renderTarget, 2);
+ renderer.render(scene, cameraPY);
+ renderer.setRenderTarget(renderTarget, 3);
+ renderer.render(scene, cameraNY);
+ renderer.setRenderTarget(renderTarget, 4);
+ renderer.render(scene, cameraPZ);
+ renderTarget.texture.generateMipmaps = generateMipmaps;
+ renderer.setRenderTarget(renderTarget, 5);
+ renderer.render(scene, cameraNZ);
+ renderer.setRenderTarget(currentRenderTarget);
+ renderer.xr.enabled = currentXrEnabled;
+ }
+
+ }
+
+ class CubeTexture extends Texture {
+ constructor(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding) {
+ images = images !== undefined ? images : [];
+ mapping = mapping !== undefined ? mapping : CubeReflectionMapping;
+ format = format !== undefined ? format : RGBFormat;
+ super(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding);
+ this.flipY = false;
+ }
+
+ get images() {
+ return this.image;
+ }
+
+ set images(value) {
+ this.image = value;
+ }
+
+ }
+
+ CubeTexture.prototype.isCubeTexture = true;
+
+ class WebGLCubeRenderTarget extends WebGLRenderTarget {
+ constructor(size, options, dummy) {
+ if (Number.isInteger(options)) {
+ console.warn('THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )');
+ options = dummy;
+ }
+
+ super(size, size, options);
+ options = options || {}; // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
+ // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
+ // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.
+ // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped
+ // and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture
+ // as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).
+
+ this.texture = new CubeTexture(undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding);
+ this.texture.isRenderTargetTexture = true;
+ this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;
+ this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;
+ this.texture._needsFlipEnvMap = false;
+ }
+
+ fromEquirectangularTexture(renderer, texture) {
+ this.texture.type = texture.type;
+ this.texture.format = RGBAFormat; // see #18859
+
+ this.texture.encoding = texture.encoding;
+ this.texture.generateMipmaps = texture.generateMipmaps;
+ this.texture.minFilter = texture.minFilter;
+ this.texture.magFilter = texture.magFilter;
+ const shader = {
+ uniforms: {
+ tEquirect: {
+ value: null
+ }
+ },
+ vertexShader:
+ /* glsl */
+ `
+
+ varying vec3 vWorldDirection;
+
+ vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
+
+ return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
+
+ }
+
+ void main() {
+
+ vWorldDirection = transformDirection( position, modelMatrix );
+
+ #include
+ #include
+
+ }
+ `,
+ fragmentShader:
+ /* glsl */
+ `
+
+ uniform sampler2D tEquirect;
+
+ varying vec3 vWorldDirection;
+
+ #include
+
+ void main() {
+
+ vec3 direction = normalize( vWorldDirection );
+
+ vec2 sampleUV = equirectUv( direction );
+
+ gl_FragColor = texture2D( tEquirect, sampleUV );
+
+ }
+ `
+ };
+ const geometry = new BoxGeometry(5, 5, 5);
+ const material = new ShaderMaterial({
+ name: 'CubemapFromEquirect',
+ uniforms: cloneUniforms(shader.uniforms),
+ vertexShader: shader.vertexShader,
+ fragmentShader: shader.fragmentShader,
+ side: BackSide,
+ blending: NoBlending
+ });
+ material.uniforms.tEquirect.value = texture;
+ const mesh = new Mesh(geometry, material);
+ const currentMinFilter = texture.minFilter; // Avoid blurred poles
+
+ if (texture.minFilter === LinearMipmapLinearFilter) texture.minFilter = LinearFilter;
+ const camera = new CubeCamera(1, 10, this);
+ camera.update(renderer, mesh);
+ texture.minFilter = currentMinFilter;
+ mesh.geometry.dispose();
+ mesh.material.dispose();
+ return this;
+ }
+
+ clear(renderer, color, depth, stencil) {
+ const currentRenderTarget = renderer.getRenderTarget();
+
+ for (let i = 0; i < 6; i++) {
+ renderer.setRenderTarget(this, i);
+ renderer.clear(color, depth, stencil);
+ }
+
+ renderer.setRenderTarget(currentRenderTarget);
+ }
+
+ }
+
+ WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;
+
+ const _vector1 = /*@__PURE__*/new Vector3();
+
+ const _vector2 = /*@__PURE__*/new Vector3();
+
+ const _normalMatrix = /*@__PURE__*/new Matrix3();
+
+ class Plane {
+ constructor(normal = new Vector3(1, 0, 0), constant = 0) {
+ // normal is assumed to be normalized
+ this.normal = normal;
+ this.constant = constant;
+ }
+
+ set(normal, constant) {
+ this.normal.copy(normal);
+ this.constant = constant;
+ return this;
+ }
+
+ setComponents(x, y, z, w) {
+ this.normal.set(x, y, z);
+ this.constant = w;
+ return this;
+ }
+
+ setFromNormalAndCoplanarPoint(normal, point) {
+ this.normal.copy(normal);
+ this.constant = -point.dot(this.normal);
+ return this;
+ }
+
+ setFromCoplanarPoints(a, b, c) {
+ const normal = _vector1.subVectors(c, b).cross(_vector2.subVectors(a, b)).normalize(); // Q: should an error be thrown if normal is zero (e.g. degenerate plane)?
+
+
+ this.setFromNormalAndCoplanarPoint(normal, a);
+ return this;
+ }
+
+ copy(plane) {
+ this.normal.copy(plane.normal);
+ this.constant = plane.constant;
+ return this;
+ }
+
+ normalize() {
+ // Note: will lead to a divide by zero if the plane is invalid.
+ const inverseNormalLength = 1.0 / this.normal.length();
+ this.normal.multiplyScalar(inverseNormalLength);
+ this.constant *= inverseNormalLength;
+ return this;
+ }
+
+ negate() {
+ this.constant *= -1;
+ this.normal.negate();
+ return this;
+ }
+
+ distanceToPoint(point) {
+ return this.normal.dot(point) + this.constant;
+ }
+
+ distanceToSphere(sphere) {
+ return this.distanceToPoint(sphere.center) - sphere.radius;
+ }
+
+ projectPoint(point, target) {
+ return target.copy(this.normal).multiplyScalar(-this.distanceToPoint(point)).add(point);
+ }
+
+ intersectLine(line, target) {
+ const direction = line.delta(_vector1);
+ const denominator = this.normal.dot(direction);
+
+ if (denominator === 0) {
+ // line is coplanar, return origin
+ if (this.distanceToPoint(line.start) === 0) {
+ return target.copy(line.start);
+ } // Unsure if this is the correct method to handle this case.
+
+
+ return null;
+ }
+
+ const t = -(line.start.dot(this.normal) + this.constant) / denominator;
+
+ if (t < 0 || t > 1) {
+ return null;
+ }
+
+ return target.copy(direction).multiplyScalar(t).add(line.start);
+ }
+
+ intersectsLine(line) {
+ // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.
+ const startSign = this.distanceToPoint(line.start);
+ const endSign = this.distanceToPoint(line.end);
+ return startSign < 0 && endSign > 0 || endSign < 0 && startSign > 0;
+ }
+
+ intersectsBox(box) {
+ return box.intersectsPlane(this);
+ }
+
+ intersectsSphere(sphere) {
+ return sphere.intersectsPlane(this);
+ }
+
+ coplanarPoint(target) {
+ return target.copy(this.normal).multiplyScalar(-this.constant);
+ }
+
+ applyMatrix4(matrix, optionalNormalMatrix) {
+ const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix);
+
+ const referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix);
+ const normal = this.normal.applyMatrix3(normalMatrix).normalize();
+ this.constant = -referencePoint.dot(normal);
+ return this;
+ }
+
+ translate(offset) {
+ this.constant -= offset.dot(this.normal);
+ return this;
+ }
+
+ equals(plane) {
+ return plane.normal.equals(this.normal) && plane.constant === this.constant;
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ }
+
+ Plane.prototype.isPlane = true;
+
+ const _sphere$2 = /*@__PURE__*/new Sphere();
+
+ const _vector$7 = /*@__PURE__*/new Vector3();
+
+ class Frustum {
+ constructor(p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane()) {
+ this.planes = [p0, p1, p2, p3, p4, p5];
+ }
+
+ set(p0, p1, p2, p3, p4, p5) {
+ const planes = this.planes;
+ planes[0].copy(p0);
+ planes[1].copy(p1);
+ planes[2].copy(p2);
+ planes[3].copy(p3);
+ planes[4].copy(p4);
+ planes[5].copy(p5);
+ return this;
+ }
+
+ copy(frustum) {
+ const planes = this.planes;
+
+ for (let i = 0; i < 6; i++) {
+ planes[i].copy(frustum.planes[i]);
+ }
+
+ return this;
+ }
+
+ setFromProjectionMatrix(m) {
+ const planes = this.planes;
+ const me = m.elements;
+ const me0 = me[0],
+ me1 = me[1],
+ me2 = me[2],
+ me3 = me[3];
+ const me4 = me[4],
+ me5 = me[5],
+ me6 = me[6],
+ me7 = me[7];
+ const me8 = me[8],
+ me9 = me[9],
+ me10 = me[10],
+ me11 = me[11];
+ const me12 = me[12],
+ me13 = me[13],
+ me14 = me[14],
+ me15 = me[15];
+ planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize();
+ planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize();
+ planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize();
+ planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize();
+ planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize();
+ planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize();
+ return this;
+ }
+
+ intersectsObject(object) {
+ const geometry = object.geometry;
+ if (geometry.boundingSphere === null) geometry.computeBoundingSphere();
+
+ _sphere$2.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld);
+
+ return this.intersectsSphere(_sphere$2);
+ }
+
+ intersectsSprite(sprite) {
+ _sphere$2.center.set(0, 0, 0);
+
+ _sphere$2.radius = 0.7071067811865476;
+
+ _sphere$2.applyMatrix4(sprite.matrixWorld);
+
+ return this.intersectsSphere(_sphere$2);
+ }
+
+ intersectsSphere(sphere) {
+ const planes = this.planes;
+ const center = sphere.center;
+ const negRadius = -sphere.radius;
+
+ for (let i = 0; i < 6; i++) {
+ const distance = planes[i].distanceToPoint(center);
+
+ if (distance < negRadius) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ intersectsBox(box) {
+ const planes = this.planes;
+
+ for (let i = 0; i < 6; i++) {
+ const plane = planes[i]; // corner at max distance
+
+ _vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;
+ _vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;
+ _vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;
+
+ if (plane.distanceToPoint(_vector$7) < 0) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ containsPoint(point) {
+ const planes = this.planes;
+
+ for (let i = 0; i < 6; i++) {
+ if (planes[i].distanceToPoint(point) < 0) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ clone() {
+ return new this.constructor().copy(this);
+ }
+
+ }
+
+ function WebGLAnimation() {
+ let context = null;
+ let isAnimating = false;
+ let animationLoop = null;
+ let requestId = null;
+
+ function onAnimationFrame(time, frame) {
+ animationLoop(time, frame);
+ requestId = context.requestAnimationFrame(onAnimationFrame);
+ }
+
+ return {
+ start: function () {
+ if (isAnimating === true) return;
+ if (animationLoop === null) return;
+ requestId = context.requestAnimationFrame(onAnimationFrame);
+ isAnimating = true;
+ },
+ stop: function () {
+ context.cancelAnimationFrame(requestId);
+ isAnimating = false;
+ },
+ setAnimationLoop: function (callback) {
+ animationLoop = callback;
+ },
+ setContext: function (value) {
+ context = value;
+ }
+ };
+ }
+
+ function WebGLAttributes(gl, capabilities) {
+ const isWebGL2 = capabilities.isWebGL2;
+ const buffers = new WeakMap();
+
+ function createBuffer(attribute, bufferType) {
+ const array = attribute.array;
+ const usage = attribute.usage;
+ const buffer = gl.createBuffer();
+ gl.bindBuffer(bufferType, buffer);
+ gl.bufferData(bufferType, array, usage);
+ attribute.onUploadCallback();
+ let type = gl.FLOAT;
+
+ if (array instanceof Float32Array) {
+ type = gl.FLOAT;
+ } else if (array instanceof Float64Array) {
+ console.warn('THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.');
+ } else if (array instanceof Uint16Array) {
+ if (attribute.isFloat16BufferAttribute) {
+ if (isWebGL2) {
+ type = gl.HALF_FLOAT;
+ } else {
+ console.warn('THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.');
+ }
+ } else {
+ type = gl.UNSIGNED_SHORT;
+ }
+ } else if (array instanceof Int16Array) {
+ type = gl.SHORT;
+ } else if (array instanceof Uint32Array) {
+ type = gl.UNSIGNED_INT;
+ } else if (array instanceof Int32Array) {
+ type = gl.INT;
+ } else if (array instanceof Int8Array) {
+ type = gl.BYTE;
+ } else if (array instanceof Uint8Array) {
+ type = gl.UNSIGNED_BYTE;
+ } else if (array instanceof Uint8ClampedArray) {
+ type = gl.UNSIGNED_BYTE;
+ }
+
+ return {
+ buffer: buffer,
+ type: type,
+ bytesPerElement: array.BYTES_PER_ELEMENT,
+ version: attribute.version
+ };
+ }
+
+ function updateBuffer(buffer, attribute, bufferType) {
+ const array = attribute.array;
+ const updateRange = attribute.updateRange;
+ gl.bindBuffer(bufferType, buffer);
+
+ if (updateRange.count === -1) {
+ // Not using update ranges
+ gl.bufferSubData(bufferType, 0, array);
+ } else {
+ if (isWebGL2) {
+ gl.bufferSubData(bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array, updateRange.offset, updateRange.count);
+ } else {
+ gl.bufferSubData(bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array.subarray(updateRange.offset, updateRange.offset + updateRange.count));
+ }
+
+ updateRange.count = -1; // reset range
+ }
+ } //
+
+
+ function get(attribute) {
+ if (attribute.isInterleavedBufferAttribute) attribute = attribute.data;
+ return buffers.get(attribute);
+ }
+
+ function remove(attribute) {
+ if (attribute.isInterleavedBufferAttribute) attribute = attribute.data;
+ const data = buffers.get(attribute);
+
+ if (data) {
+ gl.deleteBuffer(data.buffer);
+ buffers.delete(attribute);
+ }
+ }
+
+ function update(attribute, bufferType) {
+ if (attribute.isGLBufferAttribute) {
+ const cached = buffers.get(attribute);
+
+ if (!cached || cached.version < attribute.version) {
+ buffers.set(attribute, {
+ buffer: attribute.buffer,
+ type: attribute.type,
+ bytesPerElement: attribute.elementSize,
+ version: attribute.version
+ });
+ }
+
+ return;
+ }
+
+ if (attribute.isInterleavedBufferAttribute) attribute = attribute.data;
+ const data = buffers.get(attribute);
+
+ if (data === undefined) {
+ buffers.set(attribute, createBuffer(attribute, bufferType));
+ } else if (data.version < attribute.version) {
+ updateBuffer(data.buffer, attribute, bufferType);
+ data.version = attribute.version;
+ }
+ }
+
+ return {
+ get: get,
+ remove: remove,
+ update: update
+ };
+ }
+
+ class PlaneGeometry extends BufferGeometry {
+ constructor(width = 1, height = 1, widthSegments = 1, heightSegments = 1) {
+ super();
+ this.type = 'PlaneGeometry';
+ this.parameters = {
+ width: width,
+ height: height,
+ widthSegments: widthSegments,
+ heightSegments: heightSegments
+ };
+ const width_half = width / 2;
+ const height_half = height / 2;
+ const gridX = Math.floor(widthSegments);
+ const gridY = Math.floor(heightSegments);
+ const gridX1 = gridX + 1;
+ const gridY1 = gridY + 1;
+ const segment_width = width / gridX;
+ const segment_height = height / gridY; //
+
+ const indices = [];
+ const vertices = [];
+ const normals = [];
+ const uvs = [];
+
+ for (let iy = 0; iy < gridY1; iy++) {
+ const y = iy * segment_height - height_half;
+
+ for (let ix = 0; ix < gridX1; ix++) {
+ const x = ix * segment_width - width_half;
+ vertices.push(x, -y, 0);
+ normals.push(0, 0, 1);
+ uvs.push(ix / gridX);
+ uvs.push(1 - iy / gridY);
+ }
+ }
+
+ for (let iy = 0; iy < gridY; iy++) {
+ for (let ix = 0; ix < gridX; ix++) {
+ const a = ix + gridX1 * iy;
+ const b = ix + gridX1 * (iy + 1);
+ const c = ix + 1 + gridX1 * (iy + 1);
+ const d = ix + 1 + gridX1 * iy;
+ indices.push(a, b, d);
+ indices.push(b, c, d);
+ }
+ }
+
+ this.setIndex(indices);
+ this.setAttribute('position', new Float32BufferAttribute(vertices, 3));
+ this.setAttribute('normal', new Float32BufferAttribute(normals, 3));
+ this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));
+ }
+
+ static fromJSON(data) {
+ return new PlaneGeometry(data.width, data.height, data.widthSegments, data.heightSegments);
+ }
+
+ }
+
+ var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif";
+
+ var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif";
+
+ var alphatest_fragment = "#ifdef USE_ALPHATEST\n\tif ( diffuseColor.a < alphaTest ) discard;\n#endif";
+
+ var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif";
+
+ var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif";
+
+ var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif";
+
+ var begin_vertex = "vec3 transformed = vec3( position );";
+
+ var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif";
+
+ var bsdfs = "vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotVH = saturate( dot( geometry.viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float NoH ) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float NoV, float NoL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( NoL + NoV - NoL * NoV ) ) );\n}\nvec3 BRDF_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif";
+
+ var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif";
+
+ var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif";
+
+ var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif";
+
+ var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif";
+
+ var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif";
+
+ var color_fragment = "#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif";
+
+ var color_pars_fragment = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif";
+
+ var color_pars_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif";
+
+ var color_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif";
+
+ var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}";
+
+ var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif";
+
+ var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif";
+
+ var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif";
+
+ var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif";
+
+ var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif";
+
+ var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif";
+
+ var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );";
+
+ var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}";
+
+ var envmap_fragment = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif";
+
+ var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif";
+
+ var envmap_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif";
+
+ var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif";
+
+ var envmap_vertex = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif";
+
+ var fog_vertex = "#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif";
+
+ var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif";
+
+ var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif";
+
+ var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif";
+
+ var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}";
+
+ var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tlightMapIrradiance *= PI;\n\t#endif\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif";
+
+ var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif";
+
+ var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif";
+
+ var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#else\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif";
+
+ var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getIBLIrradiance( const in GeometricContext geometry ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec;\n\t\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\t\treflectVec = reflect( - viewDir, normal );\n\t\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\t#else\n\t\t\t\treflectVec = refract( - viewDir, normal, refractionRatio );\n\t\t\t#endif\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif";
+
+ var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;";
+
+ var lights_toon_pars_fragment = "varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)";
+
+ var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;";
+
+ var lights_phong_pars_fragment = "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tvec3 specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength.rgb;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)";
+
+ var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularTintFactor = specularTint;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARTINTMAP\n\t\t\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularTintFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenTint = sheenTint;\n#endif";
+
+ var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenTint;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += irradiance * BRDF_Sheen( material.roughness, directLight.direction, geometry, material.sheenTint );\n\t#else\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}";
+
+ var lights_fragment_begin = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif";
+
+ var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif";
+
+ var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif";
+
+ var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif";
+
+ var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif";
+
+ var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif";
+
+ var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif";
+
+ var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif";
+
+ var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif";
+
+ var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif";
+
+ var map_particle_pars_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif";
+
+ var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif";
+
+ var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif";
+
+ var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif";
+
+ var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif";
+
+ var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif";
+
+ var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;";
+
+ var normal_fragment_maps = "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif";
+
+ var normal_pars_fragment = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif";
+
+ var normal_pars_vertex = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif";
+
+ var normal_vertex = "#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif";
+
+ var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif";
+
+ var clearcoat_normal_fragment_begin = "#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif";
+
+ var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif";
+
+ var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif";
+
+ var output_fragment = "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );";
+
+ var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}";
+
+ var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif";
+
+ var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;";
+
+ var dithering_fragment = "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif";
+
+ var dithering_pars_fragment = "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif";
+
+ var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif";
+
+ var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif";
+
+ var shadowmap_pars_fragment = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif";
+
+ var shadowmap_pars_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif";
+
+ var shadowmap_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif";
+
+ var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}";
+
+ var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";
+
+ var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif";
+
+ var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif";
+
+ var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif";
+
+ var specularmap_fragment = "vec3 specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.rgb;\n#else\n\tspecularStrength = vec3( 1.0, 1.0, 1.0 );\n#endif";
+
+ var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif";
+
+ var tonemapping_fragment = "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif";
+
+ var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }";
+
+ var transmission_fragment = "#ifdef USE_TRANSMISSION\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationTint, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = transmission.a;\n#endif";
+
+ var transmission_pars_fragment = "#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationTint;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( float roughness, float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\n\t\tif ( attenuationDistance == 0.0 ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif";
+
+ var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif";
+
+ var uv_pars_vertex = "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif";
+
+ var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif";
+
+ var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif";
+
+ var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif";
+
+ var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif";
+
+ var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif";
+
+ var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}";
+
+ var background_vert = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}";
+
+ var cube_frag = "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}";
+
+ var cube_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}";
+
+ var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}";
+
+ var depth_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}";
+
+ var distanceRGBA_frag = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}";
+
+ var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}";
+
+ var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}";
+
+ var equirect_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}";
+
+ var linedashed_frag = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}";
+
+ var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}";
+
+ var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}";
+
+ var meshbasic_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include