diff --git a/README.md b/README.md index d7c679c..21ad107 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,27 @@ Interactive Datacenter Visualization & Management with Three.js / WebGL. 3D DC Insight is a browser-based datacenter management platform built on Three.js and WebGL. It transforms floor-plans, racks, servers and sensors into a real-time, interactive 3D world where operators can see, customize and act at a glance. +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm start +``` + ### Features +- Server room home view +![home_view.png](images/snapshots/home_view.png) +- 3D overview +![overview.gif](images/snapshots/overview.gif) +- View Racks +![view_racks.gif](images/snapshots/view_racks.gif) +- Door animation +![door_animation.gif](images/snapshots/door_animation.gif) +- Rack animation +![rack_animation.gif](images/snapshots/rack_animation.gif) - Immersive 3D View - Drag-and-Drop Builder - Live Monitoring diff --git a/assets/basic/thumbnail.png b/assets/basic/thumbnail.png new file mode 100644 index 0000000..80910d9 Binary files /dev/null and b/assets/basic/thumbnail.png differ diff --git a/assets/bed/bed.glb b/assets/bed/bed.glb new file mode 100644 index 0000000..3fcdc3b Binary files /dev/null and b/assets/bed/bed.glb differ diff --git a/assets/bed/thumbnail.png b/assets/bed/thumbnail.png new file mode 100644 index 0000000..cb50c4b Binary files /dev/null and b/assets/bed/thumbnail.png differ diff --git a/public/assets/column/column10.jpg b/assets/column/column10.jpg similarity index 100% rename from public/assets/column/column10.jpg rename to assets/column/column10.jpg diff --git a/public/assets/column/column11.jpg b/assets/column/column11.jpg similarity index 100% rename from public/assets/column/column11.jpg rename to assets/column/column11.jpg diff --git a/public/assets/column/column12.jpg b/assets/column/column12.jpg similarity index 100% rename from public/assets/column/column12.jpg rename to assets/column/column12.jpg diff --git a/public/assets/column/column13.jpg b/assets/column/column13.jpg similarity index 100% rename from public/assets/column/column13.jpg rename to assets/column/column13.jpg diff --git a/public/assets/column/column3.jpg b/assets/column/column3.jpg similarity index 100% rename from public/assets/column/column3.jpg rename to assets/column/column3.jpg diff --git a/public/assets/column/column4.jpg b/assets/column/column4.jpg similarity index 100% rename from public/assets/column/column4.jpg rename to assets/column/column4.jpg diff --git a/public/assets/column/column6.jpg b/assets/column/column6.jpg similarity index 100% rename from public/assets/column/column6.jpg rename to assets/column/column6.jpg diff --git a/public/assets/column/column_lightmap3.jpg b/assets/column/column_lightmap3.jpg similarity index 100% rename from public/assets/column/column_lightmap3.jpg rename to assets/column/column_lightmap3.jpg diff --git a/public/assets/column/column_lightmap4.jpg b/assets/column/column_lightmap4.jpg similarity index 100% rename from public/assets/column/column_lightmap4.jpg rename to assets/column/column_lightmap4.jpg diff --git a/assets/column/thumbnail.png b/assets/column/thumbnail.png new file mode 100644 index 0000000..f4b7519 Binary files /dev/null and b/assets/column/thumbnail.png differ diff --git a/public/assets/door/door-l.png b/assets/door/door.png similarity index 100% rename from public/assets/door/door-l.png rename to assets/door/door.png diff --git a/assets/door/thumbnail.png b/assets/door/thumbnail.png new file mode 100644 index 0000000..7678a23 Binary files /dev/null and b/assets/door/thumbnail.png differ diff --git a/public/assets/door/door1.png b/assets/double_door/door-l.png similarity index 100% rename from public/assets/door/door1.png rename to assets/double_door/door-l.png diff --git a/public/assets/door/door-r.png b/assets/double_door/door-r.png similarity index 100% rename from public/assets/door/door-r.png rename to assets/double_door/door-r.png diff --git a/assets/double_door/thumbnail.png b/assets/double_door/thumbnail.png new file mode 100644 index 0000000..65b74dc Binary files /dev/null and b/assets/double_door/thumbnail.png differ diff --git a/public/assets/env/envmap.jpg b/assets/env/envmap.jpg similarity index 100% rename from public/assets/env/envmap.jpg rename to assets/env/envmap.jpg diff --git a/public/assets/env/envmap1.jpg b/assets/env/envmap1.jpg similarity index 100% rename from public/assets/env/envmap1.jpg rename to assets/env/envmap1.jpg diff --git a/public/assets/env/envmap2.jpg b/assets/env/envmap2.jpg similarity index 100% rename from public/assets/env/envmap2.jpg rename to assets/env/envmap2.jpg diff --git a/public/assets/env/envmap3.jpg b/assets/env/envmap3.jpg similarity index 100% rename from public/assets/env/envmap3.jpg rename to assets/env/envmap3.jpg diff --git a/public/assets/env/envmap4.jpg b/assets/env/envmap4.jpg similarity index 100% rename from public/assets/env/envmap4.jpg rename to assets/env/envmap4.jpg diff --git a/public/assets/env/envmap5.jpg b/assets/env/envmap5.jpg similarity index 100% rename from public/assets/env/envmap5.jpg rename to assets/env/envmap5.jpg diff --git a/public/assets/env/envmap6.jpg b/assets/env/envmap6.jpg similarity index 100% rename from public/assets/env/envmap6.jpg rename to assets/env/envmap6.jpg diff --git a/public/assets/env/inside_lightmap.jpg b/assets/env/exterior_lightmap.jpg similarity index 100% rename from public/assets/env/inside_lightmap.jpg rename to assets/env/exterior_lightmap.jpg diff --git a/public/assets/env/outside_lightmap9.jpg b/assets/env/exterior_lightmap9.jpg similarity index 100% rename from public/assets/env/outside_lightmap9.jpg rename to assets/env/exterior_lightmap9.jpg diff --git a/public/assets/env/outside_lightmap.jpg b/assets/env/interior_lightmap.jpg similarity index 100% rename from public/assets/env/outside_lightmap.jpg rename to assets/env/interior_lightmap.jpg diff --git a/public/assets/env/inside_lightmap8.jpg b/assets/env/interior_lightmap8.jpg similarity index 100% rename from public/assets/env/inside_lightmap8.jpg rename to assets/env/interior_lightmap8.jpg diff --git a/public/assets/env/inside_lightmap9.jpg b/assets/env/interior_lightmap9.jpg similarity index 100% rename from public/assets/env/inside_lightmap9.jpg rename to assets/env/interior_lightmap9.jpg diff --git a/public/assets/env/metal_normalmap.jpg b/assets/env/metal_normalmap.jpg similarity index 100% rename from public/assets/env/metal_normalmap.jpg rename to assets/env/metal_normalmap.jpg diff --git a/public/assets/env/white.png b/assets/env/white.png similarity index 100% rename from public/assets/env/white.png rename to assets/env/white.png diff --git a/public/assets/wall/floor5.jpg b/assets/glasswall/floor.jpg similarity index 100% rename from public/assets/wall/floor5.jpg rename to assets/glasswall/floor.jpg diff --git a/public/assets/wall/glass-wall4.png b/assets/glasswall/glass-wall.png similarity index 100% rename from public/assets/wall/glass-wall4.png rename to assets/glasswall/glass-wall.png diff --git a/public/assets/wall/floor.jpg b/assets/glasswall/roof.jpg similarity index 100% rename from public/assets/wall/floor.jpg rename to assets/glasswall/roof.jpg diff --git a/assets/glasswall/thumbnail.png b/assets/glasswall/thumbnail.png new file mode 100644 index 0000000..82caa7d Binary files /dev/null and b/assets/glasswall/thumbnail.png differ diff --git a/assets/marker/marker.png b/assets/marker/marker.png new file mode 100644 index 0000000..87d5c3f Binary files /dev/null and b/assets/marker/marker.png differ diff --git a/assets/marker/thumbnail.png b/assets/marker/thumbnail.png new file mode 100644 index 0000000..87d5c3f Binary files /dev/null and b/assets/marker/thumbnail.png differ diff --git a/public/assets/plant/plant.png b/assets/plant/plant.png similarity index 100% rename from public/assets/plant/plant.png rename to assets/plant/plant.png diff --git a/public/assets/plant/plant2.png b/assets/plant/plant2.png similarity index 100% rename from public/assets/plant/plant2.png rename to assets/plant/plant2.png diff --git a/assets/plant/thumbnail.png b/assets/plant/thumbnail.png new file mode 100644 index 0000000..5af6e4f Binary files /dev/null and b/assets/plant/thumbnail.png differ diff --git a/public/assets/rack/inside_back.jpg b/assets/rack/interior_back.jpg similarity index 100% rename from public/assets/rack/inside_back.jpg rename to assets/rack/interior_back.jpg diff --git a/public/assets/rack/inside_side.jpg b/assets/rack/interior_side.jpg similarity index 100% rename from public/assets/rack/inside_side.jpg rename to assets/rack/interior_side.jpg diff --git a/public/assets/rack/inside_top.jpg b/assets/rack/interior_top.jpg similarity index 100% rename from public/assets/rack/inside_top.jpg rename to assets/rack/interior_top.jpg diff --git a/public/assets/rack/rack42u.png b/assets/rack/rack42u.png similarity index 100% rename from public/assets/rack/rack42u.png rename to assets/rack/rack42u.png diff --git a/public/assets/rack/rack_back.jpg b/assets/rack/rack_back.jpg similarity index 100% rename from public/assets/rack/rack_back.jpg rename to assets/rack/rack_back.jpg diff --git a/public/assets/rack/rack_door_back.jpg b/assets/rack/rack_door_back.jpg similarity index 100% rename from public/assets/rack/rack_door_back.jpg rename to assets/rack/rack_door_back.jpg diff --git a/public/assets/rack/rack_door_front.jpg b/assets/rack/rack_door_front.jpg similarity index 100% rename from public/assets/rack/rack_door_front.jpg rename to assets/rack/rack_door_front.jpg diff --git a/public/assets/rack/rack_inside.jpg b/assets/rack/rack_inside.jpg similarity index 100% rename from public/assets/rack/rack_inside.jpg rename to assets/rack/rack_inside.jpg diff --git a/public/assets/rack/rack_side.jpg b/assets/rack/rack_side.jpg similarity index 100% rename from public/assets/rack/rack_side.jpg rename to assets/rack/rack_side.jpg diff --git a/public/assets/rack/rack_top.jpg b/assets/rack/rack_top.jpg similarity index 100% rename from public/assets/rack/rack_top.jpg rename to assets/rack/rack_top.jpg diff --git a/assets/rack/thumbnail.png b/assets/rack/thumbnail.png new file mode 100644 index 0000000..fe99a78 Binary files /dev/null and b/assets/rack/thumbnail.png differ diff --git a/assets/rack2/interior_side.jpg b/assets/rack2/interior_side.jpg new file mode 100644 index 0000000..119da66 Binary files /dev/null and b/assets/rack2/interior_side.jpg differ diff --git a/assets/rack2/interior_top.jpg b/assets/rack2/interior_top.jpg new file mode 100644 index 0000000..c3f6006 Binary files /dev/null and b/assets/rack2/interior_top.jpg differ diff --git a/public/assets/rack2/r1brack.jpg b/assets/rack2/r1brack.jpg similarity index 100% rename from public/assets/rack2/r1brack.jpg rename to assets/rack2/r1brack.jpg diff --git a/public/assets/rack2/r1dbrack.jpg b/assets/rack2/r1dbrack.jpg similarity index 100% rename from public/assets/rack2/r1dbrack.jpg rename to assets/rack2/r1dbrack.jpg diff --git a/public/assets/rack2/r1frack.jpg b/assets/rack2/r1frack.jpg similarity index 100% rename from public/assets/rack2/r1frack.jpg rename to assets/rack2/r1frack.jpg diff --git a/public/assets/rack2/r1frack42.png b/assets/rack2/r1frack42.png similarity index 100% rename from public/assets/rack2/r1frack42.png rename to assets/rack2/r1frack42.png diff --git a/public/assets/rack2/r1srack.jpg b/assets/rack2/r1srack.jpg similarity index 100% rename from public/assets/rack2/r1srack.jpg rename to assets/rack2/r1srack.jpg diff --git a/public/assets/rack2/r1track.jpg b/assets/rack2/r1track.jpg similarity index 100% rename from public/assets/rack2/r1track.jpg rename to assets/rack2/r1track.jpg diff --git a/assets/rack2/thumbnail.png b/assets/rack2/thumbnail.png new file mode 100644 index 0000000..351a1be Binary files /dev/null and b/assets/rack2/thumbnail.png differ diff --git a/assets/skybox/skybox.jpg b/assets/skybox/skybox.jpg new file mode 100644 index 0000000..ab0e075 Binary files /dev/null and b/assets/skybox/skybox.jpg differ diff --git a/assets/skybox/thumbnail.png b/assets/skybox/thumbnail.png new file mode 100644 index 0000000..79b7ca0 Binary files /dev/null and b/assets/skybox/thumbnail.png differ diff --git a/public/assets/wall/wall.png b/assets/wall/exterior-wall.png similarity index 100% rename from public/assets/wall/wall.png rename to assets/wall/exterior-wall.png diff --git a/public/assets/wall/floor4.jpg b/assets/wall/floor.jpg similarity index 100% rename from public/assets/wall/floor4.jpg rename to assets/wall/floor.jpg diff --git a/assets/wall/interior-wall.jpg b/assets/wall/interior-wall.jpg new file mode 100644 index 0000000..d104432 Binary files /dev/null and b/assets/wall/interior-wall.jpg differ diff --git a/assets/wall/roof.jpg b/assets/wall/roof.jpg new file mode 100644 index 0000000..4f22171 Binary files /dev/null and b/assets/wall/roof.jpg differ diff --git a/assets/wall/thumbnail.png b/assets/wall/thumbnail.png new file mode 100644 index 0000000..5b06577 Binary files /dev/null and b/assets/wall/thumbnail.png differ diff --git a/public/assets/wall/wall14.jpg b/assets/wall2/exterior-wall.jpg similarity index 100% rename from public/assets/wall/wall14.jpg rename to assets/wall2/exterior-wall.jpg diff --git a/assets/wall2/floor.jpg b/assets/wall2/floor.jpg new file mode 100644 index 0000000..2fb3466 Binary files /dev/null and b/assets/wall2/floor.jpg differ diff --git a/public/assets/wall/inner-wall10.jpg b/assets/wall2/interior-wall.jpg similarity index 100% rename from public/assets/wall/inner-wall10.jpg rename to assets/wall2/interior-wall.jpg diff --git a/assets/wall2/roof.jpg b/assets/wall2/roof.jpg new file mode 100644 index 0000000..4f22171 Binary files /dev/null and b/assets/wall2/roof.jpg differ diff --git a/assets/wall2/thumbnail.png b/assets/wall2/thumbnail.png new file mode 100644 index 0000000..17fe1eb Binary files /dev/null and b/assets/wall2/thumbnail.png differ diff --git a/assets/wall2/wall.jpg b/assets/wall2/wall.jpg new file mode 100644 index 0000000..fe4c72a Binary files /dev/null and b/assets/wall2/wall.jpg differ diff --git a/assets/window/thumbnail.png b/assets/window/thumbnail.png new file mode 100644 index 0000000..b8e9223 Binary files /dev/null and b/assets/window/thumbnail.png differ diff --git a/public/assets/window/window3.png b/assets/window/window.png similarity index 100% rename from public/assets/window/window3.png rename to assets/window/window.png diff --git a/global.css b/global.css new file mode 100644 index 0000000..e568178 --- /dev/null +++ b/global.css @@ -0,0 +1,89 @@ +@charset "utf-8"; +* { + box-sizing: border-box; +} +html { + background-color: #fff; + color: #000; + font-size: 16px; +} +blockquote, body, button, dd, dl, figure, form, h1, h2, h3, h4, h5, h6, input, legend, ol, p, pre, td, textarea, th, ul, xmp { + margin: 0; + padding: 0; +} +body, button, code, input, kbd, pre, samp, select, textarea, tt, xmp { + line-height: 1.5; +} +big, button, h1, h2, h3, h4, h5, h6, input, select, small, textarea { + font-size: 100%; +} +h1, h2, h3, h4, h5, h6 { + font-family: tahoma, arial, "Hiragino Sans GB", "微软雅黑", simsun, sans-serif; +} +b, h1, h2, h3, h4, h5, h6, strong { + font-weight: 400; +} +address, cite, dfn, em, i, optgroup, var { + font-style: normal; +} +table { + border-collapse: collapse; + border-spacing: 0; + text-align: left; +} +caption, th { + text-align: inherit; +} +menu, ol, ul { + list-style: none; +} +img { + border: 0; +} +button, img, input, object, select, textarea { + vertical-align: middle; +} +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; +} +audio, canvas, video { + display: inline-block; +} +blockquote:after, blockquote:before, q:after, q:before { + content: "\0020"; +} +textarea { + overflow: auto; + resize: vertical; +} +a, button, input, select, textarea { + border: none; + outline: 0 none; +} +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} +mark { + background-color: transparent; +} +a, del, ins, s, u { + text-decoration: none; +} +sub, sup { + vertical-align: baseline; +} +html { + height: 100%; + overflow-x: hidden; +} +body { + color: #333; + font-family: Arial, "Microsoft Yahei", "Helvetica Neue", Helvetica, sans-serif; + line-height: 1; +} +a { + color: #25a4bb; + text-decoration: none; +} + diff --git a/iconfont/demo.css b/iconfont/demo.css new file mode 100644 index 0000000..a67054a --- /dev/null +++ b/iconfont/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/iconfont/demo_index.html b/iconfont/demo_index.html new file mode 100644 index 0000000..890cd11 --- /dev/null +++ b/iconfont/demo_index.html @@ -0,0 +1,487 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    cutting
    +
    
    +
  • + +
  • + +
    model & plane-overlay
    +
    
    +
  • + +
  • + +
    first view-filled
    +
    
    +
  • + +
  • + +
    measure-area
    +
    
    +
  • + +
  • + +
    measure-filled
    +
    
    +
  • + +
  • + +
    measure-angle
    +
    
    +
  • + +
  • + +
    measure-distance
    +
    
    +
  • + +
  • + +
    weather control-filled
    +
    
    +
  • + +
  • + +
    configuration
    +
    
    +
  • + +
  • + +
    cloud download-filled
    +
    
    +
  • + +
  • + +
    cloud upload-filled
    +
    
    +
  • + +
  • + +
    phase-review
    +
    
    +
  • + +
  • + +
    data-space planning
    +
    
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1620285948639') format('woff2'),
+       url('iconfont.woff?t=1620285948639') format('woff'),
+       url('iconfont.ttf?t=1620285948639') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + cutting +
    +
    .icon-clip-plane +
    +
  • + +
  • + +
    + model & plane-overlay +
    +
    .icon-clip-box +
    +
  • + +
  • + +
    + first view-filled +
    +
    .icon-firstview-filled +
    +
  • + +
  • + +
    + measure-area +
    +
    .icon-measure-area +
    +
  • + +
  • + +
    + measure-filled +
    +
    .icon-measure-filled +
    +
  • + +
  • + +
    + measure-angle +
    +
    .icon-measure-angle +
    +
  • + +
  • + +
    + measure-distance +
    +
    .icon-measure-distance +
    +
  • + +
  • + +
    + weather control-filled +
    +
    .icon-weathercontrol-filled +
    +
  • + +
  • + +
    + configuration +
    +
    .icon-configuration +
    +
  • + +
  • + +
    + cloud download-filled +
    +
    .icon-clouddownload-filled +
    +
  • + +
  • + +
    + cloud upload-filled +
    +
    .icon-cloudupload-filled +
    +
  • + +
  • + +
    + phase-review +
    +
    .icon-phase-review +
    +
  • + +
  • + +
    + data-space planning +
    +
    .icon-data-spaceplanning +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    cutting
    +
    #icon-clip-plane
    +
  • + +
  • + +
    model & plane-overlay
    +
    #icon-clip-box
    +
  • + +
  • + +
    first view-filled
    +
    #icon-firstview-filled
    +
  • + +
  • + +
    measure-area
    +
    #icon-measure-area
    +
  • + +
  • + +
    measure-filled
    +
    #icon-measure-filled
    +
  • + +
  • + +
    measure-angle
    +
    #icon-measure-angle
    +
  • + +
  • + +
    measure-distance
    +
    #icon-measure-distance
    +
  • + +
  • + +
    weather control-filled
    +
    #icon-weathercontrol-filled
    +
  • + +
  • + +
    configuration
    +
    #icon-configuration
    +
  • + +
  • + +
    cloud download-filled
    +
    #icon-clouddownload-filled
    +
  • + +
  • + +
    cloud upload-filled
    +
    #icon-cloudupload-filled
    +
  • + +
  • + +
    phase-review
    +
    #icon-phase-review
    +
  • + +
  • + +
    data-space planning
    +
    #icon-data-spaceplanning
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/iconfont/iconfont.css b/iconfont/iconfont.css new file mode 100644 index 0000000..b51ade9 --- /dev/null +++ b/iconfont/iconfont.css @@ -0,0 +1,246 @@ +@font-face { + font-family: "x-viewer-iconfont"; + src: url('iconfont.woff2') format('woff2'), + url('iconfont.woff') format('woff'), + url('iconfont.ttf') format('truetype');} + +.x-viewer-iconfont { + font-family: "x-viewer-iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-measure-area-color:before { + content: "\e699"; +} + +.icon-angle-measure:before { + content: "\e69a"; +} + +.icon-measure-distance:before { + content: "\e69d"; +} + +.icon-measure-color:before { + content: "\e69f"; +} + +.icon-annotation:before { + content: "\e696"; +} + +.icon-annotation-show:before { + content: "\e697"; +} + +.icon-annotation-hide:before { + content: "\e698"; +} + +.icon-frame-clipping:before { + content: "\e695"; +} + +.icon-compared:before { + content: "\e694"; +} + +.icon-font24:before { + content: "\e68e"; +} + +.icon-font14:before { + content: "\e68f"; +} + +.icon-font18:before { + content: "\e693"; +} + +.icon-line-4:before { + content: "\e68a"; +} + +.icon-line-1:before { + content: "\e68c"; +} + +.icon-line-2:before { + content: "\e68d"; +} + +.icon-line-3:before { + content: "\e690"; +} + +.icon-color-red:before { + content: "\e691"; +} + +.icon-eraser:before { + content: "\e692"; +} + +.icon-cross:before { + content: "\e689"; +} + +.icon-cloud:before { + content: "\e67d"; +} + +.icon-polyline:before { + content: "\e67e"; +} + +.icon-rectangle:before { + content: "\e67f"; +} + +.icon-text:before { + content: "\e681"; +} + +.icon-oval:before { + content: "\e682"; +} + +.icon-round:before { + content: "\e683"; +} + +.icon-cloud-segment:before { + content: "\e685"; +} + +.icon-arrow:before { + content: "\e67c"; +} + +.icon-revoke:before { + content: "\e67a"; +} + +.icon-redo:before { + content: "\e67b"; +} + +.icon-kuangxuanfangda:before { + content: "\e676"; +} + +.icon-tucengkongzhi:before { + content: "\e677"; +} + +.icon-celiang1:before { + content: "\e69b"; +} + +.icon-zhushitu:before { + content: "\e68b"; +} + +.icon-wenzi:before { + content: "\e688"; +} + +.icon-tianjiapizhu:before { + content: "\e687"; +} + +.icon-shuxing:before { + content: "\e686"; +} + +.icon-quanping:before { + content: "\e684"; +} + +.icon-chexiao:before { + content: "\e680"; +} + +.icon-bim_diyirencheng:before { + content: "\e662"; +} + +.icon-shanchu:before { + content: "\e620"; +} + +.icon-xiajiantou:before { + content: "\e61f"; +} + +.icon-xianshi:before { + content: "\e61d"; +} + +.icon-yincang:before { + content: "\e619"; +} + +.icon-youjiantou:before { + content: "\e61c"; +} + +.icon-tianjia:before { + content: "\e61b"; +} + +.icon-celiang:before { + content: "\e61a"; +} + +.icon-SAASfuben-:before { + content: "\e6bf"; +} + +.icon-SAASfuben-1:before { + content: "\e6c0"; +} + +.icon-xuanzhuan-copy:before { + content: "\e600"; +} + +.icon-yidong:before { + content: "\e61e"; +} + +.icon-baocunxiangmu:before { + content: "\e609"; +} + +.icon-dengguang:before { + content: "\e60a"; +} + +.icon-tiankonghe:before { + content: "\e60d"; +} + +.icon-a-ziyuan65:before { + content: "\e610"; +} + +.icon-a-ziyuan69:before { + content: "\e611"; +} + +.icon-a-ziyuan63:before { + content: "\e612"; +} + +.icon-a-ziyuan70:before { + content: "\e614"; +} + +.icon-a-ziyuan61-copy:before { + content: "\e615"; +} + diff --git a/iconfont/iconfont.js b/iconfont/iconfont.js new file mode 100644 index 0000000..52c0de0 --- /dev/null +++ b/iconfont/iconfont.js @@ -0,0 +1 @@ +!function(l){var a,e,t,i,o,c,n='',d=(d=document.getElementsByTagName("script"))[d.length-1].getAttribute("data-injectcss");if(d&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}function m(){o||(o=!0,t())}a=function(){var l,a,e,t;(t=document.createElement("div")).innerHTML=n,n=null,(e=t.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",l=e,(a=document.body).firstChild?(t=l,(e=a.firstChild).parentNode.insertBefore(t,e)):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(e=function(){document.removeEventListener("DOMContentLoaded",e,!1),a()},document.addEventListener("DOMContentLoaded",e,!1)):document.attachEvent&&(t=a,i=l.document,o=!1,(c=function(){try{i.documentElement.doScroll("left")}catch(l){return void setTimeout(c,50)}m()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,m())})}(window); \ No newline at end of file diff --git a/iconfont/iconfont.ttf b/iconfont/iconfont.ttf new file mode 100644 index 0000000..18d426b Binary files /dev/null and b/iconfont/iconfont.ttf differ diff --git a/iconfont/iconfont.woff b/iconfont/iconfont.woff new file mode 100644 index 0000000..23adb8d Binary files /dev/null and b/iconfont/iconfont.woff differ diff --git a/iconfont/iconfont.woff2 b/iconfont/iconfont.woff2 new file mode 100644 index 0000000..1eb0d90 Binary files /dev/null and b/iconfont/iconfont.woff2 differ diff --git a/iconfont/iconfont2.css b/iconfont/iconfont2.css new file mode 100644 index 0000000..aeefff7 --- /dev/null +++ b/iconfont/iconfont2.css @@ -0,0 +1,240 @@ +/* Original url: https://at.alicdn.com/t/c/font_2809422_kipm6ycaet.css */ + +@font-face { + font-family: "x-viewer-iconfont2"; + src: url('iconfont2.woff2') format('woff2'), + url('iconfont2.woff') format('woff'), + url('iconfont2.ttf') format('truetype'); +} + +.x-viewer-iconfont2 { + font-family: "x-viewer-iconfont2" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-debug:before { + content: "\e61f"; +} + +.icon-camera:before { + content: "\e614"; +} + +.icon-loading:before { + content: "\e61c"; +} + +.icon-show:before { + content: "\e613"; +} + +.icon-hide:before { + content: "\e611"; +} + +.icon-firstperson:before { + content: "\e60d"; +} + +.icon-more:before { + content: "\e65f"; +} + +.icon-choosesectionplane-filled:before { + content: "\e629"; +} + +.icon-choosesectionplane:before { + content: "\e62a"; +} + +.icon-reset:before { + content: "\e626"; +} + +.icon-showsectionplane:before { + content: "\e627"; +} + +.icon-hidesectionplane:before { + content: "\e628"; +} + +.icon-home-filled:before { + content: "\e619"; +} + +.icon-home:before { + content: "\e61b"; +} + +.icon-settings:before { + content: "\e618"; +} + +.icon-clear:before { + content: "\e615"; +} + +.icon-viewpoint:before { + content: "\e616"; +} + +.icon-clear-filled:before { + content: "\e617"; +} + +.icon-fullscreen-filled:before { + content: "\e612"; +} + +.icon-sectionplane:before { + content: "\e60f"; +} + +.icon-sectionplane-filled:before { + content: "\e610"; +} + +.icon-settings-filled:before { + content: "\e60e"; +} + +.icon-areameasure-filled:before { + content: "\e60b"; +} + +.icon-areameasure:before { + content: "\e60c"; +} + +.icon-distancemeasure-filled:before { + content: "\e608"; +} + +.icon-distancemeasure:before { + content: "\e604"; +} + +.icon-viewpoint-filled:before { + content: "\e606"; +} + +.icon-new:before { + content: "\e60a"; +} + +.icon-clearmeasure-bak:before { + content: "\e661"; +} + +.icon-orthomode:before { + content: "\e660"; +} + +.icon-measure-filled:before { + content: "\e65d"; +} + +.icon-measure:before { + content: "\e65e"; +} + +.icon-view:before { + content: "\e65c"; +} + +.icon-bimtree-filled:before { + content: "\e65b"; +} + +.icon-bimtree:before { + content: "\e655"; +} + +.icon-orthomode-filled:before { + content: "\e654"; +} + +.icon-section:before { + content: "\e652"; +} + +.icon-section-filled:before { + content: "\e653"; +} + +.icon-info:before { + content: "\e651"; +} + +.icon-settings-bak:before { + content: "\e640"; +} + +.icon-sectionbox-filled:before { + content: "\e6c1"; +} + +.icon-property-filled:before { + content: "\e644"; +} + +.icon-info-filled:before { + content: "\e67d"; +} + +.icon-pizhu:before { + content: "\e64d"; +} + +.icon-pizhu-tianchong:before { + content: "\e64e"; +} + +.icon-view-filled:before { + content: "\e63c"; +} + +.icon-location-filled:before { + content: "\e63d"; +} + +.icon-property:before { + content: "\e643"; +} + +.icon-sectionbox:before { + content: "\e645"; +} + +.icon-fullscreen:before { + content: "\e658"; +} + +.icon-dishangxiamoshiqiehuan:before { + content: "\e662"; +} + +.icon-celiang:before { + content: "\e61a"; +} + +.icon-SAASfuben-:before { + content: "\e6bf"; +} + +.icon-SAASfuben-1:before { + content: "\e6c0"; +} + +.icon-xuanzhuan-copy:before { + content: "\e600"; +} + +.icon-move:before { + content: "\e61e"; +} diff --git a/iconfont/iconfont2.ttf b/iconfont/iconfont2.ttf new file mode 100644 index 0000000..4b56b0e Binary files /dev/null and b/iconfont/iconfont2.ttf differ diff --git a/iconfont/iconfont2.woff b/iconfont/iconfont2.woff new file mode 100644 index 0000000..93072df Binary files /dev/null and b/iconfont/iconfont2.woff differ diff --git a/iconfont/iconfont2.woff2 b/iconfont/iconfont2.woff2 new file mode 100644 index 0000000..8959ced Binary files /dev/null and b/iconfont/iconfont2.woff2 differ diff --git a/images/snapshots/door_animation.gif b/images/snapshots/door_animation.gif new file mode 100644 index 0000000..ff1bb38 Binary files /dev/null and b/images/snapshots/door_animation.gif differ diff --git a/images/snapshots/home_view.png b/images/snapshots/home_view.png new file mode 100644 index 0000000..f92a78b Binary files /dev/null and b/images/snapshots/home_view.png differ diff --git a/images/snapshots/overview.gif b/images/snapshots/overview.gif new file mode 100644 index 0000000..88bbed7 Binary files /dev/null and b/images/snapshots/overview.gif differ diff --git a/images/snapshots/rack_animation.gif b/images/snapshots/rack_animation.gif new file mode 100644 index 0000000..0743446 Binary files /dev/null and b/images/snapshots/rack_animation.gif differ diff --git a/images/snapshots/view_racks.gif b/images/snapshots/view_racks.gif new file mode 100644 index 0000000..d658f23 Binary files /dev/null and b/images/snapshots/view_racks.gif differ diff --git a/index.html b/index.html index 44a9335..3165415 100644 --- a/index.html +++ b/index.html @@ -1,13 +1,899 @@ - - - - - - - Vite + TS - - -
- - - + + + + + + + + + + + + +
+
+
+ +
+ + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..47548c0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1871 @@ +{ + "name": "server-room", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "server-room", + "version": "0.0.0", + "dependencies": { + "@tweenjs/tween.js": "^25.0.0", + "camera-controls": "^2.9.0", + "http-server": "^14.1.1", + "three": "^0.170.0", + "three-bvh-csg": "^0.0.16", + "three-mesh-bvh": "^0.8.3" + }, + "devDependencies": { + "@types/three": "^0.170.0", + "@vitejs/plugin-vue": "^5.2.1", + "typescript": "~5.6.2", + "vite": "^5.4.10" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.3", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.28.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.0.tgz", + "integrity": "sha512-aVzKH922ogVAWkKiyKXorjYymz2084zrhrZRXtLrA5eEx5SO8Dj0c/4FpCHZyn7MKzhW2pW4tK28vVr+5oQ2xw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.0.tgz", + "integrity": "sha512-diOdQuw43xTa1RddAFbhIA8toirSzFMcnIg8kvlzRbK26xqEnKJ/vqQnghTAajy2Dcy42v+GMPMo6jq67od+Dw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.0.tgz", + "integrity": "sha512-QhR2KA18fPlJWFefySJPDYZELaVqIUVnYgAOdtJ+B/uH96CFg2l1TQpX19XpUMWUqMyIiyY45wje8K6F4w4/CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.0.tgz", + "integrity": "sha512-Q9RMXnQVJ5S1SYpNSTwXDpoQLgJ/fbInWOyjbCnnqTElEyeNvLAB3QvG5xmMQMhFN74bB5ZZJYkKaFPcOG8sGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.0.tgz", + "integrity": "sha512-3jzOhHWM8O8PSfyft+ghXZfBkZawQA0PUGtadKYxFqpcYlOYjTi06WsnYBsbMHLawr+4uWirLlbhcYLHDXR16w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.0.tgz", + "integrity": "sha512-NcD5uVUmE73C/TPJqf78hInZmiSBsDpz3iD5MF/BuB+qzm4ooF2S1HfeTChj5K4AV3y19FFPgxonsxiEpy8v/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.0.tgz", + "integrity": "sha512-JWnrj8qZgLWRNHr7NbpdnrQ8kcg09EBBq8jVOjmtlB3c8C6IrynAJSMhMVGME4YfTJzIkJqvSUSVJRqkDnu/aA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.0.tgz", + "integrity": "sha512-9xu92F0TxuMH0tD6tG3+GtngwdgSf8Bnz+YcsPG91/r5Vgh5LNofO48jV55priA95p3c92FLmPM7CvsVlnSbGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.0.tgz", + "integrity": "sha512-NLtvJB5YpWn7jlp1rJiY0s+G1Z1IVmkDuiywiqUhh96MIraC0n7XQc2SZ1CZz14shqkM+XN2UrfIo7JB6UufOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.0.tgz", + "integrity": "sha512-QJ4hCOnz2SXgCh+HmpvZkM+0NSGcZACyYS8DGbWn2PbmA0e5xUk4bIP8eqJyNXLtyB4gZ3/XyvKtQ1IFH671vQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.0.tgz", + "integrity": "sha512-Pk0qlGJnhILdIC5zSKQnprFjrGmjfDM7TPZ0FKJxRkoo+kgMRAg4ps1VlTZf8u2vohSicLg7NP+cA5qE96PaFg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.0.tgz", + "integrity": "sha512-/dNFc6rTpoOzgp5GKoYjT6uLo8okR/Chi2ECOmCZiS4oqh3mc95pThWma7Bgyk6/WTEvjDINpiBCuecPLOgBLQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.0.tgz", + "integrity": "sha512-YBwXsvsFI8CVA4ej+bJF2d9uAeIiSkqKSPQNn0Wyh4eMDY4wxuSp71BauPjQNCKK2tD2/ksJ7uhJ8X/PVY9bHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.0.tgz", + "integrity": "sha512-FI3Rr2aGAtl1aHzbkBIamsQyuauYtTF9SDUJ8n2wMXuuxwchC3QkumZa1TEXYIv/1AUp1a25Kwy6ONArvnyeVQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.0.tgz", + "integrity": "sha512-Dx7qH0/rvNNFmCcIRe1pyQ9/H0XO4v/f0SDoafwRYwc2J7bJZ5N4CHL/cdjamISZ5Cgnon6iazAVRFlxSoHQnQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.0.tgz", + "integrity": "sha512-GUdZKTeKBq9WmEBzvFYuC88yk26vT66lQV8D5+9TgkfbewhLaTHRNATyzpQwwbHIfJvDJ3N9WJ90wK/uR3cy3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.0.tgz", + "integrity": "sha512-ao58Adz/v14MWpQgYAb4a4h3fdw73DrDGtaiF7Opds5wNyEQwtO6M9dBh89nke0yoZzzaegq6J/EXs7eBebG8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.0.tgz", + "integrity": "sha512-kpFno46bHtjZVdRIOxqaGeiABiToo2J+st7Yce+aiAoo1H0xPi2keyQIP04n2JjDVuxBN6bSz9R6RdTK5hIppw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.0.tgz", + "integrity": "sha512-rFYrk4lLk9YUTIeihnQMiwMr6gDhGGSbWThPEDfBoU/HdAtOzPXeexKi7yU8jO+LWRKnmqPN9NviHQf6GDwBcQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.0.tgz", + "integrity": "sha512-sq0hHLTgdtwOPDB5SJOuaoHyiP1qSwg+71TQWk8iDS04bW1wIE0oQ6otPiRj2ZvLYNASLMaTp8QRGUVZ+5OL5A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tweenjs/tween.js": { + "version": "25.0.0", + "resolved": "https://registry.npmmirror.com/@tweenjs/tween.js/-/tween.js-25.0.0.tgz", + "integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stats.js": { + "version": "0.17.4", + "resolved": "https://registry.npmmirror.com/@types/stats.js/-/stats.js-0.17.4.tgz", + "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/three": { + "version": "0.170.0", + "resolved": "https://registry.npmmirror.com/@types/three/-/three-0.170.0.tgz", + "integrity": "sha512-CUm2uckq+zkCY7ZbFpviRttY+6f9fvwm6YqSqPfA5K22s9w7R4VnA3rzJse8kHVvuzLcTx+CjNCs2NYe0QFAyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tweenjs/tween.js": "~23.1.3", + "@types/stats.js": "*", + "@types/webxr": "*", + "@webgpu/types": "*", + "fflate": "~0.8.2", + "meshoptimizer": "~0.18.1" + } + }, + "node_modules/@types/three/node_modules/@tweenjs/tween.js": { + "version": "23.1.3", + "resolved": "https://registry.npmmirror.com/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/webxr": { + "version": "0.5.22", + "resolved": "https://registry.npmmirror.com/@types/webxr/-/webxr-0.5.22.tgz", + "integrity": "sha512-Vr6Stjv5jPRqH690f5I5GLjVk8GSsoQSYJ2FVd/3jJF7KaqfwPi3ehfBS96mlQ2kPCwZaX6U0rG2+NGHBKkA/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.19.tgz", + "integrity": "sha512-/afpyvlkrSNYbPo94Qu8GtIOWS+g5TRdOvs6XZNw6pWQQmj5pBgSZvEPOIZlqWq0YvoUhDDQaQ2TnzuJdOV4hA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.19", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.19.tgz", + "integrity": "sha512-Drs6rPHQZx/pN9S6ml3Z3K/TWCIRPvzG2B/o5kFK9X0MNHt8/E+38tiRfojufrYBfA6FQUFB2qBBRXlcSXWtOA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-core": "3.5.19", + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.19.tgz", + "integrity": "sha512-YWCm1CYaJ+2RvNmhCwI7t3I3nU+hOrWGWMsn+Z/kmm1jy5iinnVtlmkiZwbLlbV1SRizX7vHsc0/bG5dj0zRTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.19", + "@vue/compiler-dom": "3.5.19", + "@vue/compiler-ssr": "3.5.19", + "@vue/shared": "3.5.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.19.tgz", + "integrity": "sha512-/wx0VZtkWOPdiQLWPeQeqpHWR/LuNC7bHfSX7OayBTtUy8wur6vT6EQIX6Et86aED6J+y8tTw43qo2uoqGg5sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.19", + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.19.tgz", + "integrity": "sha512-4bueZg2qs5MSsK2dQk3sssV0cfvxb/QZntTC8v7J448GLgmfPkQ+27aDjlt40+XFqOwUq5yRxK5uQh14Fc9eVA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.19.tgz", + "integrity": "sha512-TaooCr8Hge1sWjLSyhdubnuofs3shhzZGfyD11gFolZrny76drPwBVQj28/z/4+msSFb18tOIg6VVVgf9/IbIA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.19", + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.19.tgz", + "integrity": "sha512-qmahqeok6ztuUTmV8lqd7N9ymbBzctNF885n8gL3xdCC1u2RnM/coX16Via0AiONQXUoYpxPojL3U1IsDgSWUQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.19", + "@vue/runtime-core": "3.5.19", + "@vue/shared": "3.5.19", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.19.tgz", + "integrity": "sha512-ZJ/zV9SQuaIO+BEEVq/2a6fipyrSYfjKMU3267bPUk+oTx/hZq3RzV7VCh0Unlppt39Bvh6+NzxeopIFv4HJNg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-ssr": "3.5.19", + "@vue/shared": "3.5.19" + }, + "peerDependencies": { + "vue": "3.5.19" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.19.tgz", + "integrity": "sha512-IhXCOn08wgKrLQxRFKKlSacWg4Goi1BolrdEeLYn6tgHjJNXVrWJ5nzoxZqNwl5p88aLlQ8LOaoMa3AYvaKJ/Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webgpu/types": { + "version": "0.1.64", + "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.1.64.tgz", + "integrity": "sha512-84kRIAGV46LJTlJZWxShiOrNL30A+9KokD7RB3dRCIqODFjodS5tCD5yyiZ8kIReGVZSDfA3XkkwyyOIF6K62A==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camera-controls": { + "version": "2.10.1", + "resolved": "https://registry.npmmirror.com/camera-controls/-/camera-controls-2.10.1.tgz", + "integrity": "sha512-KnaKdcvkBJ1Irbrzl8XD6WtZltkRjp869Jx8c0ujs9K+9WD+1D7ryBsCiVqJYUqt6i/HR5FxT7RLASieUD+Q5w==", + "license": "MIT", + "peerDependencies": { + "three": ">=0.126.1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmmirror.com/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "license": "MIT", + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.18", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.18.tgz", + "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmmirror.com/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/portfinder": { + "version": "1.0.37", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.37.tgz", + "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==", + "license": "MIT", + "dependencies": { + "async": "^3.2.6", + "debug": "^4.3.6" + }, + "engines": { + "node": ">= 10.12" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.48.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.48.0.tgz", + "integrity": "sha512-BXHRqK1vyt9XVSEHZ9y7xdYtuYbwVod2mLwOMFP7t/Eqoc1pHRlG/WdV2qNeNvZHRQdLedaFycljaYYM96RqJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.48.0", + "@rollup/rollup-android-arm64": "4.48.0", + "@rollup/rollup-darwin-arm64": "4.48.0", + "@rollup/rollup-darwin-x64": "4.48.0", + "@rollup/rollup-freebsd-arm64": "4.48.0", + "@rollup/rollup-freebsd-x64": "4.48.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.48.0", + "@rollup/rollup-linux-arm-musleabihf": "4.48.0", + "@rollup/rollup-linux-arm64-gnu": "4.48.0", + "@rollup/rollup-linux-arm64-musl": "4.48.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.48.0", + "@rollup/rollup-linux-ppc64-gnu": "4.48.0", + "@rollup/rollup-linux-riscv64-gnu": "4.48.0", + "@rollup/rollup-linux-riscv64-musl": "4.48.0", + "@rollup/rollup-linux-s390x-gnu": "4.48.0", + "@rollup/rollup-linux-x64-gnu": "4.48.0", + "@rollup/rollup-linux-x64-musl": "4.48.0", + "@rollup/rollup-win32-arm64-msvc": "4.48.0", + "@rollup/rollup-win32-ia32-msvc": "4.48.0", + "@rollup/rollup-win32-x64-msvc": "4.48.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", + "license": "MIT" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/three": { + "version": "0.170.0", + "resolved": "https://registry.npmmirror.com/three/-/three-0.170.0.tgz", + "integrity": "sha512-FQK+LEpYc0fBD+J8g6oSEyyNzjp+Q7Ks1C568WWaoMRLW+TkNNWmenWeGgJjV105Gd+p/2ql1ZcjYvNiPZBhuQ==", + "license": "MIT" + }, + "node_modules/three-bvh-csg": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/three-bvh-csg/-/three-bvh-csg-0.0.16.tgz", + "integrity": "sha512-RgC5dY0hAKdfd1bmD3o2CDfmK9GTkvsA1ECzoqTMhSkjSc2zp1z4Wpa5+emLi/EosF5P6+aK2veTxTLZA9+Mhw==", + "license": "MIT", + "peerDependencies": { + "three": ">=0.151.0", + "three-mesh-bvh": ">=0.6.6" + } + }, + "node_modules/three-mesh-bvh": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/three-mesh-bvh/-/three-mesh-bvh-0.8.3.tgz", + "integrity": "sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg==", + "license": "MIT", + "peerDependencies": { + "three": ">= 0.159.0" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.19", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.19.tgz", + "integrity": "sha512-ZRh0HTmw6KChRYWgN8Ox/wi7VhpuGlvMPrHjIsdRbzKNgECFLzy+dKL5z9yGaBSjCpmcfJCbh3I1tNSRmBz2tg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.19", + "@vue/compiler-sfc": "3.5.19", + "@vue/runtime-dom": "3.5.19", + "@vue/server-renderer": "3.5.19", + "@vue/shared": "3.5.19" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json index 20ab8af..29add50 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,10 @@ { - "name": "room3d", + "name": "server-room", "private": true, "version": "0.0.0", "type": "module", "scripts": { + "start": "http-server -p 8080 -c-1 .", "dev": "vite", "build": "tsc && vite build", "preview": "vite preview" @@ -17,6 +18,7 @@ "dependencies": { "@tweenjs/tween.js": "^25.0.0", "camera-controls": "^2.9.0", + "http-server": "^14.1.1", "three": "^0.170.0", "three-bvh-csg": "^0.0.16", "three-mesh-bvh": "^0.8.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 399aef6..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,801 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@tweenjs/tween.js': - specifier: ^25.0.0 - version: 25.0.0 - camera-controls: - specifier: ^2.9.0 - version: 2.9.0(three@0.170.0) - three: - specifier: ^0.170.0 - version: 0.170.0 - three-bvh-csg: - specifier: ^0.0.16 - version: 0.0.16(three-mesh-bvh@0.8.3(three@0.170.0))(three@0.170.0) - three-mesh-bvh: - specifier: ^0.8.3 - version: 0.8.3(three@0.170.0) - devDependencies: - '@types/three': - specifier: ^0.170.0 - version: 0.170.0 - '@vitejs/plugin-vue': - specifier: ^5.2.1 - version: 5.2.1(vite@5.4.11)(vue@3.5.13(typescript@5.6.3)) - typescript: - specifier: ~5.6.2 - version: 5.6.3 - vite: - specifier: ^5.4.10 - version: 5.4.11 - -packages: - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} - engines: {node: '>=6.9.0'} - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@rollup/rollup-android-arm-eabi@4.27.2': - resolution: {integrity: sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.27.2': - resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.27.2': - resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.27.2': - resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.27.2': - resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.27.2': - resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.27.2': - resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.27.2': - resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.27.2': - resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.27.2': - resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': - resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-gnu@4.27.2': - resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-s390x-gnu@4.27.2': - resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.27.2': - resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.27.2': - resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-win32-arm64-msvc@4.27.2': - resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.27.2': - resolution: {integrity: sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.27.2': - resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==} - cpu: [x64] - os: [win32] - - '@tweenjs/tween.js@23.1.3': - resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==} - - '@tweenjs/tween.js@25.0.0': - resolution: {integrity: sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/stats.js@0.17.3': - resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==} - - '@types/three@0.170.0': - resolution: {integrity: sha512-CUm2uckq+zkCY7ZbFpviRttY+6f9fvwm6YqSqPfA5K22s9w7R4VnA3rzJse8kHVvuzLcTx+CjNCs2NYe0QFAyg==} - - '@types/webxr@0.5.20': - resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} - - '@vitejs/plugin-vue@5.2.1': - resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} - engines: {node: ^18.0.0 || >=20.0.0} - peerDependencies: - vite: ^5.0.0 || ^6.0.0 - vue: ^3.2.25 - - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} - - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} - - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} - - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} - - '@vue/reactivity@3.5.13': - resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} - - '@vue/runtime-core@3.5.13': - resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} - - '@vue/runtime-dom@3.5.13': - resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} - - '@vue/server-renderer@3.5.13': - resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} - peerDependencies: - vue: 3.5.13 - - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - - '@webgpu/types@0.1.51': - resolution: {integrity: sha512-ktR3u64NPjwIViNCck+z9QeyN0iPkQCUOQ07ZCV1RzlkfP+olLTeEZ95O1QHS+v4w9vJeY9xj/uJuSphsHy5rQ==} - - camera-controls@2.9.0: - resolution: {integrity: sha512-TpCujnP0vqPppTXXJRYpvIy0xq9Tro6jQf2iYUxlDpPCNxkvE/XGaTuwIxnhINOkVP/ob2CRYXtY3iVYXeMEzA==} - peerDependencies: - three: '>=0.126.1' - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - magic-string@0.30.14: - resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} - - meshoptimizer@0.18.1: - resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} - - rollup@4.27.2: - resolution: {integrity: sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - three-bvh-csg@0.0.16: - resolution: {integrity: sha512-RgC5dY0hAKdfd1bmD3o2CDfmK9GTkvsA1ECzoqTMhSkjSc2zp1z4Wpa5+emLi/EosF5P6+aK2veTxTLZA9+Mhw==} - peerDependencies: - three: '>=0.151.0' - three-mesh-bvh: '>=0.6.6' - - three-mesh-bvh@0.8.3: - resolution: {integrity: sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg==} - peerDependencies: - three: '>= 0.159.0' - - three@0.170.0: - resolution: {integrity: sha512-FQK+LEpYc0fBD+J8g6oSEyyNzjp+Q7Ks1C568WWaoMRLW+TkNNWmenWeGgJjV105Gd+p/2ql1ZcjYvNiPZBhuQ==} - - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - - vite@5.4.11: - resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vue@3.5.13: - resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - -snapshots: - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/parser@7.26.2': - dependencies: - '@babel/types': 7.26.0 - - '@babel/types@7.26.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@rollup/rollup-android-arm-eabi@4.27.2': - optional: true - - '@rollup/rollup-android-arm64@4.27.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.27.2': - optional: true - - '@rollup/rollup-darwin-x64@4.27.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.27.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.27.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.27.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.27.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.27.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.27.2': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.27.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.27.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.27.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.27.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.27.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.27.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.27.2': - optional: true - - '@tweenjs/tween.js@23.1.3': {} - - '@tweenjs/tween.js@25.0.0': {} - - '@types/estree@1.0.6': {} - - '@types/stats.js@0.17.3': {} - - '@types/three@0.170.0': - dependencies: - '@tweenjs/tween.js': 23.1.3 - '@types/stats.js': 0.17.3 - '@types/webxr': 0.5.20 - '@webgpu/types': 0.1.51 - fflate: 0.8.2 - meshoptimizer: 0.18.1 - - '@types/webxr@0.5.20': {} - - '@vitejs/plugin-vue@5.2.1(vite@5.4.11)(vue@3.5.13(typescript@5.6.3))': - dependencies: - vite: 5.4.11 - vue: 3.5.13(typescript@5.6.3) - - '@vue/compiler-core@3.5.13': - dependencies: - '@babel/parser': 7.26.2 - '@vue/shared': 3.5.13 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.13': - dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 - - '@vue/compiler-sfc@3.5.13': - dependencies: - '@babel/parser': 7.26.2 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - estree-walker: 2.0.2 - magic-string: 0.30.14 - postcss: 8.4.49 - source-map-js: 1.2.1 - - '@vue/compiler-ssr@3.5.13': - dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 - - '@vue/reactivity@3.5.13': - dependencies: - '@vue/shared': 3.5.13 - - '@vue/runtime-core@3.5.13': - dependencies: - '@vue/reactivity': 3.5.13 - '@vue/shared': 3.5.13 - - '@vue/runtime-dom@3.5.13': - dependencies: - '@vue/reactivity': 3.5.13 - '@vue/runtime-core': 3.5.13 - '@vue/shared': 3.5.13 - csstype: 3.1.3 - - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.6.3))': - dependencies: - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.6.3) - - '@vue/shared@3.5.13': {} - - '@webgpu/types@0.1.51': {} - - camera-controls@2.9.0(three@0.170.0): - dependencies: - three: 0.170.0 - - csstype@3.1.3: {} - - entities@4.5.0: {} - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - estree-walker@2.0.2: {} - - fflate@0.8.2: {} - - fsevents@2.3.3: - optional: true - - magic-string@0.30.14: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - meshoptimizer@0.18.1: {} - - nanoid@3.3.7: {} - - picocolors@1.1.1: {} - - postcss@8.4.49: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - rollup@4.27.2: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.27.2 - '@rollup/rollup-android-arm64': 4.27.2 - '@rollup/rollup-darwin-arm64': 4.27.2 - '@rollup/rollup-darwin-x64': 4.27.2 - '@rollup/rollup-freebsd-arm64': 4.27.2 - '@rollup/rollup-freebsd-x64': 4.27.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.27.2 - '@rollup/rollup-linux-arm-musleabihf': 4.27.2 - '@rollup/rollup-linux-arm64-gnu': 4.27.2 - '@rollup/rollup-linux-arm64-musl': 4.27.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.27.2 - '@rollup/rollup-linux-riscv64-gnu': 4.27.2 - '@rollup/rollup-linux-s390x-gnu': 4.27.2 - '@rollup/rollup-linux-x64-gnu': 4.27.2 - '@rollup/rollup-linux-x64-musl': 4.27.2 - '@rollup/rollup-win32-arm64-msvc': 4.27.2 - '@rollup/rollup-win32-ia32-msvc': 4.27.2 - '@rollup/rollup-win32-x64-msvc': 4.27.2 - fsevents: 2.3.3 - - source-map-js@1.2.1: {} - - three-bvh-csg@0.0.16(three-mesh-bvh@0.8.3(three@0.170.0))(three@0.170.0): - dependencies: - three: 0.170.0 - three-mesh-bvh: 0.8.3(three@0.170.0) - - three-mesh-bvh@0.8.3(three@0.170.0): - dependencies: - three: 0.170.0 - - three@0.170.0: {} - - typescript@5.6.3: {} - - vite@5.4.11: - dependencies: - esbuild: 0.21.5 - postcss: 8.4.49 - rollup: 4.27.2 - optionalDependencies: - fsevents: 2.3.3 - - vue@3.5.13(typescript@5.6.3): - dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-sfc': 3.5.13 - '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.6.3)) - '@vue/shared': 3.5.13 - optionalDependencies: - typescript: 5.6.3 diff --git a/public/assets/door/door14-l.png b/public/assets/door/door14-l.png deleted file mode 100644 index ffafb2d..0000000 Binary files a/public/assets/door/door14-l.png and /dev/null differ diff --git a/public/assets/door/door14-r.png b/public/assets/door/door14-r.png deleted file mode 100644 index 7b55705..0000000 Binary files a/public/assets/door/door14-r.png and /dev/null differ diff --git a/public/assets/door/door15-l.jpg b/public/assets/door/door15-l.jpg deleted file mode 100644 index d83b2c7..0000000 Binary files a/public/assets/door/door15-l.jpg and /dev/null differ diff --git a/public/assets/door/door15-r.jpg b/public/assets/door/door15-r.jpg deleted file mode 100644 index 7ecda83..0000000 Binary files a/public/assets/door/door15-r.jpg and /dev/null differ diff --git a/public/assets/door/door2.jpg b/public/assets/door/door2.jpg deleted file mode 100644 index 824f683..0000000 Binary files a/public/assets/door/door2.jpg and /dev/null differ diff --git a/public/assets/jianzhu/dalou.mtl b/public/assets/jianzhu/dalou.mtl deleted file mode 100644 index c2f237b..0000000 --- a/public/assets/jianzhu/dalou.mtl +++ /dev/null @@ -1,54 +0,0 @@ -# 3ds Max Wavefront OBJ Exporter v0.94b - (c)2007 guruware -# �������ļ�:14.09.2017 11:23:33 - -newmtl Material__2596 - Ns 10.0000 - Ni 1.5000 - d 1.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 1 1 1 - Kd 0.5882 0.5882 0.5882 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka fangzi4-2.jpg - map_Kd fangzi4-2.jpg - -newmtl Material__2569 - Ns 10.0000 - Ni 1.5000 - d 1.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 1 1 1 - Kd 0.5882 0.5882 0.5882 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka fangzi4-4.jpg - map_Kd fangzi4-4.jpg - -newmtl Material__2593 - Ns 10.0000 - Ni 1.5000 - d 1.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 1 1 1 - Kd 0.5882 0.5882 0.5882 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka fangzi4-3.jpg - map_Kd fangzi4-3.jpg - -newmtl Material__2590 - Ns 10.0000 - Ni 1.5000 - d 1.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 1 1 1 - Kd 0.5882 0.5882 0.5882 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka fangzi4-1.jpg - map_Kd fangzi4-1.jpg diff --git a/public/assets/jianzhu/dalou.obj b/public/assets/jianzhu/dalou.obj deleted file mode 100644 index 2374873..0000000 --- a/public/assets/jianzhu/dalou.obj +++ /dev/null @@ -1,4286 +0,0 @@ -# 3ds Max Wavefront OBJ Exporter v0.94b - (c)2007 guruware -# ļ:14.09.2017 11:23:33 - -mtllib dalou.mtl - -# -# object fangzi4_2 -# - -v -79.9662 -71.7484 -119.2779 -v -79.9662 -71.7484 -156.1582 -v 236.4906 -71.7484 -156.1582 -v 236.4906 -71.7484 -119.2779 -v -73.5773 -59.5598 -150.3165 -v -73.5773 -59.5598 -156.1582 -v -79.9662 -59.5598 -156.1582 -v -73.5773 -59.5598 -119.2779 -v -79.9662 -59.5598 -119.2779 -v 236.4906 -66.7484 -119.2779 -v 229.6014 -66.7484 -119.2779 -v -73.5773 -66.7484 -119.2779 -v -79.9662 -66.7484 -119.2779 -v 236.4906 -66.7484 -156.1582 -v -79.9662 -66.7484 -156.1582 -v -73.5773 -66.7484 -156.1582 -v 229.6014 -66.7484 -156.1582 -v 236.4906 -59.5598 -119.2779 -v 236.4906 -59.5598 -156.1582 -v 229.6014 -59.5598 -156.1582 -v 229.6014 -59.5598 -150.3165 -v 229.6014 -59.5598 -119.2779 -v 229.6014 -66.7484 -150.3165 -v -73.5773 -66.7484 -150.3165 -v -79.9662 19.6372 -119.2779 -v -79.9662 19.6372 -156.1582 -v 236.4906 19.6372 -156.1582 -v 236.4906 19.6372 -119.2779 -v -73.5773 31.8258 -150.3165 -v -73.5773 31.8258 -156.1582 -v -79.9662 31.8258 -156.1582 -v -73.5773 31.8258 -119.2779 -v -79.9662 31.8258 -119.2779 -v 236.4906 24.6372 -119.2779 -v 229.6014 24.6372 -119.2779 -v -73.5773 24.6372 -119.2779 -v -79.9662 24.6372 -119.2779 -v 236.4906 24.6372 -156.1582 -v -79.9662 24.6372 -156.1582 -v -73.5773 24.6372 -156.1582 -v 229.6014 24.6372 -156.1582 -v 236.4906 31.8258 -119.2779 -v 236.4906 31.8258 -156.1582 -v 229.6014 31.8258 -156.1582 -v 229.6014 31.8258 -150.3165 -v 229.6014 31.8258 -119.2779 -v 229.6014 24.6372 -150.3165 -v -73.5773 24.6372 -150.3165 -v -78.9663 35.9217 -155.1582 -v -78.9663 35.9217 -119.2779 -v -78.9663 34.9217 -119.2779 -v -78.9663 34.9217 -155.1582 -v 236.4906 35.9217 -155.1582 -v 236.4906 34.9217 -155.1582 -v 236.4906 35.9217 -156.1582 -v 236.4906 34.9217 -156.1582 -v -79.9663 35.9217 -156.1582 -v -79.9663 34.9217 -156.1582 -v -79.9663 35.9217 -119.2779 -v -79.9663 34.9217 -119.2779 -v -78.9663 39.6922 -155.1582 -v -78.9663 39.6922 -119.2779 -v -78.9663 38.6922 -119.2779 -v -78.9663 38.6922 -155.1582 -v 236.4906 39.6922 -155.1582 -v 236.4906 38.6922 -155.1582 -v 236.4906 39.6922 -156.1582 -v 236.4906 38.6922 -156.1582 -v -79.9663 39.6922 -156.1582 -v -79.9663 38.6922 -156.1582 -v -79.9663 39.6922 -119.2779 -v -79.9663 38.6922 -119.2779 -v -78.9663 43.4628 -155.1582 -v -78.9663 43.4628 -119.2779 -v -78.9663 42.4628 -119.2779 -v -78.9663 42.4628 -155.1582 -v 236.4906 43.4628 -155.1582 -v 236.4906 42.4628 -155.1582 -v 236.4906 43.4628 -156.1582 -v 236.4906 42.4628 -156.1582 -v -79.9663 43.4628 -156.1582 -v -79.9663 42.4628 -156.1582 -v -79.9663 43.4628 -119.2779 -v -79.9663 42.4628 -119.2779 -v -78.9663 47.2333 -155.1582 -v -78.9663 47.2333 -119.2779 -v -78.9663 46.2333 -119.2779 -v -78.9663 46.2333 -155.1582 -v 236.4906 47.2333 -155.1582 -v 236.4906 46.2333 -155.1582 -v 236.4906 47.2333 -156.1582 -v 236.4906 46.2333 -156.1582 -v -79.9663 47.2333 -156.1582 -v -79.9663 46.2333 -156.1582 -v -79.9663 47.2333 -119.2779 -v -79.9663 46.2333 -119.2779 -v -78.9663 51.0039 -155.1582 -v -78.9663 51.0039 -119.2779 -v -78.9663 50.0039 -119.2779 -v -78.9663 50.0039 -155.1582 -v 236.4906 51.0039 -155.1582 -v 236.4906 50.0039 -155.1582 -v 236.4906 51.0039 -156.1582 -v 236.4906 50.0039 -156.1582 -v -79.9663 51.0039 -156.1582 -v -79.9663 50.0039 -156.1582 -v -79.9663 51.0039 -119.2779 -v -79.9663 50.0039 -119.2779 -v -78.9663 54.7745 -155.1582 -v -78.9663 54.7745 -119.2779 -v -78.9663 53.7745 -119.2779 -v -78.9663 53.7745 -155.1582 -v 236.4906 54.7745 -155.1582 -v 236.4906 53.7745 -155.1582 -v 236.4906 54.7745 -156.1582 -v 236.4906 53.7745 -156.1582 -v -79.9663 54.7745 -156.1582 -v -79.9663 53.7745 -156.1582 -v -79.9663 54.7745 -119.2779 -v -79.9663 53.7745 -119.2779 -v -78.9663 58.5450 -155.1582 -v -78.9663 58.5450 -119.2779 -v -78.9663 57.5450 -119.2779 -v -78.9663 57.5450 -155.1582 -v 236.4906 58.5450 -155.1582 -v 236.4906 57.5450 -155.1582 -v 236.4906 58.5450 -156.1582 -v 236.4906 57.5450 -156.1582 -v -79.9663 58.5450 -156.1582 -v -79.9663 57.5450 -156.1582 -v -79.9663 58.5450 -119.2779 -v -79.9663 57.5450 -119.2779 -v -78.9663 62.3156 -155.1582 -v -78.9663 62.3156 -119.2779 -v -78.9663 61.3156 -119.2779 -v -78.9663 61.3156 -155.1582 -v 236.4906 62.3156 -155.1582 -v 236.4906 61.3156 -155.1582 -v 236.4906 62.3156 -156.1582 -v 236.4906 61.3156 -156.1582 -v -79.9663 62.3156 -156.1582 -v -79.9663 61.3156 -156.1582 -v -79.9663 62.3156 -119.2779 -v -79.9663 61.3156 -119.2779 -v -78.0904 31.8258 -155.2502 -v -78.0904 31.8258 -156.0502 -v -77.2904 31.8258 -156.0502 -v -77.2904 31.8258 -155.2502 -v -78.0904 65.3300 -155.2502 -v -77.2904 65.3300 -155.2502 -v -77.2904 65.3300 -156.0502 -v -78.0904 65.3300 -156.0502 -v -40.6155 31.8258 -155.2502 -v -40.6155 31.8258 -156.0502 -v -39.8155 31.8258 -156.0502 -v -39.8155 31.8258 -155.2502 -v -40.6155 65.3300 -155.2502 -v -39.8155 65.3300 -155.2502 -v -39.8155 65.3300 -156.0502 -v -40.6155 65.3300 -156.0502 -v -3.1407 31.8258 -155.2502 -v -3.1407 31.8258 -156.0502 -v -2.3407 31.8258 -156.0502 -v -2.3407 31.8258 -155.2502 -v -3.1407 65.3300 -155.2502 -v -2.3407 65.3300 -155.2502 -v -2.3407 65.3300 -156.0502 -v -3.1407 65.3300 -156.0502 -v 34.3342 31.8258 -155.2502 -v 34.3342 31.8258 -156.0502 -v 35.1342 31.8258 -156.0502 -v 35.1342 31.8258 -155.2502 -v 34.3342 65.3300 -155.2502 -v 35.1342 65.3300 -155.2502 -v 35.1342 65.3300 -156.0502 -v 34.3342 65.3300 -156.0502 -v 71.8090 31.8258 -155.2502 -v 71.8090 31.8258 -156.0502 -v 72.6090 31.8258 -156.0502 -v 72.6090 31.8258 -155.2502 -v 71.8090 65.3300 -155.2502 -v 72.6090 65.3300 -155.2502 -v 72.6090 65.3300 -156.0502 -v 71.8090 65.3300 -156.0502 -v 109.2839 31.8258 -155.2502 -v 109.2839 31.8258 -156.0502 -v 110.0839 31.8258 -156.0502 -v 110.0839 31.8258 -155.2502 -v 109.2839 65.3300 -155.2502 -v 110.0839 65.3300 -155.2502 -v 110.0839 65.3300 -156.0502 -v 109.2839 65.3300 -156.0502 -v 146.7587 31.8258 -155.2502 -v 146.7587 31.8258 -156.0502 -v 147.5587 31.8258 -156.0502 -v 147.5587 31.8258 -155.2502 -v 146.7587 65.3300 -155.2502 -v 147.5587 65.3300 -155.2502 -v 147.5587 65.3300 -156.0502 -v 146.7587 65.3300 -156.0502 -v 184.2336 31.8258 -155.2502 -v 184.2336 31.8258 -156.0502 -v 185.0336 31.8258 -156.0502 -v 185.0336 31.8258 -155.2502 -v 184.2336 65.3300 -155.2502 -v 185.0336 65.3300 -155.2502 -v 185.0336 65.3300 -156.0502 -v 184.2336 65.3300 -156.0502 -v 221.7084 31.8258 -155.2502 -v 221.7084 31.8258 -156.0502 -v 222.5084 31.8258 -156.0502 -v 222.5084 31.8258 -155.2502 -v 221.7084 65.3300 -155.2502 -v 222.5084 65.3300 -155.2502 -v 222.5084 65.3300 -156.0502 -v 221.7084 65.3300 -156.0502 -v -79.8684 31.8258 -136.7342 -v -79.8684 31.8258 -137.5342 -v -79.0684 31.8258 -137.5342 -v -79.0684 31.8258 -136.7342 -v -79.8684 65.3300 -136.7342 -v -79.0684 65.3300 -136.7342 -v -79.0684 65.3300 -137.5342 -v -79.8684 65.3300 -137.5342 -v -79.8684 -13.8670 -136.7342 -v -79.8684 -13.8670 -137.5342 -v -79.0684 -13.8670 -137.5342 -v -79.0684 -13.8670 -136.7342 -v -79.8684 19.6372 -136.7342 -v -79.0684 19.6372 -136.7342 -v -79.0684 19.6372 -137.5342 -v -79.8684 19.6372 -137.5342 -v -79.9662 -26.0556 -119.2779 -v -79.9662 -26.0556 -156.1582 -v 236.4906 -26.0556 -156.1582 -v 236.4906 -26.0556 -119.2779 -v -73.5773 -13.8670 -150.3165 -v -73.5773 -13.8670 -156.1582 -v -79.9662 -13.8670 -156.1582 -v -73.5773 -13.8670 -119.2779 -v -79.9662 -13.8670 -119.2779 -v 236.4906 -21.0556 -119.2779 -v 229.6014 -21.0556 -119.2779 -v -73.5773 -21.0556 -119.2779 -v -79.9662 -21.0556 -119.2779 -v 236.4906 -21.0556 -156.1582 -v -79.9662 -21.0556 -156.1582 -v -73.5773 -21.0556 -156.1582 -v 229.6014 -21.0556 -156.1582 -v 236.4906 -13.8670 -119.2779 -v 236.4906 -13.8670 -156.1582 -v 229.6014 -13.8670 -156.1582 -v 229.6014 -13.8670 -150.3165 -v 229.6014 -13.8670 -119.2779 -v 229.6014 -21.0556 -150.3165 -v -73.5773 -21.0556 -150.3165 -v -78.9663 -9.7711 -155.1582 -v -78.9663 -9.7711 -119.2779 -v -78.9663 -10.7711 -119.2779 -v -78.9663 -10.7711 -155.1582 -v 236.4906 -9.7711 -155.1582 -v 236.4906 -10.7711 -155.1582 -v 236.4906 -9.7711 -156.1582 -v 236.4906 -10.7711 -156.1582 -v -79.9663 -9.7711 -156.1582 -v -79.9663 -10.7711 -156.1582 -v -79.9663 -9.7711 -119.2779 -v -79.9663 -10.7711 -119.2779 -v -78.9663 -6.0006 -155.1582 -v -78.9663 -6.0006 -119.2779 -v -78.9663 -7.0006 -119.2779 -v -78.9663 -7.0006 -155.1582 -v 236.4906 -6.0006 -155.1582 -v 236.4906 -7.0006 -155.1582 -v 236.4906 -6.0006 -156.1582 -v 236.4906 -7.0006 -156.1582 -v -79.9663 -6.0006 -156.1582 -v -79.9663 -7.0006 -156.1582 -v -79.9663 -6.0006 -119.2779 -v -79.9663 -7.0006 -119.2779 -v -78.9663 -2.2300 -155.1582 -v -78.9663 -2.2300 -119.2779 -v -78.9663 -3.2300 -119.2779 -v -78.9663 -3.2300 -155.1582 -v 236.4906 -2.2300 -155.1582 -v 236.4906 -3.2300 -155.1582 -v 236.4906 -2.2300 -156.1582 -v 236.4906 -3.2300 -156.1582 -v -79.9663 -2.2300 -156.1582 -v -79.9663 -3.2300 -156.1582 -v -79.9663 -2.2300 -119.2779 -v -79.9663 -3.2300 -119.2779 -v -78.9663 1.5405 -155.1582 -v -78.9663 1.5405 -119.2779 -v -78.9663 0.5405 -119.2779 -v -78.9663 0.5405 -155.1582 -v 236.4906 1.5405 -155.1582 -v 236.4906 0.5405 -155.1582 -v 236.4906 1.5405 -156.1582 -v 236.4906 0.5405 -156.1582 -v -79.9663 1.5405 -156.1582 -v -79.9663 0.5405 -156.1582 -v -79.9663 1.5405 -119.2779 -v -79.9663 0.5405 -119.2779 -v -78.9663 5.3111 -155.1582 -v -78.9663 5.3111 -119.2779 -v -78.9663 4.3111 -119.2779 -v -78.9663 4.3111 -155.1582 -v 236.4906 5.3111 -155.1582 -v 236.4906 4.3111 -155.1582 -v 236.4906 5.3111 -156.1582 -v 236.4906 4.3111 -156.1582 -v -79.9663 5.3111 -156.1582 -v -79.9663 4.3111 -156.1582 -v -79.9663 5.3111 -119.2779 -v -79.9663 4.3111 -119.2779 -v -78.9663 9.0816 -155.1582 -v -78.9663 9.0816 -119.2779 -v -78.9663 8.0816 -119.2779 -v -78.9663 8.0816 -155.1582 -v 236.4906 9.0816 -155.1582 -v 236.4906 8.0816 -155.1582 -v 236.4906 9.0816 -156.1582 -v 236.4906 8.0816 -156.1582 -v -79.9663 9.0816 -156.1582 -v -79.9663 8.0816 -156.1582 -v -79.9663 9.0816 -119.2779 -v -79.9663 8.0816 -119.2779 -v -78.9663 12.8522 -155.1582 -v -78.9663 12.8522 -119.2779 -v -78.9663 11.8522 -119.2779 -v -78.9663 11.8522 -155.1582 -v 236.4906 12.8522 -155.1582 -v 236.4906 11.8522 -155.1582 -v 236.4906 12.8522 -156.1582 -v 236.4906 11.8522 -156.1582 -v -79.9663 12.8522 -156.1582 -v -79.9663 11.8522 -156.1582 -v -79.9663 12.8522 -119.2779 -v -79.9663 11.8522 -119.2779 -v -78.9663 16.6228 -155.1582 -v -78.9663 16.6228 -119.2779 -v -78.9663 15.6228 -119.2779 -v -78.9663 15.6228 -155.1582 -v 236.4906 16.6228 -155.1582 -v 236.4906 15.6228 -155.1582 -v 236.4906 16.6228 -156.1582 -v 236.4906 15.6228 -156.1582 -v -79.9663 16.6228 -156.1582 -v -79.9663 15.6228 -156.1582 -v -79.9663 16.6228 -119.2779 -v -79.9663 15.6228 -119.2779 -v -78.0904 -13.8670 -155.2502 -v -78.0904 -13.8670 -156.0502 -v -77.2904 -13.8670 -156.0502 -v -77.2904 -13.8670 -155.2502 -v -78.0904 19.6372 -155.2502 -v -77.2904 19.6372 -155.2502 -v -77.2904 19.6372 -156.0502 -v -78.0904 19.6372 -156.0502 -v -40.6155 -13.8670 -155.2502 -v -40.6155 -13.8670 -156.0502 -v -39.8155 -13.8670 -156.0502 -v -39.8155 -13.8670 -155.2502 -v -40.6155 19.6372 -155.2502 -v -39.8155 19.6372 -155.2502 -v -39.8155 19.6372 -156.0502 -v -40.6155 19.6372 -156.0502 -v -3.1407 -13.8670 -155.2502 -v -3.1407 -13.8670 -156.0502 -v -2.3407 -13.8670 -156.0502 -v -2.3407 -13.8670 -155.2502 -v -3.1407 19.6372 -155.2502 -v -2.3407 19.6372 -155.2502 -v -2.3407 19.6372 -156.0502 -v -3.1407 19.6372 -156.0502 -v 34.3342 -13.8670 -155.2502 -v 34.3342 -13.8670 -156.0502 -v 35.1342 -13.8670 -156.0502 -v 35.1342 -13.8670 -155.2502 -v 34.3342 19.6372 -155.2502 -v 35.1342 19.6372 -155.2502 -v 35.1342 19.6372 -156.0502 -v 34.3342 19.6372 -156.0502 -v 71.8090 -13.8670 -155.2502 -v 71.8090 -13.8670 -156.0502 -v 72.6090 -13.8670 -156.0502 -v 72.6090 -13.8670 -155.2502 -v 71.8090 19.6372 -155.2502 -v 72.6090 19.6372 -155.2502 -v 72.6090 19.6372 -156.0502 -v 71.8090 19.6372 -156.0502 -v 109.2839 -13.8670 -155.2502 -v 109.2839 -13.8670 -156.0502 -v 110.0839 -13.8670 -156.0502 -v 110.0839 -13.8670 -155.2502 -v 109.2839 19.6372 -155.2502 -v 110.0839 19.6372 -155.2502 -v 110.0839 19.6372 -156.0502 -v 109.2839 19.6372 -156.0502 -v 146.7587 -13.8670 -155.2502 -v 146.7587 -13.8670 -156.0502 -v 147.5587 -13.8670 -156.0502 -v 147.5587 -13.8670 -155.2502 -v 146.7587 19.6372 -155.2502 -v 147.5587 19.6372 -155.2502 -v 147.5587 19.6372 -156.0502 -v 146.7587 19.6372 -156.0502 -v 184.2336 -13.8670 -155.2502 -v 184.2336 -13.8670 -156.0502 -v 185.0336 -13.8670 -156.0502 -v 185.0336 -13.8670 -155.2502 -v 184.2336 19.6372 -155.2502 -v 185.0336 19.6372 -155.2502 -v 185.0336 19.6372 -156.0502 -v 184.2336 19.6372 -156.0502 -v 221.7084 -13.8670 -155.2502 -v 221.7084 -13.8670 -156.0502 -v 222.5084 -13.8670 -156.0502 -v 222.5084 -13.8670 -155.2502 -v 221.7084 19.6372 -155.2502 -v 222.5084 19.6372 -155.2502 -v 222.5084 19.6372 -156.0502 -v 221.7084 19.6372 -156.0502 -v -79.8684 -59.5598 -136.7342 -v -79.8684 -59.5598 -137.5342 -v -79.0684 -59.5598 -137.5342 -v -79.0684 -59.5598 -136.7342 -v -79.8684 -26.0556 -136.7342 -v -79.0684 -26.0556 -136.7342 -v -79.0684 -26.0556 -137.5342 -v -79.8684 -26.0556 -137.5342 -v -78.9663 -55.4639 -155.1582 -v -78.9663 -55.4639 -119.2779 -v -78.9663 -56.4639 -119.2779 -v -78.9663 -56.4639 -155.1582 -v 236.4906 -55.4639 -155.1582 -v 236.4906 -56.4639 -155.1582 -v 236.4906 -55.4639 -156.1582 -v 236.4906 -56.4639 -156.1582 -v -79.9663 -55.4639 -156.1582 -v -79.9663 -56.4639 -156.1582 -v -79.9663 -55.4639 -119.2779 -v -79.9663 -56.4639 -119.2779 -v -78.9663 -51.6934 -155.1582 -v -78.9663 -51.6934 -119.2779 -v -78.9663 -52.6934 -119.2779 -v -78.9663 -52.6934 -155.1582 -v 236.4906 -51.6934 -155.1582 -v 236.4906 -52.6934 -155.1582 -v 236.4906 -51.6934 -156.1582 -v 236.4906 -52.6934 -156.1582 -v -79.9663 -51.6934 -156.1582 -v -79.9663 -52.6934 -156.1582 -v -79.9663 -51.6934 -119.2779 -v -79.9663 -52.6934 -119.2779 -v -78.9663 -47.9228 -155.1582 -v -78.9663 -47.9228 -119.2779 -v -78.9663 -48.9228 -119.2779 -v -78.9663 -48.9228 -155.1582 -v 236.4906 -47.9228 -155.1582 -v 236.4906 -48.9228 -155.1582 -v 236.4906 -47.9228 -156.1582 -v 236.4906 -48.9228 -156.1582 -v -79.9663 -47.9228 -156.1582 -v -79.9663 -48.9228 -156.1582 -v -79.9663 -47.9228 -119.2779 -v -79.9663 -48.9228 -119.2779 -v -78.9663 -44.1523 -155.1582 -v -78.9663 -44.1523 -119.2779 -v -78.9663 -45.1523 -119.2779 -v -78.9663 -45.1523 -155.1582 -v 236.4906 -44.1523 -155.1582 -v 236.4906 -45.1523 -155.1582 -v 236.4906 -44.1523 -156.1582 -v 236.4906 -45.1523 -156.1582 -v -79.9663 -44.1523 -156.1582 -v -79.9663 -45.1523 -156.1582 -v -79.9663 -44.1523 -119.2779 -v -79.9663 -45.1523 -119.2779 -v -78.9663 -40.3817 -155.1582 -v -78.9663 -40.3817 -119.2779 -v -78.9663 -41.3817 -119.2779 -v -78.9663 -41.3817 -155.1582 -v 236.4906 -40.3817 -155.1582 -v 236.4906 -41.3817 -155.1582 -v 236.4906 -40.3817 -156.1582 -v 236.4906 -41.3817 -156.1582 -v -79.9663 -40.3817 -156.1582 -v -79.9663 -41.3817 -156.1582 -v -79.9663 -40.3817 -119.2779 -v -79.9663 -41.3817 -119.2779 -v -78.9663 -36.6112 -155.1582 -v -78.9663 -36.6112 -119.2779 -v -78.9663 -37.6112 -119.2779 -v -78.9663 -37.6112 -155.1582 -v 236.4906 -36.6112 -155.1582 -v 236.4906 -37.6112 -155.1582 -v 236.4906 -36.6112 -156.1582 -v 236.4906 -37.6112 -156.1582 -v -79.9663 -36.6112 -156.1582 -v -79.9663 -37.6112 -156.1582 -v -79.9663 -36.6112 -119.2779 -v -79.9663 -37.6112 -119.2779 -v -78.9663 -32.8406 -155.1582 -v -78.9663 -32.8406 -119.2779 -v -78.9663 -33.8406 -119.2779 -v -78.9663 -33.8406 -155.1582 -v 236.4906 -32.8406 -155.1582 -v 236.4906 -33.8406 -155.1582 -v 236.4906 -32.8406 -156.1582 -v 236.4906 -33.8406 -156.1582 -v -79.9663 -32.8406 -156.1582 -v -79.9663 -33.8406 -156.1582 -v -79.9663 -32.8406 -119.2779 -v -79.9663 -33.8406 -119.2779 -v -78.9663 -29.0700 -155.1582 -v -78.9663 -29.0700 -119.2779 -v -78.9663 -30.0700 -119.2779 -v -78.9663 -30.0700 -155.1582 -v 236.4906 -29.0700 -155.1582 -v 236.4906 -30.0700 -155.1582 -v 236.4906 -29.0700 -156.1582 -v 236.4906 -30.0700 -156.1582 -v -79.9663 -29.0700 -156.1582 -v -79.9663 -30.0700 -156.1582 -v -79.9663 -29.0700 -119.2779 -v -79.9663 -30.0700 -119.2779 -v -78.0904 -59.5598 -155.2502 -v -78.0904 -59.5598 -156.0502 -v -77.2904 -59.5598 -156.0502 -v -77.2904 -59.5598 -155.2502 -v -78.0904 -26.0556 -155.2502 -v -77.2904 -26.0556 -155.2502 -v -77.2904 -26.0556 -156.0502 -v -78.0904 -26.0556 -156.0502 -v -40.6155 -59.5598 -155.2502 -v -40.6155 -59.5598 -156.0502 -v -39.8155 -59.5598 -156.0502 -v -39.8155 -59.5598 -155.2502 -v -40.6155 -26.0556 -155.2502 -v -39.8155 -26.0556 -155.2502 -v -39.8155 -26.0556 -156.0502 -v -40.6155 -26.0556 -156.0502 -v -3.1407 -59.5598 -155.2502 -v -3.1407 -59.5598 -156.0502 -v -2.3407 -59.5598 -156.0502 -v -2.3407 -59.5598 -155.2502 -v -3.1407 -26.0556 -155.2502 -v -2.3407 -26.0556 -155.2502 -v -2.3407 -26.0556 -156.0502 -v -3.1407 -26.0556 -156.0502 -v 34.3342 -59.5598 -155.2502 -v 34.3342 -59.5598 -156.0502 -v 35.1342 -59.5598 -156.0502 -v 35.1342 -59.5598 -155.2502 -v 34.3342 -26.0556 -155.2502 -v 35.1342 -26.0556 -155.2502 -v 35.1342 -26.0556 -156.0502 -v 34.3342 -26.0556 -156.0502 -v 71.8090 -59.5598 -155.2502 -v 71.8090 -59.5598 -156.0502 -v 72.6090 -59.5598 -156.0502 -v 72.6090 -59.5598 -155.2502 -v 71.8090 -26.0556 -155.2502 -v 72.6090 -26.0556 -155.2502 -v 72.6090 -26.0556 -156.0502 -v 71.8090 -26.0556 -156.0502 -v 109.2839 -59.5598 -155.2502 -v 109.2839 -59.5598 -156.0502 -v 110.0839 -59.5598 -156.0502 -v 110.0839 -59.5598 -155.2502 -v 109.2839 -26.0556 -155.2502 -v 110.0839 -26.0556 -155.2502 -v 110.0839 -26.0556 -156.0502 -v 109.2839 -26.0556 -156.0502 -v 146.7587 -59.5598 -155.2502 -v 146.7587 -59.5598 -156.0502 -v 147.5587 -59.5598 -156.0502 -v 147.5587 -59.5598 -155.2502 -v 146.7587 -26.0556 -155.2502 -v 147.5587 -26.0556 -155.2502 -v 147.5587 -26.0556 -156.0502 -v 146.7587 -26.0556 -156.0502 -v 184.2336 -59.5598 -155.2502 -v 184.2336 -59.5598 -156.0502 -v 185.0336 -59.5598 -156.0502 -v 185.0336 -59.5598 -155.2502 -v 184.2336 -26.0556 -155.2502 -v 185.0336 -26.0556 -155.2502 -v 185.0336 -26.0556 -156.0502 -v 184.2336 -26.0556 -156.0502 -v 221.7084 -59.5598 -155.2502 -v 221.7084 -59.5598 -156.0502 -v 222.5084 -59.5598 -156.0502 -v 222.5084 -59.5598 -155.2502 -v 221.7084 -26.0556 -155.2502 -v 222.5084 -26.0556 -155.2502 -v 222.5084 -26.0556 -156.0502 -v 221.7084 -26.0556 -156.0502 -# 600 vertices - -vn 0.0000 -1.0000 -0.0000 -vn -0.0000 1.0000 -0.0000 -vn 0.0000 1.0000 -0.0000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -# 9 vertex normals - -vt 0.0100 0.8156 0.0000 -vt 0.0303 0.8156 0.0000 -vt 0.0303 0.9900 0.0000 -vt 0.0100 0.9900 0.0000 -vt 0.0586 0.4389 0.0000 -vt 0.0586 0.4421 0.0000 -vt 0.0551 0.4421 0.0000 -vt 0.0586 0.4218 0.0000 -vt 0.0551 0.4218 0.0000 -vt 0.1399 0.8156 0.0000 -vt 0.1399 0.9900 0.0000 -vt 0.1371 0.9900 0.0000 -vt 0.1371 0.9862 0.0000 -vt 0.1371 0.8192 0.0000 -vt 0.1371 0.8156 0.0000 -vt 0.1988 0.8456 0.0000 -vt 0.1988 0.8660 0.0000 -vt 0.1961 0.8660 0.0000 -vt 0.1961 0.8456 0.0000 -vt 0.1623 0.8156 0.0000 -vt 0.1623 0.9900 0.0000 -vt 0.1595 0.9900 0.0000 -vt 0.1595 0.9865 0.0000 -vt 0.1595 0.8194 0.0000 -vt 0.1595 0.8156 0.0000 -vt 0.1988 0.8705 0.0000 -vt 0.1988 0.8908 0.0000 -vt 0.1961 0.8908 0.0000 -vt 0.1961 0.8705 0.0000 -vt 0.2295 0.4218 0.0000 -vt 0.2295 0.4421 0.0000 -vt 0.2257 0.4421 0.0000 -vt 0.2257 0.4389 0.0000 -vt 0.2257 0.4218 0.0000 -vt 0.0951 0.9900 0.0000 -vt 0.0780 0.9900 0.0000 -vt 0.0780 0.8229 0.0000 -vt 0.0951 0.8229 0.0000 -vt 0.1332 0.8192 0.0000 -vt 0.1332 0.8156 0.0000 -vt 0.1707 0.8014 0.0000 -vt 0.1707 0.8185 0.0000 -vt 0.1668 0.8185 0.0000 -vt 0.1668 0.8014 0.0000 -vt 0.1792 0.8229 0.0000 -vt 0.1792 0.9900 0.0000 -vt 0.1752 0.9900 0.0000 -vt 0.1752 0.8229 0.0000 -vt 0.0604 0.8014 0.0000 -vt 0.0604 0.8185 0.0000 -vt 0.0564 0.8185 0.0000 -vt 0.0564 0.8014 0.0000 -vt 0.1332 0.9900 0.0000 -vt 0.1332 0.9862 0.0000 -vt 0.1921 0.8660 0.0000 -vt 0.1921 0.8456 0.0000 -vt 0.1556 0.8194 0.0000 -vt 0.1556 0.8156 0.0000 -vt 0.1556 0.9865 0.0000 -vt 0.1556 0.9900 0.0000 -vt 0.1921 0.8908 0.0000 -vt 0.1921 0.8705 0.0000 -vt 0.2427 0.4086 0.0000 -vt 0.2427 0.3883 0.0000 -vt 0.4170 0.3883 0.0000 -vt 0.4170 0.4086 0.0000 -vt 0.4338 0.3383 0.0000 -vt 0.4338 0.3415 0.0000 -vt 0.4302 0.3415 0.0000 -vt 0.4338 0.3212 0.0000 -vt 0.4302 0.3212 0.0000 -vt 0.1287 0.8156 0.0000 -vt 0.1287 0.9900 0.0000 -vt 0.1259 0.9900 0.0000 -vt 0.1259 0.9862 0.0000 -vt 0.1259 0.8192 0.0000 -vt 0.1259 0.8156 0.0000 -vt 0.1988 0.9201 0.0000 -vt 0.1988 0.9404 0.0000 -vt 0.1961 0.9404 0.0000 -vt 0.1961 0.9201 0.0000 -vt 0.1175 0.8156 0.0000 -vt 0.1175 0.9900 0.0000 -vt 0.1147 0.9900 0.0000 -vt 0.1147 0.9865 0.0000 -vt 0.1147 0.8194 0.0000 -vt 0.1147 0.8156 0.0000 -vt 0.1988 0.9449 0.0000 -vt 0.1988 0.9652 0.0000 -vt 0.1961 0.9652 0.0000 -vt 0.1961 0.9449 0.0000 -vt 0.6046 0.3212 0.0000 -vt 0.6046 0.3415 0.0000 -vt 0.6008 0.3415 0.0000 -vt 0.6008 0.3383 0.0000 -vt 0.6008 0.3212 0.0000 -vt 0.0519 0.9900 0.0000 -vt 0.0348 0.9900 0.0000 -vt 0.0348 0.8229 0.0000 -vt 0.0519 0.8229 0.0000 -vt 0.1220 0.8192 0.0000 -vt 0.1220 0.8156 0.0000 -vt 0.0388 0.8014 0.0000 -vt 0.0388 0.8185 0.0000 -vt 0.0348 0.8185 0.0000 -vt 0.0348 0.8014 0.0000 -vt 0.1876 0.8229 0.0000 -vt 0.1876 0.9900 0.0000 -vt 0.1837 0.9900 0.0000 -vt 0.1837 0.8229 0.0000 -vt 0.1876 0.8014 0.0000 -vt 0.1876 0.8185 0.0000 -vt 0.1837 0.8185 0.0000 -vt 0.1837 0.8014 0.0000 -vt 0.1220 0.9900 0.0000 -vt 0.1220 0.9862 0.0000 -vt 0.1921 0.9404 0.0000 -vt 0.1921 0.9201 0.0000 -vt 0.1108 0.8194 0.0000 -vt 0.1108 0.8156 0.0000 -vt 0.1108 0.9865 0.0000 -vt 0.1108 0.9900 0.0000 -vt 0.1921 0.9652 0.0000 -vt 0.1921 0.9449 0.0000 -vt 0.0419 0.3278 0.0000 -vt 0.0221 0.3278 0.0000 -vt 0.0221 0.3272 0.0000 -vt 0.0419 0.3272 0.0000 -vt 0.7922 0.2056 0.0000 -vt 0.6184 0.2056 0.0000 -vt 0.6184 0.2051 0.0000 -vt 0.7922 0.2051 0.0000 -vt 0.0386 0.2051 0.0000 -vt 0.0391 0.2051 0.0000 -vt 0.0391 0.2056 0.0000 -vt 0.0386 0.2056 0.0000 -vt 0.2295 0.2745 0.0000 -vt 0.0551 0.2745 0.0000 -vt 0.0551 0.2739 0.0000 -vt 0.2295 0.2739 0.0000 -vt 0.1573 0.4303 0.0000 -vt 0.1370 0.4303 0.0000 -vt 0.1370 0.4297 0.0000 -vt 0.1573 0.4297 0.0000 -vt 0.5783 0.3297 0.0000 -vt 0.5783 0.3291 0.0000 -vt 0.5789 0.3291 0.0000 -vt 0.5789 0.3297 0.0000 -vt 0.6046 0.6565 0.0000 -vt 0.6046 0.6571 0.0000 -vt 0.4308 0.6571 0.0000 -vt 0.4302 0.6565 0.0000 -vt 0.4308 0.6768 0.0000 -vt 0.4302 0.6768 0.0000 -vt 0.2427 0.6768 0.0000 -vt 0.2427 0.6565 0.0000 -vt 0.2432 0.6565 0.0000 -vt 0.2432 0.6763 0.0000 -vt 0.4170 0.6763 0.0000 -vt 0.4170 0.6768 0.0000 -vt 0.0419 0.6768 0.0000 -vt 0.0221 0.6768 0.0000 -vt 0.0221 0.6763 0.0000 -vt 0.0419 0.6763 0.0000 -vt 0.6052 0.1781 0.0000 -vt 0.4313 0.1781 0.0000 -vt 0.4313 0.1776 0.0000 -vt 0.6052 0.1776 0.0000 -vt 0.5833 0.3297 0.0000 -vt 0.5833 0.3291 0.0000 -vt 0.5838 0.3291 0.0000 -vt 0.5838 0.3297 0.0000 -vt 0.4170 0.3415 0.0000 -vt 0.2427 0.3415 0.0000 -vt 0.2427 0.3410 0.0000 -vt 0.4170 0.3410 0.0000 -vt 0.7201 0.2961 0.0000 -vt 0.6998 0.2961 0.0000 -vt 0.6998 0.2956 0.0000 -vt 0.7201 0.2956 0.0000 -vt 0.4738 0.3297 0.0000 -vt 0.4738 0.3291 0.0000 -vt 0.4744 0.3291 0.0000 -vt 0.4744 0.3297 0.0000 -vt 0.2295 0.6901 0.0000 -vt 0.2295 0.6906 0.0000 -vt 0.0556 0.6906 0.0000 -vt 0.0551 0.6901 0.0000 -vt 0.0556 0.7104 0.0000 -vt 0.0551 0.7104 0.0000 -vt 0.6178 0.5427 0.0000 -vt 0.6178 0.5224 0.0000 -vt 0.6184 0.5224 0.0000 -vt 0.6184 0.5422 0.0000 -vt 0.7922 0.5422 0.0000 -vt 0.7922 0.5427 0.0000 -vt 0.0419 0.6098 0.0000 -vt 0.0221 0.6098 0.0000 -vt 0.0221 0.6092 0.0000 -vt 0.0419 0.6092 0.0000 -vt 0.6052 0.2194 0.0000 -vt 0.4313 0.2194 0.0000 -vt 0.4313 0.2189 0.0000 -vt 0.6052 0.2189 0.0000 -vt 0.5882 0.3297 0.0000 -vt 0.5882 0.3291 0.0000 -vt 0.5888 0.3291 0.0000 -vt 0.5888 0.3297 0.0000 -vt 0.2295 0.3751 0.0000 -vt 0.0551 0.3751 0.0000 -vt 0.0551 0.3745 0.0000 -vt 0.2295 0.3745 0.0000 -vt 0.4595 0.3297 0.0000 -vt 0.4392 0.3297 0.0000 -vt 0.4392 0.3291 0.0000 -vt 0.4595 0.3291 0.0000 -vt 0.6515 0.2961 0.0000 -vt 0.6515 0.2956 0.0000 -vt 0.6520 0.2956 0.0000 -vt 0.6520 0.2961 0.0000 -vt 0.6046 0.5559 0.0000 -vt 0.6046 0.5565 0.0000 -vt 0.4308 0.5565 0.0000 -vt 0.4302 0.5559 0.0000 -vt 0.4308 0.5762 0.0000 -vt 0.4302 0.5762 0.0000 -vt 0.2427 0.5762 0.0000 -vt 0.2427 0.5559 0.0000 -vt 0.2432 0.5559 0.0000 -vt 0.2432 0.5757 0.0000 -vt 0.4170 0.5757 0.0000 -vt 0.4170 0.5762 0.0000 -vt 0.0419 0.5092 0.0000 -vt 0.0221 0.5092 0.0000 -vt 0.0221 0.5086 0.0000 -vt 0.0419 0.5086 0.0000 -vt 0.7922 0.1644 0.0000 -vt 0.6184 0.1644 0.0000 -vt 0.6184 0.1638 0.0000 -vt 0.7922 0.1638 0.0000 -vt 0.7659 0.2961 0.0000 -vt 0.7659 0.2956 0.0000 -vt 0.7665 0.2956 0.0000 -vt 0.7665 0.2961 0.0000 -vt 0.7922 0.2469 0.0000 -vt 0.6178 0.2469 0.0000 -vt 0.6178 0.2464 0.0000 -vt 0.7922 0.2464 0.0000 -vt 0.5325 0.3297 0.0000 -vt 0.5122 0.3297 0.0000 -vt 0.5122 0.3291 0.0000 -vt 0.5325 0.3291 0.0000 -vt 0.6564 0.2961 0.0000 -vt 0.6564 0.2956 0.0000 -vt 0.6570 0.2956 0.0000 -vt 0.6570 0.2961 0.0000 -vt 0.2295 0.5895 0.0000 -vt 0.2295 0.5900 0.0000 -vt 0.0556 0.5900 0.0000 -vt 0.0551 0.5895 0.0000 -vt 0.0556 0.6098 0.0000 -vt 0.0551 0.6098 0.0000 -vt 0.6178 0.4421 0.0000 -vt 0.6178 0.4218 0.0000 -vt 0.6184 0.4218 0.0000 -vt 0.6184 0.4416 0.0000 -vt 0.7922 0.4416 0.0000 -vt 0.7922 0.4421 0.0000 -vt 0.0419 0.4756 0.0000 -vt 0.0221 0.4756 0.0000 -vt 0.0221 0.4751 0.0000 -vt 0.0419 0.4751 0.0000 -vt 0.7922 0.2194 0.0000 -vt 0.6184 0.2194 0.0000 -vt 0.6184 0.2189 0.0000 -vt 0.7922 0.2189 0.0000 -vt 0.6041 0.2799 0.0000 -vt 0.6046 0.2799 0.0000 -vt 0.6046 0.2805 0.0000 -vt 0.6041 0.2805 0.0000 -vt 0.7922 0.2332 0.0000 -vt 0.6178 0.2332 0.0000 -vt 0.6178 0.2326 0.0000 -vt 0.7922 0.2326 0.0000 -vt 0.4595 0.3217 0.0000 -vt 0.4392 0.3217 0.0000 -vt 0.4392 0.3212 0.0000 -vt 0.4595 0.3212 0.0000 -vt 0.0435 0.1913 0.0000 -vt 0.0441 0.1913 0.0000 -vt 0.0441 0.1919 0.0000 -vt 0.0435 0.1919 0.0000 -vt 0.6046 0.4553 0.0000 -vt 0.6046 0.4559 0.0000 -vt 0.4308 0.4559 0.0000 -vt 0.4302 0.4553 0.0000 -vt 0.4308 0.4756 0.0000 -vt 0.4302 0.4756 0.0000 -vt 0.2427 0.4756 0.0000 -vt 0.2427 0.4553 0.0000 -vt 0.2432 0.4553 0.0000 -vt 0.2432 0.4751 0.0000 -vt 0.4170 0.4751 0.0000 -vt 0.4170 0.4756 0.0000 -vt 0.0419 0.3415 0.0000 -vt 0.0221 0.3415 0.0000 -vt 0.0221 0.3410 0.0000 -vt 0.0419 0.3410 0.0000 -vt 0.4181 0.2056 0.0000 -vt 0.2443 0.2056 0.0000 -vt 0.2443 0.2051 0.0000 -vt 0.4181 0.2051 0.0000 -vt 0.2240 0.3805 0.0000 -vt 0.2245 0.3805 0.0000 -vt 0.2245 0.3811 0.0000 -vt 0.2240 0.3811 0.0000 -vt 0.4170 0.3080 0.0000 -vt 0.2427 0.3080 0.0000 -vt 0.2427 0.3074 0.0000 -vt 0.4170 0.3074 0.0000 -vt 0.4842 0.3217 0.0000 -vt 0.4639 0.3217 0.0000 -vt 0.4639 0.3212 0.0000 -vt 0.4842 0.3212 0.0000 -vt 0.2240 0.3134 0.0000 -vt 0.2245 0.3134 0.0000 -vt 0.2245 0.3140 0.0000 -vt 0.2240 0.3140 0.0000 -vt 0.2295 0.4889 0.0000 -vt 0.2295 0.4894 0.0000 -vt 0.0556 0.4894 0.0000 -vt 0.0551 0.4889 0.0000 -vt 0.0556 0.5092 0.0000 -vt 0.0551 0.5092 0.0000 -vt 0.6178 0.3415 0.0000 -vt 0.6178 0.3212 0.0000 -vt 0.6184 0.3212 0.0000 -vt 0.6184 0.3410 0.0000 -vt 0.7922 0.3410 0.0000 -vt 0.7922 0.3415 0.0000 -vt 0.0424 0.2607 0.0000 -vt 0.0227 0.2607 0.0000 -vt 0.0227 0.2601 0.0000 -vt 0.0424 0.2601 0.0000 -vt 0.4181 0.1781 0.0000 -vt 0.2443 0.1781 0.0000 -vt 0.2443 0.1776 0.0000 -vt 0.4181 0.1776 0.0000 -vt 0.1784 0.1363 0.0000 -vt 0.1789 0.1363 0.0000 -vt 0.1789 0.1368 0.0000 -vt 0.1784 0.1368 0.0000 -vt 0.2295 0.4086 0.0000 -vt 0.0551 0.4086 0.0000 -vt 0.0551 0.4080 0.0000 -vt 0.2295 0.4080 0.0000 -vt 0.5078 0.3297 0.0000 -vt 0.4875 0.3297 0.0000 -vt 0.4875 0.3291 0.0000 -vt 0.5078 0.3291 0.0000 -vt 0.3948 0.0279 0.0000 -vt 0.3954 0.0279 0.0000 -vt 0.3954 0.0285 0.0000 -vt 0.3948 0.0285 0.0000 -vt 0.2295 0.4553 0.0000 -vt 0.2295 0.4559 0.0000 -vt 0.0556 0.4559 0.0000 -vt 0.0551 0.4553 0.0000 -vt 0.0556 0.4756 0.0000 -vt 0.0551 0.4756 0.0000 -vt 0.4302 0.4421 0.0000 -vt 0.4302 0.4218 0.0000 -vt 0.4308 0.4218 0.0000 -vt 0.4308 0.4416 0.0000 -vt 0.6046 0.4416 0.0000 -vt 0.6046 0.4421 0.0000 -vt 0.0441 0.2194 0.0000 -vt 0.0243 0.2194 0.0000 -vt 0.0243 0.2189 0.0000 -vt 0.0441 0.2189 0.0000 -vt 0.4181 0.2194 0.0000 -vt 0.2443 0.2194 0.0000 -vt 0.2443 0.2189 0.0000 -vt 0.4181 0.2189 0.0000 -vt 0.2131 0.4303 0.0000 -vt 0.2131 0.4297 0.0000 -vt 0.2136 0.4297 0.0000 -vt 0.2136 0.4303 0.0000 -vt 0.6046 0.2942 0.0000 -vt 0.4302 0.2942 0.0000 -vt 0.4302 0.2937 0.0000 -vt 0.6046 0.2937 0.0000 -vt 0.6471 0.2882 0.0000 -vt 0.6268 0.2882 0.0000 -vt 0.6268 0.2877 0.0000 -vt 0.6471 0.2877 0.0000 -vt 0.2032 0.4303 0.0000 -vt 0.2032 0.4297 0.0000 -vt 0.2037 0.4297 0.0000 -vt 0.2037 0.4303 0.0000 -vt 0.7922 0.3883 0.0000 -vt 0.7922 0.3888 0.0000 -vt 0.6184 0.3888 0.0000 -vt 0.6178 0.3883 0.0000 -vt 0.6184 0.4086 0.0000 -vt 0.6178 0.4086 0.0000 -vt 0.2427 0.5092 0.0000 -vt 0.2427 0.4889 0.0000 -vt 0.2432 0.4889 0.0000 -vt 0.2432 0.5086 0.0000 -vt 0.4170 0.5086 0.0000 -vt 0.4170 0.5092 0.0000 -vt 0.2195 0.3806 0.0000 -vt 0.2195 0.3811 0.0000 -vt 0.2191 0.3811 0.0000 -vt 0.2191 0.3806 0.0000 -vt 0.2822 0.0827 0.0000 -vt 0.2817 0.0827 0.0000 -vt 0.2817 0.0822 0.0000 -vt 0.2822 0.0822 0.0000 -vt 0.2511 0.1364 0.0000 -vt 0.2511 0.1368 0.0000 -vt 0.2326 0.1368 0.0000 -vt 0.2326 0.1364 0.0000 -vt 0.7561 0.1364 0.0000 -vt 0.7561 0.1368 0.0000 -vt 0.7377 0.1368 0.0000 -vt 0.7377 0.1364 0.0000 -vt 0.5397 0.0822 0.0000 -vt 0.5397 0.0827 0.0000 -vt 0.5212 0.0827 0.0000 -vt 0.5212 0.0822 0.0000 -vt 0.5757 0.1003 0.0000 -vt 0.5757 0.1007 0.0000 -vt 0.5573 0.1007 0.0000 -vt 0.5573 0.1003 0.0000 -vt 0.2871 0.0773 0.0000 -vt 0.2871 0.0777 0.0000 -vt 0.2867 0.0777 0.0000 -vt 0.2867 0.0773 0.0000 -vt 0.2262 0.1781 0.0000 -vt 0.2257 0.1781 0.0000 -vt 0.2257 0.1777 0.0000 -vt 0.2262 0.1777 0.0000 -vt 0.4314 0.0100 0.0000 -vt 0.4314 0.0104 0.0000 -vt 0.4130 0.0104 0.0000 -vt 0.4130 0.0100 0.0000 -vt 0.7561 0.1003 0.0000 -vt 0.7561 0.1007 0.0000 -vt 0.7377 0.1007 0.0000 -vt 0.7377 0.1003 0.0000 -vt 0.4314 0.1364 0.0000 -vt 0.4314 0.1368 0.0000 -vt 0.4130 0.1368 0.0000 -vt 0.4130 0.1364 0.0000 -vt 0.7200 0.0281 0.0000 -vt 0.7200 0.0285 0.0000 -vt 0.7016 0.0285 0.0000 -vt 0.7016 0.0281 0.0000 -vt 0.1617 0.4297 0.0000 -vt 0.1622 0.4297 0.0000 -vt 0.1622 0.4301 0.0000 -vt 0.1617 0.4301 0.0000 -vt 0.5422 0.3291 0.0000 -vt 0.5422 0.3296 0.0000 -vt 0.5417 0.3296 0.0000 -vt 0.5417 0.3291 0.0000 -vt 0.2871 0.1003 0.0000 -vt 0.2871 0.1007 0.0000 -vt 0.2687 0.1007 0.0000 -vt 0.2687 0.1003 0.0000 -vt 0.6479 0.1364 0.0000 -vt 0.6479 0.1368 0.0000 -vt 0.6294 0.1368 0.0000 -vt 0.6294 0.1364 0.0000 -vt 0.6118 0.0281 0.0000 -vt 0.6118 0.0285 0.0000 -vt 0.5934 0.0285 0.0000 -vt 0.5934 0.0281 0.0000 -vt 0.6118 0.1003 0.0000 -vt 0.6118 0.1007 0.0000 -vt 0.5934 0.1007 0.0000 -vt 0.5934 0.1003 0.0000 -vt 0.0441 0.1865 0.0000 -vt 0.0441 0.1869 0.0000 -vt 0.0436 0.1869 0.0000 -vt 0.0436 0.1865 0.0000 -vt 0.1789 0.1319 0.0000 -vt 0.1785 0.1319 0.0000 -vt 0.1785 0.1314 0.0000 -vt 0.1789 0.1314 0.0000 -vt 0.3954 0.0461 0.0000 -vt 0.3954 0.0466 0.0000 -vt 0.3769 0.0466 0.0000 -vt 0.3769 0.0461 0.0000 -vt 0.7561 0.0281 0.0000 -vt 0.7561 0.0285 0.0000 -vt 0.7377 0.0285 0.0000 -vt 0.7377 0.0281 0.0000 -vt 0.5397 0.0642 0.0000 -vt 0.5397 0.0646 0.0000 -vt 0.5212 0.0646 0.0000 -vt 0.5212 0.0642 0.0000 -vt 0.6840 0.0642 0.0000 -vt 0.6840 0.0646 0.0000 -vt 0.6655 0.0646 0.0000 -vt 0.6655 0.0642 0.0000 -vt 0.4071 0.3136 0.0000 -vt 0.4071 0.3140 0.0000 -vt 0.4067 0.3140 0.0000 -vt 0.4067 0.3136 0.0000 -vt 0.0391 0.2007 0.0000 -vt 0.0387 0.2007 0.0000 -vt 0.0387 0.2002 0.0000 -vt 0.0391 0.2002 0.0000 -vt 0.3232 0.1003 0.0000 -vt 0.3232 0.1007 0.0000 -vt 0.3047 0.1007 0.0000 -vt 0.3047 0.1003 0.0000 -vt 0.5397 0.1364 0.0000 -vt 0.5397 0.1368 0.0000 -vt 0.5212 0.1368 0.0000 -vt 0.5212 0.1364 0.0000 -vt 0.4675 0.1003 0.0000 -vt 0.4675 0.1007 0.0000 -vt 0.4490 0.1007 0.0000 -vt 0.4490 0.1003 0.0000 -vt 0.5757 0.1364 0.0000 -vt 0.5757 0.1368 0.0000 -vt 0.5573 0.1368 0.0000 -vt 0.5573 0.1364 0.0000 -vt 0.0342 0.2052 0.0000 -vt 0.0342 0.2056 0.0000 -vt 0.0337 0.2056 0.0000 -vt 0.0337 0.2052 0.0000 -vt 0.5954 0.1506 0.0000 -vt 0.5949 0.1506 0.0000 -vt 0.5949 0.1502 0.0000 -vt 0.5954 0.1502 0.0000 -vt 0.4314 0.0461 0.0000 -vt 0.4314 0.0466 0.0000 -vt 0.4130 0.0466 0.0000 -vt 0.4130 0.0461 0.0000 -vt 0.6118 0.0822 0.0000 -vt 0.6118 0.0827 0.0000 -vt 0.5934 0.0827 0.0000 -vt 0.5934 0.0822 0.0000 -vt 0.5036 0.0642 0.0000 -vt 0.5036 0.0646 0.0000 -vt 0.4851 0.0646 0.0000 -vt 0.4851 0.0642 0.0000 -vt 0.6840 0.0822 0.0000 -vt 0.6840 0.0827 0.0000 -vt 0.6655 0.0827 0.0000 -vt 0.6655 0.0822 0.0000 -vt 0.4132 0.1591 0.0000 -vt 0.4132 0.1595 0.0000 -vt 0.4127 0.1595 0.0000 -vt 0.4127 0.1591 0.0000 -vt 0.3954 0.0187 0.0000 -vt 0.3949 0.0187 0.0000 -vt 0.3949 0.0183 0.0000 -vt 0.3954 0.0183 0.0000 -vt 0.4675 0.0281 0.0000 -vt 0.4675 0.0285 0.0000 -vt 0.4490 0.0285 0.0000 -vt 0.4490 0.0281 0.0000 -vt 0.7200 0.0642 0.0000 -vt 0.7200 0.0646 0.0000 -vt 0.7016 0.0646 0.0000 -vt 0.7016 0.0642 0.0000 -vt 0.5397 0.0281 0.0000 -vt 0.5397 0.0285 0.0000 -vt 0.5212 0.0285 0.0000 -vt 0.5212 0.0281 0.0000 -vt 0.6118 0.1364 0.0000 -vt 0.6118 0.1368 0.0000 -vt 0.5934 0.1368 0.0000 -vt 0.5934 0.1364 0.0000 -vt 0.3856 0.0281 0.0000 -vt 0.3856 0.0285 0.0000 -vt 0.3851 0.0285 0.0000 -vt 0.3851 0.0281 0.0000 -vt 0.2773 0.0827 0.0000 -vt 0.2769 0.0827 0.0000 -vt 0.2769 0.0822 0.0000 -vt 0.2773 0.0822 0.0000 -vt 0.2871 0.1364 0.0000 -vt 0.2871 0.1368 0.0000 -vt 0.2687 0.1368 0.0000 -vt 0.2687 0.1364 0.0000 -vt 0.7922 0.0642 0.0000 -vt 0.7922 0.0646 0.0000 -vt 0.7737 0.0646 0.0000 -vt 0.7737 0.0642 0.0000 -vt 0.5397 0.0100 0.0000 -vt 0.5397 0.0104 0.0000 -vt 0.5212 0.0104 0.0000 -vt 0.5212 0.0100 0.0000 -vt 0.6840 0.1003 0.0000 -vt 0.6840 0.1007 0.0000 -vt 0.6655 0.1007 0.0000 -vt 0.6655 0.1003 0.0000 -vt 0.3134 0.0642 0.0000 -vt 0.3134 0.0646 0.0000 -vt 0.3130 0.0646 0.0000 -vt 0.3130 0.0642 0.0000 -vt 0.3184 0.0597 0.0000 -vt 0.3179 0.0597 0.0000 -vt 0.3179 0.0592 0.0000 -vt 0.3184 0.0592 0.0000 -vt 0.3232 0.1183 0.0000 -vt 0.3232 0.1188 0.0000 -vt 0.3047 0.1188 0.0000 -vt 0.3047 0.1183 0.0000 -vt 0.7922 0.1183 0.0000 -vt 0.7922 0.1188 0.0000 -vt 0.7737 0.1188 0.0000 -vt 0.7737 0.1183 0.0000 -vt 0.3593 0.0822 0.0000 -vt 0.3593 0.0827 0.0000 -vt 0.3408 0.0827 0.0000 -vt 0.3408 0.0822 0.0000 -vt 0.6840 0.1183 0.0000 -vt 0.6840 0.1188 0.0000 -vt 0.6655 0.1188 0.0000 -vt 0.6655 0.1183 0.0000 -vt 0.3232 0.0544 0.0000 -vt 0.3232 0.0548 0.0000 -vt 0.3228 0.0548 0.0000 -vt 0.3228 0.0544 0.0000 -vt 0.3544 0.0416 0.0000 -vt 0.3540 0.0416 0.0000 -vt 0.3540 0.0412 0.0000 -vt 0.3544 0.0412 0.0000 -vt 0.3954 0.0822 0.0000 -vt 0.3954 0.0827 0.0000 -vt 0.3769 0.0827 0.0000 -vt 0.3769 0.0822 0.0000 -vt 0.3593 0.1003 0.0000 -vt 0.3593 0.1007 0.0000 -vt 0.3408 0.1007 0.0000 -vt 0.3408 0.1003 0.0000 -vt 0.3232 0.0822 0.0000 -vt 0.3232 0.0827 0.0000 -vt 0.3047 0.0827 0.0000 -vt 0.3047 0.0822 0.0000 -vt 0.5036 0.1003 0.0000 -vt 0.5036 0.1007 0.0000 -vt 0.4851 0.1007 0.0000 -vt 0.4851 0.1003 0.0000 -vt 0.0391 0.1866 0.0000 -vt 0.0391 0.1870 0.0000 -vt 0.0387 0.1870 0.0000 -vt 0.0387 0.1866 0.0000 -vt 0.2262 0.1733 0.0000 -vt 0.2257 0.1733 0.0000 -vt 0.2257 0.1728 0.0000 -vt 0.2262 0.1728 0.0000 -vt 0.4675 0.0461 0.0000 -vt 0.4675 0.0466 0.0000 -vt 0.4490 0.0466 0.0000 -vt 0.4490 0.0461 0.0000 -vt 0.4314 0.0642 0.0000 -vt 0.4314 0.0646 0.0000 -vt 0.4130 0.0646 0.0000 -vt 0.4130 0.0642 0.0000 -vt 0.2511 0.1183 0.0000 -vt 0.2511 0.1188 0.0000 -vt 0.2326 0.1188 0.0000 -vt 0.2326 0.1183 0.0000 -vt 0.6479 0.0100 0.0000 -vt 0.6479 0.0104 0.0000 -vt 0.6294 0.0104 0.0000 -vt 0.6294 0.0100 0.0000 -vt 0.2427 0.3751 0.0000 -vt 0.2427 0.3547 0.0000 -vt 0.4170 0.3547 0.0000 -vt 0.4170 0.3751 0.0000 -vt 0.6213 0.3048 0.0000 -vt 0.6213 0.3080 0.0000 -vt 0.6178 0.3080 0.0000 -vt 0.6213 0.2877 0.0000 -vt 0.6178 0.2877 0.0000 -vt 0.1063 0.8156 0.0000 -vt 0.1063 0.9900 0.0000 -vt 0.1035 0.9900 0.0000 -vt 0.1035 0.9862 0.0000 -vt 0.1035 0.8192 0.0000 -vt 0.1035 0.8156 0.0000 -vt 0.1988 0.8953 0.0000 -vt 0.1988 0.9156 0.0000 -vt 0.1961 0.9156 0.0000 -vt 0.1961 0.8953 0.0000 -vt 0.1511 0.8156 0.0000 -vt 0.1511 0.9900 0.0000 -vt 0.1483 0.9900 0.0000 -vt 0.1483 0.9865 0.0000 -vt 0.1483 0.8194 0.0000 -vt 0.1483 0.8156 0.0000 -vt 0.1988 0.9697 0.0000 -vt 0.1988 0.9900 0.0000 -vt 0.1961 0.9900 0.0000 -vt 0.1961 0.9697 0.0000 -vt 0.7922 0.2877 0.0000 -vt 0.7922 0.3080 0.0000 -vt 0.7884 0.3080 0.0000 -vt 0.7884 0.3048 0.0000 -vt 0.7884 0.2877 0.0000 -vt 0.0735 0.9900 0.0000 -vt 0.0564 0.9900 0.0000 -vt 0.0564 0.8229 0.0000 -vt 0.0735 0.8229 0.0000 -vt 0.0996 0.8192 0.0000 -vt 0.0996 0.8156 0.0000 -vt 0.0819 0.8014 0.0000 -vt 0.0819 0.8185 0.0000 -vt 0.0780 0.8185 0.0000 -vt 0.0780 0.8014 0.0000 -vt 0.1707 0.8229 0.0000 -vt 0.1707 0.9900 0.0000 -vt 0.1668 0.9900 0.0000 -vt 0.1668 0.8229 0.0000 -vt 0.1792 0.8014 0.0000 -vt 0.1792 0.8185 0.0000 -vt 0.1752 0.8185 0.0000 -vt 0.1752 0.8014 0.0000 -vt 0.0996 0.9900 0.0000 -vt 0.0996 0.9862 0.0000 -vt 0.1921 0.9156 0.0000 -vt 0.1921 0.8953 0.0000 -vt 0.1444 0.8194 0.0000 -vt 0.1444 0.8156 0.0000 -vt 0.1444 0.9865 0.0000 -vt 0.1444 0.9900 0.0000 -vt 0.1921 0.9900 0.0000 -vt 0.1921 0.9697 0.0000 -vt 0.0419 0.2745 0.0000 -vt 0.0221 0.2745 0.0000 -vt 0.0221 0.2739 0.0000 -vt 0.0419 0.2739 0.0000 -vt 0.2306 0.2332 0.0000 -vt 0.0567 0.2332 0.0000 -vt 0.0567 0.2326 0.0000 -vt 0.2306 0.2326 0.0000 -vt 0.0937 0.4303 0.0000 -vt 0.0937 0.4297 0.0000 -vt 0.0943 0.4297 0.0000 -vt 0.0943 0.4303 0.0000 -vt 0.6046 0.2469 0.0000 -vt 0.4302 0.2469 0.0000 -vt 0.4302 0.2464 0.0000 -vt 0.6046 0.2464 0.0000 -vt 0.1988 0.4303 0.0000 -vt 0.1784 0.4303 0.0000 -vt 0.1784 0.4297 0.0000 -vt 0.1988 0.4297 0.0000 -vt 0.0987 0.4303 0.0000 -vt 0.0987 0.4297 0.0000 -vt 0.0992 0.4297 0.0000 -vt 0.0992 0.4303 0.0000 -vt 0.6046 0.7236 0.0000 -vt 0.6046 0.7241 0.0000 -vt 0.4308 0.7241 0.0000 -vt 0.4302 0.7236 0.0000 -vt 0.4308 0.7439 0.0000 -vt 0.4302 0.7439 0.0000 -vt 0.4302 0.7104 0.0000 -vt 0.4302 0.6901 0.0000 -vt 0.4308 0.6901 0.0000 -vt 0.4308 0.7098 0.0000 -vt 0.6046 0.7098 0.0000 -vt 0.6046 0.7104 0.0000 -vt 0.0419 0.4421 0.0000 -vt 0.0221 0.4421 0.0000 -vt 0.0221 0.4416 0.0000 -vt 0.0419 0.4416 0.0000 -vt 0.2311 0.1919 0.0000 -vt 0.0573 0.1919 0.0000 -vt 0.0573 0.1913 0.0000 -vt 0.2311 0.1913 0.0000 -vt 0.4176 0.1638 0.0000 -vt 0.4181 0.1638 0.0000 -vt 0.4181 0.1644 0.0000 -vt 0.4176 0.1644 0.0000 -vt 0.2295 0.3948 0.0000 -vt 0.0551 0.3948 0.0000 -vt 0.0551 0.3943 0.0000 -vt 0.2295 0.3943 0.0000 -vt 0.1091 0.4223 0.0000 -vt 0.0888 0.4223 0.0000 -vt 0.0888 0.4218 0.0000 -vt 0.1091 0.4218 0.0000 -vt 0.2306 0.1776 0.0000 -vt 0.2311 0.1776 0.0000 -vt 0.2311 0.1781 0.0000 -vt 0.2306 0.1781 0.0000 -vt 0.4170 0.7236 0.0000 -vt 0.4170 0.7241 0.0000 -vt 0.2432 0.7241 0.0000 -vt 0.2427 0.7236 0.0000 -vt 0.2432 0.7439 0.0000 -vt 0.2427 0.7439 0.0000 -vt 0.2427 0.7104 0.0000 -vt 0.2427 0.6901 0.0000 -vt 0.2432 0.6901 0.0000 -vt 0.2432 0.7098 0.0000 -vt 0.4170 0.7098 0.0000 -vt 0.4170 0.7104 0.0000 -vt 0.0419 0.5762 0.0000 -vt 0.0221 0.5762 0.0000 -vt 0.0221 0.5757 0.0000 -vt 0.0419 0.5757 0.0000 -vt 0.2295 0.2607 0.0000 -vt 0.0556 0.2607 0.0000 -vt 0.0556 0.2601 0.0000 -vt 0.2295 0.2601 0.0000 -vt 0.5991 0.2799 0.0000 -vt 0.5997 0.2799 0.0000 -vt 0.5997 0.2805 0.0000 -vt 0.5991 0.2805 0.0000 -vt 0.4170 0.2745 0.0000 -vt 0.2427 0.2745 0.0000 -vt 0.2427 0.2739 0.0000 -vt 0.4170 0.2739 0.0000 -vt 0.1338 0.4223 0.0000 -vt 0.1135 0.4223 0.0000 -vt 0.1135 0.4218 0.0000 -vt 0.1338 0.4218 0.0000 -vt 0.2289 0.3134 0.0000 -vt 0.2295 0.3134 0.0000 -vt 0.2295 0.3140 0.0000 -vt 0.2289 0.3140 0.0000 -vt 0.2295 0.7236 0.0000 -vt 0.2295 0.7241 0.0000 -vt 0.0556 0.7241 0.0000 -vt 0.0551 0.7236 0.0000 -vt 0.0556 0.7439 0.0000 -vt 0.0551 0.7439 0.0000 -vt 0.2427 0.6433 0.0000 -vt 0.2427 0.6230 0.0000 -vt 0.2432 0.6230 0.0000 -vt 0.2432 0.6428 0.0000 -vt 0.4170 0.6428 0.0000 -vt 0.4170 0.6433 0.0000 -vt 0.0419 0.7104 0.0000 -vt 0.0221 0.7104 0.0000 -vt 0.0221 0.7098 0.0000 -vt 0.0419 0.7098 0.0000 -vt 0.2311 0.2056 0.0000 -vt 0.0573 0.2056 0.0000 -vt 0.0573 0.2051 0.0000 -vt 0.2311 0.2051 0.0000 -vt 0.4639 0.3297 0.0000 -vt 0.4639 0.3291 0.0000 -vt 0.4645 0.3291 0.0000 -vt 0.4645 0.3297 0.0000 -vt 0.4170 0.3278 0.0000 -vt 0.2427 0.3278 0.0000 -vt 0.2427 0.3272 0.0000 -vt 0.4170 0.3272 0.0000 -vt 0.0844 0.4223 0.0000 -vt 0.0640 0.4223 0.0000 -vt 0.0640 0.4218 0.0000 -vt 0.0844 0.4218 0.0000 -vt 0.4689 0.3297 0.0000 -vt 0.4689 0.3291 0.0000 -vt 0.4694 0.3291 0.0000 -vt 0.4694 0.3297 0.0000 -vt 0.2295 0.6565 0.0000 -vt 0.2295 0.6571 0.0000 -vt 0.0556 0.6571 0.0000 -vt 0.0551 0.6565 0.0000 -vt 0.0556 0.6768 0.0000 -vt 0.0551 0.6768 0.0000 -vt 0.2427 0.6098 0.0000 -vt 0.2427 0.5895 0.0000 -vt 0.2432 0.5895 0.0000 -vt 0.2432 0.6092 0.0000 -vt 0.4170 0.6092 0.0000 -vt 0.4170 0.6098 0.0000 -vt 0.0419 0.7439 0.0000 -vt 0.0221 0.7439 0.0000 -vt 0.0221 0.7434 0.0000 -vt 0.0419 0.7434 0.0000 -vt 0.6052 0.1644 0.0000 -vt 0.4313 0.1644 0.0000 -vt 0.4313 0.1638 0.0000 -vt 0.6052 0.1638 0.0000 -vt 0.2289 0.3805 0.0000 -vt 0.2295 0.3805 0.0000 -vt 0.2295 0.3811 0.0000 -vt 0.2289 0.3811 0.0000 -vt 0.6046 0.3080 0.0000 -vt 0.4302 0.3080 0.0000 -vt 0.4302 0.3074 0.0000 -vt 0.6046 0.3074 0.0000 -vt 0.5337 0.3217 0.0000 -vt 0.5134 0.3217 0.0000 -vt 0.5134 0.3212 0.0000 -vt 0.5337 0.3212 0.0000 -vt 0.2289 0.2799 0.0000 -vt 0.2295 0.2799 0.0000 -vt 0.2295 0.2805 0.0000 -vt 0.2289 0.2805 0.0000 -vt 0.2295 0.6230 0.0000 -vt 0.2295 0.6235 0.0000 -vt 0.0556 0.6235 0.0000 -vt 0.0551 0.6230 0.0000 -vt 0.0556 0.6433 0.0000 -vt 0.0551 0.6433 0.0000 -vt 0.6178 0.5092 0.0000 -vt 0.6178 0.4889 0.0000 -vt 0.6184 0.4889 0.0000 -vt 0.6184 0.5086 0.0000 -vt 0.7922 0.5086 0.0000 -vt 0.7922 0.5092 0.0000 -vt 0.0419 0.6433 0.0000 -vt 0.0221 0.6433 0.0000 -vt 0.0221 0.6428 0.0000 -vt 0.0419 0.6428 0.0000 -vt 0.6052 0.2056 0.0000 -vt 0.4313 0.2056 0.0000 -vt 0.4313 0.2051 0.0000 -vt 0.6052 0.2051 0.0000 -vt 0.4115 0.2799 0.0000 -vt 0.4121 0.2799 0.0000 -vt 0.4121 0.2805 0.0000 -vt 0.4115 0.2805 0.0000 -vt 0.6046 0.2745 0.0000 -vt 0.4302 0.2745 0.0000 -vt 0.4302 0.2739 0.0000 -vt 0.6046 0.2739 0.0000 -vt 0.0844 0.4303 0.0000 -vt 0.0640 0.4303 0.0000 -vt 0.0640 0.4297 0.0000 -vt 0.0844 0.4297 0.0000 -vt 0.2144 0.1182 0.0000 -vt 0.2150 0.1182 0.0000 -vt 0.2150 0.1188 0.0000 -vt 0.2144 0.1188 0.0000 -vt 0.6046 0.5224 0.0000 -vt 0.6046 0.5229 0.0000 -vt 0.4308 0.5229 0.0000 -vt 0.4302 0.5224 0.0000 -vt 0.4308 0.5427 0.0000 -vt 0.4302 0.5427 0.0000 -vt 0.4302 0.5092 0.0000 -vt 0.4302 0.4889 0.0000 -vt 0.4308 0.4889 0.0000 -vt 0.4308 0.5086 0.0000 -vt 0.6046 0.5086 0.0000 -vt 0.6046 0.5092 0.0000 -vt 0.0419 0.5427 0.0000 -vt 0.0221 0.5427 0.0000 -vt 0.0221 0.5422 0.0000 -vt 0.0419 0.5422 0.0000 -vt 0.4176 0.2332 0.0000 -vt 0.2438 0.2332 0.0000 -vt 0.2438 0.2326 0.0000 -vt 0.4176 0.2326 0.0000 -vt 0.2289 0.3470 0.0000 -vt 0.2295 0.3470 0.0000 -vt 0.2295 0.3475 0.0000 -vt 0.2289 0.3475 0.0000 -vt 0.4170 0.2942 0.0000 -vt 0.2427 0.2942 0.0000 -vt 0.2427 0.2937 0.0000 -vt 0.4170 0.2937 0.0000 -vt 0.6471 0.2961 0.0000 -vt 0.6268 0.2961 0.0000 -vt 0.6268 0.2956 0.0000 -vt 0.6471 0.2956 0.0000 -vt 0.2081 0.4303 0.0000 -vt 0.2081 0.4297 0.0000 -vt 0.2087 0.4297 0.0000 -vt 0.2087 0.4303 0.0000 -vt 0.4170 0.5224 0.0000 -vt 0.4170 0.5229 0.0000 -vt 0.2432 0.5229 0.0000 -vt 0.2427 0.5224 0.0000 -vt 0.2432 0.5427 0.0000 -vt 0.2427 0.5427 0.0000 -vt 0.0551 0.5427 0.0000 -vt 0.0551 0.5224 0.0000 -vt 0.0556 0.5224 0.0000 -vt 0.0556 0.5422 0.0000 -vt 0.2295 0.5422 0.0000 -vt 0.2295 0.5427 0.0000 -vt 0.0430 0.2469 0.0000 -vt 0.0232 0.2469 0.0000 -vt 0.0232 0.2464 0.0000 -vt 0.0430 0.2464 0.0000 -vt 0.7922 0.1919 0.0000 -vt 0.6184 0.1919 0.0000 -vt 0.6184 0.1913 0.0000 -vt 0.7922 0.1913 0.0000 -vt 0.6614 0.2961 0.0000 -vt 0.6614 0.2956 0.0000 -vt 0.6619 0.2956 0.0000 -vt 0.6619 0.2961 0.0000 -vt 0.2295 0.2942 0.0000 -vt 0.0551 0.2942 0.0000 -vt 0.0551 0.2937 0.0000 -vt 0.2295 0.2937 0.0000 -vt 0.5739 0.3297 0.0000 -vt 0.5536 0.3297 0.0000 -vt 0.5536 0.3291 0.0000 -vt 0.5739 0.3291 0.0000 -vt 0.7709 0.2961 0.0000 -vt 0.7709 0.2956 0.0000 -vt 0.7714 0.2956 0.0000 -vt 0.7714 0.2961 0.0000 -vt 0.7922 0.3547 0.0000 -vt 0.7922 0.3553 0.0000 -vt 0.6184 0.3553 0.0000 -vt 0.6178 0.3547 0.0000 -vt 0.6184 0.3751 0.0000 -vt 0.6178 0.3751 0.0000 -vt 0.4302 0.4086 0.0000 -vt 0.4302 0.3883 0.0000 -vt 0.4308 0.3883 0.0000 -vt 0.4308 0.4080 0.0000 -vt 0.6046 0.4080 0.0000 -vt 0.6046 0.4086 0.0000 -vt 0.2195 0.3471 0.0000 -vt 0.2195 0.3475 0.0000 -vt 0.2191 0.3475 0.0000 -vt 0.2191 0.3471 0.0000 -vt 0.3543 0.0466 0.0000 -vt 0.3539 0.0466 0.0000 -vt 0.3539 0.0461 0.0000 -vt 0.3543 0.0461 0.0000 -vt 0.4314 0.0281 0.0000 -vt 0.4314 0.0285 0.0000 -vt 0.4130 0.0285 0.0000 -vt 0.4130 0.0281 0.0000 -vt 0.5397 0.1183 0.0000 -vt 0.5397 0.1188 0.0000 -vt 0.5212 0.1188 0.0000 -vt 0.5212 0.1183 0.0000 -vt 0.5036 0.0281 0.0000 -vt 0.5036 0.0285 0.0000 -vt 0.4851 0.0285 0.0000 -vt 0.4851 0.0281 0.0000 -vt 0.7200 0.1364 0.0000 -vt 0.7200 0.1368 0.0000 -vt 0.7016 0.1368 0.0000 -vt 0.7016 0.1364 0.0000 -vt 0.3593 0.0412 0.0000 -vt 0.3593 0.0416 0.0000 -vt 0.3588 0.0416 0.0000 -vt 0.3588 0.0412 0.0000 -vt 0.7249 0.2956 0.0000 -vt 0.7249 0.2960 0.0000 -vt 0.7245 0.2960 0.0000 -vt 0.7245 0.2956 0.0000 -vt 0.2150 0.1364 0.0000 -vt 0.2150 0.1368 0.0000 -vt 0.1965 0.1368 0.0000 -vt 0.1965 0.1364 0.0000 -vt 0.6118 0.1183 0.0000 -vt 0.6118 0.1188 0.0000 -vt 0.5934 0.1188 0.0000 -vt 0.5934 0.1183 0.0000 -vt 0.3593 0.1183 0.0000 -vt 0.3593 0.1188 0.0000 -vt 0.3408 0.1188 0.0000 -vt 0.3408 0.1183 0.0000 -vt 0.0419 0.4950 0.0000 -vt 0.0419 0.4954 0.0000 -vt 0.0234 0.4954 0.0000 -vt 0.0234 0.4950 0.0000 -vt 0.7293 0.2956 0.0000 -vt 0.7298 0.2956 0.0000 -vt 0.7298 0.2960 0.0000 -vt 0.7293 0.2960 0.0000 -vt 0.0343 0.1919 0.0000 -vt 0.0338 0.1919 0.0000 -vt 0.0338 0.1914 0.0000 -vt 0.0343 0.1914 0.0000 -vt 0.4675 0.0100 0.0000 -vt 0.4675 0.0104 0.0000 -vt 0.4490 0.0104 0.0000 -vt 0.4490 0.0100 0.0000 -vt 0.7200 0.1003 0.0000 -vt 0.7200 0.1007 0.0000 -vt 0.7016 0.1007 0.0000 -vt 0.7016 0.1003 0.0000 -vt 0.4675 0.0642 0.0000 -vt 0.4675 0.0646 0.0000 -vt 0.4490 0.0646 0.0000 -vt 0.4490 0.0642 0.0000 -vt 0.0419 0.5956 0.0000 -vt 0.0419 0.5960 0.0000 -vt 0.0234 0.5960 0.0000 -vt 0.0234 0.5956 0.0000 -vt 0.3905 0.0231 0.0000 -vt 0.3905 0.0235 0.0000 -vt 0.3901 0.0235 0.0000 -vt 0.3901 0.0231 0.0000 -vt 0.2871 0.0729 0.0000 -vt 0.2867 0.0729 0.0000 -vt 0.2867 0.0724 0.0000 -vt 0.2871 0.0724 0.0000 -vt 0.5036 0.0100 0.0000 -vt 0.5036 0.0104 0.0000 -vt 0.4851 0.0104 0.0000 -vt 0.4851 0.0100 0.0000 -vt 0.7922 0.0822 0.0000 -vt 0.7922 0.0827 0.0000 -vt 0.7737 0.0827 0.0000 -vt 0.7737 0.0822 0.0000 -vt 0.3593 0.1364 0.0000 -vt 0.3593 0.1368 0.0000 -vt 0.3408 0.1368 0.0000 -vt 0.3408 0.1364 0.0000 -vt 0.0419 0.7632 0.0000 -vt 0.0419 0.7637 0.0000 -vt 0.0234 0.7637 0.0000 -vt 0.0234 0.7632 0.0000 -vt 0.2511 0.0905 0.0000 -vt 0.2511 0.0909 0.0000 -vt 0.2506 0.0909 0.0000 -vt 0.2506 0.0905 0.0000 -vt 0.3495 0.0466 0.0000 -vt 0.3490 0.0466 0.0000 -vt 0.3490 0.0461 0.0000 -vt 0.3495 0.0461 0.0000 -vt 0.3954 0.1003 0.0000 -vt 0.3954 0.1007 0.0000 -vt 0.3769 0.1007 0.0000 -vt 0.3769 0.1003 0.0000 -vt 0.0419 0.4614 0.0000 -vt 0.0419 0.4619 0.0000 -vt 0.0234 0.4619 0.0000 -vt 0.0234 0.4614 0.0000 -vt 0.4314 0.0822 0.0000 -vt 0.4314 0.0827 0.0000 -vt 0.4130 0.0827 0.0000 -vt 0.4130 0.0822 0.0000 -vt 0.0419 0.5620 0.0000 -vt 0.0419 0.5625 0.0000 -vt 0.0234 0.5625 0.0000 -vt 0.0234 0.5620 0.0000 -vt 0.3593 0.0363 0.0000 -vt 0.3593 0.0368 0.0000 -vt 0.3588 0.0368 0.0000 -vt 0.3588 0.0363 0.0000 -vt 0.2213 0.1781 0.0000 -vt 0.2209 0.1781 0.0000 -vt 0.2209 0.1777 0.0000 -vt 0.2213 0.1777 0.0000 -vt 0.5036 0.0461 0.0000 -vt 0.5036 0.0466 0.0000 -vt 0.4851 0.0466 0.0000 -vt 0.4851 0.0461 0.0000 -vt 0.0419 0.6962 0.0000 -vt 0.0419 0.6966 0.0000 -vt 0.0234 0.6966 0.0000 -vt 0.0234 0.6962 0.0000 -vt 0.5757 0.0461 0.0000 -vt 0.5757 0.0466 0.0000 -vt 0.5573 0.0466 0.0000 -vt 0.5573 0.0461 0.0000 -vt 0.7561 0.1183 0.0000 -vt 0.7561 0.1188 0.0000 -vt 0.7377 0.1188 0.0000 -vt 0.7377 0.1183 0.0000 -vt 0.4083 0.1639 0.0000 -vt 0.4083 0.1644 0.0000 -vt 0.4079 0.1644 0.0000 -vt 0.4079 0.1639 0.0000 -vt 0.2100 0.1188 0.0000 -vt 0.2096 0.1188 0.0000 -vt 0.2096 0.1183 0.0000 -vt 0.2100 0.1183 0.0000 -vt 0.3954 0.1183 0.0000 -vt 0.3954 0.1188 0.0000 -vt 0.3769 0.1188 0.0000 -vt 0.3769 0.1183 0.0000 -vt 0.7922 0.1364 0.0000 -vt 0.7922 0.1368 0.0000 -vt 0.7737 0.1368 0.0000 -vt 0.7737 0.1364 0.0000 -vt 0.5036 0.1183 0.0000 -vt 0.5036 0.1188 0.0000 -vt 0.4851 0.1188 0.0000 -vt 0.4851 0.1183 0.0000 -vt 0.7561 0.0822 0.0000 -vt 0.7561 0.0827 0.0000 -vt 0.7377 0.0827 0.0000 -vt 0.7377 0.0822 0.0000 -vt 0.2150 0.1134 0.0000 -vt 0.2150 0.1138 0.0000 -vt 0.2145 0.1138 0.0000 -vt 0.2145 0.1134 0.0000 -vt 0.6002 0.1506 0.0000 -vt 0.5998 0.1506 0.0000 -vt 0.5998 0.1502 0.0000 -vt 0.6002 0.1502 0.0000 -vt 0.4675 0.0822 0.0000 -vt 0.4675 0.0827 0.0000 -vt 0.4490 0.0827 0.0000 -vt 0.4490 0.0822 0.0000 -vt 0.0419 0.6626 0.0000 -vt 0.0419 0.6631 0.0000 -vt 0.0234 0.6631 0.0000 -vt 0.0234 0.6626 0.0000 -vt 0.6479 0.0461 0.0000 -vt 0.6479 0.0466 0.0000 -vt 0.6294 0.0466 0.0000 -vt 0.6294 0.0461 0.0000 -vt 0.7561 0.0642 0.0000 -vt 0.7561 0.0646 0.0000 -vt 0.7377 0.0646 0.0000 -vt 0.7377 0.0642 0.0000 -vt 0.4181 0.1590 0.0000 -vt 0.4181 0.1594 0.0000 -vt 0.4177 0.1594 0.0000 -vt 0.4177 0.1590 0.0000 -vt 0.2511 0.0958 0.0000 -vt 0.2506 0.0958 0.0000 -vt 0.2506 0.0953 0.0000 -vt 0.2511 0.0953 0.0000 -vt 0.5757 0.0281 0.0000 -vt 0.5757 0.0285 0.0000 -vt 0.5573 0.0285 0.0000 -vt 0.5573 0.0281 0.0000 -vt 0.0419 0.6291 0.0000 -vt 0.0419 0.6295 0.0000 -vt 0.0234 0.6295 0.0000 -vt 0.0234 0.6291 0.0000 -vt 0.6840 0.0100 0.0000 -vt 0.6840 0.0104 0.0000 -vt 0.6655 0.0104 0.0000 -vt 0.6655 0.0100 0.0000 -vt 0.5757 0.1183 0.0000 -vt 0.5757 0.1188 0.0000 -vt 0.5573 0.1188 0.0000 -vt 0.5573 0.1183 0.0000 -vt 0.2461 0.1003 0.0000 -vt 0.2461 0.1007 0.0000 -vt 0.2457 0.1007 0.0000 -vt 0.2457 0.1003 0.0000 -vt 0.2195 0.2805 0.0000 -vt 0.2191 0.2805 0.0000 -vt 0.2191 0.2800 0.0000 -vt 0.2195 0.2800 0.0000 -vt 0.4314 0.1183 0.0000 -vt 0.4314 0.1188 0.0000 -vt 0.4130 0.1188 0.0000 -vt 0.4130 0.1183 0.0000 -vt 0.6118 0.0100 0.0000 -vt 0.6118 0.0104 0.0000 -vt 0.5934 0.0104 0.0000 -vt 0.5934 0.0100 0.0000 -vt 0.4675 0.1183 0.0000 -vt 0.4675 0.1188 0.0000 -vt 0.4490 0.1188 0.0000 -vt 0.4490 0.1183 0.0000 -vt 0.2871 0.1183 0.0000 -vt 0.2871 0.1188 0.0000 -vt 0.2687 0.1188 0.0000 -vt 0.2687 0.1183 0.0000 -vt 0.0435 0.2332 0.0000 -vt 0.0238 0.2332 0.0000 -vt 0.0238 0.2326 0.0000 -vt 0.0435 0.2326 0.0000 -vt 0.6046 0.2332 0.0000 -vt 0.4308 0.2332 0.0000 -vt 0.4308 0.2326 0.0000 -vt 0.6046 0.2326 0.0000 -vt 0.0435 0.2001 0.0000 -vt 0.0441 0.2001 0.0000 -vt 0.0441 0.2007 0.0000 -vt 0.0435 0.2007 0.0000 -vt 0.2295 0.3415 0.0000 -vt 0.0551 0.3415 0.0000 -vt 0.0551 0.3410 0.0000 -vt 0.2295 0.3410 0.0000 -vt 0.1585 0.4223 0.0000 -vt 0.1382 0.4223 0.0000 -vt 0.1382 0.4218 0.0000 -vt 0.1585 0.4218 0.0000 -vt 0.2240 0.2799 0.0000 -vt 0.2245 0.2799 0.0000 -vt 0.2245 0.2805 0.0000 -vt 0.2240 0.2805 0.0000 -vt 0.4170 0.4218 0.0000 -vt 0.4170 0.4223 0.0000 -vt 0.2432 0.4223 0.0000 -vt 0.2427 0.4218 0.0000 -vt 0.2432 0.4421 0.0000 -vt 0.2427 0.4421 0.0000 -vt 0.0551 0.5762 0.0000 -vt 0.0551 0.5559 0.0000 -vt 0.0556 0.5559 0.0000 -vt 0.0556 0.5757 0.0000 -vt 0.2295 0.5757 0.0000 -vt 0.2295 0.5762 0.0000 -vt 0.0419 0.2942 0.0000 -vt 0.0221 0.2942 0.0000 -vt 0.0221 0.2937 0.0000 -vt 0.0419 0.2937 0.0000 -vt 0.2300 0.2469 0.0000 -vt 0.0562 0.2469 0.0000 -vt 0.0562 0.2464 0.0000 -vt 0.2300 0.2464 0.0000 -vt 0.2240 0.3470 0.0000 -vt 0.2245 0.3470 0.0000 -vt 0.2245 0.3475 0.0000 -vt 0.2240 0.3475 0.0000 -vt 0.2295 0.3613 0.0000 -vt 0.0551 0.3613 0.0000 -vt 0.0551 0.3607 0.0000 -vt 0.2295 0.3607 0.0000 -vt 0.5090 0.3217 0.0000 -vt 0.4886 0.3217 0.0000 -vt 0.4886 0.3212 0.0000 -vt 0.5090 0.3212 0.0000 -vt 0.4115 0.3134 0.0000 -vt 0.4121 0.3134 0.0000 -vt 0.4121 0.3140 0.0000 -vt 0.4115 0.3140 0.0000 -vt 0.7922 0.4553 0.0000 -vt 0.7922 0.4559 0.0000 -vt 0.6184 0.4559 0.0000 -vt 0.6178 0.4553 0.0000 -vt 0.6184 0.4756 0.0000 -vt 0.6178 0.4756 0.0000 -vt 0.6178 0.5762 0.0000 -vt 0.6178 0.5559 0.0000 -vt 0.6184 0.5559 0.0000 -vt 0.6184 0.5757 0.0000 -vt 0.7922 0.5757 0.0000 -vt 0.7922 0.5762 0.0000 -vt 0.0419 0.7774 0.0000 -vt 0.0221 0.7774 0.0000 -vt 0.0221 0.7769 0.0000 -vt 0.0419 0.7769 0.0000 -vt 0.7922 0.1781 0.0000 -vt 0.6184 0.1781 0.0000 -vt 0.6184 0.1776 0.0000 -vt 0.7922 0.1776 0.0000 -vt 0.2505 0.1002 0.0000 -vt 0.2511 0.1002 0.0000 -vt 0.2511 0.1007 0.0000 -vt 0.2505 0.1007 0.0000 -vt 0.7922 0.2745 0.0000 -vt 0.6178 0.2745 0.0000 -vt 0.6178 0.2739 0.0000 -vt 0.7922 0.2739 0.0000 -vt 0.6954 0.2961 0.0000 -vt 0.6750 0.2961 0.0000 -vt 0.6750 0.2956 0.0000 -vt 0.6954 0.2956 0.0000 -vt 0.2866 0.0821 0.0000 -vt 0.2871 0.0821 0.0000 -vt 0.2871 0.0827 0.0000 -vt 0.2866 0.0827 0.0000 -vt 0.7922 0.6230 0.0000 -vt 0.7922 0.6235 0.0000 -vt 0.6184 0.6235 0.0000 -vt 0.6178 0.6230 0.0000 -vt 0.6184 0.6433 0.0000 -vt 0.6178 0.6433 0.0000 -vt 0.4302 0.3751 0.0000 -vt 0.4302 0.3547 0.0000 -vt 0.4308 0.3547 0.0000 -vt 0.4308 0.3745 0.0000 -vt 0.6046 0.3745 0.0000 -vt 0.6046 0.3751 0.0000 -vt 0.0419 0.3080 0.0000 -vt 0.0221 0.3080 0.0000 -vt 0.0221 0.3074 0.0000 -vt 0.0419 0.3074 0.0000 -vt 0.6052 0.1919 0.0000 -vt 0.4313 0.1919 0.0000 -vt 0.4313 0.1913 0.0000 -vt 0.6052 0.1913 0.0000 -vt 0.3227 0.0641 0.0000 -vt 0.3232 0.0641 0.0000 -vt 0.3232 0.0646 0.0000 -vt 0.3227 0.0646 0.0000 -vt 0.7922 0.2607 0.0000 -vt 0.6178 0.2607 0.0000 -vt 0.6178 0.2601 0.0000 -vt 0.7922 0.2601 0.0000 -vt 0.7615 0.2961 0.0000 -vt 0.7412 0.2961 0.0000 -vt 0.7412 0.2956 0.0000 -vt 0.7615 0.2956 0.0000 -vt 0.3587 0.0460 0.0000 -vt 0.3593 0.0460 0.0000 -vt 0.3593 0.0466 0.0000 -vt 0.3587 0.0466 0.0000 -vt 0.7922 0.7236 0.0000 -vt 0.7922 0.7241 0.0000 -vt 0.6184 0.7241 0.0000 -vt 0.6178 0.7236 0.0000 -vt 0.6184 0.7439 0.0000 -vt 0.6178 0.7439 0.0000 -vt 0.4302 0.7774 0.0000 -vt 0.4302 0.7571 0.0000 -vt 0.4308 0.7571 0.0000 -vt 0.4308 0.7769 0.0000 -vt 0.6046 0.7769 0.0000 -vt 0.6046 0.7774 0.0000 -vt 0.0419 0.3613 0.0000 -vt 0.0221 0.3613 0.0000 -vt 0.0221 0.3607 0.0000 -vt 0.0419 0.3607 0.0000 -vt 0.2311 0.2194 0.0000 -vt 0.0573 0.2194 0.0000 -vt 0.0573 0.2189 0.0000 -vt 0.2311 0.2189 0.0000 -vt 0.0106 0.2189 0.0000 -vt 0.0111 0.2189 0.0000 -vt 0.0111 0.2194 0.0000 -vt 0.0106 0.2194 0.0000 -vt 0.2295 0.3080 0.0000 -vt 0.0551 0.3080 0.0000 -vt 0.0551 0.3074 0.0000 -vt 0.2295 0.3074 0.0000 -vt 0.6718 0.2882 0.0000 -vt 0.6515 0.2882 0.0000 -vt 0.6515 0.2877 0.0000 -vt 0.6718 0.2877 0.0000 -vt 0.0100 0.2326 0.0000 -vt 0.0106 0.2326 0.0000 -vt 0.0106 0.2332 0.0000 -vt 0.0100 0.2332 0.0000 -vt 0.7922 0.6901 0.0000 -vt 0.7922 0.6906 0.0000 -vt 0.6184 0.6906 0.0000 -vt 0.6178 0.6901 0.0000 -vt 0.6184 0.7104 0.0000 -vt 0.6178 0.7104 0.0000 -vt 0.2427 0.7774 0.0000 -vt 0.2427 0.7571 0.0000 -vt 0.2432 0.7571 0.0000 -vt 0.2432 0.7769 0.0000 -vt 0.4170 0.7769 0.0000 -vt 0.4170 0.7774 0.0000 -vt 0.0419 0.3948 0.0000 -vt 0.0221 0.3948 0.0000 -vt 0.0221 0.3943 0.0000 -vt 0.0419 0.3943 0.0000 -vt 0.4181 0.1919 0.0000 -vt 0.2443 0.1919 0.0000 -vt 0.2443 0.1913 0.0000 -vt 0.4181 0.1913 0.0000 -vt 0.6046 0.1500 0.0000 -vt 0.6052 0.1500 0.0000 -vt 0.6052 0.1506 0.0000 -vt 0.6046 0.1506 0.0000 -vt 0.2295 0.3278 0.0000 -vt 0.0551 0.3278 0.0000 -vt 0.0551 0.3272 0.0000 -vt 0.2295 0.3272 0.0000 -vt 0.6965 0.2882 0.0000 -vt 0.6762 0.2882 0.0000 -vt 0.6762 0.2877 0.0000 -vt 0.6965 0.2877 0.0000 -vt 0.0435 0.2051 0.0000 -vt 0.0441 0.2051 0.0000 -vt 0.0441 0.2056 0.0000 -vt 0.0435 0.2056 0.0000 -vt 0.7922 0.6565 0.0000 -vt 0.7922 0.6571 0.0000 -vt 0.6184 0.6571 0.0000 -vt 0.6178 0.6565 0.0000 -vt 0.6184 0.6768 0.0000 -vt 0.6178 0.6768 0.0000 -vt 0.6178 0.7774 0.0000 -vt 0.6178 0.7571 0.0000 -vt 0.6184 0.7571 0.0000 -vt 0.6184 0.7769 0.0000 -vt 0.7922 0.7769 0.0000 -vt 0.7922 0.7774 0.0000 -vt 0.0419 0.3751 0.0000 -vt 0.0221 0.3751 0.0000 -vt 0.0221 0.3745 0.0000 -vt 0.0419 0.3745 0.0000 -vt 0.7922 0.1506 0.0000 -vt 0.6184 0.1506 0.0000 -vt 0.6184 0.1500 0.0000 -vt 0.7922 0.1500 0.0000 -vt 0.4165 0.2799 0.0000 -vt 0.4170 0.2799 0.0000 -vt 0.4170 0.2805 0.0000 -vt 0.4165 0.2805 0.0000 -vt 0.4170 0.2607 0.0000 -vt 0.2427 0.2607 0.0000 -vt 0.2427 0.2601 0.0000 -vt 0.4170 0.2601 0.0000 -vt 0.7213 0.2882 0.0000 -vt 0.7009 0.2882 0.0000 -vt 0.7009 0.2877 0.0000 -vt 0.7213 0.2877 0.0000 -vt 0.4165 0.3134 0.0000 -vt 0.4170 0.3134 0.0000 -vt 0.4170 0.3140 0.0000 -vt 0.4165 0.3140 0.0000 -vt 0.2295 0.7571 0.0000 -vt 0.2295 0.7577 0.0000 -vt 0.0556 0.7577 0.0000 -vt 0.0551 0.7571 0.0000 -vt 0.0556 0.7774 0.0000 -vt 0.0551 0.7774 0.0000 -vt 0.6178 0.6098 0.0000 -vt 0.6178 0.5895 0.0000 -vt 0.6184 0.5895 0.0000 -vt 0.6184 0.6092 0.0000 -vt 0.7922 0.6092 0.0000 -vt 0.7922 0.6098 0.0000 -vt 0.0419 0.4086 0.0000 -vt 0.0221 0.4086 0.0000 -vt 0.0221 0.4080 0.0000 -vt 0.0419 0.4080 0.0000 -vt 0.4170 0.2469 0.0000 -vt 0.2432 0.2469 0.0000 -vt 0.2432 0.2464 0.0000 -vt 0.4170 0.2464 0.0000 -vt 0.0888 0.4303 0.0000 -vt 0.0888 0.4297 0.0000 -vt 0.0893 0.4297 0.0000 -vt 0.0893 0.4303 0.0000 -vt 0.6046 0.2607 0.0000 -vt 0.4302 0.2607 0.0000 -vt 0.4302 0.2601 0.0000 -vt 0.6046 0.2601 0.0000 -vt 0.1326 0.4303 0.0000 -vt 0.1123 0.4303 0.0000 -vt 0.1123 0.4297 0.0000 -vt 0.1326 0.4297 0.0000 -vt 0.7758 0.2961 0.0000 -vt 0.7758 0.2956 0.0000 -vt 0.7764 0.2956 0.0000 -vt 0.7764 0.2961 0.0000 -vt 0.6046 0.6230 0.0000 -vt 0.6046 0.6235 0.0000 -vt 0.4308 0.6235 0.0000 -vt 0.4302 0.6230 0.0000 -vt 0.4308 0.6433 0.0000 -vt 0.4302 0.6433 0.0000 -vt 0.4302 0.6098 0.0000 -vt 0.4302 0.5895 0.0000 -vt 0.4308 0.5895 0.0000 -vt 0.4308 0.6092 0.0000 -vt 0.6046 0.6092 0.0000 -vt 0.6046 0.6098 0.0000 -vt 0.6002 0.1453 0.0000 -vt 0.6002 0.1457 0.0000 -vt 0.5998 0.1457 0.0000 -vt 0.5998 0.1453 0.0000 -vt 0.2195 0.3140 0.0000 -vt 0.2191 0.3140 0.0000 -vt 0.2191 0.3136 0.0000 -vt 0.2195 0.3136 0.0000 -vt 0.5757 0.0642 0.0000 -vt 0.5757 0.0646 0.0000 -vt 0.5573 0.0646 0.0000 -vt 0.5573 0.0642 0.0000 -vt 0.7200 0.0822 0.0000 -vt 0.7200 0.0827 0.0000 -vt 0.7016 0.0827 0.0000 -vt 0.7016 0.0822 0.0000 -vt 0.3593 0.0642 0.0000 -vt 0.3593 0.0646 0.0000 -vt 0.3408 0.0646 0.0000 -vt 0.3408 0.0642 0.0000 -vt 0.6840 0.0461 0.0000 -vt 0.6840 0.0466 0.0000 -vt 0.6655 0.0466 0.0000 -vt 0.6655 0.0461 0.0000 -vt 0.4071 0.2800 0.0000 -vt 0.4071 0.2805 0.0000 -vt 0.4067 0.2805 0.0000 -vt 0.4067 0.2800 0.0000 -vt 0.5947 0.2805 0.0000 -vt 0.5943 0.2805 0.0000 -vt 0.5943 0.2800 0.0000 -vt 0.5947 0.2800 0.0000 -vt 0.6118 0.0461 0.0000 -vt 0.6118 0.0466 0.0000 -vt 0.5934 0.0466 0.0000 -vt 0.5934 0.0461 0.0000 -vt 0.6479 0.1183 0.0000 -vt 0.6479 0.1188 0.0000 -vt 0.6294 0.1188 0.0000 -vt 0.6294 0.1183 0.0000 -vt 0.3954 0.0642 0.0000 -vt 0.3954 0.0646 0.0000 -vt 0.3769 0.0646 0.0000 -vt 0.3769 0.0642 0.0000 -vt 0.7922 0.0281 0.0000 -vt 0.7922 0.0285 0.0000 -vt 0.7737 0.0285 0.0000 -vt 0.7737 0.0281 0.0000 -vt 0.1739 0.1364 0.0000 -vt 0.1739 0.1368 0.0000 -vt 0.1735 0.1368 0.0000 -vt 0.1735 0.1364 0.0000 -vt 0.3183 0.0646 0.0000 -vt 0.3178 0.0646 0.0000 -vt 0.3178 0.0642 0.0000 -vt 0.3183 0.0642 0.0000 -vt 0.6479 0.0281 0.0000 -vt 0.6479 0.0285 0.0000 -vt 0.6294 0.0285 0.0000 -vt 0.6294 0.0281 0.0000 -vt 0.7561 0.0461 0.0000 -vt 0.7561 0.0466 0.0000 -vt 0.7377 0.0466 0.0000 -vt 0.7377 0.0461 0.0000 -vt 0.3232 0.1364 0.0000 -vt 0.3232 0.1368 0.0000 -vt 0.3047 0.1368 0.0000 -vt 0.3047 0.1364 0.0000 -vt 0.7200 0.1183 0.0000 -vt 0.7200 0.1188 0.0000 -vt 0.7016 0.1188 0.0000 -vt 0.7016 0.1183 0.0000 -vt 0.3232 0.0592 0.0000 -vt 0.3232 0.0597 0.0000 -vt 0.3228 0.0597 0.0000 -vt 0.3228 0.0592 0.0000 -vt 0.3954 0.0235 0.0000 -vt 0.3949 0.0235 0.0000 -vt 0.3949 0.0231 0.0000 -vt 0.3954 0.0231 0.0000 -vt 0.4675 0.1364 0.0000 -vt 0.4675 0.1368 0.0000 -vt 0.4490 0.1368 0.0000 -vt 0.4490 0.1364 0.0000 -vt 0.6479 0.1003 0.0000 -vt 0.6479 0.1007 0.0000 -vt 0.6294 0.1007 0.0000 -vt 0.6294 0.1003 0.0000 -vt 0.5036 0.1364 0.0000 -vt 0.5036 0.1368 0.0000 -vt 0.4851 0.1368 0.0000 -vt 0.4851 0.1364 0.0000 -vt 0.0419 0.4279 0.0000 -vt 0.0419 0.4284 0.0000 -vt 0.0234 0.4284 0.0000 -vt 0.0234 0.4279 0.0000 -vt 0.0111 0.2140 0.0000 -vt 0.0111 0.2145 0.0000 -vt 0.0107 0.2145 0.0000 -vt 0.0107 0.2140 0.0000 -vt 0.1670 0.4297 0.0000 -vt 0.1670 0.4301 0.0000 -vt 0.1666 0.4301 0.0000 -vt 0.1666 0.4297 0.0000 -vt 0.5397 0.1003 0.0000 -vt 0.5397 0.1007 0.0000 -vt 0.5212 0.1007 0.0000 -vt 0.5212 0.1003 0.0000 -vt 0.7200 0.0461 0.0000 -vt 0.7200 0.0466 0.0000 -vt 0.7016 0.0466 0.0000 -vt 0.7016 0.0461 0.0000 -vt 0.5757 0.0100 0.0000 -vt 0.5757 0.0104 0.0000 -vt 0.5573 0.0104 0.0000 -vt 0.5573 0.0100 0.0000 -vt 0.0419 0.7297 0.0000 -vt 0.0419 0.7301 0.0000 -vt 0.0234 0.7301 0.0000 -vt 0.0234 0.7297 0.0000 -vt 0.5369 0.3291 0.0000 -vt 0.5373 0.3291 0.0000 -vt 0.5373 0.3296 0.0000 -vt 0.5369 0.3296 0.0000 -vt 0.2823 0.0777 0.0000 -vt 0.2818 0.0777 0.0000 -vt 0.2818 0.0773 0.0000 -vt 0.2823 0.0773 0.0000 -vt 0.5757 0.0822 0.0000 -vt 0.5757 0.0827 0.0000 -vt 0.5573 0.0827 0.0000 -vt 0.5573 0.0822 0.0000 -vt 0.6479 0.0822 0.0000 -vt 0.6479 0.0827 0.0000 -vt 0.6294 0.0827 0.0000 -vt 0.6294 0.0822 0.0000 -vt 0.4314 0.1003 0.0000 -vt 0.4314 0.1007 0.0000 -vt 0.4130 0.1007 0.0000 -vt 0.4130 0.1003 0.0000 -vt 0.0419 0.5285 0.0000 -vt 0.0419 0.5290 0.0000 -vt 0.0234 0.5290 0.0000 -vt 0.0234 0.5285 0.0000 -vt 0.6052 0.1452 0.0000 -vt 0.6052 0.1456 0.0000 -vt 0.6047 0.1456 0.0000 -vt 0.6047 0.1452 0.0000 -vt 0.4132 0.1644 0.0000 -vt 0.4127 0.1644 0.0000 -vt 0.4127 0.1639 0.0000 -vt 0.4132 0.1639 0.0000 -vt 0.6118 0.0642 0.0000 -vt 0.6118 0.0646 0.0000 -vt 0.5934 0.0646 0.0000 -vt 0.5934 0.0642 0.0000 -vt 0.7561 0.0100 0.0000 -vt 0.7561 0.0104 0.0000 -vt 0.7377 0.0104 0.0000 -vt 0.7377 0.0100 0.0000 -vt 0.5397 0.0461 0.0000 -vt 0.5397 0.0466 0.0000 -vt 0.5212 0.0466 0.0000 -vt 0.5212 0.0461 0.0000 -vt 0.7922 0.1003 0.0000 -vt 0.7922 0.1007 0.0000 -vt 0.7737 0.1007 0.0000 -vt 0.7737 0.1003 0.0000 -vt 0.2311 0.1727 0.0000 -vt 0.2311 0.1732 0.0000 -vt 0.2307 0.1732 0.0000 -vt 0.2307 0.1727 0.0000 -vt 0.0391 0.1919 0.0000 -vt 0.0387 0.1919 0.0000 -vt 0.0387 0.1914 0.0000 -vt 0.0391 0.1914 0.0000 -vt 0.6840 0.0281 0.0000 -vt 0.6840 0.0285 0.0000 -vt 0.6655 0.0285 0.0000 -vt 0.6655 0.0281 0.0000 -vt 0.6479 0.0642 0.0000 -vt 0.6479 0.0646 0.0000 -vt 0.6294 0.0646 0.0000 -vt 0.6294 0.0642 0.0000 -vt 0.3954 0.1364 0.0000 -vt 0.3954 0.1368 0.0000 -vt 0.3769 0.1368 0.0000 -vt 0.3769 0.1364 0.0000 -vt 0.6840 0.1364 0.0000 -vt 0.6840 0.1368 0.0000 -vt 0.6655 0.1368 0.0000 -vt 0.6655 0.1364 0.0000 -vt 0.0106 0.2278 0.0000 -vt 0.0106 0.2282 0.0000 -vt 0.0101 0.2282 0.0000 -vt 0.0101 0.2278 0.0000 -vt 0.3904 0.0285 0.0000 -vt 0.3900 0.0285 0.0000 -vt 0.3900 0.0281 0.0000 -vt 0.3904 0.0281 0.0000 -vt 0.7200 0.0100 0.0000 -vt 0.7200 0.0104 0.0000 -vt 0.7016 0.0104 0.0000 -vt 0.7016 0.0100 0.0000 -vt 0.7922 0.0100 0.0000 -vt 0.7922 0.0104 0.0000 -vt 0.7737 0.0104 0.0000 -vt 0.7737 0.0100 0.0000 -vt 0.5036 0.0822 0.0000 -vt 0.5036 0.0827 0.0000 -vt 0.4851 0.0827 0.0000 -vt 0.4851 0.0822 0.0000 -vt 0.7922 0.0461 0.0000 -vt 0.7922 0.0466 0.0000 -vt 0.7737 0.0466 0.0000 -vt 0.7737 0.0461 0.0000 -# 1770 texture coords - -g fangzi4_2 -usemtl Material__2596 -s 2 -f 1/1/1 2/2/1 3/3/1 4/4/1 -s 4 -f 5/5/2 6/6/3 7/7/2 8/8/2 -f 9/9/3 8/8/2 7/7/2 -s 8 -f 1/10/4 4/11/4 10/12/4 11/13/4 -f 1/10/4 11/13/4 12/14/4 13/15/4 -s 16 -f 4/16/5 3/17/5 14/18/5 10/19/5 -s 32 -f 3/20/6 2/21/6 15/22/6 16/23/6 -f 3/20/6 16/23/6 17/24/6 14/25/6 -s 64 -f 2/26/7 1/27/7 13/28/7 15/29/7 -s 4 -f 18/30/8 19/31/3 20/32/3 21/33/3 -f 22/34/8 18/30/8 21/33/3 -f 11/35/3 23/36/3 24/37/3 12/38/3 -f 20/32/3 6/6/3 5/5/2 21/33/3 -s off -f 13/15/4 12/14/4 8/39/4 9/40/4 -f 12/41/5 24/42/5 5/43/5 8/44/5 -f 24/45/4 23/46/4 21/47/4 5/48/4 -f 23/49/7 11/50/7 22/51/7 21/52/7 -f 11/13/4 10/12/4 18/53/4 22/54/4 -f 10/19/5 14/18/5 19/55/5 18/56/5 -f 14/25/6 17/24/6 20/57/6 19/58/6 -f 17/24/6 16/23/6 6/59/6 20/57/6 -f 16/23/6 15/22/6 7/60/6 6/59/6 -f 15/29/7 13/28/7 9/61/7 7/62/7 -s 2 -f 25/63/1 26/64/1 27/65/1 28/66/1 -s 4 -f 29/67/3 30/68/3 31/69/3 32/70/3 -f 33/71/3 32/70/3 31/69/3 -s 8 -f 25/72/4 28/73/4 34/74/4 35/75/4 -f 25/72/4 35/75/4 36/76/4 37/77/4 -s 16 -f 28/78/5 27/79/5 38/80/5 34/81/5 -s 32 -f 27/82/6 26/83/6 39/84/6 40/85/6 -f 27/82/6 40/85/6 41/86/6 38/87/6 -s 64 -f 26/88/7 25/89/7 37/90/7 39/91/7 -s 4 -f 42/92/3 43/93/3 44/94/3 45/95/3 -f 46/96/3 42/92/3 45/95/3 -f 35/97/3 47/98/3 48/99/3 36/100/3 -f 44/94/3 30/68/3 29/67/3 45/95/3 -s off -f 37/77/4 36/76/4 32/101/4 33/102/4 -f 36/103/5 48/104/5 29/105/5 32/106/5 -f 48/107/4 47/108/4 45/109/4 29/110/4 -f 47/111/7 35/112/7 46/113/7 45/114/7 -f 35/75/4 34/74/4 42/115/4 46/116/4 -f 34/81/5 38/80/5 43/117/5 42/118/5 -f 38/87/6 41/86/6 44/119/6 43/120/6 -f 41/86/6 40/85/6 30/121/6 44/119/6 -f 40/85/6 39/84/6 31/122/6 30/121/6 -f 39/91/7 37/90/7 33/123/7 31/124/7 -s 1 -f 49/125/5 50/126/5 51/127/5 52/128/5 -s 4 -f 53/129/4 49/130/4 52/131/4 54/132/4 -s 2 -f 55/133/5 53/134/5 54/135/5 56/136/5 -s 4 -f 57/137/6 55/138/6 56/139/6 58/140/6 -s 2 -f 59/141/7 57/142/7 58/143/7 60/144/7 -s 4 -f 50/145/4 59/146/4 60/147/4 51/148/4 -s 16 -f 56/149/1 54/150/1 52/151/1 58/152/1 -f 58/152/1 52/151/1 51/153/1 60/154/1 -f 57/155/3 59/156/3 50/157/3 49/158/3 -f 49/158/3 53/159/3 55/160/3 57/155/3 -s 1 -f 61/161/5 62/162/5 63/163/5 64/164/5 -s 4 -f 65/165/4 61/166/4 64/167/4 66/168/4 -s 2 -f 67/169/5 65/170/5 66/171/5 68/172/5 -s 4 -f 69/173/6 67/174/6 68/175/6 70/176/6 -s 2 -f 71/177/7 69/178/7 70/179/7 72/180/7 -s 4 -f 62/181/4 71/182/4 72/183/4 63/184/4 -s 16 -f 68/185/1 66/186/1 64/187/1 70/188/1 -f 70/188/1 64/187/1 63/189/1 72/190/1 -f 69/191/3 71/192/3 62/193/3 61/194/3 -f 61/194/3 65/195/3 67/196/3 69/191/3 -s 1 -f 73/197/5 74/198/5 75/199/5 76/200/5 -s 4 -f 77/201/4 73/202/4 76/203/4 78/204/4 -s 2 -f 79/205/5 77/206/5 78/207/5 80/208/5 -s 4 -f 81/209/6 79/210/6 80/211/6 82/212/6 -s 2 -f 83/213/7 81/214/7 82/215/7 84/216/7 -s 4 -f 74/217/4 83/218/4 84/219/4 75/220/4 -s 16 -f 80/221/1 78/222/1 76/223/1 82/224/1 -f 82/224/1 76/223/1 75/225/1 84/226/1 -f 81/227/3 83/228/3 74/229/3 73/230/3 -f 73/230/3 77/231/3 79/232/3 81/227/3 -s 1 -f 85/233/5 86/234/5 87/235/5 88/236/5 -s 4 -f 89/237/4 85/238/4 88/239/4 90/240/4 -s 2 -f 91/241/5 89/242/5 90/243/5 92/244/5 -s 4 -f 93/245/6 91/246/6 92/247/6 94/248/6 -s 2 -f 95/249/7 93/250/7 94/251/7 96/252/7 -s 4 -f 86/253/4 95/254/4 96/255/4 87/256/4 -s 16 -f 92/257/1 90/258/1 88/259/1 94/260/1 -f 94/260/1 88/259/1 87/261/1 96/262/1 -f 93/263/3 95/264/3 86/265/3 85/266/3 -f 85/266/3 89/267/3 91/268/3 93/263/3 -s 1 -f 97/269/5 98/270/5 99/271/5 100/272/5 -s 4 -f 101/273/4 97/274/4 100/275/4 102/276/4 -s 2 -f 103/277/5 101/278/5 102/279/5 104/280/5 -s 4 -f 105/281/6 103/282/6 104/283/6 106/284/6 -s 2 -f 107/285/7 105/286/7 106/287/7 108/288/7 -s 4 -f 98/289/4 107/290/4 108/291/4 99/292/4 -s 16 -f 104/293/1 102/294/1 100/295/1 106/296/1 -f 106/296/1 100/295/1 99/297/1 108/298/1 -f 105/299/3 107/300/3 98/301/3 97/302/3 -f 97/302/3 101/303/3 103/304/3 105/299/3 -s 1 -f 109/305/5 110/306/5 111/307/5 112/308/5 -s 4 -f 113/309/4 109/310/4 112/311/4 114/312/4 -s 2 -f 115/313/5 113/314/5 114/315/5 116/316/5 -s 4 -f 117/317/6 115/318/6 116/319/6 118/320/6 -s 2 -f 119/321/7 117/322/7 118/323/7 120/324/7 -s 4 -f 110/325/4 119/326/4 120/327/4 111/328/4 -s 16 -f 116/329/1 114/330/1 112/331/1 118/332/1 -f 118/332/1 112/331/1 111/333/1 120/334/1 -f 117/335/3 119/336/3 110/337/3 109/338/3 -f 109/338/3 113/339/3 115/340/3 117/335/3 -s 1 -f 121/341/5 122/342/5 123/343/5 124/344/5 -s 4 -f 125/345/4 121/346/4 124/347/4 126/348/4 -s 2 -f 127/349/5 125/350/5 126/351/5 128/352/5 -s 4 -f 129/353/6 127/354/6 128/355/6 130/356/6 -s 2 -f 131/357/7 129/358/7 130/359/7 132/360/7 -s 4 -f 122/361/4 131/362/4 132/363/4 123/364/4 -s 16 -f 128/365/1 126/366/1 124/367/1 130/368/1 -f 130/368/1 124/367/1 123/369/1 132/370/1 -f 129/371/3 131/372/3 122/373/3 121/374/3 -f 121/374/3 125/375/3 127/376/3 129/371/3 -s 1 -f 133/377/5 134/378/5 135/379/5 136/380/5 -s 4 -f 137/381/4 133/382/4 136/383/4 138/384/4 -s 2 -f 139/385/5 137/386/5 138/387/5 140/388/5 -s 4 -f 141/389/6 139/390/6 140/391/6 142/392/6 -s 2 -f 143/393/7 141/394/7 142/395/7 144/396/7 -s 4 -f 134/397/4 143/398/4 144/399/4 135/400/4 -s 16 -f 140/401/1 138/402/1 136/403/1 142/404/1 -f 142/404/1 136/403/1 135/405/1 144/406/1 -f 141/407/3 143/408/3 134/409/3 133/410/3 -f 133/410/3 137/411/3 139/412/3 141/407/3 -s 2 -f 145/413/1 146/414/1 147/415/1 148/416/1 -s 4 -f 149/417/3 150/418/3 151/419/3 152/420/3 -s 8 -f 145/421/9 148/422/9 150/423/9 149/424/9 -s 16 -f 148/425/5 147/426/5 151/427/5 150/428/5 -s 32 -f 147/429/6 146/430/6 152/431/6 151/432/6 -s 64 -f 146/433/7 145/434/7 149/435/7 152/436/7 -s 2 -f 153/437/1 154/438/1 155/439/1 156/440/1 -s 4 -f 157/441/3 158/442/3 159/443/3 160/444/3 -s 8 -f 153/445/9 156/446/9 158/447/9 157/448/9 -s 16 -f 156/449/5 155/450/5 159/451/5 158/452/5 -s 32 -f 155/453/6 154/454/6 160/455/6 159/456/6 -s 64 -f 154/457/7 153/458/7 157/459/7 160/460/7 -s 2 -f 161/461/1 162/462/1 163/463/1 164/464/1 -s 4 -f 165/465/3 166/466/3 167/467/3 168/468/3 -s 8 -f 161/469/9 164/470/9 166/471/9 165/472/9 -s 16 -f 164/473/5 163/474/5 167/475/5 166/476/5 -s 32 -f 163/477/6 162/478/6 168/479/6 167/480/6 -s 64 -f 162/481/7 161/482/7 165/483/7 168/484/7 -s 2 -f 169/485/1 170/486/1 171/487/1 172/488/1 -s 4 -f 173/489/3 174/490/3 175/491/3 176/492/3 -s 8 -f 169/493/9 172/494/9 174/495/9 173/496/9 -s 16 -f 172/497/5 171/498/5 175/499/5 174/500/5 -s 32 -f 171/501/6 170/502/6 176/503/6 175/504/6 -s 64 -f 170/505/7 169/506/7 173/507/7 176/508/7 -s 2 -f 177/509/1 178/510/1 179/511/1 180/512/1 -s 4 -f 181/513/3 182/514/3 183/515/3 184/516/3 -s 8 -f 177/517/9 180/518/9 182/519/9 181/520/9 -s 16 -f 180/521/5 179/522/5 183/523/5 182/524/5 -s 32 -f 179/525/6 178/526/6 184/527/6 183/528/6 -s 64 -f 178/529/7 177/530/7 181/531/7 184/532/7 -s 2 -f 185/533/1 186/534/1 187/535/1 188/536/1 -s 4 -f 189/537/3 190/538/3 191/539/3 192/540/3 -s 8 -f 185/541/9 188/542/9 190/543/9 189/544/9 -s 16 -f 188/545/5 187/546/5 191/547/5 190/548/5 -s 32 -f 187/549/6 186/550/6 192/551/6 191/552/6 -s 64 -f 186/553/7 185/554/7 189/555/7 192/556/7 -s 2 -f 193/557/1 194/558/1 195/559/1 196/560/1 -s 4 -f 197/561/3 198/562/3 199/563/3 200/564/3 -s 8 -f 193/565/9 196/566/9 198/567/9 197/568/9 -s 16 -f 196/569/5 195/570/5 199/571/5 198/572/5 -s 32 -f 195/573/6 194/574/6 200/575/6 199/576/6 -s 64 -f 194/577/7 193/578/7 197/579/7 200/580/7 -s 2 -f 201/581/1 202/582/1 203/583/1 204/584/1 -s 4 -f 205/585/3 206/586/3 207/587/3 208/588/3 -s 8 -f 201/589/9 204/590/9 206/591/9 205/592/9 -s 16 -f 204/593/5 203/594/5 207/595/5 206/596/5 -s 32 -f 203/597/6 202/598/6 208/599/6 207/600/6 -s 64 -f 202/601/7 201/602/7 205/603/7 208/604/7 -s 2 -f 209/605/1 210/606/1 211/607/1 212/608/1 -s 4 -f 213/609/3 214/610/3 215/611/3 216/612/3 -s 8 -f 209/613/9 212/614/9 214/615/9 213/616/9 -s 16 -f 212/617/5 211/618/5 215/619/5 214/620/5 -s 32 -f 211/621/6 210/622/6 216/623/6 215/624/6 -s 64 -f 210/625/7 209/626/7 213/627/7 216/628/7 -s 2 -f 217/629/1 218/630/1 219/631/1 220/632/1 -s 4 -f 221/633/3 222/634/3 223/635/3 224/636/3 -s 8 -f 217/637/9 220/638/9 222/639/9 221/640/9 -s 16 -f 220/641/5 219/642/5 223/643/5 222/644/5 -s 32 -f 219/645/6 218/646/6 224/647/6 223/648/6 -s 64 -f 218/649/7 217/650/7 221/651/7 224/652/7 -s 2 -f 225/653/1 226/654/1 227/655/1 228/656/1 -s 4 -f 229/657/3 230/658/3 231/659/3 232/660/3 -s 8 -f 225/661/9 228/662/9 230/663/9 229/664/9 -s 16 -f 228/665/5 227/666/5 231/667/5 230/668/5 -s 32 -f 227/669/6 226/670/6 232/671/6 231/672/6 -s 64 -f 226/673/7 225/674/7 229/675/7 232/676/7 -s 2 -f 233/677/1 234/678/1 235/679/1 236/680/1 -s 4 -f 237/681/2 238/682/3 239/683/2 240/684/2 -f 241/685/3 240/684/2 239/683/2 -s 8 -f 233/686/4 236/687/4 242/688/4 243/689/4 -f 233/686/4 243/689/4 244/690/4 245/691/4 -s 16 -f 236/692/5 235/693/5 246/694/5 242/695/5 -s 32 -f 235/696/6 234/697/6 247/698/6 248/699/6 -f 235/696/6 248/699/6 249/700/6 246/701/6 -s 64 -f 234/702/7 233/703/7 245/704/7 247/705/7 -s 4 -f 250/706/3 251/707/3 252/708/3 253/709/3 -f 254/710/3 250/706/3 253/709/3 -f 243/711/3 255/712/3 256/713/3 244/714/3 -f 252/708/3 238/682/3 237/681/2 253/709/3 -s off -f 245/691/4 244/690/4 240/715/4 241/716/4 -f 244/717/5 256/718/5 237/719/5 240/720/5 -f 256/721/4 255/722/4 253/723/4 237/724/4 -f 255/725/7 243/726/7 254/727/7 253/728/7 -f 243/689/4 242/688/4 250/729/4 254/730/4 -f 242/695/5 246/694/5 251/731/5 250/732/5 -f 246/701/6 249/700/6 252/733/6 251/734/6 -f 249/700/6 248/699/6 238/735/6 252/733/6 -f 248/699/6 247/698/6 239/736/6 238/735/6 -f 247/705/7 245/704/7 241/737/7 239/738/7 -s 1 -f 257/739/5 258/740/5 259/741/5 260/742/5 -s 4 -f 261/743/4 257/744/4 260/745/4 262/746/4 -s 2 -f 263/747/5 261/748/5 262/749/5 264/750/5 -s 4 -f 265/751/6 263/752/6 264/753/6 266/754/6 -s 2 -f 267/755/7 265/756/7 266/757/7 268/758/7 -s 4 -f 258/759/4 267/760/4 268/761/4 259/762/4 -s 16 -f 264/763/1 262/764/1 260/765/1 266/766/1 -f 266/766/1 260/765/1 259/767/1 268/768/1 -f 265/769/3 267/770/3 258/771/3 257/772/3 -f 257/772/3 261/773/3 263/774/3 265/769/3 -s 1 -f 269/775/5 270/776/5 271/777/5 272/778/5 -s 4 -f 273/779/4 269/780/4 272/781/4 274/782/4 -s 2 -f 275/783/5 273/784/5 274/785/5 276/786/5 -s 4 -f 277/787/6 275/788/6 276/789/6 278/790/6 -s 2 -f 279/791/7 277/792/7 278/793/7 280/794/7 -s 4 -f 270/795/4 279/796/4 280/797/4 271/798/4 -s 16 -f 276/799/1 274/800/1 272/801/1 278/802/1 -f 278/802/1 272/801/1 271/803/1 280/804/1 -f 277/805/3 279/806/3 270/807/3 269/808/3 -f 269/808/3 273/809/3 275/810/3 277/805/3 -s 1 -f 281/811/5 282/812/5 283/813/5 284/814/5 -s 4 -f 285/815/4 281/816/4 284/817/4 286/818/4 -s 2 -f 287/819/5 285/820/5 286/821/5 288/822/5 -s 4 -f 289/823/6 287/824/6 288/825/6 290/826/6 -s 2 -f 291/827/7 289/828/7 290/829/7 292/830/7 -s 4 -f 282/831/4 291/832/4 292/833/4 283/834/4 -s 16 -f 288/835/1 286/836/1 284/837/1 290/838/1 -f 290/838/1 284/837/1 283/839/1 292/840/1 -f 289/841/3 291/842/3 282/843/3 281/844/3 -f 281/844/3 285/845/3 287/846/3 289/841/3 -s 1 -f 293/847/5 294/848/5 295/849/5 296/850/5 -s 4 -f 297/851/4 293/852/4 296/853/4 298/854/4 -s 2 -f 299/855/5 297/856/5 298/857/5 300/858/5 -s 4 -f 301/859/6 299/860/6 300/861/6 302/862/6 -s 2 -f 303/863/7 301/864/7 302/865/7 304/866/7 -s 4 -f 294/867/4 303/868/4 304/869/4 295/870/4 -s 16 -f 300/871/1 298/872/1 296/873/1 302/874/1 -f 302/874/1 296/873/1 295/875/1 304/876/1 -f 301/877/3 303/878/3 294/879/3 293/880/3 -f 293/880/3 297/881/3 299/882/3 301/877/3 -s 1 -f 305/883/5 306/884/5 307/885/5 308/886/5 -s 4 -f 309/887/4 305/888/4 308/889/4 310/890/4 -s 2 -f 311/891/5 309/892/5 310/893/5 312/894/5 -s 4 -f 313/895/6 311/896/6 312/897/6 314/898/6 -s 2 -f 315/899/7 313/900/7 314/901/7 316/902/7 -s 4 -f 306/903/4 315/904/4 316/905/4 307/906/4 -s 16 -f 312/907/1 310/908/1 308/909/1 314/910/1 -f 314/910/1 308/909/1 307/911/1 316/912/1 -f 313/913/3 315/914/3 306/915/3 305/916/3 -f 305/916/3 309/917/3 311/918/3 313/913/3 -s 1 -f 317/919/5 318/920/5 319/921/5 320/922/5 -s 4 -f 321/923/4 317/924/4 320/925/4 322/926/4 -s 2 -f 323/927/5 321/928/5 322/929/5 324/930/5 -s 4 -f 325/931/6 323/932/6 324/933/6 326/934/6 -s 2 -f 327/935/7 325/936/7 326/937/7 328/938/7 -s 4 -f 318/939/4 327/940/4 328/941/4 319/942/4 -s 16 -f 324/943/1 322/944/1 320/945/1 326/946/1 -f 326/946/1 320/945/1 319/947/1 328/948/1 -f 325/949/3 327/950/3 318/951/3 317/952/3 -f 317/952/3 321/953/3 323/954/3 325/949/3 -s 1 -f 329/955/5 330/956/5 331/957/5 332/958/5 -s 4 -f 333/959/4 329/960/4 332/961/4 334/962/4 -s 2 -f 335/963/5 333/964/5 334/965/5 336/966/5 -s 4 -f 337/967/6 335/968/6 336/969/6 338/970/6 -s 2 -f 339/971/7 337/972/7 338/973/7 340/974/7 -s 4 -f 330/975/4 339/976/4 340/977/4 331/978/4 -s 16 -f 336/979/1 334/980/1 332/981/1 338/982/1 -f 338/982/1 332/981/1 331/983/1 340/984/1 -f 337/985/3 339/986/3 330/987/3 329/988/3 -f 329/988/3 333/989/3 335/990/3 337/985/3 -s 1 -f 341/991/5 342/992/5 343/993/5 344/994/5 -s 4 -f 345/995/4 341/996/4 344/997/4 346/998/4 -s 2 -f 347/999/5 345/1000/5 346/1001/5 348/1002/5 -s 4 -f 349/1003/6 347/1004/6 348/1005/6 350/1006/6 -s 2 -f 351/1007/7 349/1008/7 350/1009/7 352/1010/7 -s 4 -f 342/1011/4 351/1012/4 352/1013/4 343/1014/4 -s 16 -f 348/1015/1 346/1016/1 344/1017/1 350/1018/1 -f 350/1018/1 344/1017/1 343/1019/1 352/1020/1 -f 349/1021/3 351/1022/3 342/1023/3 341/1024/3 -f 341/1024/3 345/1025/3 347/1026/3 349/1021/3 -s 2 -f 353/1027/1 354/1028/1 355/1029/1 356/1030/1 -s 4 -f 357/1031/3 358/1032/3 359/1033/3 360/1034/3 -s 8 -f 353/1035/9 356/1036/9 358/1037/9 357/1038/9 -s 16 -f 356/1039/5 355/1040/5 359/1041/5 358/1042/5 -s 32 -f 355/1043/6 354/1044/6 360/1045/6 359/1046/6 -s 64 -f 354/1047/7 353/1048/7 357/1049/7 360/1050/7 -s 2 -f 361/1051/1 362/1052/1 363/1053/1 364/1054/1 -s 4 -f 365/1055/3 366/1056/3 367/1057/3 368/1058/3 -s 8 -f 361/1059/9 364/1060/9 366/1061/9 365/1062/9 -s 16 -f 364/1063/5 363/1064/5 367/1065/5 366/1066/5 -s 32 -f 363/1067/6 362/1068/6 368/1069/6 367/1070/6 -s 64 -f 362/1071/7 361/1072/7 365/1073/7 368/1074/7 -s 2 -f 369/1075/1 370/1076/1 371/1077/1 372/1078/1 -s 4 -f 373/1079/3 374/1080/3 375/1081/3 376/1082/3 -s 8 -f 369/1083/9 372/1084/9 374/1085/9 373/1086/9 -s 16 -f 372/1087/5 371/1088/5 375/1089/5 374/1090/5 -s 32 -f 371/1091/6 370/1092/6 376/1093/6 375/1094/6 -s 64 -f 370/1095/7 369/1096/7 373/1097/7 376/1098/7 -s 2 -f 377/1099/1 378/1100/1 379/1101/1 380/1102/1 -s 4 -f 381/1103/3 382/1104/3 383/1105/3 384/1106/3 -s 8 -f 377/1107/9 380/1108/9 382/1109/9 381/1110/9 -s 16 -f 380/1111/5 379/1112/5 383/1113/5 382/1114/5 -s 32 -f 379/1115/6 378/1116/6 384/1117/6 383/1118/6 -s 64 -f 378/1119/7 377/1120/7 381/1121/7 384/1122/7 -s 2 -f 385/1123/1 386/1124/1 387/1125/1 388/1126/1 -s 4 -f 389/1127/3 390/1128/3 391/1129/3 392/1130/3 -s 8 -f 385/1131/9 388/1132/9 390/1133/9 389/1134/9 -s 16 -f 388/1135/5 387/1136/5 391/1137/5 390/1138/5 -s 32 -f 387/1139/6 386/1140/6 392/1141/6 391/1142/6 -s 64 -f 386/1143/7 385/1144/7 389/1145/7 392/1146/7 -s 2 -f 393/1147/1 394/1148/1 395/1149/1 396/1150/1 -s 4 -f 397/1151/3 398/1152/3 399/1153/3 400/1154/3 -s 8 -f 393/1155/9 396/1156/9 398/1157/9 397/1158/9 -s 16 -f 396/1159/5 395/1160/5 399/1161/5 398/1162/5 -s 32 -f 395/1163/6 394/1164/6 400/1165/6 399/1166/6 -s 64 -f 394/1167/7 393/1168/7 397/1169/7 400/1170/7 -s 2 -f 401/1171/1 402/1172/1 403/1173/1 404/1174/1 -s 4 -f 405/1175/3 406/1176/3 407/1177/3 408/1178/3 -s 8 -f 401/1179/9 404/1180/9 406/1181/9 405/1182/9 -s 16 -f 404/1183/5 403/1184/5 407/1185/5 406/1186/5 -s 32 -f 403/1187/6 402/1188/6 408/1189/6 407/1190/6 -s 64 -f 402/1191/7 401/1192/7 405/1193/7 408/1194/7 -s 2 -f 409/1195/1 410/1196/1 411/1197/1 412/1198/1 -s 4 -f 413/1199/3 414/1200/3 415/1201/3 416/1202/3 -s 8 -f 409/1203/9 412/1204/9 414/1205/9 413/1206/9 -s 16 -f 412/1207/5 411/1208/5 415/1209/5 414/1210/5 -s 32 -f 411/1211/6 410/1212/6 416/1213/6 415/1214/6 -s 64 -f 410/1215/7 409/1216/7 413/1217/7 416/1218/7 -s 2 -f 417/1219/1 418/1220/1 419/1221/1 420/1222/1 -s 4 -f 421/1223/3 422/1224/3 423/1225/3 424/1226/3 -s 8 -f 417/1227/9 420/1228/9 422/1229/9 421/1230/9 -s 16 -f 420/1231/5 419/1232/5 423/1233/5 422/1234/5 -s 32 -f 419/1235/6 418/1236/6 424/1237/6 423/1238/6 -s 64 -f 418/1239/7 417/1240/7 421/1241/7 424/1242/7 -s 2 -f 425/1243/1 426/1244/1 427/1245/1 428/1246/1 -s 4 -f 429/1247/3 430/1248/3 431/1249/3 432/1250/3 -s 8 -f 425/1251/9 428/1252/9 430/1253/9 429/1254/9 -s 16 -f 428/1255/5 427/1256/5 431/1257/5 430/1258/5 -s 32 -f 427/1259/6 426/1260/6 432/1261/6 431/1262/6 -s 64 -f 426/1263/7 425/1264/7 429/1265/7 432/1266/7 -s 1 -f 433/1267/5 434/1268/5 435/1269/5 436/1270/5 -s 4 -f 437/1271/4 433/1272/4 436/1273/4 438/1274/4 -s 2 -f 439/1275/5 437/1276/5 438/1277/5 440/1278/5 -s 4 -f 441/1279/6 439/1280/6 440/1281/6 442/1282/6 -s 2 -f 443/1283/7 441/1284/7 442/1285/7 444/1286/7 -s 4 -f 434/1287/4 443/1288/4 444/1289/4 435/1290/4 -s 16 -f 440/1291/1 438/1292/1 436/1293/1 442/1294/1 -f 442/1294/1 436/1293/1 435/1295/1 444/1296/1 -f 441/1297/3 443/1298/3 434/1299/3 433/1300/3 -f 433/1300/3 437/1301/3 439/1302/3 441/1297/3 -s 1 -f 445/1303/5 446/1304/5 447/1305/5 448/1306/5 -s 4 -f 449/1307/4 445/1308/4 448/1309/4 450/1310/4 -s 2 -f 451/1311/5 449/1312/5 450/1313/5 452/1314/5 -s 4 -f 453/1315/6 451/1316/6 452/1317/6 454/1318/6 -s 2 -f 455/1319/7 453/1320/7 454/1321/7 456/1322/7 -s 4 -f 446/1323/4 455/1324/4 456/1325/4 447/1326/4 -s 16 -f 452/1327/1 450/1328/1 448/1329/1 454/1330/1 -f 454/1330/1 448/1329/1 447/1331/1 456/1332/1 -f 453/1333/3 455/1334/3 446/1335/3 445/1336/3 -f 445/1336/3 449/1337/3 451/1338/3 453/1333/3 -s 1 -f 457/1339/5 458/1340/5 459/1341/5 460/1342/5 -s 4 -f 461/1343/4 457/1344/4 460/1345/4 462/1346/4 -s 2 -f 463/1347/5 461/1348/5 462/1349/5 464/1350/5 -s 4 -f 465/1351/6 463/1352/6 464/1353/6 466/1354/6 -s 2 -f 467/1355/7 465/1356/7 466/1357/7 468/1358/7 -s 4 -f 458/1359/4 467/1360/4 468/1361/4 459/1362/4 -s 16 -f 464/1363/1 462/1364/1 460/1365/1 466/1366/1 -f 466/1366/1 460/1365/1 459/1367/1 468/1368/1 -f 465/1369/3 467/1370/3 458/1371/3 457/1372/3 -f 457/1372/3 461/1373/3 463/1374/3 465/1369/3 -s 1 -f 469/1375/5 470/1376/5 471/1377/5 472/1378/5 -s 4 -f 473/1379/4 469/1380/4 472/1381/4 474/1382/4 -s 2 -f 475/1383/5 473/1384/5 474/1385/5 476/1386/5 -s 4 -f 477/1387/6 475/1388/6 476/1389/6 478/1390/6 -s 2 -f 479/1391/7 477/1392/7 478/1393/7 480/1394/7 -s 4 -f 470/1395/4 479/1396/4 480/1397/4 471/1398/4 -s 16 -f 476/1399/1 474/1400/1 472/1401/1 478/1402/1 -f 478/1402/1 472/1401/1 471/1403/1 480/1404/1 -f 477/1405/3 479/1406/3 470/1407/3 469/1408/3 -f 469/1408/3 473/1409/3 475/1410/3 477/1405/3 -s 1 -f 481/1411/5 482/1412/5 483/1413/5 484/1414/5 -s 4 -f 485/1415/4 481/1416/4 484/1417/4 486/1418/4 -s 2 -f 487/1419/5 485/1420/5 486/1421/5 488/1422/5 -s 4 -f 489/1423/6 487/1424/6 488/1425/6 490/1426/6 -s 2 -f 491/1427/7 489/1428/7 490/1429/7 492/1430/7 -s 4 -f 482/1431/4 491/1432/4 492/1433/4 483/1434/4 -s 16 -f 488/1435/1 486/1436/1 484/1437/1 490/1438/1 -f 490/1438/1 484/1437/1 483/1439/1 492/1440/1 -f 489/1441/3 491/1442/3 482/1443/3 481/1444/3 -f 481/1444/3 485/1445/3 487/1446/3 489/1441/3 -s 1 -f 493/1447/5 494/1448/5 495/1449/5 496/1450/5 -s 4 -f 497/1451/4 493/1452/4 496/1453/4 498/1454/4 -s 2 -f 499/1455/5 497/1456/5 498/1457/5 500/1458/5 -s 4 -f 501/1459/6 499/1460/6 500/1461/6 502/1462/6 -s 2 -f 503/1463/7 501/1464/7 502/1465/7 504/1466/7 -s 4 -f 494/1467/4 503/1468/4 504/1469/4 495/1470/4 -s 16 -f 500/1471/1 498/1472/1 496/1473/1 502/1474/1 -f 502/1474/1 496/1473/1 495/1475/1 504/1476/1 -f 501/1477/3 503/1478/3 494/1479/3 493/1480/3 -f 493/1480/3 497/1481/3 499/1482/3 501/1477/3 -s 1 -f 505/1483/5 506/1484/5 507/1485/5 508/1486/5 -s 4 -f 509/1487/4 505/1488/4 508/1489/4 510/1490/4 -s 2 -f 511/1491/5 509/1492/5 510/1493/5 512/1494/5 -s 4 -f 513/1495/6 511/1496/6 512/1497/6 514/1498/6 -s 2 -f 515/1499/7 513/1500/7 514/1501/7 516/1502/7 -s 4 -f 506/1503/4 515/1504/4 516/1505/4 507/1506/4 -s 16 -f 512/1507/1 510/1508/1 508/1509/1 514/1510/1 -f 514/1510/1 508/1509/1 507/1511/1 516/1512/1 -f 513/1513/3 515/1514/3 506/1515/3 505/1516/3 -f 505/1516/3 509/1517/3 511/1518/3 513/1513/3 -s 1 -f 517/1519/5 518/1520/5 519/1521/5 520/1522/5 -s 4 -f 521/1523/4 517/1524/4 520/1525/4 522/1526/4 -s 2 -f 523/1527/5 521/1528/5 522/1529/5 524/1530/5 -s 4 -f 525/1531/6 523/1532/6 524/1533/6 526/1534/6 -s 2 -f 527/1535/7 525/1536/7 526/1537/7 528/1538/7 -s 4 -f 518/1539/4 527/1540/4 528/1541/4 519/1542/4 -s 16 -f 524/1543/1 522/1544/1 520/1545/1 526/1546/1 -f 526/1546/1 520/1545/1 519/1547/1 528/1548/1 -f 525/1549/3 527/1550/3 518/1551/3 517/1552/3 -f 517/1552/3 521/1553/3 523/1554/3 525/1549/3 -s 2 -f 529/1555/1 530/1556/1 531/1557/1 532/1558/1 -s 4 -f 533/1559/3 534/1560/3 535/1561/3 536/1562/3 -s 8 -f 529/1563/9 532/1564/9 534/1565/9 533/1566/9 -s 16 -f 532/1567/5 531/1568/5 535/1569/5 534/1570/5 -s 32 -f 531/1571/6 530/1572/6 536/1573/6 535/1574/6 -s 64 -f 530/1575/7 529/1576/7 533/1577/7 536/1578/7 -s 2 -f 537/1579/1 538/1580/1 539/1581/1 540/1582/1 -s 4 -f 541/1583/3 542/1584/3 543/1585/3 544/1586/3 -s 8 -f 537/1587/9 540/1588/9 542/1589/9 541/1590/9 -s 16 -f 540/1591/5 539/1592/5 543/1593/5 542/1594/5 -s 32 -f 539/1595/6 538/1596/6 544/1597/6 543/1598/6 -s 64 -f 538/1599/7 537/1600/7 541/1601/7 544/1602/7 -s 2 -f 545/1603/1 546/1604/1 547/1605/1 548/1606/1 -s 4 -f 549/1607/3 550/1608/3 551/1609/3 552/1610/3 -s 8 -f 545/1611/9 548/1612/9 550/1613/9 549/1614/9 -s 16 -f 548/1615/5 547/1616/5 551/1617/5 550/1618/5 -s 32 -f 547/1619/6 546/1620/6 552/1621/6 551/1622/6 -s 64 -f 546/1623/7 545/1624/7 549/1625/7 552/1626/7 -s 2 -f 553/1627/1 554/1628/1 555/1629/1 556/1630/1 -s 4 -f 557/1631/3 558/1632/3 559/1633/3 560/1634/3 -s 8 -f 553/1635/9 556/1636/9 558/1637/9 557/1638/9 -s 16 -f 556/1639/5 555/1640/5 559/1641/5 558/1642/5 -s 32 -f 555/1643/6 554/1644/6 560/1645/6 559/1646/6 -s 64 -f 554/1647/7 553/1648/7 557/1649/7 560/1650/7 -s 2 -f 561/1651/1 562/1652/1 563/1653/1 564/1654/1 -s 4 -f 565/1655/3 566/1656/3 567/1657/3 568/1658/3 -s 8 -f 561/1659/9 564/1660/9 566/1661/9 565/1662/9 -s 16 -f 564/1663/5 563/1664/5 567/1665/5 566/1666/5 -s 32 -f 563/1667/6 562/1668/6 568/1669/6 567/1670/6 -s 64 -f 562/1671/7 561/1672/7 565/1673/7 568/1674/7 -s 2 -f 569/1675/1 570/1676/1 571/1677/1 572/1678/1 -s 4 -f 573/1679/3 574/1680/3 575/1681/3 576/1682/3 -s 8 -f 569/1683/9 572/1684/9 574/1685/9 573/1686/9 -s 16 -f 572/1687/5 571/1688/5 575/1689/5 574/1690/5 -s 32 -f 571/1691/6 570/1692/6 576/1693/6 575/1694/6 -s 64 -f 570/1695/7 569/1696/7 573/1697/7 576/1698/7 -s 2 -f 577/1699/1 578/1700/1 579/1701/1 580/1702/1 -s 4 -f 581/1703/3 582/1704/3 583/1705/3 584/1706/3 -s 8 -f 577/1707/9 580/1708/9 582/1709/9 581/1710/9 -s 16 -f 580/1711/5 579/1712/5 583/1713/5 582/1714/5 -s 32 -f 579/1715/6 578/1716/6 584/1717/6 583/1718/6 -s 64 -f 578/1719/7 577/1720/7 581/1721/7 584/1722/7 -s 2 -f 585/1723/1 586/1724/1 587/1725/1 588/1726/1 -s 4 -f 589/1727/3 590/1728/3 591/1729/3 592/1730/3 -s 8 -f 585/1731/9 588/1732/9 590/1733/9 589/1734/9 -s 16 -f 588/1735/5 587/1736/5 591/1737/5 590/1738/5 -s 32 -f 587/1739/6 586/1740/6 592/1741/6 591/1742/6 -s 64 -f 586/1743/7 585/1744/7 589/1745/7 592/1746/7 -s 2 -f 593/1747/1 594/1748/1 595/1749/1 596/1750/1 -s 4 -f 597/1751/3 598/1752/3 599/1753/3 600/1754/3 -s 8 -f 593/1755/9 596/1756/9 598/1757/9 597/1758/9 -s 16 -f 596/1759/5 595/1760/5 599/1761/5 598/1762/5 -s 32 -f 595/1763/6 594/1764/6 600/1765/6 599/1766/6 -s 64 -f 594/1767/7 593/1768/7 597/1769/7 600/1770/7 -# 483 polygons - 6 triangles - -# -# object fangzi4_4 -# - -v -156.2529 84.6696 -19.2197 -v -156.2529 84.6696 112.2465 -v -243.0753 84.6696 112.2465 -v -243.0753 84.6696 -19.2197 -v -156.2529 114.6696 -19.2197 -v -243.0753 114.6696 -19.2197 -v -243.0753 114.6696 112.2465 -v -156.2529 114.6696 112.2465 -# 8 vertices - -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 -0.0000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 -0.0000 -# 6 vertex normals - -vt 0.5239 0.3494 0.0000 -vt 0.0100 0.3494 0.0000 -vt 0.0100 0.0100 0.0000 -vt 0.5239 0.0100 0.0000 -vt 0.0100 0.7110 0.0000 -vt 0.0100 0.3716 0.0000 -vt 0.5239 0.3716 0.0000 -vt 0.5239 0.7110 0.0000 -vt 0.8855 0.4889 0.0000 -vt 0.5461 0.4889 0.0000 -vt 0.5461 0.3716 0.0000 -vt 0.8855 0.3716 0.0000 -vt 0.5239 0.8505 0.0000 -vt 0.0100 0.8505 0.0000 -vt 0.0100 0.7332 0.0000 -vt 0.5239 0.7332 0.0000 -vt 0.8855 0.1273 0.0000 -vt 0.5461 0.1273 0.0000 -vt 0.5461 0.0100 0.0000 -vt 0.8855 0.0100 0.0000 -vt 0.5239 0.9900 0.0000 -vt 0.0100 0.9900 0.0000 -vt 0.0100 0.8727 0.0000 -vt 0.5239 0.8727 0.0000 -# 24 texture coords - -g fangzi4_4 -usemtl Material__2569 -s 2 -f 601/1771/10 602/1772/10 603/1773/10 604/1774/10 -s 4 -f 605/1775/11 606/1776/11 607/1777/11 608/1778/11 -s 8 -f 608/1779/12 607/1780/12 603/1781/12 602/1782/12 -s 16 -f 605/1783/13 608/1784/13 602/1785/13 601/1786/13 -s 32 -f 606/1787/14 605/1788/14 601/1789/14 604/1790/14 -s 64 -f 607/1791/15 606/1792/15 604/1793/15 603/1794/15 -# 6 polygons - -# -# object fangzi4_3 -# - -v -237.6845 -114.6696 44.2269 -v -237.6845 -114.6696 -123.3472 -v -221.7078 -114.6696 -123.3472 -v -237.6845 -114.6695 67.0635 -v -237.6845 -114.6696 100.7195 -v -100.9245 -114.6696 -123.3472 -v 235.1561 -114.6696 -123.3472 -v 235.1561 -114.6696 -45.4411 -v 235.1561 -114.6696 44.0551 -v 235.1561 -114.6696 100.7195 -v -237.6845 65.3304 100.7195 -v 235.1561 65.3304 100.7195 -v 235.1561 65.3304 44.0551 -v 235.1561 65.3304 -45.4411 -v 235.1561 65.3304 -123.3472 -v -100.9245 65.3304 -123.3472 -v -221.7078 65.3304 -123.3472 -v -237.6845 65.3304 67.0634 -v -237.6845 65.3304 -123.3472 -v -237.6845 65.3304 44.2269 -v 235.1561 -48.2532 44.0551 -v 235.1561 -114.5008 44.0551 -v -100.9245 55.4677 -123.3472 -v -100.9245 33.5057 -123.3472 -v -100.9245 9.1933 -123.3472 -v -100.9245 -12.7687 -123.3472 -v -100.9245 -37.4116 -123.3472 -v -100.9245 -59.3653 -123.3472 -v -100.9245 -70.7291 -123.3472 -v -100.9245 -114.3707 -123.3472 -v -237.6845 54.2127 44.2269 -v -237.6845 31.7127 44.2269 -v -237.6845 7.4938 44.2269 -v -237.6845 -15.0062 44.2269 -v -237.6845 -38.8739 44.2269 -v -237.6845 -61.3739 44.2269 -v -221.7078 -114.3707 -123.3472 -v -221.7078 55.4677 -123.3472 -v -221.7078 33.5057 -123.3472 -v -221.7078 9.1933 -123.3472 -v -221.7078 -12.7687 -123.3472 -v -221.7078 -37.4116 -123.3472 -v -221.7078 -59.3653 -123.3472 -v -221.7078 -70.7291 -123.3472 -v -221.7078 9.1933 -120.8944 -v -100.9245 9.1933 -120.8944 -v -100.9245 -12.7687 -120.8944 -v -221.7078 -12.7687 -120.8944 -v -221.7078 -70.7291 -120.8944 -v -100.9245 -70.7291 -120.8944 -v -100.9245 -114.3707 -120.8944 -v -221.7078 -114.3707 -120.8944 -v -221.7078 -37.4116 -120.8944 -v -100.9245 -37.4116 -120.8944 -v -100.9245 -59.3653 -120.8944 -v -221.7078 -59.3653 -120.8944 -v -221.7078 55.4677 -120.8944 -v -100.9245 55.4677 -120.8944 -v -100.9245 33.5057 -120.8944 -v -221.7078 33.5057 -120.8944 -v -237.6845 -61.3739 67.0635 -v -237.6845 54.2127 67.0634 -v -237.6845 31.7127 67.0634 -v -237.6845 7.4938 67.0635 -v -237.6845 -15.0062 67.0635 -v -237.6845 -38.8738 67.0635 -v -235.2317 7.4938 67.0635 -v -235.2317 7.4938 44.2269 -v -235.2317 -15.0062 44.2269 -v -235.2317 -15.0062 67.0635 -v -235.2317 -38.8738 67.0635 -v -235.2317 -38.8739 44.2269 -v -235.2317 -61.3739 44.2269 -v -235.2317 -61.3739 67.0635 -v -235.2317 54.2127 67.0634 -v -235.2317 54.2127 44.2269 -v -235.2317 31.7127 44.2269 -v -235.2317 31.7127 67.0634 -v 235.1561 -48.2532 -45.4411 -v 235.1561 -114.5008 -45.4411 -v 230.6561 -48.2532 -45.4411 -v 230.6561 -48.2532 44.0551 -v 230.6561 -114.5008 44.0551 -v 230.6561 -114.5008 -45.4411 -# 84 vertices - -vn 0.0000 -1.0000 0.0000 -vn 0.0000 -1.0000 -0.0000 -vn -0.0000 -1.0000 0.0000 -vn -0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 -0.0000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 -0.0000 -vn -0.0000 0.0000 -1.0000 -vn 0.0000 -0.0000 -1.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -# 13 vertex normals - -vt 0.3493 0.4448 0.0000 -vt 0.5381 0.4448 0.0000 -vt 0.5381 0.4628 0.0000 -vt 0.3235 0.4448 0.0000 -vt 0.2856 0.4448 0.0000 -vt 0.5381 0.5989 0.0000 -vt 0.5381 0.9776 0.0000 -vt 0.4503 0.9776 0.0000 -vt 0.3495 0.9776 0.0000 -vt 0.2856 0.9776 0.0000 -vt 0.2625 0.4448 0.0000 -vt 0.2625 0.9776 0.0000 -vt 0.1986 0.9776 0.0000 -vt 0.0978 0.9776 0.0000 -vt 0.0100 0.9776 0.0000 -vt 0.0100 0.5989 0.0000 -vt 0.0100 0.4628 0.0000 -vt 0.2246 0.4448 0.0000 -vt 0.0100 0.4448 0.0000 -vt 0.1988 0.4448 0.0000 -vt 0.7640 0.4448 0.0000 -vt 0.7640 0.9776 0.0000 -vt 0.5612 0.9776 0.0000 -vt 0.5612 0.4448 0.0000 -vt 0.4136 0.2331 0.0000 -vt 0.2856 0.2331 0.0000 -vt 0.2856 0.1692 0.0000 -vt 0.4882 0.2331 0.0000 -vt 0.4884 0.2331 0.0000 -vt 0.4884 0.1692 0.0000 -vt 0.7983 0.8235 0.0000 -vt 0.7872 0.8235 0.0000 -vt 0.7872 0.4448 0.0000 -vt 0.8230 0.8235 0.0000 -vt 0.8504 0.8235 0.0000 -vt 0.8752 0.8235 0.0000 -vt 0.9029 0.8235 0.0000 -vt 0.9277 0.8235 0.0000 -vt 0.9405 0.8235 0.0000 -vt 0.9897 0.8235 0.0000 -vt 0.9900 0.8235 0.0000 -vt 0.9900 0.4448 0.0000 -vt 0.0225 0.3581 0.0000 -vt 0.0100 0.3581 0.0000 -vt 0.0100 0.1692 0.0000 -vt 0.0479 0.3581 0.0000 -vt 0.0752 0.3581 0.0000 -vt 0.1005 0.3581 0.0000 -vt 0.1274 0.3581 0.0000 -vt 0.1528 0.3581 0.0000 -vt 0.2128 0.3581 0.0000 -vt 0.2128 0.1692 0.0000 -vt 0.9900 0.9596 0.0000 -vt 0.9897 0.9596 0.0000 -vt 0.9900 0.9776 0.0000 -vt 0.7872 0.9776 0.0000 -vt 0.7872 0.9596 0.0000 -vt 0.7983 0.9596 0.0000 -vt 0.8230 0.9596 0.0000 -vt 0.8504 0.9596 0.0000 -vt 0.8752 0.9596 0.0000 -vt 0.9029 0.9596 0.0000 -vt 0.9277 0.9596 0.0000 -vt 0.9405 0.9596 0.0000 -vt 0.5742 0.2213 0.0000 -vt 0.7103 0.2213 0.0000 -vt 0.7103 0.2461 0.0000 -vt 0.5742 0.2461 0.0000 -vt 0.0298 0.0585 0.0000 -vt 0.1659 0.0585 0.0000 -vt 0.1659 0.1076 0.0000 -vt 0.0298 0.1076 0.0000 -vt 0.5742 0.2491 0.0000 -vt 0.7103 0.2491 0.0000 -vt 0.7103 0.2738 0.0000 -vt 0.5742 0.2738 0.0000 -vt 0.5742 0.1936 0.0000 -vt 0.7103 0.1936 0.0000 -vt 0.7103 0.2183 0.0000 -vt 0.5742 0.2183 0.0000 -vt 0.2884 0.0100 0.0000 -vt 0.2884 0.1461 0.0000 -vt 0.2856 0.1461 0.0000 -vt 0.2856 0.0100 0.0000 -vt 0.6157 0.3970 0.0000 -vt 0.6157 0.4217 0.0000 -vt 0.6130 0.4217 0.0000 -vt 0.6130 0.3970 0.0000 -vt 0.5116 0.4217 0.0000 -vt 0.5116 0.2856 0.0000 -vt 0.5143 0.2856 0.0000 -vt 0.5143 0.4217 0.0000 -vt 0.8466 0.4217 0.0000 -vt 0.8466 0.3970 0.0000 -vt 0.8494 0.3970 0.0000 -vt 0.8494 0.4217 0.0000 -vt 0.7899 0.2856 0.0000 -vt 0.7899 0.4217 0.0000 -vt 0.7872 0.4217 0.0000 -vt 0.7872 0.2856 0.0000 -vt 0.4440 0.2421 0.0000 -vt 0.4440 0.2913 0.0000 -vt 0.4412 0.2913 0.0000 -vt 0.4412 0.2421 0.0000 -vt 0.2360 0.4217 0.0000 -vt 0.2360 0.2856 0.0000 -vt 0.2387 0.2856 0.0000 -vt 0.2387 0.4217 0.0000 -vt 0.4517 0.2913 0.0000 -vt 0.4517 0.2421 0.0000 -vt 0.4545 0.2421 0.0000 -vt 0.4545 0.2913 0.0000 -vt 0.5640 0.2856 0.0000 -vt 0.5640 0.4217 0.0000 -vt 0.5612 0.4217 0.0000 -vt 0.5612 0.2856 0.0000 -vt 0.0722 0.1214 0.0000 -vt 0.0722 0.1461 0.0000 -vt 0.0695 0.1461 0.0000 -vt 0.0695 0.1214 0.0000 -vt 0.5612 0.2625 0.0000 -vt 0.5612 0.1264 0.0000 -vt 0.5640 0.1264 0.0000 -vt 0.5640 0.2625 0.0000 -vt 0.8131 0.3655 0.0000 -vt 0.8131 0.3408 0.0000 -vt 0.8158 0.3408 0.0000 -vt 0.8158 0.3655 0.0000 -vt 0.5899 0.2856 0.0000 -vt 0.5899 0.4217 0.0000 -vt 0.5871 0.4217 0.0000 -vt 0.5871 0.2856 0.0000 -vt 0.3143 0.1214 0.0000 -vt 0.3143 0.1461 0.0000 -vt 0.3115 0.1461 0.0000 -vt 0.3115 0.1214 0.0000 -vt 0.0100 0.1461 0.0000 -vt 0.0100 0.0100 0.0000 -vt 0.0128 0.0100 0.0000 -vt 0.0128 0.1461 0.0000 -vt 0.0359 0.1461 0.0000 -vt 0.0359 0.1214 0.0000 -vt 0.0386 0.1214 0.0000 -vt 0.0386 0.1461 0.0000 -vt 0.2128 0.3838 0.0000 -vt 0.1528 0.3838 0.0000 -vt 0.2128 0.4217 0.0000 -vt 0.0100 0.4217 0.0000 -vt 0.0100 0.3838 0.0000 -vt 0.0225 0.3838 0.0000 -vt 0.0479 0.3838 0.0000 -vt 0.0752 0.3838 0.0000 -vt 0.1005 0.3838 0.0000 -vt 0.1274 0.3838 0.0000 -vt 0.6039 0.3560 0.0000 -vt 0.6297 0.3560 0.0000 -vt 0.6297 0.3814 0.0000 -vt 0.6039 0.3814 0.0000 -vt 0.6039 0.3293 0.0000 -vt 0.6297 0.3293 0.0000 -vt 0.6297 0.3547 0.0000 -vt 0.6039 0.3547 0.0000 -vt 0.6310 0.3293 0.0000 -vt 0.6567 0.3293 0.0000 -vt 0.6567 0.3547 0.0000 -vt 0.6310 0.3547 0.0000 -vt 0.8158 0.3964 0.0000 -vt 0.8158 0.4217 0.0000 -vt 0.8131 0.4217 0.0000 -vt 0.8131 0.3964 0.0000 -vt 0.9184 0.8340 0.0000 -vt 0.9184 0.8597 0.0000 -vt 0.9157 0.8597 0.0000 -vt 0.9157 0.8340 0.0000 -vt 0.9556 0.8928 0.0000 -vt 0.9556 0.8674 0.0000 -vt 0.9583 0.8674 0.0000 -vt 0.9583 0.8928 0.0000 -vt 0.8658 0.8340 0.0000 -vt 0.8658 0.8597 0.0000 -vt 0.8630 0.8597 0.0000 -vt 0.8630 0.8340 0.0000 -vt 0.8658 0.9009 0.0000 -vt 0.8658 0.9262 0.0000 -vt 0.8630 0.9262 0.0000 -vt 0.8630 0.9009 0.0000 -vt 0.8658 0.8674 0.0000 -vt 0.8658 0.8932 0.0000 -vt 0.8630 0.8932 0.0000 -vt 0.8630 0.8674 0.0000 -vt 0.9157 0.9262 0.0000 -vt 0.9157 0.9009 0.0000 -vt 0.9184 0.9009 0.0000 -vt 0.9184 0.9262 0.0000 -vt 0.9688 0.8340 0.0000 -vt 0.9688 0.8597 0.0000 -vt 0.9660 0.8597 0.0000 -vt 0.9660 0.8340 0.0000 -vt 0.9583 0.8340 0.0000 -vt 0.9583 0.8594 0.0000 -vt 0.9556 0.8594 0.0000 -vt 0.9556 0.8340 0.0000 -vt 0.9184 0.8674 0.0000 -vt 0.9184 0.8932 0.0000 -vt 0.9157 0.8932 0.0000 -vt 0.9157 0.8674 0.0000 -vt 0.9660 0.9262 0.0000 -vt 0.9660 0.9009 0.0000 -vt 0.9688 0.9009 0.0000 -vt 0.9688 0.9262 0.0000 -vt 0.9688 0.8674 0.0000 -vt 0.9688 0.8932 0.0000 -vt 0.9660 0.8932 0.0000 -vt 0.9660 0.8674 0.0000 -vt 0.4884 0.4217 0.0000 -vt 0.2856 0.4217 0.0000 -vt 0.2856 0.3339 0.0000 -vt 0.4136 0.3339 0.0000 -vt 0.4882 0.3339 0.0000 -vt 0.4884 0.3339 0.0000 -vt 0.3070 0.0330 0.0000 -vt 0.4078 0.0330 0.0000 -vt 0.4078 0.1076 0.0000 -vt 0.3070 0.1076 0.0000 -vt 0.8102 0.9349 0.0000 -vt 0.8102 0.8340 0.0000 -vt 0.8153 0.8340 0.0000 -vt 0.8153 0.9349 0.0000 -vt 0.4800 0.2421 0.0000 -vt 0.4800 0.3167 0.0000 -vt 0.4749 0.3167 0.0000 -vt 0.4749 0.2421 0.0000 -vt 0.9765 0.9349 0.0000 -vt 0.9765 0.8340 0.0000 -vt 0.9816 0.8340 0.0000 -vt 0.9816 0.9349 0.0000 -vt 0.4622 0.3167 0.0000 -vt 0.4622 0.2421 0.0000 -vt 0.4672 0.2421 0.0000 -vt 0.4672 0.3167 0.0000 -# 240 texture coords - -g fangzi4_3 -usemtl Material__2593 -s 2 -f 609/1795/16 610/1796/17 611/1797/18 612/1798/19 -f 613/1799/19 612/1798/19 611/1797/18 614/1800/17 -f 613/1799/19 614/1800/17 615/1801/17 616/1802/17 -f 613/1799/19 616/1802/17 617/1803/17 618/1804/17 -s 4 -f 619/1805/20 620/1806/20 621/1807/20 622/1808/20 -f 619/1805/20 622/1808/20 623/1809/20 624/1810/20 -f 619/1805/20 624/1810/20 625/1811/20 626/1812/20 -f 625/1811/20 627/1813/20 628/1814/20 626/1812/20 -s 8 -f 613/1815/21 618/1816/21 620/1817/21 619/1818/21 -s 16 -f 629/1819/22 621/1820/22 620/1821/22 630/1822/22 -f 617/1823/22 630/1822/22 620/1821/22 618/1824/22 -s 32 -f 631/1825/23 624/1826/23 623/1827/23 632/1828/23 -f 633/1829/23 632/1828/23 623/1827/23 634/1830/23 -f 635/1831/24 634/1830/23 623/1827/23 636/1832/23 -f 637/1833/23 636/1832/23 623/1827/23 638/1834/23 -f 614/1835/25 638/1834/23 623/1827/23 615/1836/25 -s 64 -f 639/1837/26 628/1838/26 627/1839/26 640/1840/26 -f 641/1841/26 640/1840/26 627/1839/26 642/1842/26 -f 643/1843/26 642/1842/26 627/1839/26 644/1844/26 -f 609/1845/26 644/1844/26 627/1839/26 610/1846/26 -s 32 -f 611/1847/25 645/1848/23 638/1834/23 614/1835/25 -f 610/1849/25 627/1850/25 625/1851/25 646/1852/25 -f 610/1849/25 646/1852/25 647/1853/23 648/1854/25 -f 610/1849/25 648/1854/25 649/1855/25 650/1856/24 -f 610/1849/25 650/1856/24 651/1857/25 652/1858/23 -f 610/1849/25 652/1858/23 645/1848/23 611/1847/25 -f 625/1851/25 624/1826/23 631/1825/23 646/1852/25 -f 649/1855/25 634/1830/23 635/1831/24 650/1856/24 -f 647/1853/23 632/1828/23 633/1829/23 648/1854/25 -f 653/1859/25 654/1860/25 655/1861/25 656/1862/25 -f 651/1857/25 636/1832/23 637/1833/23 652/1858/23 -f 657/1863/25 658/1864/25 659/1865/25 660/1866/25 -f 661/1867/24 662/1868/24 663/1869/24 664/1870/24 -f 665/1871/25 666/1872/25 667/1873/25 668/1874/25 -s off -f 648/1875/17 633/1876/17 654/1877/17 653/1878/17 -f 633/1879/26 634/1880/26 655/1881/26 654/1882/26 -f 634/1883/20 649/1884/20 656/1885/20 655/1886/20 -f 649/1887/22 648/1888/22 653/1889/22 656/1890/22 -f 652/1891/17 637/1892/17 658/1893/17 657/1894/17 -f 637/1895/26 638/1896/26 659/1897/26 658/1898/26 -f 638/1899/27 645/1900/27 660/1901/27 659/1902/27 -f 645/1903/22 652/1904/22 657/1905/22 660/1906/22 -f 650/1907/17 635/1908/17 662/1909/17 661/1910/17 -f 635/1911/26 636/1912/26 663/1913/26 662/1914/26 -f 636/1915/20 651/1916/20 664/1917/20 663/1918/20 -f 651/1919/22 650/1920/22 661/1921/22 664/1922/22 -f 646/1923/17 631/1924/17 666/1925/17 665/1926/17 -f 631/1927/26 632/1928/26 667/1929/26 666/1930/26 -f 632/1931/20 647/1932/20 668/1933/20 667/1934/20 -f 647/1935/22 646/1936/22 665/1937/22 668/1938/22 -s 64 -f 612/1939/26 669/1940/26 644/1844/26 609/1845/26 -f 613/1941/26 619/1942/26 626/1943/26 670/1944/26 -f 613/1941/26 670/1944/26 671/1945/26 672/1946/26 -f 613/1941/26 672/1946/26 673/1947/26 674/1948/26 -f 613/1941/26 674/1948/26 669/1940/26 612/1939/26 -f 675/1949/26 676/1950/26 677/1951/26 678/1952/26 -f 679/1953/26 680/1954/26 681/1955/26 682/1956/26 -f 683/1957/26 684/1958/26 685/1959/26 686/1960/26 -f 671/1945/26 640/1840/26 641/1841/26 672/1946/26 -f 626/1943/26 628/1838/26 639/1837/26 670/1944/26 -f 673/1947/26 642/1842/26 643/1843/26 674/1948/26 -s off -f 641/1961/21 642/1962/21 677/1963/21 676/1964/21 -f 642/1965/20 673/1966/20 678/1967/20 677/1968/20 -f 673/1969/25 672/1970/25 675/1971/25 678/1972/25 -f 672/1973/17 641/1974/17 676/1975/17 675/1976/17 -f 643/1977/21 644/1978/21 681/1979/21 680/1980/21 -f 644/1981/20 669/1982/20 682/1983/20 681/1984/20 -f 669/1985/25 674/1986/25 679/1987/25 682/1988/25 -f 674/1989/16 643/1990/16 680/1991/16 679/1992/16 -f 639/1993/28 640/1994/28 685/1995/28 684/1996/28 -f 640/1997/20 671/1998/20 686/1999/20 685/2000/20 -f 671/2001/25 670/2002/25 683/2003/25 686/2004/25 -f 670/2005/17 639/2006/17 684/2007/17 683/2008/17 -s 16 -f 615/2009/22 623/2010/22 622/2011/22 687/2012/22 -f 615/2009/22 687/2012/22 688/2013/22 616/2014/22 -f 616/2014/22 688/2013/22 630/1822/22 617/1823/22 -f 622/2011/22 621/1820/22 629/1819/22 687/2012/22 -f 689/2015/22 690/2016/22 691/2017/22 692/2018/22 -s off -f 687/2019/16 629/2020/16 690/2021/16 689/2022/16 -f 629/2023/24 630/2024/24 691/2025/24 690/2026/24 -f 630/2027/20 688/2028/20 692/2029/20 691/2030/20 -f 688/2031/21 687/2032/21 689/2033/21 692/2034/21 -# 82 polygons - -# -# object fangzi4_1 -# - -v 244.9100 84.5307 156.1304 -v 244.9100 84.5307 -156.1304 -v -244.9101 84.5307 -156.1304 -v -244.9101 84.5307 156.1304 -v -250.0000 -114.6693 161.2202 -v -250.0000 -114.6693 125.6544 -v -236.3500 -114.6693 125.6544 -v 236.4906 -114.6693 125.6544 -v 249.9999 -114.6693 125.6544 -v 249.9999 -114.6693 161.2202 -v 249.9999 95.3307 161.2203 -v -250.0000 95.3307 161.2203 -v -250.0001 65.3307 161.2203 -v 249.9999 65.3307 161.2203 -v -250.0000 95.3307 -161.2203 -v -250.0000 65.3307 -161.2203 -v -250.0000 65.3307 -53.3294 -v -250.0001 65.3307 125.6545 -v 249.9999 95.3307 -161.2203 -v 249.9999 65.3307 -161.2203 -v 236.4906 65.3307 -161.2203 -v -236.3500 65.3307 -161.2203 -v 249.9999 65.3307 125.6545 -v 249.9999 65.3307 -53.3294 -v -236.3500 65.3307 -53.3294 -v -236.3500 65.3307 125.6545 -v 236.4906 65.3307 -53.3294 -v 236.4906 65.3307 125.6545 -v 250.0001 -114.6693 -161.2203 -v 250.0001 -114.6693 -53.3294 -v 236.4908 -114.6693 -53.3294 -v 236.4908 -114.6693 -161.2203 -v -249.9996 -114.6693 -161.2203 -v -236.3496 -114.6693 -161.2203 -v -236.3496 -114.6693 -53.3294 -v -249.9996 -114.6693 -53.3294 -v -250.0001 55.7282 161.2203 -v -172.1119 55.7282 161.2203 -v -47.1119 55.7283 161.2203 -v 58.8183 55.7283 161.2203 -v 182.9904 55.7283 161.2203 -v 249.9999 55.7283 161.2203 -v -250.0000 -59.3841 161.2202 -v -250.0000 -36.8841 161.2202 -v -250.0000 -13.0779 161.2202 -v -250.0000 9.4221 161.2202 -v -250.0001 33.2282 161.2203 -v 249.9999 33.2283 161.2203 -v 249.9999 9.4222 161.2202 -v 249.9999 -13.0778 161.2202 -v 249.9999 -36.8840 161.2202 -v 250.0000 -59.3840 161.2202 -v 244.9100 95.3307 -156.1304 -v 244.9100 95.3307 156.1304 -v -244.9101 95.3307 -156.1304 -v -244.9101 95.3307 156.1304 -v 182.9905 -36.8840 161.2202 -v 58.8183 -36.8841 161.2202 -v -47.1119 -36.8841 161.2202 -v -172.1119 -36.8841 161.2202 -v 182.9904 -13.0778 161.2202 -v 58.8184 -13.0779 161.2202 -v -47.1119 -13.0779 161.2202 -v -172.1119 -13.0779 161.2202 -v 182.9904 9.4221 161.2202 -v 58.8183 9.4221 161.2202 -v -47.1119 9.4221 161.2202 -v -172.1119 9.4221 161.2202 -v 182.9904 33.2283 161.2203 -v 58.8184 33.2283 161.2203 -v -47.1119 33.2283 161.2203 -v -172.1119 33.2283 161.2203 -v 182.9905 -59.3840 161.2203 -v 58.8183 -59.3840 161.2203 -v -47.1119 -59.3840 161.2202 -v -172.1119 -59.3841 161.2202 -v -47.1119 33.2283 156.1443 -v -47.1119 55.7283 156.1443 -v -172.1119 55.7283 156.1443 -v -172.1119 33.2283 156.1443 -v 182.9904 33.2283 156.1443 -v 182.9904 55.7283 156.1443 -v 58.8183 55.7283 156.1443 -v 58.8184 33.2283 156.1443 -v -47.1119 -13.0779 156.1443 -v -47.1119 9.4221 156.1443 -v -172.1119 9.4221 156.1443 -v -172.1119 -13.0779 156.1443 -v 182.9904 -13.0778 156.1443 -v 182.9904 9.4221 156.1443 -v 58.8183 9.4221 156.1443 -v 58.8184 -13.0779 156.1443 -v -47.1119 -59.3840 156.1443 -v -47.1119 -36.8841 156.1443 -v -172.1119 -36.8841 156.1443 -v -172.1119 -59.3841 156.1443 -v 182.9905 -59.3840 156.1443 -v 182.9905 -36.8840 156.1443 -v 58.8183 -36.8841 156.1443 -v 58.8183 -59.3840 156.1443 -# 100 vertices - -vn -0.0000 1.0000 -0.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 0.0000 -0.0000 -vn -1.0000 -0.0000 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 1.0000 -0.0000 -0.0000 -vn 1.0000 -0.0000 0.0000 -vn 1.0000 0.0000 -0.0000 -vn -1.0000 0.0000 0.0000 -vn -1.0000 -0.0000 0.0000 -vn -0.0000 0.0000 -1.0000 -vn 0.0000 -0.0000 1.0000 -vn -0.0000 -0.0000 1.0000 -vn -0.0000 0.0000 1.0000 -vn 0.0000 1.0000 -0.0000 -# 18 vertex normals - -vt 0.0100 0.9900 0.0000 -vt 0.0100 0.7464 0.0000 -vt 0.3922 0.7464 0.0000 -vt 0.3922 0.9900 0.0000 -vt 0.4001 0.5088 0.0000 -vt 0.4001 0.5365 0.0000 -vt 0.3895 0.5365 0.0000 -vt 0.0205 0.5365 0.0000 -vt 0.0100 0.5365 0.0000 -vt 0.0100 0.5088 0.0000 -vt 0.4215 0.0398 0.0000 -vt 0.8116 0.0398 0.0000 -vt 0.8116 0.0632 0.0000 -vt 0.4215 0.0632 0.0000 -vt 0.4453 0.4856 0.0000 -vt 0.6969 0.4856 0.0000 -vt 0.6969 0.5090 0.0000 -vt 0.6127 0.5090 0.0000 -vt 0.4730 0.5090 0.0000 -vt 0.4453 0.5090 0.0000 -vt 0.0100 0.5579 0.0000 -vt 0.4001 0.5579 0.0000 -vt 0.4001 0.5813 0.0000 -vt 0.3896 0.5813 0.0000 -vt 0.0207 0.5813 0.0000 -vt 0.0100 0.5813 0.0000 -vt 0.1485 0.0398 0.0000 -vt 0.4001 0.0398 0.0000 -vt 0.4001 0.0632 0.0000 -vt 0.3724 0.0632 0.0000 -vt 0.2327 0.0632 0.0000 -vt 0.1485 0.0632 0.0000 -vt 0.8116 0.3646 0.0000 -vt 0.8009 0.3646 0.0000 -vt 0.8009 0.2250 0.0000 -vt 0.8116 0.2250 0.0000 -vt 0.4320 0.3646 0.0000 -vt 0.4320 0.2250 0.0000 -vt 0.4320 0.4488 0.0000 -vt 0.8009 0.4488 0.0000 -vt 0.2417 0.0705 0.0000 -vt 0.3259 0.0705 0.0000 -vt 0.3259 0.0811 0.0000 -vt 0.2417 0.0811 0.0000 -vt 0.3167 0.1013 0.0000 -vt 0.3273 0.1013 0.0000 -vt 0.3273 0.1855 0.0000 -vt 0.3167 0.1855 0.0000 -vt 0.4215 0.2250 0.0000 -vt 0.4215 0.3646 0.0000 -vt 0.8116 0.0707 0.0000 -vt 0.7508 0.0707 0.0000 -vt 0.6533 0.0707 0.0000 -vt 0.5706 0.0707 0.0000 -vt 0.4737 0.0707 0.0000 -vt 0.4215 0.0707 0.0000 -vt 0.4730 0.6495 0.0000 -vt 0.4453 0.5165 0.0000 -vt 0.4453 0.6495 0.0000 -vt 0.4453 0.6064 0.0000 -vt 0.4453 0.5888 0.0000 -vt 0.4453 0.5702 0.0000 -vt 0.4453 0.5527 0.0000 -vt 0.4453 0.5341 0.0000 -vt 0.0100 0.3083 0.0000 -vt 0.0207 0.3083 0.0000 -vt 0.0207 0.4488 0.0000 -vt 0.0100 0.4488 0.0000 -vt 0.3896 0.3083 0.0000 -vt 0.3896 0.4488 0.0000 -vt 0.4001 0.3083 0.0000 -vt 0.4001 0.4488 0.0000 -vt 0.4001 0.0707 0.0000 -vt 0.4001 0.0882 0.0000 -vt 0.4001 0.1068 0.0000 -vt 0.4001 0.1243 0.0000 -vt 0.4001 0.1429 0.0000 -vt 0.4001 0.1605 0.0000 -vt 0.4001 0.2036 0.0000 -vt 0.3724 0.2036 0.0000 -vt 0.2327 0.2036 0.0000 -vt 0.1485 0.2036 0.0000 -vt 0.5857 0.6899 0.0000 -vt 0.5857 0.7004 0.0000 -vt 0.4453 0.7004 0.0000 -vt 0.4453 0.6899 0.0000 -vt 0.7040 0.4856 0.0000 -vt 0.7882 0.4856 0.0000 -vt 0.7882 0.6261 0.0000 -vt 0.7040 0.6261 0.0000 -vt 0.4001 0.7217 0.0000 -vt 0.3896 0.7217 0.0000 -vt 0.0207 0.7217 0.0000 -vt 0.0100 0.7217 0.0000 -vt 0.2219 0.5886 0.0000 -vt 0.2219 0.6728 0.0000 -vt 0.0815 0.6728 0.0000 -vt 0.0815 0.5886 0.0000 -vt 0.5857 0.6721 0.0000 -vt 0.5857 0.6828 0.0000 -vt 0.4453 0.6828 0.0000 -vt 0.4453 0.6721 0.0000 -vt 0.6969 0.6495 0.0000 -vt 0.6127 0.6495 0.0000 -vt 0.4215 0.7217 0.0000 -vt 0.4215 0.4701 0.0000 -vt 0.4254 0.4741 0.0000 -vt 0.4254 0.7177 0.0000 -vt 0.8116 0.4701 0.0000 -vt 0.8076 0.4741 0.0000 -vt 0.8116 0.7217 0.0000 -vt 0.8076 0.7177 0.0000 -vt 0.4453 0.6566 0.0000 -vt 0.6889 0.6566 0.0000 -vt 0.6889 0.6650 0.0000 -vt 0.4453 0.6650 0.0000 -vt 0.0179 0.2786 0.0000 -vt 0.4001 0.2786 0.0000 -vt 0.4001 0.2870 0.0000 -vt 0.0179 0.2870 0.0000 -vt 0.0815 0.6998 0.0000 -vt 0.3251 0.6998 0.0000 -vt 0.3251 0.7082 0.0000 -vt 0.0815 0.7082 0.0000 -vt 0.4294 0.0100 0.0000 -vt 0.8116 0.0100 0.0000 -vt 0.8116 0.0184 0.0000 -vt 0.4294 0.0184 0.0000 -vt 0.4737 0.1429 0.0000 -vt 0.4215 0.1429 0.0000 -vt 0.4215 0.1243 0.0000 -vt 0.5706 0.1429 0.0000 -vt 0.6533 0.1429 0.0000 -vt 0.7508 0.1429 0.0000 -vt 0.8116 0.1429 0.0000 -vt 0.4737 0.1243 0.0000 -vt 0.5706 0.1243 0.0000 -vt 0.6533 0.1243 0.0000 -vt 0.7508 0.1243 0.0000 -vt 0.8116 0.1243 0.0000 -vt 0.4737 0.1068 0.0000 -vt 0.4215 0.1068 0.0000 -vt 0.4215 0.0882 0.0000 -vt 0.5706 0.1068 0.0000 -vt 0.6533 0.1068 0.0000 -vt 0.7508 0.1068 0.0000 -vt 0.8116 0.1068 0.0000 -vt 0.4737 0.0882 0.0000 -vt 0.5706 0.0882 0.0000 -vt 0.6533 0.0882 0.0000 -vt 0.7508 0.0882 0.0000 -vt 0.8116 0.0882 0.0000 -vt 0.8116 0.2036 0.0000 -vt 0.4215 0.2036 0.0000 -vt 0.4215 0.1605 0.0000 -vt 0.4737 0.1605 0.0000 -vt 0.5706 0.1605 0.0000 -vt 0.6533 0.1605 0.0000 -vt 0.7508 0.1605 0.0000 -vt 0.8116 0.1605 0.0000 -vt 0.0601 0.1706 0.0000 -vt 0.0777 0.1706 0.0000 -vt 0.0777 0.2682 0.0000 -vt 0.0601 0.2682 0.0000 -vt 0.1013 0.1713 0.0000 -vt 0.1189 0.1713 0.0000 -vt 0.1189 0.2682 0.0000 -vt 0.1013 0.2682 0.0000 -vt 0.0395 0.1706 0.0000 -vt 0.0571 0.1706 0.0000 -vt 0.0571 0.2682 0.0000 -vt 0.0395 0.2682 0.0000 -vt 0.1219 0.1713 0.0000 -vt 0.1394 0.1713 0.0000 -vt 0.1394 0.2682 0.0000 -vt 0.1219 0.2682 0.0000 -vt 0.0189 0.1706 0.0000 -vt 0.0365 0.1706 0.0000 -vt 0.0365 0.2682 0.0000 -vt 0.0189 0.2682 0.0000 -vt 0.0807 0.1713 0.0000 -vt 0.0983 0.1713 0.0000 -vt 0.0983 0.2682 0.0000 -vt 0.0807 0.2682 0.0000 -vt 0.2417 0.1124 0.0000 -vt 0.2592 0.1124 0.0000 -vt 0.2592 0.1163 0.0000 -vt 0.2417 0.1163 0.0000 -vt 0.3384 0.1013 0.0000 -vt 0.3384 0.1988 0.0000 -vt 0.3345 0.1988 0.0000 -vt 0.3345 0.1013 0.0000 -vt 0.3505 0.0745 0.0000 -vt 0.3330 0.0745 0.0000 -vt 0.3330 0.0705 0.0000 -vt 0.3505 0.0705 0.0000 -vt 0.3392 0.0921 0.0000 -vt 0.2417 0.0921 0.0000 -vt 0.2417 0.0882 0.0000 -vt 0.3392 0.0882 0.0000 -vt 0.2417 0.1620 0.0000 -vt 0.2592 0.1620 0.0000 -vt 0.2592 0.1659 0.0000 -vt 0.2417 0.1659 0.0000 -vt 0.2330 0.5886 0.0000 -vt 0.2330 0.6855 0.0000 -vt 0.2291 0.6855 0.0000 -vt 0.2291 0.5886 0.0000 -vt 0.2592 0.1053 0.0000 -vt 0.2417 0.1053 0.0000 -vt 0.2417 0.1013 0.0000 -vt 0.2592 0.1013 0.0000 -vt 0.3397 0.6855 0.0000 -vt 0.3397 0.5886 0.0000 -vt 0.3437 0.5886 0.0000 -vt 0.3437 0.6855 0.0000 -vt 0.2663 0.1620 0.0000 -vt 0.2839 0.1620 0.0000 -vt 0.2839 0.1659 0.0000 -vt 0.2663 0.1659 0.0000 -vt 0.3495 0.1013 0.0000 -vt 0.3495 0.1988 0.0000 -vt 0.3455 0.1988 0.0000 -vt 0.3455 0.1013 0.0000 -vt 0.2839 0.1053 0.0000 -vt 0.2663 0.1053 0.0000 -vt 0.2663 0.1013 0.0000 -vt 0.2839 0.1013 0.0000 -vt 0.3566 0.1988 0.0000 -vt 0.3566 0.1013 0.0000 -vt 0.3606 0.1013 0.0000 -vt 0.3606 0.1988 0.0000 -vt 0.2663 0.1124 0.0000 -vt 0.2839 0.1124 0.0000 -vt 0.2839 0.1163 0.0000 -vt 0.2663 0.1163 0.0000 -vt 0.5187 0.5164 0.0000 -vt 0.5187 0.6133 0.0000 -vt 0.5147 0.6133 0.0000 -vt 0.5147 0.5164 0.0000 -vt 0.2839 0.1548 0.0000 -vt 0.2663 0.1548 0.0000 -vt 0.2663 0.1509 0.0000 -vt 0.2839 0.1509 0.0000 -vt 0.0409 0.6855 0.0000 -vt 0.0409 0.5886 0.0000 -vt 0.0449 0.5886 0.0000 -vt 0.0449 0.6855 0.0000 -vt 0.2910 0.1013 0.0000 -vt 0.3086 0.1013 0.0000 -vt 0.3086 0.1053 0.0000 -vt 0.2910 0.1053 0.0000 -vt 0.4965 0.5164 0.0000 -vt 0.4965 0.6139 0.0000 -vt 0.4926 0.6139 0.0000 -vt 0.4926 0.5164 0.0000 -vt 0.2592 0.1274 0.0000 -vt 0.2417 0.1274 0.0000 -vt 0.2417 0.1235 0.0000 -vt 0.2592 0.1235 0.0000 -vt 0.4815 0.6139 0.0000 -vt 0.4815 0.5164 0.0000 -vt 0.4855 0.5164 0.0000 -vt 0.4855 0.6139 0.0000 -vt 0.2417 0.1509 0.0000 -vt 0.2592 0.1509 0.0000 -vt 0.2592 0.1548 0.0000 -vt 0.2417 0.1548 0.0000 -vt 0.5076 0.5164 0.0000 -vt 0.5076 0.6133 0.0000 -vt 0.5037 0.6133 0.0000 -vt 0.5037 0.5164 0.0000 -vt 0.2592 0.1770 0.0000 -vt 0.2417 0.1770 0.0000 -vt 0.2417 0.1730 0.0000 -vt 0.2592 0.1730 0.0000 -vt 0.0299 0.6855 0.0000 -vt 0.0299 0.5886 0.0000 -vt 0.0338 0.5886 0.0000 -vt 0.0338 0.6855 0.0000 -# 280 texture coords - -g fangzi4_1 -usemtl Material__2590 -s 2 -f 693/2035/29 694/2036/29 695/2037/29 696/2038/29 -s 4 -f 697/2039/30 698/2040/30 699/2041/30 700/2042/31 -f 697/2039/30 700/2042/31 701/2043/31 702/2044/30 -s 8 -f 703/2045/32 704/2046/32 705/2047/32 706/2048/32 -s 16 -f 704/2049/33 707/2050/34 708/2051/34 709/2052/34 -f 704/2049/33 709/2052/34 710/2053/33 705/2054/33 -s 32 -f 707/2055/35 711/2056/35 712/2057/35 713/2058/35 -f 707/2055/35 713/2058/35 714/2059/35 708/2060/35 -s 64 -f 711/2061/36 703/2062/37 706/2063/37 715/2064/38 -f 711/2061/36 715/2064/38 716/2065/36 712/2066/39 -s 4 -f 709/2067/31 717/2068/31 718/2069/31 710/2070/31 -f 719/2071/31 720/2072/31 718/2069/31 713/2073/30 -f 713/2073/30 718/2069/31 717/2068/31 714/2074/30 -f 721/2075/30 722/2076/30 723/2077/30 724/2078/30 -f 725/2079/30 726/2080/30 727/2081/30 728/2082/30 -f 715/2083/31 720/2072/31 719/2071/31 716/2084/31 -s off -f 705/2047/32 729/2085/32 730/2086/32 731/2087/32 -f 705/2047/32 731/2087/32 732/2088/32 733/2089/32 -f 705/2047/32 733/2089/32 734/2090/32 706/2048/32 -f 705/2054/34 710/2053/34 698/2091/34 729/2092/34 -f 698/2091/40 697/2093/40 735/2094/40 736/2095/40 -f 698/2091/41 736/2095/41 737/2096/41 738/2097/41 -f 698/2091/41 738/2097/41 739/2098/41 729/2092/41 -f 710/2099/42 718/2100/42 699/2101/42 698/2102/42 -f 718/2100/35 720/2103/35 700/2104/35 699/2101/35 -f 720/2103/42 715/2105/42 701/2106/42 700/2104/42 -f 715/2064/39 706/2063/39 734/2107/39 740/2108/39 -f 715/2064/36 740/2108/36 741/2109/36 742/2110/36 -f 715/2064/39 742/2110/39 743/2111/39 744/2112/39 -f 715/2064/39 744/2112/39 702/2113/39 701/2114/39 -f 712/2066/39 716/2065/39 722/2115/39 721/2116/39 -f 716/2117/32 719/2118/32 723/2119/32 722/2120/32 -f 719/2121/34 713/2122/34 724/2123/34 723/2124/34 -f 713/2058/35 712/2057/35 721/2125/35 724/2126/35 -f 708/2060/35 714/2059/35 726/2127/35 725/2128/35 -f 714/2129/39 717/2130/39 727/2131/39 726/2132/39 -f 717/2133/32 709/2134/32 728/2135/32 727/2136/32 -f 709/2052/34 708/2051/34 725/2137/34 728/2138/34 -f 703/2139/29 711/2140/29 745/2141/29 746/2142/29 -f 711/2140/29 707/2143/29 747/2144/29 745/2141/29 -f 707/2143/29 704/2145/29 748/2146/29 747/2144/29 -f 704/2145/29 703/2139/29 746/2142/29 748/2146/29 -f 746/2147/34 745/2148/34 694/2149/34 693/2150/34 -f 745/2151/32 747/2152/32 695/2153/32 694/2154/32 -f 747/2155/39 748/2156/39 696/2157/39 695/2158/39 -f 748/2159/35 746/2160/35 693/2161/35 696/2162/35 -f 749/2163/32 743/2164/32 742/2165/32 750/2166/32 -f 751/2167/32 750/2166/32 742/2165/32 752/2168/32 -f 736/2169/32 752/2168/32 742/2165/32 753/2170/32 -f 736/2169/32 753/2170/32 754/2171/32 755/2172/32 -f 736/2169/32 755/2172/32 756/2173/32 737/2174/32 -f 757/2175/43 741/2176/43 740/2177/43 758/2178/43 -f 759/2179/43 758/2178/43 740/2177/43 760/2180/43 -f 738/2181/43 760/2180/43 740/2177/43 761/2182/43 -f 738/2181/43 761/2182/43 762/2183/43 763/2184/43 -f 738/2181/43 763/2184/43 764/2185/43 739/2186/43 -f 697/2187/43 702/2188/43 744/2189/43 765/2190/43 -f 697/2187/44 765/2190/44 766/2191/44 767/2192/44 -f 697/2187/44 767/2192/44 768/2193/44 735/2194/44 -f 739/2186/43 764/2185/43 730/2086/43 729/2085/43 -f 737/2174/32 756/2173/32 760/2180/32 738/2181/32 -f 735/2194/44 768/2193/44 752/2168/44 736/2169/44 -f 762/2183/43 732/2088/43 731/2087/43 763/2184/43 -f 769/2195/43 770/2196/43 771/2197/43 772/2198/43 -f 740/2177/43 734/2090/43 733/2089/43 761/2182/43 -f 773/2199/43 774/2200/43 775/2201/43 776/2202/43 -f 754/2171/32 758/2178/32 759/2179/32 755/2172/32 -f 742/2165/32 741/2176/32 757/2175/32 753/2170/32 -f 777/2203/32 778/2204/32 779/2205/32 780/2206/32 -f 781/2207/32 782/2208/32 783/2209/32 784/2210/32 -f 766/2191/45 750/2166/45 751/2167/45 767/2192/45 -f 744/2189/43 743/2164/43 749/2163/43 765/2190/43 -f 785/2211/32 786/2212/32 787/2213/32 788/2214/32 -f 789/2215/45 790/2216/45 791/2217/45 792/2218/45 -f 763/2219/34 731/2220/34 770/2221/34 769/2222/34 -f 731/2223/30 730/2224/30 771/2225/30 770/2226/30 -f 730/2227/36 764/2228/36 772/2229/36 771/2230/36 -f 764/2231/29 763/2232/29 769/2233/29 772/2234/29 -f 761/2235/34 733/2236/34 774/2237/34 773/2238/34 -f 733/2239/30 732/2240/30 775/2241/30 774/2242/30 -f 732/2243/39 762/2244/39 776/2245/39 775/2246/39 -f 762/2247/29 761/2248/29 773/2249/29 776/2250/29 -f 755/2251/34 759/2252/34 778/2253/34 777/2254/34 -f 759/2255/30 760/2256/30 779/2257/30 778/2258/30 -f 760/2259/37 756/2260/37 780/2261/37 779/2262/37 -f 756/2263/29 755/2264/29 777/2265/29 780/2266/29 -f 753/2267/33 757/2268/33 782/2269/33 781/2270/33 -f 757/2271/30 758/2272/30 783/2273/30 782/2274/30 -f 758/2275/39 754/2276/39 784/2277/39 783/2278/39 -f 754/2279/29 753/2280/29 781/2281/29 784/2282/29 -f 767/2283/34 751/2284/34 786/2285/34 785/2286/34 -f 751/2287/30 752/2288/30 787/2289/30 786/2290/30 -f 752/2291/37 768/2292/37 788/2293/37 787/2294/37 -f 768/2295/29 767/2296/29 785/2297/29 788/2298/29 -f 765/2299/33 749/2300/33 790/2301/33 789/2302/33 -f 749/2303/30 750/2304/30 791/2305/30 790/2306/30 -f 750/2307/39 766/2308/39 792/2309/39 791/2310/39 -f 766/2311/46 765/2312/46 789/2313/46 792/2314/46 -# 98 polygons - diff --git a/public/assets/jianzhu/fangzi4-1.jpg b/public/assets/jianzhu/fangzi4-1.jpg deleted file mode 100644 index 0853e33..0000000 Binary files a/public/assets/jianzhu/fangzi4-1.jpg and /dev/null differ diff --git a/public/assets/jianzhu/fangzi4-2.jpg b/public/assets/jianzhu/fangzi4-2.jpg deleted file mode 100644 index a1de8d9..0000000 Binary files a/public/assets/jianzhu/fangzi4-2.jpg and /dev/null differ diff --git a/public/assets/jianzhu/fangzi4-3.jpg b/public/assets/jianzhu/fangzi4-3.jpg deleted file mode 100644 index 1698525..0000000 Binary files a/public/assets/jianzhu/fangzi4-3.jpg and /dev/null differ diff --git a/public/assets/jianzhu/fangzi4-4.jpg b/public/assets/jianzhu/fangzi4-4.jpg deleted file mode 100644 index 202b11d..0000000 Binary files a/public/assets/jianzhu/fangzi4-4.jpg and /dev/null differ diff --git a/public/assets/wall/inner-wall11.jpg b/public/assets/wall/inner-wall11.jpg deleted file mode 100644 index 7a61f1b..0000000 Binary files a/public/assets/wall/inner-wall11.jpg and /dev/null differ diff --git a/public/assets/wall/inner-wall13.jpg b/public/assets/wall/inner-wall13.jpg deleted file mode 100644 index 7bee132..0000000 Binary files a/public/assets/wall/inner-wall13.jpg and /dev/null differ diff --git a/public/assets/wall/outer-wall11.jpg b/public/assets/wall/outer-wall11.jpg deleted file mode 100644 index fd2fff9..0000000 Binary files a/public/assets/wall/outer-wall11.jpg and /dev/null differ diff --git a/public/assets/window/window.png b/public/assets/window/window.png deleted file mode 100644 index 8de6b76..0000000 Binary files a/public/assets/window/window.png and /dev/null differ diff --git a/public/assets/window/window2.png b/public/assets/window/window2.png deleted file mode 100644 index 9cc1956..0000000 Binary files a/public/assets/window/window2.png and /dev/null differ diff --git a/public/vite.svg b/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/Common.ts b/src/Common.ts deleted file mode 100644 index 5665194..0000000 --- a/src/Common.ts +++ /dev/null @@ -1,38 +0,0 @@ -import * as THREE from "three"; - -export const loadingManager = new THREE.LoadingManager(); - -loadingManager.onStart = function (url, itemsLoaded, itemsTotal) { - console.log( - "Started loading file: " + - url + - ".\nLoaded " + - itemsLoaded + - " of " + - itemsTotal + - " files." - ); -}; - -loadingManager.onLoad = function () { - console.log("Loading complete!"); -}; - -loadingManager.onProgress = function (url, itemsLoaded, itemsTotal) { - console.log( - "Loading file: " + - url + - ".\nLoaded " + - itemsLoaded + - " of " + - itemsTotal + - " files." - ); -}; - -loadingManager.onError = function (url) { - console.log("There was an error loading " + url); -}; - - -export const textureLoader = new THREE.TextureLoader(loadingManager); \ No newline at end of file diff --git a/src/Viewer.ts b/src/Viewer.ts deleted file mode 100644 index fd5d3df..0000000 --- a/src/Viewer.ts +++ /dev/null @@ -1,421 +0,0 @@ -import { Easing, Group, Tween } from "@tweenjs/tween.js"; -import CameraControls from "camera-controls"; -import * as THREE from "three"; -import { RoomEnvironment } from "three/examples/jsm/Addons.js"; -import { createWorld } from "./createWorld"; -import { loadingManager } from "./Common"; -import { Loading } from "./loading/loading"; - -import { createRack } from "./model/createRack.js"; - -CameraControls.install({ THREE }); - -const raycaster = new THREE.Raycaster(); -const mouse = new THREE.Vector2(1, 1); - -THREE.Cache.enabled = true; - -export class Viewer { - protected container: HTMLElement; - public width: number; - public height: number; - - protected clock = new THREE.Clock(); - protected camera?: THREE.PerspectiveCamera; - protected scene?: THREE.Scene; - protected renderer?: THREE.WebGLRenderer; - protected cameraControls?: CameraControls; - - private blurMaterial = new THREE.MeshBasicMaterial({ - transparent: true, - opacity: 0.05, - color: new THREE.Color(0x000000), - // depthTest: false, - }); - - private isHighlighted = false; - private rackObject?: THREE.Mesh; - protected tween = new Group(); - - constructor(container: HTMLElement) { - const loading = new Loading(); - loading.hide(); - loadingManager.onProgress = () => { - loading.show(); - // this.render(); - }; - loadingManager.onLoad = () => { - loading.hide(); - this.render(); - }; - - this.container = container; - const boundRect = this.container.getBoundingClientRect(); - this.width = boundRect.width; - this.height = boundRect.height; - this.init(); - this.loadData(); - } - - private init() { - this.initRender(); - this.initScene(); - this.initCamera(); - this.initControls(); - this.initLights(); - this.initEvents(); - this.render(); - this.clock.start(); - this.animate(); - } - - protected initRender() { - this.renderer = new THREE.WebGLRenderer({ - antialias: true, - logarithmicDepthBuffer: true, - }); - // renderer.outputColorSpace = THREE.SRGBColorSpace; - this.renderer.outputColorSpace = THREE.LinearSRGBColorSpace; - this.renderer.setPixelRatio(window.devicePixelRatio); - this.renderer.setSize(this.width, this.height); - // this.renderer.setAnimationLoop(this.animate.bind(this)); - this.container.appendChild(this.renderer.domElement); - } - - protected initCamera() { - this.camera = new THREE.PerspectiveCamera( - 60, - this.width / this.height, - 1, - 100000 - ); - this.camera.position.set(-4000, 2500, -4000); - this.camera.lookAt(0, 0, 0); - - this.cameraControls?.saveState(); - } - - protected initControls() { - this.cameraControls = new CameraControls( - this.camera!, - this.renderer!.domElement - ); - this.cameraControls.maxPolarAngle = Math.PI / 2; - } - - protected initScene() { - if (!this.renderer) { - return; - } - this.scene = new THREE.Scene(); - const pmremGenerator = new THREE.PMREMGenerator(this.renderer); - this.scene.environment = pmremGenerator.fromScene( - new RoomEnvironment(), - 0.01, - 1, - 10000 - ).texture; - this.scene.background = new THREE.Color(0xeeeeee); - - // For test - // const helper = new THREE.GridHelper(10000, 100); - // helper.position.y = -5; - // this.scene.add(helper); - // this.scene.add(new THREE.AxesHelper(100000)); - } - - protected initLights() { - const light1 = new THREE.AmbientLight(0xffffff, 3); - light1.name = "ambient_light"; - this.scene?.add(light1); - - const light2 = new THREE.DirectionalLight(0xffffff, 1); - light2.position.set(0.5, 1, 0.866).multiplyScalar(300); // ~60º - light2.name = "main_light"; - this.scene?.add(light2); - } - - render() { - this.renderer?.render(this.scene!, this.camera!); - } - - animate() { - const delta = this.clock.getDelta(); - this.tween.update(); - const hasControlsUpdated = this.cameraControls!.update(delta); - requestAnimationFrame(this.animate.bind(this)); - if (hasControlsUpdated) { - this.render(); - } - } - - protected initEvents() { - window.addEventListener("resize", this.handle_resize.bind(this), false); - this.container.addEventListener( - "dblclick", - this.handle_dblclick.bind(this) - ); - - let mouseMoved = false; - this.container.addEventListener("pointerdown", () => { - mouseMoved = false; - }); - this.container.addEventListener("pointermove", () => { - mouseMoved = true; - }); - this.container.addEventListener("pointerup", (e: MouseEvent) => { - e.preventDefault(); - const isRightClick = e.button === 2; - if (!mouseMoved && isRightClick) { - this.handle_mouseRight(); - } - }); - } - - private handle_resize() { - const boundRect = this.container.getBoundingClientRect(); - this.width = boundRect.width; - this.height = boundRect.height; - this.camera!.aspect = this.width / this.height; - this.camera!.updateProjectionMatrix(); - this.renderer!.setSize(this.width, this.height); - this.render(); - } - - private handle_mouseRight() { - if (this.rackObject) { - const frontDoor = this.rackObject.getObjectByName("rack-front-door")!; - this.animiteObject(frontDoor); - const backDoor = this.rackObject.getObjectByName("rack-back-door")!; - this.animiteObject(backDoor); - this.rackObject = undefined; - } - this.clearHighlight(); - this.cameraControls?.reset(true); - } - - private handle_dblclick(event: MouseEvent) { - if (this.isHighlighted) return; - mouse.x = (event.clientX / window.innerWidth) * 2 - 1; - mouse.y = -(event.clientY / window.innerHeight) * 2 + 1; - raycaster.setFromCamera(mouse, this.camera!); - const intersects = raycaster.intersectObject(this.scene!, true); - if (intersects.length > 0) { - const object = intersects[0].object; - console.log(object); - console.log("points:", intersects[0].point.toArray()); - if (this.isRack(object)) { - this.flyToRack(object.parent!)?.then(() => { - const frontDoor = object.parent?.getObjectByName("rack-front-door")!; - this.animiteObject(frontDoor); - const backDoor = object.parent?.getObjectByName("rack-back-door")!; - this.animiteObject(backDoor); - }); - this.rackObject = object.parent as THREE.Mesh; - // 虚化其他物体 - object.parent!.removeFromParent(); - this.highlightScene(); - this.scene?.add(object.parent!); - } else { - if (object.userData.animation) { - this.animiteObject(object); - } else { - this.cameraControls?.moveTo(...intersects[0].point.toArray(), true); - } - } - } - } - - protected flyToRack(rackObject: THREE.Object3D) { - const box = new THREE.Box3().setFromObject(rackObject); - const lookAt = box.getCenter(new THREE.Vector3()); - const direction = rackObject - .getWorldDirection(new THREE.Vector3()) - .normalize(); - const size = box.getSize(new THREE.Vector3()); - const radius = size.length() / 1.5; - const distance = this.cameraControls?.getDistanceToFitSphere(radius); - const position = lookAt.clone().add(direction.multiplyScalar(distance!)); - - // 飞向机柜门正面 - return this.cameraControls?.setLookAt( - position.x, - position.y, - position.z, - lookAt.x, - lookAt.y, - lookAt.z, - true - ); - } - - protected animiteObject(object: THREE.Object3D) { - const animatInfo = object.userData.animation.split(":"); - const anchor = animatInfo[1]; - const rotationAngle = parseInt(animatInfo[2]); - const during = parseInt(animatInfo[3]); - this.animateRotate(object as THREE.Mesh, anchor, rotationAngle, during); - } - - protected isRack(object: THREE.Object3D) { - return object.userData.name?.includes("rack"); - } - - highlightScene() { - this.scene?.traverseVisible((obj: THREE.Object3D) => { - if (obj instanceof THREE.Mesh) { - // @ts-ignore - obj.__originalMaterial = obj.material; - obj.material = this.blurMaterial; - } - }); - this.isHighlighted = true; - } - - clearHighlight() { - this.scene?.traverseVisible((obj: THREE.Object3D) => { - // @ts-ignore - if (obj.__originalMaterial) { - // @ts-ignore - obj.material = obj.__originalMaterial; - } - }); - this.isHighlighted = false; - this.render(); - } - - protected animateRotate( - object: THREE.Mesh, - anchor: string, - angle: number, - during: number - ) { - const size = new THREE.Vector3(); - object.geometry.computeBoundingBox(); - object.geometry.boundingBox!.getSize(size); - const pivotPoint = new THREE.Vector3(); - const rotationAxis = new THREE.Vector3(); - - if (anchor === "left") { - pivotPoint.set(-size.x / 2, 0, 0); - rotationAxis.set(0, 1, 0); - } else if (anchor === "right") { - pivotPoint.set(size.x / 2, 0, 0); - rotationAxis.set(0, 1, 0); - } - pivotPoint.applyMatrix4(object.matrix); - rotationAxis.applyMatrix4( - new THREE.Matrix4().extractRotation(object.matrix) - ); - - const from = 0; - let to = 1; - if (object.userData.animated) { - to = -1; - } - object.userData.animated = !object.userData.animated; - let lastValue = 0; - - new Tween({ x: from }, this.tween) - .to({ x: to }, during) - .easing(Easing.Bounce.Out) - .onUpdate((v) => { - const tm = new THREE.Matrix4().setPosition(pivotPoint); - const rm = new THREE.Matrix4(); - rm.makeRotationAxis( - rotationAxis, - THREE.MathUtils.degToRad(-angle) * (v.x - lastValue) - ); - tm.multiply(rm); - const tmm = new THREE.Matrix4().setPosition( - pivotPoint.clone().negate() - ); - tm.multiply(tmm); - object.applyMatrix4(tm); - - // 更新渲染 - this.render(); - - lastValue = v.x; - }) - .start(); - } - - loadData() { - createWorld(this.scene!); - this.createRack(this.scene!); - // this.createPathFlight(); - this.render(); - } - - private createRack(scene: THREE.Scene) { - // 机柜 - const rackMap = { - sideMap: "./assets/rack2/r1srack.jpg", - topMap: "./assets/rack2/r1track.jpg", - frameMap: "./assets/rack2/r1frack42.png", - frontDoorMap: "./assets/rack2/r1frack.jpg", - backDoorMap: "./assets/rack2/r1brack.jpg", - rackBack: "./assets/rack2/r1brack.jpg", - }; - for (let i = 0; i < 8; i++) { - for (let j = 0; j < 20; j++) { - const rack = createRack({ - ...rackMap, - position: [-1680 + 230 * i, 100, -1400 + 60 * j], - rotation: [0, -Math.PI / 2, 0], - }); - scene.add(rack); - } - } - - for (let i = 0; i < 10; i++) { - for (let j = 0; j < 20; j++) { - const rack = createRack({ - ...rackMap, - position: [500 + 230 * i, 100, -1400 + 60 * j], - rotation: [0, -Math.PI / 2, 0], - }); - scene.add(rack); - } - } - } - - // @ts-ignore - private createPathFlight() { - const points = [ - [-2108.1056622497044, 140, -1768.2852733169518], - [-2090.8022641659068, 140, -8.999541340935856], - [252.92217113182915, 140, -21.646393904821025], - [2579.693282778835, 140, -16.824099103697677], - [2488.183270612835, 140, 1271.4025633512294], - [321.0467169543589, 140, 1261.9262629538507], - [-2131.2017368499573, 140, 1230.3146832488842], - ]; - const vectors = points.map((p) => new THREE.Vector3(p[0], p[1], p[2])); - const curve = new THREE.CatmullRomCurve3(vectors, false, "catmullrom", 0.1); - - new Tween({ t: 0 }, this.tween) - .to({ t: 0.99 }, 20 * 1000) - .easing(Easing.Linear.Out) - .onUpdate((v) => { - const eye = curve.getPointAt(v.t); - const lookAt = curve.getPointAt(v.t + 0.01); - this.cameraControls?.setLookAt( - eye.x, - eye.y, - eye.z, - lookAt.x, - lookAt.y, - lookAt.z, - false - ); - }) - .start(); - - const tubeGeometry = new THREE.TubeGeometry(curve, 100, 20, 5, false); - const material = new THREE.MeshLambertMaterial({ color: 0xff00ff }); - const mesh = new THREE.Mesh(tubeGeometry, material); - this.scene?.add(mesh); - } -} diff --git a/src/createWorld.ts b/src/createWorld.ts deleted file mode 100644 index 9f85079..0000000 --- a/src/createWorld.ts +++ /dev/null @@ -1,789 +0,0 @@ -import { createWall } from "./model/createWall.js"; -import { createPlant } from "./model/createPlant.js"; -import { createColumn } from "./model/createColumn.js"; -import * as THREE from "three"; - -export function createWorld(scene: THREE.Scene) { - // 创建墙 - [ - { - type: "Wall", - data: [ - [-2922, -1892], - [2768, -1892], - [2768, 2108], - [-2922, 2108], - ], - outsideColor: "#e3e7ed", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - }, - outsideTexture: { - map: "./assets/wall/wall14.jpg", - repeat: [50, 1], - }, - floorTexture: { - map: "./assets/wall/floor5.jpg", - repeat: [15, 15], - }, - roofTexture: { - map: "./assets/wall/floor.jpg", - repeat: [15, 15], - }, - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - closed: true, - children: [ - { - type: "DoubleDoor", - width: 120, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-2070.497907096083, 90, 2108], - }, - { - type: "DoubleDoor", - width: 120, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-2070.497907096083, 90, -1892], - }, - ], - }, - { - type: "Wall", - data: [ - [-1932, -1892], - [-1932, -1592], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-1932, 1121], - [2237, 1121], - [2237, 83], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall13.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall13.jpg", - repeat: [10, 1], - }, - closed: false, - children: [ - { - type: "Window", - width: 705, - frameColor: 0x333640, - position: [21.8733119497804, 120, 1121], - map: "./assets/window/window3.png", - }, - { - type: "Window", - width: 930, - frameColor: 0x333640, - position: [1696.6050674876196, 120, 1121], - map: "./assets/window/window3.png", - }, - { - type: "Window", - width: 470.91171148899, - frameColor: 0x333640, - position: [-1662.8616076650972, 120, 1121], - map: "./assets/window/window3.png", - }, - { - type: "Window", - width: 840.0829979159867, - frameColor: 0x333640, - position: [-871.5658491761828, 120, 1121], - map: "./assets/window/window3.png", - }, - { - type: "Window", - width: 561.6639519808001, - frameColor: 0x333640, - position: [794.5301772242469, 120, 1121], - map: "./assets/window/window3.png", - }, - { - type: "Window", - width: 898.9436385369619, - frameColor: 0x333640, - position: [2237, 120, 595.2598807357291], - map: "./assets/window/window3.png", - }, - ], - }, - { - type: "Wall", - data: [ - [-1932, -127], - [-1932, 1411], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall13.jpg", - repeat: [10, 1], - }, - closed: false, - children: [ - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [-1932, 90, 1246.999975369071], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [-1932, 90, -29.999992885074985], - }, - { - type: "Window", - width: 854.0334046264043, - frameColor: 0x333640, - position: [-1932, 120, 609.9552231978], - map: "./assets/window/window3.png", - }, - ], - }, - { - type: "Wall", - data: [ - [-1932, 1411], - [-1932, 2108], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [240, -1592], - [240, -1178], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall11.jpg", - repeat: [2, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall11.jpg", - repeat: [2, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-438, 1411], - [-438, 2108], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [4, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-2222, 1067], - [-2922, 1067], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [4, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-2222, 64], - [-2922, 64], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [4, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-2222, -1270], - [-2922, -1270], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [4, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [1157, 83], - [1157, 1121], - ], - transparent: true, - insideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - outsideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-1932, 83], - [-390, 83], - ], - transparent: true, - insideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - outsideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - closed: false, - children: [ - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [-1783.000032549887, 90, 83], - }, - ], - }, - { - type: "Wall", - data: [ - [240, -1178], - [240, -127], - ], - transparent: true, - insideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - outsideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-390, 83], - [-390, 1121], - ], - transparent: true, - insideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - outsideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [2768, -127], - [-1932, -127], - ], - transparent: true, - insideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [20, 1], - }, - outsideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [20, 1], - }, - closed: false, - children: [ - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [-1743.0000015683217, 90, -127], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [109.0000057448495, 90, -127], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [393.00003503999613, 90, -127], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [2640.999966667306, 90, -127], - }, - ], - }, - { - type: "Wall", - data: [ - [-1932, -1592], - [-1932, -127], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall13.jpg", - repeat: [10, 1], - }, - closed: false, - children: [ - { - type: "Window", - width: 1277, - frameColor: 0x333640, - position: [-1932, 120, -835.1127278429044], - map: "./assets/window/window3.png", - }, - ], - }, - { - type: "Wall", - data: [ - [-1932, 1411], - [2768, 1411], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/outer-wall11.jpg", - repeat: [10, 1], - }, - closed: false, - children: [ - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-566.0000325498869, 90, 1411], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [925.9999674501132, 90, 1411], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [1202.9999674501132, 90, 1411], - }, - ], - }, - { - type: "Wall", - data: [ - [-390, 83], - [1157, 83], - [2237, 83], - ], - transparent: true, - insideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - outsideTexture: { - map: "./assets/wall/glass-wall4.png", - repeat: [3, 1], - }, - closed: false, - children: [ - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [-224.000032549887, 90, 83], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [1479.9999674501132, 90, 83], - }, - ], - }, - { - type: "Wall", - data: [ - [-1932, -1592], - [2766, -1592], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall11.jpg", - repeat: [20, 1], - }, - outsideTexture: { - map: "./assets/wall/outer-wall11.jpg", - repeat: [10, 1], - }, - closed: false, - children: [ - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [108.11004610554635, 90, -1592], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door14-l.png", - rightMap: "./assets/door/door14-r.png", - position: [387.74448236724686, 90, -1592], - }, - ], - }, - { - type: "Wall", - data: [ - [1049, 1411], - [1049, 2108], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-2222, -880], - [-2922, -880], - ], - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-2222, 677], - [-2922, 677], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - closed: false, - }, - { - type: "Wall", - data: [ - [-2222, 2108], - [-2222, -1892], - ], - insideLightMap: "./assets/env/inside_lightmap9.jpg", - outsideLightMap: "./assets/env/outside_lightmap9.jpg", - insideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - outsideTexture: { - map: "./assets/wall/inner-wall10.jpg", - repeat: [10, 1], - }, - closed: false, - children: [ - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-2222, 90, -1406.0000011652241], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-2222, 90, -1045.0000011652244], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-2222, 90, -120.00000116522426], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-2222, 90, 509.99999883477574], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-2222, 90, 921.9999988347759], - }, - { - type: "DoubleDoor", - width: 160, - height: 180, - depth: 36, - frameColor: 0x333640, - leftMap: "./assets/door/door15-l.jpg", - rightMap: "./assets/door/door15-r.jpg", - position: [-2222, 90, 1251.999998834776], - }, - { - type: "Window", - width: 500, - frameColor: 0x333640, - position: [-2222, 120, 1700], - map: "./assets/window/window3.png", - }, - ], - }, - ].forEach((json) => scene!.add(createWall(json))); - - { - for (let i = 0; i < 6; i++) { - const column = createColumn({ - width: 60, - height: 270, - depth: 60, - position: [-1380 + 820 * i, 135, -1850], - }); - scene.add(column); - - const column2 = createColumn({ - width: 60, - height: 270, - depth: 60, - position: [-1380 + 820 * i, 135, 2065], - }); - scene.add(column2); - } - - [ - [-2250, 135, -1850], - [-2250, 135, -880], - [-2250, 135, 72], - [-2250, 135, 1070], - [-2250, 135, 2065], - [2233, 135, 90], - [1155, 135, 90], - [-390, 135, 90], - [243, 135, -127], - ].forEach((p) => { - scene.add( - createColumn({ - width: 60, - height: 270, - depth: 60, - position: p, - }) - ); - }); - } - - { - [ - [-1970, 10, -1371], - [-1970, 10, -833], - [-1970, 10, -305], - [2511, 10, -55], - ].forEach((p) => - scene.add( - createPlant({ - width: 30, - height: 120, - position: p, - style: 2, - }) - ) - ); - } -} diff --git a/src/loading/loading.css b/src/loading/loading.css deleted file mode 100644 index ddfd136..0000000 --- a/src/loading/loading.css +++ /dev/null @@ -1,35 +0,0 @@ -/* HTML:
*/ -.loader { - /* 定位 */ - position: absolute; - top: 50%; - left: 50%; - z-index: 999; - - --s: 20px; - - --_d: calc(0.353*var(--s)); - width: calc(var(--s) + var(--_d)); - aspect-ratio: 1; - display: grid; - } - .loader:before, - .loader:after { - content: ""; - grid-area: 1/1; - clip-path: polygon(var(--_d) 0,100% 0,100% calc(100% - var(--_d)),calc(100% - var(--_d)) 100%,0 100%,0 var(--_d)); - background: - conic-gradient(from -90deg at calc(100% - var(--_d)) var(--_d), - #fff 135deg,#666 0 270deg,#aaa 0); - animation: l6 2s infinite; - } - .loader:after { - animation-delay:-1s; - } - @keyframes l6{ - 0% {transform:translate(0,0)} - 25% {transform:translate(30px,0)} - 50% {transform:translate(30px,30px)} - 75% {transform:translate(0,30px)} - 100%{transform:translate(0,0)} - } \ No newline at end of file diff --git a/src/loading/loading.ts b/src/loading/loading.ts deleted file mode 100644 index e203fd5..0000000 --- a/src/loading/loading.ts +++ /dev/null @@ -1,23 +0,0 @@ -import "./loading.css"; - -export class Loading { - el?: HTMLDivElement; - - constructor() { - this.create(); - } - - create() { - this.el = document.createElement("div"); - this.el.classList.add("loader"); - document.body.append(this.el); - } - - show() { - this.el!.style.display = "grid"; - } - - hide() { - this.el!.style.display = "none"; - } -} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index a9dd064..0000000 --- a/src/main.ts +++ /dev/null @@ -1,5 +0,0 @@ -import './style.css' -import { Viewer } from "./Viewer"; - -// @ts-ignore -window.viewer = new Viewer(document.getElementById("app")!); \ No newline at end of file diff --git a/src/model/createColumn.js b/src/model/createColumn.js deleted file mode 100644 index 0f9dc8d..0000000 --- a/src/model/createColumn.js +++ /dev/null @@ -1,30 +0,0 @@ -import * as THREE from 'three'; -import { textureLoader } from "../Common"; - -export function createColumn(json) { - const position = json.position || [0, 0, 0]; - const rotation = json.rotation || [0, 0, 0]; - - const width = json.width || 30; - const height = json.height || 240; - const depth = json.depth || 30; - - const color = json.color || 0xE8E8E8; - const map = textureLoader.load(json.map || "./assets/column/column10.jpg"); - const lightMap = textureLoader.load("./assets/column/column_lightmap4.jpg"); - - const boxGeo = new THREE.BoxGeometry(width, height, depth); - const mesh = new THREE.Mesh(boxGeo, [ - new THREE.MeshPhongMaterial({ color, map, lightMap }), //右 - new THREE.MeshPhongMaterial({ color, map, lightMap }), //左 - new THREE.MeshBasicMaterial({ color }), //上 - new THREE.MeshBasicMaterial({ color }), //下 - new THREE.MeshPhongMaterial({ color, map, lightMap }), //前 - new THREE.MeshPhongMaterial({ color, map, lightMap}), //后 - ]); - - mesh.position.set(...position); - mesh.rotation.set(...rotation); - - return mesh; -} \ No newline at end of file diff --git a/src/model/createDoor.js b/src/model/createDoor.js deleted file mode 100644 index f9dcd38..0000000 --- a/src/model/createDoor.js +++ /dev/null @@ -1,141 +0,0 @@ -import * as THREE from 'three'; -import { SUBTRACTION, INTERSECTION, ADDITION, Brush, Evaluator } from 'three-bvh-csg'; -import { textureLoader } from "../Common"; - -const envMap = textureLoader.load("./assets/env/envmap.jpg"); -envMap.mapping = THREE.EquirectangularReflectionMapping; -envMap.colorSpace = THREE.SRGBColorSpace; - -const specularMap = textureLoader.load("./assets/env/white.png") - -// 单开门 -export function createDoor(json) { - const width = json.width || 205; - const height = json.height || 180; - const depth = json.depth || 30; - const position = json.position || [0, 0, 0]; - const frameColor = json.frameColor || 0xFEFEFE; - const frameEdge = 10, - frameBottomEdge = 2; - const image = textureLoader.load(json.map || "./assets/door/door1.png"); - const group = new THREE.Group(); - group.position.set(...position); - - // 门套 - const cutGeo = new THREE.BoxGeometry(width - frameEdge, height - frameEdge / 2 - frameBottomEdge, depth + 2); - const cutMat = new THREE.MeshPhongMaterial({ color: frameColor }); - const cutMesh = new Brush(cutGeo, cutMat); - // scene.add(cutMesh); - let result; - const evaluator = new Evaluator(); - result = evaluator.evaluate(cutMesh, new Brush(new THREE.BoxGeometry(width - frameEdge - 4, height - frameEdge / 2 - frameBottomEdge - 4, depth + 2), cutMat), SUBTRACTION, result); - group.add(result); - - // 门 - const doorGeo = new THREE.BoxGeometry((width - frameEdge) - 2, height - frameEdge / 2 - frameBottomEdge - 2, 2); - const uvs = [ - 0, 1, 0.333, 1, 0, 0.5, 0.333, 0.5, //右 - 0, 1, 0.333, 1, 0, 0.5, 0.333, 0.5, // 左 - 0, 1, 0.333, 1, 0, 0.5, 0.333, 0.5, // 上 - 0, 1, 0.333, 1, 0, 0.5, 0.333, 0.5, // 下 - 0.333, 0.5, 0.666, 0.5, 0.333, 0, 0.666, 0, // 前 - 0.666, 1, 1, 1, 0.666, 0.5, 1, 0.5, // 后 - ] - doorGeo.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2)); - const doorMesh = new Brush(doorGeo, new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: image, transparent: true, specularMap })); - doorMesh.userData.animation = "rotation:left:-80:1000:0:bounceOut"; - group.add(doorMesh); - - return group; -} - -// 双开门 -export function createDoubleDoor(json) { - const width = json.width || 205; - const height = json.height || 213; - const depth = json.depth || 26; - const position = json.position || [0, 0, 0]; - const frameEdge = 10, - frameBottomEdge = 5; - const frameColor = json.frameColor || 0xFEFEFE; - const leftImage = textureLoader.load(json.leftMap || "./assets/door/door-l.png"); - const rightImage = textureLoader.load(json.rightMap || "./assets/door/door-r.png"); - rightImage.flipY = true; - const group = new THREE.Group(); - group.position.set(...position); - - // 门套 - const cutGeo = new THREE.BoxGeometry(width - frameEdge, height - frameEdge / 2 - frameBottomEdge, depth + 2); - const cutMat = new THREE.MeshPhongMaterial({ color: frameColor }); - const cutMesh = new Brush(cutGeo, cutMat); - // scene.add(cutMesh); - let result; - const evaluator = new Evaluator(); - result = evaluator.evaluate(cutMesh, new Brush(new THREE.BoxGeometry(width - frameEdge - 4, height - frameEdge / 2 - frameBottomEdge - 4, depth + 2), cutMat), SUBTRACTION, result); - group.add(result); - - const uvs = [ - 0, 1, 0.333, 1, 0, 0.5, 0.333, 0.5, //右 - 0, 1, 0.333, 1, 0, 0.5, 0.333, 0.5, // 左 - 0, 1, 0.333, 1, 0, 0.5, 0.333, 0.5, // 上 - 0, 1, 0.333, 1, 0, 0.5, 0.333, 0.5, // 下 - 0.333, 0.5, 0.666, 0.5, 0.333, 0, 0.666, 0, // 前 - 0.666, 1, 1, 1, 0.666, 0.5, 1, 0.5, // 后 - ] - // 左门 - const doorLeftGeo = new THREE.BoxGeometry((width - frameEdge) / 2 - 2, height - frameEdge / 2 - frameBottomEdge - 2, 2); - doorLeftGeo.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2)); - const doorLeftMesh = new Brush(doorLeftGeo, new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: leftImage, transparent: true, specularMap })); - doorLeftMesh.userData.animation = "rotation:left:-80:1000:0:bounceOut"; - doorLeftMesh.position.set(-(width - frameEdge) / 4 + 1, 0, 0); - group.add(doorLeftMesh); - - // 右门 - const doorRightGeo = new THREE.BoxGeometry((width - frameEdge) / 2 - 2, height - frameEdge / 2 - frameBottomEdge - 2, 2); - doorRightGeo.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2)); - const doorRightMesh = new Brush(doorRightGeo, new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: rightImage, transparent: true, specularMap })); - doorRightMesh.position.set((width - frameEdge) / 4 - 1, 0, 0); - doorRightMesh.userData.animation = "rotation:right:80:1000:0:bounceOut"; - group.add(doorRightMesh); - - return group; -} - -// 窗户 -export function createWindow(json) { - const width = json.width || 120; - const height = json.height || 150; - const depth = json.depth || 36; - const position = json.position || [0, 0, 0]; - const image = textureLoader.load(json.map || "./assets/window/window.png"); - const group = new THREE.Group(); - group.position.set(...position); - - const frameEdge = 1; - const frameColor = json.frameColor || 0xFEFEFE; - // 窗套 - const cutGeo = new THREE.BoxGeometry(width - frameEdge + 2, height - frameEdge / 2 + 2, depth + 2); - const cutMat = new THREE.MeshPhongMaterial({ color: frameColor }); - const cutMesh = new Brush(cutGeo, cutMat); - // scene.add(cutMesh); - let result; - const evaluator = new Evaluator(); - result = evaluator.evaluate(cutMesh, new Brush(new THREE.BoxGeometry(width - frameEdge - 1, height - frameEdge / 2 - 1, depth + 2), cutMat), SUBTRACTION, result); - group.add(result); - - // 窗 - const windowGeo = new THREE.BoxGeometry(width, height, 2); - const uvs = [ - 0, 1, 1, 1, 0, 0, 1, 0, //右 - 0, 1, 1, 1, 0, 0, 1, 0, // 左 - 0, 1, 1, 1, 0, 0, 1, 0, // 上 - 0, 1, 1, 1, 0, 0, 1, 0, // 下 - 0, 1, 1, 1, 0, 0, 1, 0, // 前 - 0, 1, 1, 1, 0, 0, 1, 0, // 后 - ] - windowGeo.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2)); - const windowMesh = new THREE.Mesh(windowGeo, new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: image, transparent: true, shininess: 100, reflectivity: 2, envMap })); - group.add(windowMesh); - - return group; -} \ No newline at end of file diff --git a/src/model/createPlant.js b/src/model/createPlant.js deleted file mode 100644 index c9c8405..0000000 --- a/src/model/createPlant.js +++ /dev/null @@ -1,73 +0,0 @@ -import * as THREE from 'three'; -import { SUBTRACTION, INTERSECTION, ADDITION, Brush, Evaluator } from 'three-bvh-csg'; -import { textureLoader } from "../Common"; - -export function createPlant(json) { - const position = json.position || [0, 0, 0]; - const rotation = json.rotation || [0, 0, 0]; - - const style = json.style || 1; - - const nomalMap = textureLoader.load("./assets/env/metal_normalmap.jpg"); - nomalMap.wrapS = THREE.RepeatWrapping; - nomalMap.wrapT = THREE.RepeatWrapping; - nomalMap.repeat.set(10, 5); - - const group = new THREE.Group(); - if (style === 1) { - const width = 30; - const height = 30; - const flowerpot = createFlowerpot(width * 0.5, width * 0.4, height * 2, nomalMap); - group.add(flowerpot); - const image = textureLoader.load("./assets/plant/plant.png"); - image.colorSpace = THREE.SRGBColorSpace; - createBasePlant(width * 1.5, height + 20, 35, image, group); - } else if (style === 2) { - const width = 30; - const height = 120; - const flowerpot = createFlowerpot(width * 0.6, width * 0.4, height / 5, nomalMap); - group.add(flowerpot); - const image = textureLoader.load("./assets/plant/plant2.png"); - image.colorSpace = THREE.SRGBColorSpace; - createBasePlant(width * 2, height, 60, image, group); - } - - group.position.set(...position); - group.rotation.set(...rotation); - - return group; -} - - -function createFlowerpot(w, h, d, normalMap) { - // 花盆 - const cylinderGeo = new THREE.CylinderGeometry(w, h, d, 20, 1); - const cylinderVase = new Brush(cylinderGeo, new THREE.MeshPhongMaterial({ color: new THREE.Color(0xbbbbbb), specular: new THREE.Color(0xbbbbbb), normalMap: normalMap, normalScale: new THREE.Vector2(0.4, 0.4) })); - cylinderVase.updateMatrixWorld(); - - const cylinderHollow = cylinderVase.clone(true); - cylinderHollow.scale.set(0.9, 1, 0.9); - cylinderHollow.updateMatrixWorld(); - const cylinderMud = cylinderHollow.clone(true); - cylinderMud.scale.set(0.9, 0.7, 0.9); - cylinderMud.updateMatrixWorld(); - cylinderMud.material = new THREE.MeshPhongMaterial({ color: new THREE.Color(0x163511), specular: new THREE.Color(0x163511) }) - - let result; - const evaluator = new Evaluator(); - result = evaluator.evaluate(cylinderVase, cylinderHollow, SUBTRACTION, result); - result = evaluator.evaluate(result, cylinderMud, ADDITION, result); - return result; -} - -function createBasePlant(w, h, y, map, parent) { - // 植物 - const count = 5; - for (let i = 0; i < count; i++) { - const plantGeo = new THREE.PlaneGeometry(w, h); - const plant = new THREE.Mesh(plantGeo, new THREE.MeshPhongMaterial({ alphaTest: 0.5, transparent: true, map: map, side: THREE.DoubleSide })) - parent.add(plant); - plant.position.y = y; - plant.rotateY(Math.PI * i / count); - } -} diff --git a/src/model/createRack.js b/src/model/createRack.js deleted file mode 100644 index 267e617..0000000 --- a/src/model/createRack.js +++ /dev/null @@ -1,116 +0,0 @@ -import * as THREE from 'three'; -import { SUBTRACTION, INTERSECTION, ADDITION, Brush, Evaluator } from 'three-bvh-csg'; -import { textureLoader } from "../Common"; - - -const RACK_WIDTH = 60; -const RACK_INNER_WIDTH = 45.5; -const envMap = textureLoader.load("./assets/env/envmap.jpg"); -envMap.mapping = THREE.EquirectangularReflectionMapping; -envMap.colorSpace = THREE.SRGBColorSpace; -const lightMap = textureLoader.load("./assets/env/outside_lightmap.jpg"); - -export function createRack(json) { - const position = json.position || [0, 0, 0]; - const rotation = json.rotation || [0, 0, 0]; - - const rackWidth = json.width || RACK_WIDTH; - const rackHeight = json.height || 200; // 42U机柜 4.445*45 - const rackDepth = json.depth || 80; - const doorDepth = 2; - const rackSideImage = textureLoader.load(json.sideMap || "./assets/rack/rack_side.jpg"); - const rackTopImage = textureLoader.load(json.topMap || "./assets/rack/rack_top.jpg"); - const rackFrameImage = textureLoader.load(json.frameMap || "./assets/rack/rack42u.png"); - - const insideSideImage = textureLoader.load("./assets/rack/inside_side.jpg"); - const insideTopImage = textureLoader.load("./assets/rack/inside_top.jpg"); - - const rackFrontDoorImage = textureLoader.load(json.frontDoorMap || "./assets/rack/rack_door_front.jpg"); - const rackBackDoorImage = textureLoader.load(json.backDoorMap || "./assets/rack/rack_door_back.jpg"); - - const rackBackImage = textureLoader.load(json.rackBack || "./assets/rack/rack_back.jpg"); - - const rack = new THREE.Group(); - rack.position.set(...position); - rack.rotation.set(...rotation); - - let cube1, cube2; - { - // 柜体 - const geometry = new THREE.BoxGeometry(rackWidth, rackHeight, rackDepth); - cube1 = new Brush( - geometry, - [ - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: rackSideImage, envMap, reflectivity: 0.5 }),// 右面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: rackSideImage, envMap, reflectivity: 0.5 }), // 左面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: rackTopImage, envMap, reflectivity: 0.5 }), // 上面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: rackTopImage, envMap, reflectivity: 0.5 }), // 下面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: rackFrameImage, envMap, reflectivity: 0.5 }), // 前面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: rackFrameImage, envMap, reflectivity: 0.5 }), // 后面 - ] - ) - cube1.updateMatrixWorld(); - // cube1 = new THREE.Mesh(geometry, material); - // scene.add(cube1); - } - - { - // 机柜洞 - const geometry = new THREE.BoxGeometry(RACK_INNER_WIDTH, rackHeight - doorDepth * 2 /* 187.69 */, rackDepth); - cube2 = new Brush( - geometry, - [ - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: insideSideImage, lightMap, envMap, reflectivity: 0.5 }),// 右面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: insideSideImage, lightMap, envMap, reflectivity: 0.5 }), // 左面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: insideTopImage, lightMap, envMap, reflectivity: 0.5 }), // 上面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), specular: new THREE.Color(0xe5e5e5), map: insideTopImage, lightMap, envMap, reflectivity: 0.5 }), // 下面 - new THREE.MeshBasicMaterial({ color: new THREE.Color(0xffffff), lightMap }), // 前面 - new THREE.MeshBasicMaterial({ color: new THREE.Color(0xffffff), lightMap }), // 后面 - ] - ) - cube2.updateMatrixWorld(); - // cube2 = new THREE.Mesh(geometry, material); - // scene.add(cube2); - } - - let result; - const evaluator = new Evaluator(); - result = evaluator.evaluate(cube1, cube2, SUBTRACTION, result); - result.name = "rack-body"; - result.userData.name = "rack-body"; - rack.add(result); - - { - const geometry = new THREE.BoxGeometry(rackWidth, rackHeight, doorDepth); - const rackDoor = new THREE.Mesh(geometry, [ - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: insideTopImage, envMap, reflectivity: 0.5 }),// 右面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: insideTopImage, envMap, reflectivity: 0.5 }), // 左面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: insideTopImage, envMap, reflectivity: 0.5 }), // 上面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: insideTopImage, envMap, reflectivity: 0.5 }), // 下面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: rackFrontDoorImage, envMap, reflectivity: 0.7, shininess: 100 }), - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: rackBackDoorImage, envMap, reflectivity: 0.7, shininess: 100 }), - ]); - rackDoor.name = "rack-front-door"; - rackDoor.position.z = rackDepth / 2 + 1; - rackDoor.userData.animation = "rotation:right:-135:1000:0:bounceOut"; - rackDoor.userData.name = "rack-front-door"; - rack.add(rackDoor); - - const rackDoorBack = rackDoor.clone(); - rackDoorBack.material = [ - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: insideTopImage, envMap, reflectivity: 0.5 }),// 右面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: insideTopImage, envMap, reflectivity: 0.5 }), // 左面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: insideTopImage, envMap, reflectivity: 0.5 }), // 上面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: insideTopImage, envMap, reflectivity: 0.5 }), // 下面 - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: rackBackImage, envMap, reflectivity: 0.7, shininess: 100 }), - new THREE.MeshPhongMaterial({ color: new THREE.Color(0xffffff), map: rackBackImage, envMap, reflectivity: 0.7, shininess: 100 }), - ] - rackDoorBack.name = "rack-back-door"; - rackDoorBack.position.z = -rackDepth / 2 - 1; - rackDoorBack.userData.animation = "rotation:left:-135:1000:0:bounceOut"; - rackDoorBack.userData.name = "rack-back-door"; - rack.add(rackDoorBack); - } - - return rack; -} \ No newline at end of file diff --git a/src/model/createWall.js b/src/model/createWall.js deleted file mode 100644 index 1c79e73..0000000 --- a/src/model/createWall.js +++ /dev/null @@ -1,361 +0,0 @@ -import * as THREE from 'three'; -import { createDoor, createDoubleDoor, createWindow } from './createDoor.js'; -import { Earcut } from 'three/src/extras/Earcut.js'; -import { textureLoader } from "../Common"; - -const envMap = textureLoader.load("./assets/env/envmap2.jpg"); -envMap.mapping = THREE.EquirectangularReflectionMapping; -envMap.colorSpace = THREE.SRGBColorSpace; - -export function createWall(json) { - const position = json.position || [0, 0, 0]; - - const wallHeight = json.height || 260; - const wallDepth = json.depth || 30; - let wallData = json.data || []; - const isCCW = isClockWise(wallData); - if (!isCCW) { - wallData = wallData.reverse(); - } - const closedWall = json.closed; - - const topColor = json.topColor || 0xdbdee5; - const bottomColor = json.bottomColor || 0xffffff; - const insideColor = json.insideColor || 0xEFEFEF; - const outsideColor = json.outsideColor || 0xDCE8E9; - - const outsideTexture = json.outsideTexture || {}; - const insideTexture = json.insideTexture || {}; - const floorTexture = json.floorTexture || {}; - const roofTexture = json.roofTexture || {}; - - const outsideWallImage = textureLoader.load(outsideTexture.map || "./assets/wall/wall.png"); - outsideWallImage.wrapS = THREE.RepeatWrapping; - outsideWallImage.wrapT = THREE.RepeatWrapping; - outsideWallImage.repeat.set(...outsideTexture.repeat || [5, 1]); - - const insideWallImage = textureLoader.load(insideTexture.map || "./assets/env/inside_lightmap.jpg"); - insideWallImage.wrapS = THREE.RepeatWrapping; - insideWallImage.wrapT = THREE.RepeatWrapping; - insideWallImage.repeat.set(...insideTexture.repeat || [5, 1]); - - const insideLightmap = textureLoader.load(json.insideLightMap || "./assets/env/inside_lightmap.jpg"); - insideLightmap.flipY = false; - insideLightmap.colorSpace = THREE.SRGBColorSpace; - - const outsideLightmap = textureLoader.load(json.outsideLightMap || "./assets/env/outside_lightmap.jpg"); - outsideLightmap.colorSpace = THREE.SRGBColorSpace; - // outsideLightmap.flipY = false; - - // 玻璃墙 - const transparent = json.transparent || false; - - const floorMap = textureLoader.load(floorTexture.map || "./assets/wall/floor.jpg"); - floorMap.wrapS = THREE.RepeatWrapping; - floorMap.wrapT = THREE.RepeatWrapping; - floorMap.repeat.set(...floorTexture.repeat || [5, 5]); - const roofMap = textureLoader.load(roofTexture.map || "./assets/wall/floor.jpg"); - roofMap.wrapS = THREE.RepeatWrapping; - roofMap.wrapT = THREE.RepeatWrapping; - roofMap.repeat.set(...roofTexture.repeat || [5, 5]); - - const children = json.children || []; - - const wall = new THREE.Group(); - const materialSide = THREE.FrontSide; - - const offset = wallDepth / 2; - - const edges = []; - let firstEdge, prevEdge; - for (let i = 0; i < wallData.length; i++) { - const start = wallData[i]; - const isLast = i + 1 === wallData.length; - if (!closedWall && isLast) { - break; - } - const end = wallData[(i + 1) % wallData.length]; - - const edge = { - current: [start, end], - children: [], - } - for (let c = 0; c < children.length; c++) { - const child = children[c]; - const pos = child.position; - if (pointOnLine([pos[0], pos[2]], start, end)) { - let obj; - if (child.type === "SingleDoor") { - obj = createDoor(child); - } else if (child.type === "DoubleDoor") { - obj = createDoubleDoor(child); - } else if (child.type === "Window") { - obj = createWindow(child); - } - if (obj) { - const box = new THREE.Box3().setFromObject(obj); - const size = box.getSize(new THREE.Vector3()); - edge.children.push({ - size, - position: obj.position - }); - const angle = getAngle(1, 0, end[0] - start[0], end[1] - start[1]); - obj.rotateY(angle); - wall.add(obj); - } - } - } - if (i === 0) { - firstEdge = edge; - } else { - edge.prev = prevEdge; - prevEdge.next = edge; - if (i + 1 == wallData.length) { - firstEdge.prev = edge; - edge.next = firstEdge; - } - } - prevEdge = edge; - edges.push(edge); - } - console.log(edges); - - const floorPoints = []; - for (let i = 0; i < edges.length; i++) { - const current = edges[i]; - - const interiorStartVec = getHalfAngleVector(current.prev, current, offset); - const interiorEndVec = getHalfAngleVector(current, current.next, offset); - - const exteriorStartVec = getHalfAngleVector(current.prev, current, offset); - const exteriorEndVec = getHalfAngleVector(current, current.next, offset); - - const v1Start = current.current[0]; - const v1End = current.current[1]; - - const interiorStart = [v1Start[0] - interiorStartVec[0], v1Start[1] - interiorStartVec[1]]; - const interiorEnd = [v1End[0] - interiorEndVec[0], v1End[1] - interiorEndVec[1]]; - - const exteriorStart = [v1Start[0] + exteriorStartVec[0], v1Start[1] + exteriorStartVec[1]]; - const exteriorEnd = [v1End[0] + exteriorEndVec[0], v1End[1] + exteriorEndVec[1]]; - - // build wall - // inner wall reverse point - const innerMat = new THREE.MeshPhongMaterial({ color: insideColor, specular: new THREE.Color(0.06, 0.06, 0.06), side: materialSide, map: insideWallImage, lightMap: insideLightmap, transparent }); - wall.add(createMesh([interiorEnd, interiorStart], wallHeight, current.children, innerMat)); - // outer wall - const outerMat = new THREE.MeshPhongMaterial({ color: outsideColor, specular: new THREE.Color(0.06, 0.06, 0.06), side: materialSide, map: outsideWallImage, lightMap: outsideLightmap, transparent }); - wall.add(createMesh([exteriorStart, exteriorEnd], wallHeight, current.children, outerMat)); - if (transparent) { - innerMat.envMap = envMap; - outerMat.envMap = envMap; - } - - // bottom wall - wall.add(createPlaneMesh([interiorStart, interiorEnd, exteriorEnd, exteriorStart], 0, new THREE.MeshBasicMaterial({ color: bottomColor, side: materialSide }))); - // top wall - wall.add(createPlaneMesh([interiorStart, interiorEnd, exteriorEnd, exteriorStart].reverse(), wallHeight, new THREE.MeshBasicMaterial({ color: topColor, side: materialSide }))); - - // // 内踢脚线 - // wall.add(createMesh([interiorEnd, interiorStart], 30, current.children, new THREE.MeshBasicMaterial({ color: 0x333640, side: materialSide, aoMap: insideLightmap, aoMapIntensity: 1 }))); - // // 外踢脚线 - // wall.add(createMesh([exteriorStart, exteriorEnd], 30, current.children, new THREE.MeshBasicMaterial({ color: 0x333640, side: materialSide, aoMap: outsideLightmap, aoMapIntensity: 1 }))); - - floorPoints.push(exteriorStart); - } - // floor - const floor = createPlaneMesh(floorPoints, 0, new THREE.MeshBasicMaterial({ color: bottomColor, side: THREE.DoubleSide, map: floorMap })); - wall.add(floor); - // roof - wall.add(createPlaneMesh(floorPoints, wallHeight, new THREE.MeshBasicMaterial({ color: bottomColor, side: THREE.BackSide, map: roofMap }))); - - // console.log(wall); - return wall; -} - -function compuerTransform(transform, invTransform, start, end) { - const angle = getAngle(1, 0, end[0] - start[0], end[1] - start[1]); - const tt = new THREE.Matrix4(); - tt.makeTranslation(-start[0], 0, -start[1]); - const tr = new THREE.Matrix4(); - tr.makeRotationY(-angle); - transform.multiplyMatrices(tr, tt); - invTransform.copy(transform).invert(); -} - -function createMesh(edge, height, holes, material) { - let start = edge[0]; - let end = edge[1]; - - const transform = new THREE.Matrix4(); - const invTransform = new THREE.Matrix4(); - compuerTransform(transform, invTransform, start, end); - - const points = [ - new THREE.Vector3(start[0], 0, start[1]), - new THREE.Vector3(end[0], 0, end[1]), - new THREE.Vector3(end[0], height, end[1]), - new THREE.Vector3(start[0], height, start[1]), - ].map(v => v.applyMatrix4(transform)); - - // shape基于xy平面处理的 转到xy平面处理挖洞hole - const shape = new THREE.Shape([ - new THREE.Vector2(points[0].x, points[0].y), - new THREE.Vector2(points[1].x, points[1].y), - new THREE.Vector2(points[2].x, points[2].y), - new THREE.Vector2(points[3].x, points[3].y), - ]); - - // holes - for (let i = 0; i < holes.length; i++) { - const hole = holes[i]; - - const size = hole.size; - const halfSize = new THREE.Vector3(size.x / 2, size.y / 2, size.z / 2); - const pos = hole.position.clone().applyMatrix4(transform); - const max = pos.clone().sub(halfSize); - const min = pos.clone().add(halfSize); - - shape.holes.push(new THREE.Path([ - new THREE.Vector2(min.x, min.y), - new THREE.Vector2(max.x, min.y), - new THREE.Vector2(max.x, max.y), - new THREE.Vector2(min.x, max.y) - ])); - } - const geometry = new THREE.ShapeGeometry(shape); - - // invert 转换回来 - geometry.getAttribute("position").applyMatrix4(invTransform); - - const posAttribute = geometry.getAttribute("position"); - const uvs = []; - const totalDistance = distance(start[0], start[1], end[0], end[1]); - function vertexToUv(vertex) { - var x = distance(start[0], start[1], vertex.x, vertex.z) / totalDistance; - var y = vertex.y / height; - return [x, y]; - } - for (let i = 0, l = posAttribute.count; i < l; i++) { - const v = new THREE.Vector3(); - v.fromBufferAttribute(posAttribute, i); - uvs.push(...vertexToUv(v)); - } - geometry.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2)); - geometry.setAttribute("uv1", new THREE.Float32BufferAttribute(uvs, 2)); - - geometry.computeVertexNormals(); - geometry.normalizeNormals(); - - return new THREE.Mesh(geometry, material); -} - -function createPlaneMesh(points, height, material) { - const vectors = points.map(p => new THREE.Vector3(p[0], height, p[1])); - const geometry = new THREE.BufferGeometry(); - geometry.setFromPoints(vectors); - const index = Earcut.triangulate(points.flat(), []); - if (isClockWise(points)) { - index.reverse(); - } - geometry.setIndex(index); - const uvs = generateUvByVectors(vectors); - geometry.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2)); - geometry.computeVertexNormals(); - return new THREE.Mesh(geometry, material); -} - - -function getAngle(x1, y1, x2, y2) { - const tDot = x1 * x2 + y1 * y2; - const tDet = x1 * y2 - y1 * x2; - let tAngle = -Math.atan2(tDet, tDot); // (-pi to pi) - - if (tAngle < 0) { // to 0 ~ pi - tAngle += 2 * Math.PI; - } - return tAngle; -} - -function distance(x1, y1, x2, y2) { - return Math.sqrt( - Math.pow(x2 - x1, 2) + - Math.pow(y2 - y1, 2)); -} - -function getHalfAngleVector(edge1, edge2, offset) { - let v1Start, v1End, v2Start, v2End; - if (edge1) { - v1Start = edge1.current[0]; - v1End = edge1.current[1]; - } else { - const s = edge2.current[0]; - const e = edge2.current[1]; - - v1Start = [s[0] - (e[0] - s[0]), s[1] - (e[1] - s[1])]; - v1End = edge2.current[0]; - } - if (edge2) { - v2Start = edge2.current[0]; - v2End = edge2.current[1]; - } else { - const s = edge1.current[0]; - const e = edge1.current[1]; - - v2Start = edge1.current[1]; - v2End = [e[0] + (e[0] - s[0]), e[1] + (e[1] - s[1])]; - } - - const theta = getAngle(v1Start[0] - v1End[0], v1Start[1] - v1End[1], v2End[0] - v1End[0], v2End[1] - v1End[1]); - - // cosine and sine of half angle - var cs = Math.cos(theta / 2.0); - var sn = Math.sin(theta / 2.0); - - // rotate v2 - var v2dx = v2End[0] - v2Start[0]; - var v2dy = v2End[1] - v2Start[1]; - - var vx = v2dx * cs - v2dy * sn; - var vy = v2dx * sn + v2dy * cs; - - // normalize - var mag = distance(0, 0, vx, vy); - var desiredMag = offset / sn; - var scalar = desiredMag / mag; - - return [vx * scalar, vy * scalar]; -} - -function isClockWise(points) { - const n = points.length; - let a = 0.0; - for (let p = n - 1, q = 0; q < n; p = q++) { - a += points[p][0] * points[q][1] - points[q][0] * points[p][1]; - } - return a * 0.5 < 0; -} - -function pointOnLine(point, start, end) { - const v1 = (point[0] - start[0]) * (end[1] - start[1]); - const v2 = (end[0] - start[0]) * (point[1] - start[1]); - if (v1 == v2 //叉乘 - //保证Q点坐标在pi,pj之间 - && Math.min(start[0], end[0]) <= point[0] && point[0] <= Math.max(start[0], end[0]) - && Math.min(start[1], end[1]) <= point[1] && point[1] <= Math.max(start[1], end[1])) - return true; - else - return false; -} - -function generateUvByVectors(vectors) { - const box = new THREE.Box3().setFromPoints(vectors); - const lenX = box.max.x - box.min.x; - const lenZ = box.max.z - box.min.z; - const uvs = []; - for (let i = 0; i < vectors.length; i++) { - const vertex = vectors[i]; - uvs.push(vertex.x / lenX, vertex.z / lenZ); - } - return uvs; -} \ No newline at end of file diff --git a/src/style.css b/src/style.css deleted file mode 100644 index 06ee45a..0000000 --- a/src/style.css +++ /dev/null @@ -1,13 +0,0 @@ -html, -body { - margin: 0; - padding: 0; - width: 100%; - height: 100%; -} - -#app { - width: 100%; - height: 100%; - overflow: hidden; -} \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts deleted file mode 100644 index df5ee88..0000000 --- a/src/vite-env.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// - - -declare module "./model/*.js" \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 8847c9a..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "module": "ESNext", - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "Bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["src"] -} diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index 732b0c1..0000000 --- a/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "vite"; -import vue from "@vitejs/plugin-vue"; - -// https://vite.dev/config/ -export default defineConfig({ - base: "/", - plugins: [vue()], -});