From 0463d0832015ecd49694bc950f76b9a7e2b1e3fb Mon Sep 17 00:00:00 2001 From: Noah Date: Mon, 28 Apr 2025 15:54:13 -0700 Subject: [PATCH] add polytrack 0.5.0 by yours truly --- public/assets/g/polytrack/cover.jpg | Bin 14040 -> 0 bytes public/assets/g/polytrack/forced_square.json | 1525 +- .../images/car_thumbnail_placeholder.png | Bin 0 -> 2756 bytes .../assets/g/polytrack/images/checkmark.svg | 1 + .../g/polytrack/images/community_tracks.jpg | Bin 0 -> 65520 bytes .../g/polytrack/images/custom_tracks.jpg | Bin 0 -> 32017 bytes public/assets/g/polytrack/images/desert.svg | 1 + .../g/polytrack/images/desert_colored.svg | 1 + public/assets/g/polytrack/images/empty.svg | 5 + .../assets/g/polytrack/images/fullscreen.svg | 1 + .../assets/g/polytrack/images/grid_large.svg | 8 + .../assets/g/polytrack/images/grid_small.svg | 8 + public/assets/g/polytrack/images/icon.svg | 54 +- .../g/polytrack/images/official_tracks.jpg | Bin 0 -> 38124 bytes .../polytrack/images/overlapping_disabled.svg | 7 + .../polytrack/images/overlapping_enabled.svg | 8 + public/assets/g/polytrack/images/pending.svg | 1 + public/assets/g/polytrack/images/rotate.svg | 6 +- .../images/rotation_axis_x_negative.svg | 71 + .../images/rotation_axis_x_positive.svg | 71 + .../images/rotation_axis_y_negative.svg | 71 + .../images/rotation_axis_y_positive.svg | 71 + .../images/rotation_axis_z_negative.svg | 71 + .../images/rotation_axis_z_positive.svg | 71 + public/assets/g/polytrack/images/search.svg | 1 + public/assets/g/polytrack/images/share.svg | 1 + public/assets/g/polytrack/images/summer.svg | 1 + public/assets/g/polytrack/images/test.svg | 5 +- public/assets/g/polytrack/images/windowed.svg | 1 + public/assets/g/polytrack/images/winter.svg | 1 + .../g/polytrack/images/winter_colored.svg | 1 + public/assets/g/polytrack/index.html | 27 +- public/assets/g/polytrack/lib/ammo.wasm.js | 9528 ++++- .../g/polytrack/lib/draco/draco_decoder.wasm | Bin 0 -> 285747 bytes .../polytrack/lib/draco/draco_wasm_wrapper.js | 1436 + public/assets/g/polytrack/main.bundle.js | 35347 +++++++++++++++- public/assets/g/polytrack/models/block.glb | Bin 32336 -> 0 bytes public/assets/g/polytrack/models/blocks.glb | Bin 0 -> 30932 bytes public/assets/g/polytrack/models/car.glb | Bin 101824 -> 100052 bytes public/assets/g/polytrack/models/pillar.glb | Bin 64092 -> 23492 bytes public/assets/g/polytrack/models/plane.glb | Bin 78404 -> 0 bytes public/assets/g/polytrack/models/planes.glb | Bin 0 -> 53164 bytes public/assets/g/polytrack/models/road.glb | Bin 780236 -> 228612 bytes .../assets/g/polytrack/models/road_wide.glb | Bin 161336 -> 130544 bytes public/assets/g/polytrack/models/signs.glb | Bin 37896 -> 15940 bytes .../assets/g/polytrack/models/wall_track.glb | Bin 408268 -> 64372 bytes .../g/polytrack/simulation_worker.bundle.js | 21995 +++++++++- .../polytrack/tracks/community/90_reset.track | 1 + .../polytrack/tracks/community/arabica.track | 1 + .../tracks/community/clay_temples.track | 1 + .../tracks/community/concrete_jungle.track | 1 + .../tracks/community/desert_stallion.track | 1 + .../community/hyperions_sanctuary.track | 1 + .../tracks/community/las_calles.track | 1 + .../tracks/community/last_remnant.track | 1 + .../tracks/community/lu_muvimento.track | 1 + .../tracks/community/malformations.track | 1 + .../tracks/community/opal_place_ii.track | 1 + .../polytrack/tracks/community/re_akina.track | 1 + .../tracks/community/sandline_ultimatum.track | 1 + .../tracks/community/snow_park.track | 1 + .../tracks/community/winter_hollow.track | 1 + .../g/polytrack/tracks/official/desert1.track | 1 + .../g/polytrack/tracks/official/desert2.track | 1 + .../g/polytrack/tracks/official/desert3.track | 1 + .../g/polytrack/tracks/official/desert4.track | 1 + .../g/polytrack/tracks/official/summer1.track | 1 + .../g/polytrack/tracks/official/summer2.track | 1 + .../g/polytrack/tracks/official/summer3.track | 1 + .../g/polytrack/tracks/official/summer4.track | 1 + .../g/polytrack/tracks/official/summer5.track | 1 + .../g/polytrack/tracks/official/summer6.track | 1 + .../g/polytrack/tracks/official/summer7.track | 1 + .../g/polytrack/tracks/official/winter1.track | 1 + .../g/polytrack/tracks/official/winter2.track | 1 + .../g/polytrack/tracks/official/winter3.track | 1 + .../g/polytrack/tracks/official/winter4.track | 1 + public/assets/g/polytrack/tracks/track1.track | 1 - .../assets/g/polytrack/tracks/track10.track | 1 - .../assets/g/polytrack/tracks/track11.track | 1 - .../assets/g/polytrack/tracks/track12.track | 1 - .../assets/g/polytrack/tracks/track13.track | 1 - public/assets/g/polytrack/tracks/track2.track | 1 - public/assets/g/polytrack/tracks/track3.track | 1 - public/assets/g/polytrack/tracks/track4.track | 1 - public/assets/g/polytrack/tracks/track5.track | 1 - public/assets/g/polytrack/tracks/track6.track | 1 - public/assets/g/polytrack/tracks/track7.track | 1 - public/assets/g/polytrack/tracks/track8.track | 1 - public/assets/g/polytrack/tracks/track9.track | 1 - 90 files changed, 70328 insertions(+), 111 deletions(-) delete mode 100644 public/assets/g/polytrack/cover.jpg create mode 100644 public/assets/g/polytrack/images/car_thumbnail_placeholder.png create mode 100644 public/assets/g/polytrack/images/checkmark.svg create mode 100644 public/assets/g/polytrack/images/community_tracks.jpg create mode 100644 public/assets/g/polytrack/images/custom_tracks.jpg create mode 100644 public/assets/g/polytrack/images/desert.svg create mode 100644 public/assets/g/polytrack/images/desert_colored.svg create mode 100644 public/assets/g/polytrack/images/empty.svg create mode 100644 public/assets/g/polytrack/images/fullscreen.svg create mode 100644 public/assets/g/polytrack/images/grid_large.svg create mode 100644 public/assets/g/polytrack/images/grid_small.svg create mode 100644 public/assets/g/polytrack/images/official_tracks.jpg create mode 100644 public/assets/g/polytrack/images/overlapping_disabled.svg create mode 100644 public/assets/g/polytrack/images/overlapping_enabled.svg create mode 100644 public/assets/g/polytrack/images/pending.svg create mode 100644 public/assets/g/polytrack/images/rotation_axis_x_negative.svg create mode 100644 public/assets/g/polytrack/images/rotation_axis_x_positive.svg create mode 100644 public/assets/g/polytrack/images/rotation_axis_y_negative.svg create mode 100644 public/assets/g/polytrack/images/rotation_axis_y_positive.svg create mode 100644 public/assets/g/polytrack/images/rotation_axis_z_negative.svg create mode 100644 public/assets/g/polytrack/images/rotation_axis_z_positive.svg create mode 100644 public/assets/g/polytrack/images/search.svg create mode 100644 public/assets/g/polytrack/images/share.svg create mode 100644 public/assets/g/polytrack/images/summer.svg create mode 100644 public/assets/g/polytrack/images/windowed.svg create mode 100644 public/assets/g/polytrack/images/winter.svg create mode 100644 public/assets/g/polytrack/images/winter_colored.svg create mode 100644 public/assets/g/polytrack/lib/draco/draco_decoder.wasm create mode 100644 public/assets/g/polytrack/lib/draco/draco_wasm_wrapper.js delete mode 100644 public/assets/g/polytrack/models/block.glb create mode 100644 public/assets/g/polytrack/models/blocks.glb delete mode 100644 public/assets/g/polytrack/models/plane.glb create mode 100644 public/assets/g/polytrack/models/planes.glb create mode 100644 public/assets/g/polytrack/tracks/community/90_reset.track create mode 100644 public/assets/g/polytrack/tracks/community/arabica.track create mode 100644 public/assets/g/polytrack/tracks/community/clay_temples.track create mode 100644 public/assets/g/polytrack/tracks/community/concrete_jungle.track create mode 100644 public/assets/g/polytrack/tracks/community/desert_stallion.track create mode 100644 public/assets/g/polytrack/tracks/community/hyperions_sanctuary.track create mode 100644 public/assets/g/polytrack/tracks/community/las_calles.track create mode 100644 public/assets/g/polytrack/tracks/community/last_remnant.track create mode 100644 public/assets/g/polytrack/tracks/community/lu_muvimento.track create mode 100644 public/assets/g/polytrack/tracks/community/malformations.track create mode 100644 public/assets/g/polytrack/tracks/community/opal_place_ii.track create mode 100644 public/assets/g/polytrack/tracks/community/re_akina.track create mode 100644 public/assets/g/polytrack/tracks/community/sandline_ultimatum.track create mode 100644 public/assets/g/polytrack/tracks/community/snow_park.track create mode 100644 public/assets/g/polytrack/tracks/community/winter_hollow.track create mode 100644 public/assets/g/polytrack/tracks/official/desert1.track create mode 100644 public/assets/g/polytrack/tracks/official/desert2.track create mode 100644 public/assets/g/polytrack/tracks/official/desert3.track create mode 100644 public/assets/g/polytrack/tracks/official/desert4.track create mode 100644 public/assets/g/polytrack/tracks/official/summer1.track create mode 100644 public/assets/g/polytrack/tracks/official/summer2.track create mode 100644 public/assets/g/polytrack/tracks/official/summer3.track create mode 100644 public/assets/g/polytrack/tracks/official/summer4.track create mode 100644 public/assets/g/polytrack/tracks/official/summer5.track create mode 100644 public/assets/g/polytrack/tracks/official/summer6.track create mode 100644 public/assets/g/polytrack/tracks/official/summer7.track create mode 100644 public/assets/g/polytrack/tracks/official/winter1.track create mode 100644 public/assets/g/polytrack/tracks/official/winter2.track create mode 100644 public/assets/g/polytrack/tracks/official/winter3.track create mode 100644 public/assets/g/polytrack/tracks/official/winter4.track delete mode 100644 public/assets/g/polytrack/tracks/track1.track delete mode 100644 public/assets/g/polytrack/tracks/track10.track delete mode 100644 public/assets/g/polytrack/tracks/track11.track delete mode 100644 public/assets/g/polytrack/tracks/track12.track delete mode 100644 public/assets/g/polytrack/tracks/track13.track delete mode 100644 public/assets/g/polytrack/tracks/track2.track delete mode 100644 public/assets/g/polytrack/tracks/track3.track delete mode 100644 public/assets/g/polytrack/tracks/track4.track delete mode 100644 public/assets/g/polytrack/tracks/track5.track delete mode 100644 public/assets/g/polytrack/tracks/track6.track delete mode 100644 public/assets/g/polytrack/tracks/track7.track delete mode 100644 public/assets/g/polytrack/tracks/track8.track delete mode 100644 public/assets/g/polytrack/tracks/track9.track diff --git a/public/assets/g/polytrack/cover.jpg b/public/assets/g/polytrack/cover.jpg deleted file mode 100644 index 704746804f872c1ca4f83978bd81df55a66d0183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14040 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":{"ha":565,"x_min":-1,"x_max":424,"o":"m 424 221 l 132 1 l -1 1 l -1 72 l 290 293 l -1 507 l -1 583 l 132 583 l 424 364 l 424 221 z "},"<":{"ha":563,"x_min":1,"x_max":421,"o":"m 1 363 l 288 583 l 421 583 l 421 506 l 135 292 l 129 292 l 135 292 l 421 72 l 421 0 l 288 0 l 1 219 l 1 363 z "},"~":{"ha":790,"x_min":0,"x_max":654,"o":"m 654 432 l 654 213 l 278 213 l 278 342 l 129 342 l 129 213 l 0 213 l 0 432 l 376 432 l 376 297 l 519 297 l 519 432 l 654 432 z "},"`":{"ha":365,"x_min":1,"x_max":240,"o":"m 240 703 l 133 703 l 1 836 l 158 836 l 240 703 z "},"´":{"ha":279,"x_min":6,"x_max":238,"o":"m 88 838 l 238 838 l 113 704 l 6 704 l 88 838 z "},"'":{"ha":276,"x_min":0,"x_max":143,"o":"m 0 838 l 143 838 l 72 622 l 0 622 l 0 838 z "},"¯":{"ha":575,"x_min":1,"x_max":436,"o":"m 1 914 l 436 914 l 436 771 l 1 771 l 1 914 z "},".":{"ha":279,"x_min":0,"x_max":143,"o":"m 143 0 l 0 0 l 0 143 l 143 143 l 143 0 z "},"/":{"ha":649,"x_min":-1,"x_max":619,"o":"m 119 -139 l -1 -139 l 494 878 l 619 878 l 119 -139 z "},"-":{"ha":685,"x_min":0,"x_max":547,"o":"m 0 417 l 547 417 l 547 274 l 0 274 l 0 417 z "},";":{"ha":290,"x_min":0,"x_max":143,"o":"m 0 -1 l 72 -1 l 143 214 l 0 214 l 0 -1 m 143 433 l 0 433 l 0 576 l 143 576 l 143 433 z "},"=":{"ha":740,"x_min":-1,"x_max":582,"o":"m 582 531 l 582 382 l -1 382 l -1 531 l 582 531 m -1 311 l 582 311 l 582 168 l -1 168 l -1 311 z "},"\\":{"ha":675,"x_min":18,"x_max":644,"o":"m 18 878 l 143 878 l 644 -139 l 519 -139 l 18 878 z "},"]":{"ha":451,"x_min":0,"x_max":292,"o":"m 292 869 l 292 -149 l 0 -149 l 0 0 l 143 0 l 143 721 l 0 721 l 0 869 l 292 869 z "},"^":{"ha":735,"x_min":4,"x_max":586,"o":"m 367 835 l 586 615 l 586 482 l 515 482 l 296 701 l 75 482 l 4 482 l 4 615 l 224 835 l 367 835 z "},"¶":{"ha":706,"x_min":1,"x_max":579,"o":"m 364 871 l 364 1 l 215 1 l 215 507 l 1 507 l 1 871 l 364 871 m 579 871 l 579 1 l 436 1 l 436 871 l 579 871 z "},"µ":{"ha":726,"x_min":0,"x_max":583,"o":"m 583 1 l 149 1 l 149 -142 l 0 -142 l 0 726 l 149 726 l 149 150 l 439 150 l 439 726 l 583 726 l 583 1 z "},"¢":{"ha":728,"x_min":0,"x_max":583,"o":"m 353 435 l 353 149 l 583 149 l 583 0 l 353 0 l 353 -82 l 281 -82 l 281 0 l 0 0 l 0 583 l 281 583 l 281 644 l 353 644 l 353 583 l 583 583 l 583 435 l 353 435 m 281 435 l 143 435 l 143 149 l 281 149 l 281 435 z "},"˘":{"ha":526,"x_min":1,"x_max":394,"o":"m 394 686 l 1 686 l 1 838 l 124 838 l 124 758 l 272 758 l 272 838 l 394 838 l 394 686 z "},"˙":{"ha":297,"x_min":0,"x_max":149,"o":"m 149 836 l 149 693 l 0 693 l 0 836 l 149 836 z "},"˚":{"ha":335,"x_min":0,"x_max":222,"o":"m 222 836 l 222 610 l 0 610 l 0 836 l 222 836 m 151 765 l 72 765 l 72 681 l 151 681 l 151 765 z "},"˝":{"ha":586,"x_min":-1,"x_max":351,"o":"m 351 833 l 279 618 l 208 618 l 208 833 l 351 833 m -1 833 l 142 833 l 71 618 l -1 618 l -1 833 z "},"˛":{"ha":510,"x_min":113,"x_max":378,"o":"m 274 40 l 231 -90 l 378 -90 l 378 -178 l 113 -178 l 186 40 l 274 40 z "},"ˇ":{"ha":426,"x_min":-1,"x_max":311,"o":"m 111 701 l -1 754 l -1 836 l 44 836 l 151 779 l 264 836 l 311 836 l 311 754 l 199 701 l 111 701 z "},"‚":{"ha":338,"x_min":1,"x_max":221,"o":"m 221 144 l 150 -142 l 72 -142 l 72 1 l 1 1 l 1 144 l 221 144 z "},"€":{"ha":868,"x_min":0,"x_max":721,"o":"m 286 578 l 286 475 l 514 475 l 514 404 l 286 404 l 286 332 l 514 332 l 514 256 l 286 256 l 286 143 l 721 143 l 721 0 l 138 0 l 138 256 l 0 256 l 0 332 l 138 332 l 138 404 l 0 404 l 0 475 l 138 475 l 138 721 l 721 721 l 721 578 l 286 578 z "},"ƒ":{"ha":600,"x_min":-119,"x_max":457,"o":"m 238 644 l 238 429 l 386 429 l 386 358 l 238 358 l 238 -225 l -119 -225 l -119 -76 l 94 -76 l 94 358 l -49 358 l -49 429 l 94 429 l 94 792 l 457 792 l 457 644 l 238 644 z "},"„":{"ha":589,"x_min":0,"x_max":499,"o":"m 499 143 l 426 -143 l 356 -143 l 356 0 l 283 0 l 283 143 l 499 143 m 219 143 l 149 -143 l 72 -143 l 72 0 l 0 0 l 0 143 l 219 143 z "},"…":{"ha":856,"x_min":-1,"x_max":725,"o":"m -1 143 l 142 143 l 142 0 l -1 0 l -1 143 m 290 143 l 433 143 l 433 0 l 290 0 l 290 143 m 725 143 l 725 0 l 576 0 l 576 143 l 725 143 z "},"†":{"ha":856,"x_min":-1,"x_max":725,"o":"m 725 433 l 433 433 l 433 -144 l 290 -144 l 290 433 l -1 433 l -1 582 l 290 582 l 290 868 l 433 868 l 433 582 l 725 582 l 725 433 z "},"‡":{"ha":700,"x_min":-3,"x_max":581,"o":"m 360 408 l 360 329 l 581 329 l 581 243 l 360 243 l 360 1 l 217 1 l 217 243 l -3 243 l -3 329 l 217 329 l 217 408 l -3 408 l -3 493 l 217 493 l 217 722 l 360 722 l 360 493 l 581 493 l 581 408 l 360 408 z "},"‰":{"ha":1068,"x_min":1,"x_max":947,"o":"m 215 504 l 1 504 l 1 725 l 215 725 l 215 504 m 440 214 l 656 214 l 656 -1 l 440 -1 l 440 214 m 947 214 l 947 -1 l 726 -1 l 726 214 l 947 214 m 1 101 l 625 725 l 726 725 l 726 622 l 104 -1 l 1 -1 l 1 101 z "},"Š":{"ha":861,"x_min":1,"x_max":722,"o":"m 722 575 l 722 718 l 1 718 l 1 283 l 579 283 l 579 140 l 1 140 l 1 -3 l 722 -3 l 722 432 l 144 432 l 144 575 l 722 575 m 318 768 l 206 821 l 206 903 l 251 903 l 360 846 l 471 903 l 518 903 l 518 821 l 406 768 l 318 768 z "},"£":{"ha":717,"x_min":0,"x_max":581,"o":"m 363 332 l 363 149 l 578 149 l 578 0 l 0 0 l 0 149 l 215 149 l 215 332 l 0 332 l 0 404 l 215 404 l 215 726 l 578 726 l 578 583 l 363 583 l 363 404 l 581 404 l 581 332 l 363 332 z "},"¤":{"ha":906,"x_min":0,"x_max":776,"o":"m 675 567 l 675 207 l 776 104 l 672 -1 l 567 104 l 211 104 l 104 -1 l 0 104 l 104 207 l 104 567 l 0 669 l 104 775 l 211 669 l 567 669 l 672 775 l 776 669 l 675 567 m 251 526 l 251 247 l 526 247 l 526 526 l 251 526 z "},"¥":{"ha":868,"x_min":-1,"x_max":719,"o":"m 719 625 l 489 390 l 653 390 l 653 318 l 433 318 l 433 247 l 653 247 l 653 175 l 433 175 l 433 1 l 285 1 l 285 175 l 71 175 l 71 247 l 285 247 l 285 318 l 71 318 l 71 390 l 229 390 l -1 625 l -1 726 l 101 726 l 361 467 l 617 726 l 719 726 l 719 625 z "},"¦":{"ha":283,"x_min":0,"x_max":143,"o":"m 0 531 l 0 875 l 143 875 l 143 531 l 0 531 m 0 -99 l 0 247 l 143 247 l 143 -99 l 0 -99 z "},"§":{"ha":582,"x_min":-1,"x_max":433,"o":"m 147 725 l 147 653 l 433 653 l 433 -1 l -1 -1 l -1 142 l 290 142 l 290 218 l -1 218 l -1 868 l 433 868 l 433 725 l 147 725 m 147 504 l 147 361 l 290 361 l 290 504 l 147 504 z "},"¨":{"ha":556,"x_min":0,"x_max":435,"o":"m 0 838 l 143 838 l 143 694 l 0 694 l 0 838 m 435 838 l 435 694 l 286 694 l 286 838 l 435 838 z "},"©":{"ha":933,"x_min":0,"x_max":792,"o":"m 214 219 l 214 511 l 578 511 l 578 439 l 358 439 l 358 290 l 578 290 l 578 219 l 214 219 m 792 4 l 0 4 l 0 725 l 792 725 l 792 4 m 649 582 l 143 582 l 143 147 l 649 147 l 649 582 z "},"ª":{"ha":400,"x_min":0,"x_max":256,"o":"m 256 838 l 256 474 l 0 474 l 0 692 l 183 692 l 183 765 l 36 765 l 36 838 l 183 838 l 256 838 m 183 619 l 72 619 l 72 546 l 183 546 l 183 619 z "},"«":{"ha":1144,"x_min":-1,"x_max":1017,"o":"m 510 583 l 168 435 l 510 292 l 510 149 l -1 363 l -1 511 l 510 726 l 510 583 m 1017 583 l 675 435 l 1017 292 l 1017 149 l 510 363 l 510 511 l 1017 726 l 1017 583 z "},"®":{"ha":950,"x_min":0,"x_max":797,"o":"m 219 218 l 219 504 l 578 504 l 578 361 l 542 326 l 578 290 l 578 218 l 506 218 l 506 290 l 363 290 l 363 218 l 219 218 m 363 361 l 506 361 l 506 433 l 363 433 l 363 361 m 797 -1 l 0 -1 l 0 725 l 797 725 l 797 -1 m 654 576 l 143 576 l 143 142 l 654 142 l 654 576 z "},"°":{"ha":443,"x_min":0,"x_max":288,"o":"m 288 838 l 288 547 l 0 547 l 0 838 l 288 838 m 215 767 l 72 767 l 72 618 l 215 618 l 215 767 z "},"²":{"ha":329,"x_min":1,"x_max":218,"o":"m 218 618 l 75 618 l 75 544 l 218 544 l 218 472 l 1 472 l 1 690 l 147 690 l 147 761 l 1 761 l 1 836 l 218 836 l 218 618 z "},"³":{"ha":311,"x_min":0,"x_max":217,"o":"m 217 474 l 0 474 l 0 544 l 143 544 l 143 618 l 72 618 l 72 690 l 143 690 l 143 761 l 0 761 l 0 836 l 217 836 l 217 474 z "},"¸":{"ha":518,"x_min":113,"x_max":378,"o":"m 304 40 l 378 -178 l 113 -178 l 113 -90 l 261 -90 l 217 40 l 304 40 z "},"¿":{"ha":700,"x_min":-1,"x_max":576,"o":"m 576 215 l 576 0 l -1 0 l -1 435 l 214 435 l 214 578 l 357 578 l 357 286 l 142 286 l 142 143 l 433 143 l 433 215 l 576 215 m 357 649 l 214 649 l 214 797 l 357 797 l 357 649 z "},"À":{"ha":861,"x_min":1,"x_max":722,"o":"m 722 726 l 1 726 l 1 1 l 144 1 l 144 293 l 579 293 l 579 1 l 722 1 l 722 726 m 579 436 l 144 436 l 144 579 l 579 579 l 579 436 m 421 792 l 313 792 l 182 925 l 339 925 l 421 792 z "},"Á":{"ha":849,"x_min":-3,"x_max":718,"o":"m -3 1 l 140 1 l 140 293 l 575 293 l 575 1 l 718 1 l 718 726 l -3 726 l -3 1 m 140 579 l 575 579 l 575 436 l 140 436 l 140 579 m 283 924 l 435 924 l 310 792 l 201 792 l 283 924 z "},"Â":{"ha":860,"x_min":-3,"x_max":718,"o":"m 163 890 l 319 890 l 239 771 l 132 771 l 163 890 m 567 771 l 458 771 l 378 890 l 535 890 l 567 771 m -3 1 l 140 1 l 140 293 l 575 293 l 575 1 l 718 1 l 718 726 l -3 726 l -3 1 m 140 579 l 575 579 l 575 436 l 140 436 l 140 579 z "},"Ä":{"ha":854,"x_min":-3,"x_max":718,"o":"m -3 726 l 718 726 l 718 1 l 575 1 l 575 293 l 140 293 l 140 1 l -3 1 l -3 726 m 140 436 l 575 436 l 575 579 l 140 579 l 140 436 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z "},"Å":{"ha":867,"x_min":0,"x_max":726,"o":"m 726 1 l 583 1 l 583 293 l 149 293 l 149 1 l 0 1 l 0 726 l 726 726 l 726 1 m 583 579 l 149 579 l 149 436 l 583 436 l 583 579 m 256 792 l 256 1006 l 471 1006 l 471 792 l 256 792 m 328 863 l 399 863 l 399 935 l 328 935 l 328 863 z "},"Ã":{"ha":854,"x_min":-3,"x_max":718,"o":"m 568 936 l 568 793 l 321 793 l 321 864 l 244 864 l 244 793 l 139 793 l 139 936 l 392 936 l 392 864 l 464 864 l 464 936 l 568 936 m -3 726 l 718 726 l 718 1 l 575 1 l 575 293 l 140 293 l 140 1 l -3 1 l -3 726 m 140 436 l 575 436 l 575 579 l 140 579 l 140 436 z "},"Æ":{"ha":1367,"x_min":-1,"x_max":1236,"o":"m 725 583 l 725 436 l 1236 436 l 1236 293 l 725 293 l 725 150 l 1236 150 l 1236 1 l 582 1 l 582 293 l 147 293 l 147 1 l -1 1 l -1 726 l 1236 726 l 1236 583 l 725 583 m 582 436 l 582 583 l 147 583 l 147 436 l 582 436 z "},"Ç":{"ha":726,"x_min":1,"x_max":583,"o":"m 150 435 l 150 143 l 583 143 l 583 0 l 390 0 l 436 -143 l 221 -143 l 221 -72 l 343 -72 l 318 0 l 1 0 l 1 578 l 583 578 l 583 435 l 150 435 z "},"È":{"ha":861,"x_min":1,"x_max":726,"o":"m 500 790 l 392 790 l 261 924 l 418 924 l 500 790 m 726 579 l 726 722 l 1 722 l 1 1 l 726 1 l 726 144 l 150 144 l 150 288 l 726 288 l 726 436 l 150 436 l 150 579 l 726 579 z "},"É":{"ha":883,"x_min":1,"x_max":726,"o":"m 343 925 l 500 925 l 368 793 l 261 793 l 343 925 m 726 579 l 726 722 l 1 722 l 1 1 l 726 1 l 726 144 l 150 144 l 150 288 l 726 288 l 726 436 l 150 436 l 150 579 l 726 579 z "},"Ê":{"ha":875,"x_min":1,"x_max":726,"o":"m 163 911 l 319 911 l 239 792 l 132 792 l 163 911 m 567 792 l 458 792 l 378 911 l 535 911 l 567 792 m 726 579 l 726 722 l 1 722 l 1 1 l 726 1 l 726 144 l 150 144 l 150 288 l 726 288 l 726 436 l 150 436 l 150 579 l 726 579 z "},"Ë":{"ha":854,"x_min":1,"x_max":726,"o":"m 150 579 l 150 436 l 726 436 l 726 288 l 150 288 l 150 144 l 726 144 l 726 1 l 1 1 l 1 722 l 726 722 l 726 579 l 150 579 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z "},"™":{"ha":950,"x_min":6,"x_max":803,"o":"m 803 724 l 803 432 l 731 432 l 731 651 l 660 651 l 660 432 l 583 432 l 583 651 l 511 651 l 511 432 l 439 432 l 439 724 l 803 724 m 368 724 l 368 651 l 225 651 l 225 432 l 149 432 l 149 651 l 6 651 l 6 724 l 368 724 z "},"Ω":{"ha":871,"x_min":1,"x_max":726,"o":"m 583 147 l 583 75 l 726 75 l 726 -1 l 436 -1 l 436 290 l 583 290 l 583 582 l 150 582 l 150 290 l 293 290 l 293 -1 l 1 -1 l 1 75 l 150 75 l 150 147 l 1 147 l 1 725 l 726 725 l 726 147 l 583 147 z "},"∂":{"ha":563,"x_min":-1,"x_max":433,"o":"m 433 629 l 433 88 l 335 -3 l -1 -3 l -1 432 l 290 432 l 290 581 l 71 581 l 71 724 l 332 724 l 433 629 m 290 289 l 142 289 l 142 140 l 290 140 l 290 289 z "},"∆":{"ha":840,"x_min":1,"x_max":722,"o":"m 722 1 l 1 1 l 288 799 l 436 799 l 722 1 m 528 150 l 360 599 l 196 150 l 528 150 z "},"∏":{"ha":732,"x_min":0,"x_max":578,"o":"m 578 578 l 506 578 l 506 -6 l 363 -6 l 363 578 l 215 578 l 215 -6 l 72 -6 l 72 578 l 0 578 l 0 721 l 578 721 l 578 578 z "},"∑":{"ha":875,"x_min":-1,"x_max":719,"o":"m 719 578 l 244 578 l 458 363 l 244 143 l 719 143 l 719 0 l -1 0 l -1 103 l 254 363 l -1 624 l -1 726 l 719 726 l 719 578 z "},"−":{"ha":1003,"x_min":1,"x_max":875,"o":"m 1 383 l 875 383 l 875 311 l 1 311 l 1 383 z "},"√":{"ha":764,"x_min":-1,"x_max":643,"o":"m 643 658 l 351 -1 l 208 -1 l 71 218 l -1 218 l -1 361 l 157 361 l 275 168 l 567 801 l 643 801 l 643 658 z "},"∞":{"ha":868,"x_min":0,"x_max":721,"o":"m 721 575 l 721 140 l 0 140 l 0 575 l 721 575 m 286 283 l 286 426 l 143 426 l 143 283 l 286 283 m 578 426 l 435 426 l 435 283 l 578 283 l 578 426 z "},"∫":{"ha":604,"x_min":-119,"x_max":457,"o":"m 238 644 l 238 -225 l -119 -225 l -119 -76 l 94 -76 l 94 792 l 457 792 l 457 644 l 238 644 z "},"≈":{"ha":786,"x_min":1,"x_max":650,"o":"m 650 571 l 650 422 l 288 422 l 288 499 l 144 499 l 144 422 l 1 422 l 1 571 l 360 571 l 360 499 l 507 499 l 507 571 l 650 571 m 507 350 l 650 350 l 650 207 l 288 207 l 288 279 l 144 279 l 144 207 l 1 207 l 1 350 l 360 350 l 360 279 l 507 279 l 507 350 z "},"≠":{"ha":740,"x_min":1,"x_max":583,"o":"m 390 399 l 354 322 l 583 322 l 583 179 l 282 179 l 196 0 l 108 0 l 129 179 l 1 179 l 1 322 l 196 322 l 232 399 l 1 399 l 1 542 l 303 542 l 390 721 l 476 721 l 461 542 l 583 542 l 583 399 l 390 399 z "},"≤":{"ha":667,"x_min":-1,"x_max":510,"o":"m -1 128 l 510 128 l 510 0 l -1 0 l -1 128 m 510 633 l 168 486 l 510 343 l 510 200 l -1 414 l -1 563 l 510 776 l 510 633 z "},"≥":{"ha":633,"x_min":-1,"x_max":510,"o":"m 510 0 l -1 0 l -1 128 l 510 128 l 510 0 m -1 776 l 510 563 l 510 414 l -1 200 l -1 343 l 342 486 l -1 633 l -1 776 z "},"◊":{"ha":860,"x_min":-32,"x_max":751,"o":"m 751 393 l 358 4 l -32 393 l 358 782 l 751 393 m 551 393 l 358 588 l 163 393 l 358 199 l 551 393 z "},"":{"ha":717,"x_min":0,"x_max":561,"o":"m 267 0 l 196 0 l 196 118 l 267 118 l 267 0 m 243 93 l 219 93 l 219 25 l 243 25 l 243 93 m 72 0 l 0 0 l 0 118 l 72 118 l 72 0 m 47 93 l 24 93 l 24 25 l 47 25 l 47 93 m 171 25 l 171 0 l 97 0 l 97 25 l 122 25 l 122 93 l 97 93 l 97 118 l 144 118 l 144 25 l 171 25 m 561 25 l 561 0 l 489 0 l 489 25 l 513 25 l 513 93 l 489 93 l 489 118 l 536 118 l 536 25 l 561 25 m 464 25 l 464 0 l 392 0 l 392 25 l 415 25 l 415 93 l 392 93 l 392 118 l 438 118 l 438 25 l 464 25 m 365 0 l 340 0 l 340 47 l 317 47 l 317 71 l 340 71 l 340 93 l 296 93 l 296 118 l 365 118 l 365 0 m 254 474 l 0 474 l 0 726 l 254 726 l 254 474 m 204 575 l 51 575 l 51 525 l 204 525 l 204 575 m 204 676 l 51 676 l 51 626 l 204 626 l 204 676 m 254 171 l 204 171 l 204 268 l 51 268 l 51 171 l 0 171 l 0 421 l 254 421 l 254 171 m 204 371 l 51 371 l 51 319 l 204 319 l 204 371 m 561 726 l 561 575 l 496 575 l 561 511 l 561 474 l 522 474 l 424 575 l 358 575 l 358 474 l 308 474 l 308 726 l 561 726 m 510 676 l 358 676 l 358 626 l 510 626 l 510 676 m 561 421 l 561 171 l 510 171 l 510 335 l 433 258 l 358 335 l 358 171 l 308 171 l 308 421 l 343 421 l 433 331 l 525 421 l 561 421 z "},"fl":{"ha":613,"x_min":0,"x_max":481,"o":"m 0 726 l 481 726 l 481 1 l 338 1 l 338 579 l 143 579 l 143 364 l 271 364 l 271 221 l 143 221 l 143 1 l 0 1 l 0 726 l 0 726 z "},"fi":{"ha":624,"x_min":-1,"x_max":479,"o":"m 142 361 l 269 361 l 269 218 l 142 218 l 142 -1 l -1 -1 l -1 725 l 479 725 l 479 576 l 142 576 l 142 361 m 331 504 l 479 504 l 479 -1 l 331 -1 l 331 504 z "},"⁄":{"ha":667,"x_min":3,"x_max":624,"o":"m 128 -131 l 3 -131 l 499 882 l 624 882 l 128 -131 z "},"›":{"ha":422,"x_min":-1,"x_max":275,"o":"m 275 271 l 132 128 l -1 128 l -1 200 l 142 343 l -1 490 l -1 563 l 132 563 l 275 419 l 275 271 z "},"‹":{"ha":422,"x_min":1,"x_max":278,"o":"m 1 424 l 144 567 l 278 567 l 278 494 l 135 346 l 278 203 l 278 132 l 144 132 l 1 275 l 1 424 z "},"•":{"ha":496,"x_min":3,"x_max":350,"o":"m 350 415 l 281 347 l 350 274 l 350 171 l 247 171 l 179 244 l 106 171 l 3 171 l 3 274 l 76 347 l 3 415 l 3 518 l 106 518 l 179 449 l 247 518 l 350 518 l 350 415 z "},"”":{"ha":622,"x_min":0,"x_max":499,"o":"m 499 838 l 426 551 l 356 551 l 356 694 l 283 694 l 283 838 l 499 838 m 219 838 l 149 551 l 72 551 l 72 694 l 0 694 l 0 838 l 219 838 z "},"“":{"ha":642,"x_min":0,"x_max":492,"o":"m 0 593 l 72 879 l 143 879 l 143 736 l 215 736 l 215 593 l 0 593 m 272 593 l 343 879 l 421 879 l 421 736 l 492 736 l 492 593 l 272 593 z "},"’":{"ha":342,"x_min":3,"x_max":222,"o":"m 222 838 l 151 551 l 74 551 l 74 694 l 3 694 l 3 838 l 222 838 z "},"‘":{"ha":364,"x_min":0,"x_max":215,"o":"m 0 588 l 72 874 l 143 874 l 143 731 l 215 731 l 215 588 l 0 588 z "},"π":{"ha":703,"x_min":-1,"x_max":576,"o":"m 576 583 l 504 583 l 504 1 l 361 1 l 361 583 l 214 583 l 214 1 l 71 1 l 71 583 l -1 583 l -1 726 l 576 726 l 576 583 z "},"–":{"ha":1063,"x_min":1,"x_max":913,"o":"m 1 418 l 913 418 l 913 306 l 1 306 l 1 418 z "},"—":{"ha":735,"x_min":0,"x_max":583,"o":"m 0 406 l 583 406 l 583 263 l 0 263 l 0 406 z "},"˜":{"ha":561,"x_min":1,"x_max":431,"o":"m 431 522 l 431 379 l 183 379 l 183 451 l 106 451 l 106 379 l 1 379 l 1 522 l 254 522 l 254 451 l 326 451 l 326 522 l 431 522 z "},"ž":{"ha":714,"x_min":1,"x_max":583,"o":"m 1 579 l 1 436 l 333 436 l 1 104 l 1 1 l 583 1 l 583 144 l 251 144 l 583 476 l 583 579 l 1 579 m 240 638 l 128 690 l 128 772 l 174 772 l 281 715 l 393 772 l 439 772 l 439 690 l 328 638 l 240 638 z "},"ß":{"ha":868,"x_min":-1,"x_max":725,"o":"m 725 0 l 290 0 l 290 149 l 582 149 l 582 292 l 147 292 l 147 0 l -1 0 l -1 583 l 147 726 l 725 726 l 725 0 m 582 583 l 147 583 l 147 435 l 582 435 l 582 583 z "},"ç":{"ha":721,"x_min":1,"x_max":583,"o":"m 150 435 l 150 143 l 583 143 l 583 0 l 396 0 l 449 -150 l 215 -150 l 215 -72 l 338 -72 l 311 0 l 1 0 l 1 578 l 583 578 l 583 435 l 150 435 z "},"÷":{"ha":722,"x_min":-1,"x_max":576,"o":"m 576 451 l 576 303 l -1 303 l -1 451 l 576 451 m 361 522 l 214 522 l 214 665 l 361 665 l 361 522 m 214 232 l 361 232 l 361 88 l 214 88 l 214 232 z "},"à":{"ha":724,"x_min":0,"x_max":583,"o":"m 369 658 l 263 658 l 131 792 l 288 792 l 369 658 m 583 579 l 0 579 l 0 443 l 435 443 l 435 349 l 0 349 l 0 1 l 583 1 l 583 579 m 435 131 l 149 131 l 149 231 l 435 231 l 435 131 z "},"á":{"ha":725,"x_min":0,"x_max":583,"o":"m 283 790 l 435 790 l 310 657 l 201 657 l 283 790 m 583 579 l 0 579 l 0 443 l 435 443 l 435 349 l 0 349 l 0 1 l 583 1 l 583 579 m 435 131 l 149 131 l 149 231 l 435 231 l 435 131 z "},"â":{"ha":742,"x_min":0,"x_max":583,"o":"m 326 790 l 439 731 l 439 656 l 392 656 l 279 713 l 172 656 l 126 656 l 126 731 l 239 790 l 326 790 m 583 579 l 0 579 l 0 443 l 435 443 l 435 349 l 0 349 l 0 1 l 583 1 l 583 579 m 435 131 l 149 131 l 149 231 l 435 231 l 435 131 z "},"ã":{"ha":726,"x_min":0,"x_max":583,"o":"m 500 793 l 500 650 l 251 650 l 251 722 l 175 722 l 175 650 l 71 650 l 71 793 l 324 793 l 324 722 l 394 722 l 394 793 l 500 793 m 583 0 l 0 0 l 0 354 l 435 354 l 435 435 l 0 435 l 0 578 l 583 578 l 583 0 m 435 238 l 149 238 l 149 135 l 435 135 l 435 238 z "},"":{"ha":0,"x_min":0,"x_max":0,"o":""},"¬":{"ha":743,"x_min":1,"x_max":579,"o":"m 579 640 l 579 278 l 436 278 l 436 497 l 1 497 l 1 640 l 579 640 z "},"¹":{"ha":332,"x_min":1,"x_max":218,"o":"m 218 544 l 218 472 l 1 472 l 1 544 l 75 544 l 75 761 l 1 761 l 1 836 l 147 836 l 147 544 l 218 544 z "},"º":{"ha":433,"x_min":0,"x_max":286,"o":"m 286 836 l 286 544 l 0 544 l 0 836 l 286 836 m 215 765 l 72 765 l 72 617 l 215 617 l 215 765 z "},"Ì":{"ha":897,"x_min":0,"x_max":726,"o":"m 726 583 l 726 726 l 0 726 l 0 583 l 292 583 l 292 149 l 0 149 l 0 0 l 726 0 l 726 149 l 435 149 l 435 583 l 726 583 m 424 792 l 317 792 l 185 924 l 343 924 l 424 792 z "},"×":{"ha":692,"x_min":3,"x_max":585,"o":"m 396 292 l 585 103 l 483 0 l 294 189 l 104 0 l 3 103 l 192 292 l 3 475 l 104 578 l 294 393 l 483 578 l 585 475 l 396 292 z "},"Ø":{"ha":729,"x_min":0,"x_max":583,"o":"m 583 724 l 583 3 l 0 3 l 0 724 l 583 724 m 149 146 l 353 581 l 149 581 l 149 146 m 435 581 l 231 146 l 435 146 l 435 581 z "},"ø":{"ha":879,"x_min":1,"x_max":726,"o":"m 726 -1 l 1 -1 l 1 725 l 726 725 l 726 -1 m 144 147 l 497 582 l 144 582 l 144 147 m 579 582 l 232 147 l 579 147 l 579 582 z "},"Ž":{"ha":1064,"x_min":1,"x_max":726,"o":"m 726 721 l 1 721 l 1 578 l 471 578 l 1 67 l 1 0 l 726 0 l 726 143 l 264 143 l 726 654 l 726 721 m 347 772 l 235 824 l 235 906 l 281 906 l 389 850 l 501 906 l 547 906 l 547 824 l 435 772 l 347 772 z "},"š":{"ha":738,"x_min":0,"x_max":583,"o":"m 240 638 l 128 690 l 128 772 l 174 772 l 281 715 l 393 772 l 439 772 l 439 690 l 328 638 l 240 638 m 149 443 l 583 443 l 583 578 l 0 578 l 0 231 l 435 231 l 435 131 l 0 131 l 0 0 l 583 0 l 583 347 l 149 347 l 149 443 z "},"Ÿ":{"ha":571,"x_min":0,"x_max":435,"o":"m 0 838 l 143 838 l 143 694 l 0 694 l 0 838 m 435 838 l 435 694 l 286 694 l 286 838 l 435 838 z "},"í":{"ha":289,"x_min":0,"x_max":256,"o":"m 0 3 l 143 3 l 143 572 l 0 572 l 0 3 m 99 790 l 256 790 l 143 669 l 15 669 l 99 790 z "},"­":{"ha":603,"x_min":0,"x_max":472,"o":"m 472 238 l 0 238 l 0 381 l 472 381 l 472 238 z "},"D":{"ha":864,"x_min":-1,"x_max":725,"o":"m 725 460 l 725 261 l 439 0 l -1 0 l -1 721 l 439 721 l 725 460 m 582 358 l 346 578 l 147 578 l 147 143 l 346 143 l 582 358 z "},"Í":{"ha":883,"x_min":0,"x_max":726,"o":"m 726 583 l 726 726 l 0 726 l 0 583 l 292 583 l 292 149 l 0 149 l 0 0 l 726 0 l 726 149 l 435 149 l 435 583 l 726 583 m 726 583 l 726 726 l 0 726 l 0 583 l 292 583 l 292 149 l 0 149 l 0 0 l 726 0 l 726 149 l 435 149 l 435 583 l 726 583 m 343 925 l 500 925 l 368 792 l 261 792 l 343 925 z "},"Î":{"ha":871,"x_min":0,"x_max":726,"o":"m 726 583 l 726 726 l 0 726 l 0 583 l 292 583 l 292 149 l 0 149 l 0 0 l 726 0 l 726 149 l 435 149 l 435 583 l 726 583 m 172 913 l 329 913 l 249 793 l 142 793 l 172 913 m 576 793 l 469 793 l 389 913 l 546 913 l 576 793 z "},"Ï":{"ha":875,"x_min":0,"x_max":726,"o":"m 435 583 l 435 149 l 726 149 l 726 0 l 0 0 l 0 149 l 292 149 l 292 583 l 0 583 l 0 726 l 726 726 l 726 583 l 435 583 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z "},"Ð":{"ha":738,"x_min":-42,"x_max":592,"o":"m 592 422 l 592 286 l 407 0 l 44 0 l 44 282 l -42 282 l -42 425 l 44 425 l 44 721 l 407 721 l 592 422 m 458 358 l 328 578 l 186 578 l 186 425 l 274 425 l 274 282 l 186 282 l 186 143 l 328 143 l 458 358 z "},"å":{"ha":706,"x_min":0,"x_max":583,"o":"m 175 642 l 175 861 l 394 861 l 394 642 l 175 642 m 247 713 l 318 713 l 318 785 l 247 785 l 247 713 m 583 1 l 0 1 l 0 349 l 435 349 l 435 443 l 0 443 l 0 579 l 583 579 l 583 1 m 435 231 l 149 231 l 149 131 l 435 131 l 435 231 z "},"ä":{"ha":729,"x_min":0,"x_max":583,"o":"m 583 1 l 0 1 l 0 349 l 435 349 l 435 443 l 0 443 l 0 579 l 583 579 l 583 1 m 435 231 l 149 231 l 149 131 l 435 131 l 435 231 m 110 793 l 221 793 l 221 682 l 110 682 l 110 793 m 447 793 l 447 682 l 332 682 l 332 793 l 447 793 z "},"ï":{"ha":306,"x_min":0,"x_max":143,"o":"m 143 767 l 143 654 l 0 654 l 0 767 l 143 767 m 0 572 l 143 572 l 143 3 l 0 3 l 0 572 z "},"ì":{"ha":296,"x_min":-106,"x_max":143,"o":"m 135 671 l 7 671 l -106 792 l 51 792 l 135 671 m 0 3 l 143 3 l 143 572 l 0 572 l 0 3 z "},"Ñ":{"ha":874,"x_min":0,"x_max":721,"o":"m 721 725 l 721 -1 l 578 -1 l 143 469 l 143 -1 l 0 -1 l 0 725 l 143 725 l 578 254 l 578 725 l 721 725 m 571 914 l 571 771 l 324 771 l 324 842 l 247 842 l 247 771 l 142 771 l 142 914 l 394 914 l 394 842 l 467 842 l 467 914 l 571 914 z "},"Ò":{"ha":874,"x_min":0,"x_max":726,"o":"m 726 726 l 0 726 l 0 0 l 726 0 l 726 726 m 583 149 l 149 149 l 149 583 l 583 583 l 583 149 m 421 782 l 313 782 l 182 915 l 339 915 l 421 782 z "},"Ó":{"ha":858,"x_min":0,"x_max":726,"o":"m 726 725 l 0 725 l 0 -1 l 726 -1 l 726 725 m 583 147 l 149 147 l 149 582 l 583 582 l 583 147 m 358 908 l 508 908 l 383 775 l 276 775 l 358 908 z "},"Ô":{"ha":871,"x_min":0,"x_max":726,"o":"m 726 726 l 0 726 l 0 0 l 726 0 l 726 726 m 583 149 l 149 149 l 149 583 l 583 583 l 583 149 m 163 903 l 319 903 l 239 782 l 132 782 l 163 903 m 567 782 l 458 782 l 378 903 l 535 903 l 567 782 z "},"Õ":{"ha":856,"x_min":0,"x_max":726,"o":"m 726 0 l 0 0 l 0 726 l 726 726 l 726 0 m 583 583 l 149 583 l 149 149 l 583 149 l 583 583 m 574 921 l 574 778 l 326 778 l 326 850 l 249 850 l 249 778 l 144 778 l 144 921 l 397 921 l 397 850 l 469 850 l 469 921 l 574 921 z "},"Ö":{"ha":868,"x_min":0,"x_max":726,"o":"m 726 0 l 0 0 l 0 726 l 726 726 l 726 0 m 583 583 l 149 583 l 149 149 l 583 149 l 583 583 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z "},"Ù":{"ha":879,"x_min":0,"x_max":726,"o":"m 726 729 l 583 729 l 583 147 l 149 147 l 149 729 l 0 729 l 0 4 l 726 4 l 726 729 m 442 771 l 335 771 l 203 903 l 360 903 l 442 771 z "},"Ú":{"ha":874,"x_min":0,"x_max":726,"o":"m 726 729 l 583 729 l 583 147 l 149 147 l 149 729 l 0 729 l 0 4 l 726 4 l 726 729 m 368 904 l 519 904 l 393 772 l 286 772 l 368 904 z "},"Û":{"ha":875,"x_min":0,"x_max":726,"o":"m 726 729 l 583 729 l 583 147 l 149 147 l 149 729 l 0 729 l 0 4 l 726 4 l 726 729 m 410 925 l 522 872 l 522 790 l 475 790 l 363 847 l 256 790 l 210 790 l 210 872 l 322 925 l 410 925 z "},"Ü":{"ha":890,"x_min":0,"x_max":726,"o":"m 726 0 l 0 0 l 0 726 l 149 726 l 149 143 l 583 143 l 583 726 l 726 726 l 726 0 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z "},"Ý":{"ha":876,"x_min":0,"x_max":726,"o":"m 726 725 l 578 725 l 578 361 l 149 361 l 149 725 l 0 725 l 0 218 l 506 218 l 363 96 l 363 -1 l 481 -1 l 726 218 l 726 725 m 449 774 l 342 774 l 210 906 l 367 906 l 449 774 z "},"Þ":{"ha":707,"x_min":0,"x_max":578,"o":"m 0 815 l 144 815 l 144 699 l 578 699 l 578 121 l 143 121 l 143 -99 l 0 -99 l 0 815 m 435 556 l 144 556 l 144 264 l 435 264 l 435 556 z "},"è":{"ha":731,"x_min":0,"x_max":583,"o":"m 369 656 l 263 656 l 131 789 l 288 789 l 369 656 m 0 1 l 583 1 l 583 138 l 149 138 l 149 232 l 583 232 l 583 579 l 0 579 l 0 1 m 149 450 l 435 450 l 435 350 l 149 350 l 149 450 z "},"é":{"ha":728,"x_min":0,"x_max":583,"o":"m 283 792 l 435 792 l 310 658 l 201 658 l 283 792 m 0 1 l 583 1 l 583 138 l 149 138 l 149 232 l 583 232 l 583 579 l 0 579 l 0 1 m 149 450 l 435 450 l 435 350 l 149 350 l 149 450 z "},"ê":{"ha":718,"x_min":0,"x_max":583,"o":"m 326 790 l 439 731 l 439 656 l 392 656 l 282 714 l 172 656 l 126 656 l 126 731 l 239 790 l 326 790 m 0 1 l 583 1 l 583 138 l 149 138 l 149 232 l 583 232 l 583 579 l 0 579 l 0 1 m 149 450 l 435 450 l 435 350 l 149 350 l 149 450 z "},"ë":{"ha":721,"x_min":0,"x_max":583,"o":"m 0 579 l 583 579 l 583 232 l 149 232 l 149 138 l 583 138 l 583 1 l 0 1 l 0 579 m 149 350 l 435 350 l 435 450 l 149 450 l 149 350 m 129 789 l 240 789 l 240 678 l 129 678 l 129 789 m 467 789 l 467 678 l 351 678 l 351 789 l 467 789 z "},"î":{"ha":360,"x_min":-25,"x_max":286,"o":"m 64 3 l 207 3 l 207 572 l 64 572 l 64 3 m 174 790 l 286 738 l 286 656 l 240 656 l 128 713 l 21 656 l -25 656 l -25 738 l 88 790 l 174 790 z "},"æ":{"ha":1171,"x_min":3,"x_max":1019,"o":"m 1019 231 l 585 231 l 585 131 l 1019 131 l 1019 1 l 3 1 l 3 349 l 438 349 l 438 443 l 3 443 l 3 579 l 1019 579 l 1019 231 m 438 231 l 151 231 l 151 131 l 438 131 l 438 231 m 871 443 l 585 443 l 585 349 l 871 349 l 871 443 z "},"ò":{"ha":733,"x_min":0,"x_max":583,"o":"m 0 578 l 0 0 l 583 0 l 583 578 l 0 578 m 435 143 l 149 143 l 149 435 l 435 435 l 435 143 m 369 658 l 263 658 l 131 792 l 288 792 l 369 658 z "},"ð":{"ha":721,"x_min":0,"x_max":578,"o":"m 435 583 l 290 768 l 433 768 l 578 579 l 578 0 l 0 0 l 0 583 l 435 583 m 143 149 l 435 149 l 435 435 l 143 435 l 143 149 z "},"ó":{"ha":738,"x_min":0,"x_max":583,"o":"m 0 578 l 0 0 l 583 0 l 583 578 l 0 578 m 435 143 l 149 143 l 149 435 l 435 435 l 435 143 m 283 771 l 435 771 l 310 638 l 201 638 l 283 771 z "},"ô":{"ha":733,"x_min":0,"x_max":583,"o":"m 0 578 l 0 0 l 583 0 l 583 578 l 0 578 m 435 143 l 149 143 l 149 435 l 435 435 l 435 143 m 328 793 l 439 740 l 439 658 l 393 658 l 281 715 l 174 658 l 128 658 l 128 740 l 240 793 l 328 793 z "},"õ":{"ha":738,"x_min":0,"x_max":583,"o":"m 583 578 l 583 0 l 0 0 l 0 578 l 583 578 m 435 435 l 149 435 l 149 143 l 435 143 l 435 435 m 501 792 l 501 649 l 253 649 l 253 719 l 176 719 l 176 649 l 72 649 l 72 792 l 325 792 l 325 719 l 396 719 l 396 792 l 501 792 z "},"ö":{"ha":726,"x_min":0,"x_max":583,"o":"m 583 578 l 583 0 l 0 0 l 0 578 l 583 578 m 435 435 l 149 435 l 149 143 l 435 143 l 435 435 m 111 790 l 222 790 l 222 679 l 111 679 l 111 790 m 449 790 l 449 679 l 333 679 l 333 790 l 449 790 z "},"ù":{"ha":726,"x_min":0,"x_max":578,"o":"m 578 576 l 435 576 l 435 142 l 143 142 l 143 576 l 0 576 l 0 -1 l 578 -1 l 578 576 m 369 638 l 263 638 l 131 771 l 288 771 l 369 638 z "},"ú":{"ha":718,"x_min":0,"x_max":578,"o":"m 578 576 l 435 576 l 435 142 l 143 142 l 143 576 l 0 576 l 0 -1 l 578 -1 l 578 576 m 283 792 l 435 792 l 310 658 l 201 658 l 283 792 z "},"û":{"ha":726,"x_min":0,"x_max":578,"o":"m 578 576 l 435 576 l 435 142 l 143 142 l 143 576 l 0 576 l 0 -1 l 578 -1 l 578 576 m 328 792 l 439 739 l 439 657 l 393 657 l 281 714 l 174 657 l 128 657 l 128 739 l 240 792 l 328 792 z "},"ü":{"ha":579,"x_min":0,"x_max":578,"o":"m 578 -1 l 0 -1 l 0 576 l 143 576 l 143 142 l 435 142 l 435 576 l 578 576 l 578 -1 m 114 793 l 225 793 l 225 682 l 114 682 l 114 793 m 451 793 l 451 682 l 336 682 l 336 793 l 451 793 z "},"ñ":{"ha":722,"x_min":0,"x_max":578,"o":"m 578 578 l 578 0 l 435 0 l 435 435 l 143 435 l 143 0 l 0 0 l 0 578 l 578 578 m 510 792 l 510 649 l 263 649 l 263 721 l 185 721 l 185 649 l 81 649 l 81 792 l 333 792 l 333 721 l 406 721 l 406 792 l 510 792 z "},"»":{"ha":1126,"x_min":-1,"x_max":1017,"o":"m 506 726 l 1017 511 l 1017 363 l 506 149 l 506 292 l 849 435 l 506 583 l 506 726 m -1 726 l 510 511 l 510 363 l -1 149 l -1 292 l 342 435 l -1 583 l -1 726 z "},"¼":{"ha":711,"x_min":1,"x_max":599,"o":"m 218 546 l 218 475 l 1 475 l 1 546 l 75 546 l 75 764 l 1 764 l 1 838 l 147 838 l 147 546 l 218 546 m 599 4 l 524 4 l 524 150 l 378 150 l 378 367 l 453 367 l 453 221 l 524 221 l 524 367 l 599 367 l 599 4 m 125 0 l 31 0 l 465 838 l 565 838 l 125 0 z "},"¾":{"ha":683,"x_min":0,"x_max":585,"o":"m 217 469 l 0 469 l 0 540 l 143 540 l 143 615 l 72 615 l 72 686 l 143 686 l 143 758 l 0 758 l 0 832 l 217 832 l 217 469 m 585 4 l 511 4 l 511 150 l 365 150 l 365 367 l 439 367 l 439 221 l 511 221 l 511 367 l 585 367 l 585 4 m 125 0 l 31 0 l 465 838 l 565 838 l 125 0 z "},"½":{"ha":676,"x_min":1,"x_max":583,"o":"m 218 546 l 218 475 l 1 475 l 1 546 l 75 546 l 75 764 l 1 764 l 1 838 l 147 838 l 147 546 l 218 546 m 583 147 l 440 147 l 440 72 l 583 72 l 583 1 l 367 1 l 367 218 l 513 218 l 513 290 l 367 290 l 367 364 l 583 364 l 583 147 m 125 0 l 31 0 l 465 838 l 565 838 l 125 0 z "},"ý":{"ha":728,"x_min":0,"x_max":578,"o":"m 578 578 l 435 578 l 435 143 l 143 143 l 143 578 l 0 578 l 0 0 l 363 0 l 225 -122 l 225 -215 l 338 -215 l 578 0 l 578 578 m 283 790 l 440 790 l 310 657 l 201 657 l 283 790 z "},"þ":{"ha":735,"x_min":-1,"x_max":576,"o":"m 142 0 l 142 -185 l -1 -185 l -1 768 l 142 768 l 142 583 l 576 583 l 576 0 l 142 0 m 142 149 l 433 149 l 433 435 l 142 435 l 142 149 z "},"ÿ":{"ha":735,"x_min":1,"x_max":579,"o":"m 579 0 l 339 -215 l 226 -215 l 226 -122 l 364 0 l 1 0 l 1 578 l 144 578 l 144 143 l 436 143 l 436 578 l 579 578 l 579 0 m 126 790 l 238 790 l 238 679 l 126 679 l 126 790 m 464 790 l 464 679 l 349 679 l 349 790 l 464 790 z "},"ı":{"ha":443,"x_min":1,"x_max":285,"o":"m 285 3 l 142 3 l 142 438 l 1 438 l 1 581 l 285 581 l 285 3 z "},"œ":{"ha":1179,"x_min":0,"x_max":1018,"o":"m 1018 221 l 583 221 l 583 138 l 1018 138 l 1018 0 l 0 0 l 0 578 l 1018 578 l 1018 221 m 583 439 l 583 347 l 871 347 l 871 439 l 583 439 m 435 143 l 435 435 l 149 435 l 149 143 l 435 143 z "},"Œ":{"ha":1390,"x_min":-1,"x_max":1236,"o":"m 725 583 l 725 436 l 1236 436 l 1236 293 l 725 293 l 725 150 l 1236 150 l 1236 1 l -1 1 l -1 726 l 1236 726 l 1236 583 l 725 583 m 582 144 l 582 583 l 147 583 l 147 144 l 582 144 z "},"A":{"ha":871,"x_min":0,"x_max":726,"o":"m 726 0 l 583 0 l 583 286 l 149 286 l 149 0 l 0 0 l 0 721 l 726 721 l 726 0 m 583 578 l 149 578 l 149 435 l 583 435 l 583 578 z "},"B":{"ha":882,"x_min":0,"x_max":726,"o":"m 726 0 l 0 0 l 0 726 l 726 726 l 726 0 m 583 292 l 149 292 l 149 149 l 583 149 l 583 292 m 583 583 l 149 583 l 149 435 l 583 435 l 583 583 z "},"C":{"ha":886,"x_min":0,"x_max":726,"o":"m 149 578 l 149 143 l 726 143 l 726 0 l 0 0 l 0 721 l 726 721 l 726 578 l 149 578 z "},"Ł":{"ha":660,"x_min":-4,"x_max":503,"o":"m 144 772 l 288 772 l 288 481 l 431 569 l 431 499 l 288 408 l 288 156 l 503 156 l 503 8 l 144 8 l 144 319 l -4 231 l -4 301 l 144 392 l 144 772 z "},"ł":{"ha":706,"x_min":1,"x_max":579,"o":"m 1 622 l 1 771 l 364 771 l 364 468 l 507 557 l 507 486 l 364 396 l 364 143 l 579 143 l 579 -6 l 221 -6 l 221 307 l 72 217 l 72 289 l 221 378 l 221 622 l 1 622 z "},"G":{"ha":874,"x_min":0,"x_max":726,"o":"m 583 149 l 583 292 l 363 292 l 363 435 l 726 435 l 726 0 l 0 0 l 0 726 l 726 726 l 726 583 l 149 583 l 149 149 l 583 149 z "},"E":{"ha":886,"x_min":0,"x_max":726,"o":"m 149 583 l 149 435 l 726 435 l 726 292 l 149 292 l 149 149 l 726 149 l 726 0 l 0 0 l 0 726 l 726 726 l 726 583 l 149 583 z "},"F":{"ha":881,"x_min":0,"x_max":721,"o":"m 143 583 l 143 435 l 721 435 l 721 292 l 143 292 l 143 0 l 0 0 l 0 726 l 721 726 l 721 583 l 143 583 z "}},"familyName":"FORCED SQUARE","ascender":838,"descender":-239,"underlinePosition":-104,"underlineThickness":69,"boundingBox":{"yMin":-239,"xMin":-164,"yMax":1006,"xMax":1236},"resolution":1000,"original_font_information":{"format":0,"copyright":"Copyright (c) 2014 by Paul IJsendoorn - Drawperfect. All rights reserved. http://www.drawperfect.com","fontFamily":"FORCED SQUARE","fontSubfamily":"Medium","uniqueID":"pyrs: FORCED SQUARE: ","fullName":"FORCED SQUARE","version":"Version 1.000","postScriptName":"FORCED SQUARE","trademark":"Hiptobe is a trademark of Paul IJsendoorn.","manufacturer":"Paul IJsendoorn - Drawperfect","designer":"Paul IJsendoorn","description":"Copyright (c) 2014 by Paul IJsendoorn - Drawperfect. All rights reserved. http://www.drawperfect.com","manufacturerURL":"http://www.drawperfect.com/","designerURL":"http://www.drawperfect.com/","licence":"http://www.drawperfect.com/","licenceURL":"http://www.drawperfect.com/"},"cssFontWeight":"normal","cssFontStyle":"normal"} \ No newline at end of file +{ + "glyphs": { + "0": { + "ha": 582, + "x_min": 0, + "x_max": 435, + "o": "m 435 -1 l 0 -1 l 0 725 l 435 725 l 435 -1 m 286 582 l 143 582 l 143 147 l 286 147 l 286 582 z " + }, + "1": { + "ha": 568, + "x_min": 1, + "x_max": 436, + "o": "m 436 146 l 436 3 l 1 3 l 1 146 l 150 146 l 150 581 l 1 581 l 1 728 l 293 728 l 293 146 l 436 146 z " + }, + "2": { + "ha": 565, + "x_min": -1, + "x_max": 433, + "o": "m 433 290 l 147 290 l 147 142 l 433 142 l 433 -1 l -1 -1 l -1 433 l 290 433 l 290 576 l -1 576 l -1 725 l 433 725 l 433 290 z " + }, + "3": { + "ha": 579, + "x_min": -1, + "x_max": 433, + "o": "m 433 -1 l -1 -1 l -1 142 l 285 142 l 285 290 l 142 290 l 142 433 l 285 433 l 285 576 l -1 576 l -1 725 l 433 725 l 433 -1 z " + }, + "4": { + "ha": 593, + "x_min": 1, + "x_max": 440, + "o": "m 440 -1 l 293 -1 l 293 290 l 1 290 l 1 725 l 150 725 l 150 433 l 293 433 l 293 725 l 440 725 l 440 -1 z " + }, + "5": { + "ha": 594, + "x_min": 1, + "x_max": 440, + "o": "m 440 -1 l 1 -1 l 1 142 l 293 142 l 293 290 l 1 290 l 1 725 l 440 725 l 440 576 l 150 576 l 150 433 l 440 433 l 440 -1 z " + }, + "6": { + "ha": 593, + "x_min": 0, + "x_max": 435, + "o": "m 435 -1 l 0 -1 l 0 725 l 435 725 l 435 576 l 149 576 l 149 433 l 435 433 l 435 -1 m 292 290 l 149 290 l 149 142 l 292 142 l 292 290 z " + }, + "7": { + "ha": 579, + "x_min": -14, + "x_max": 426, + "o": "m 426 0 l 278 0 l 278 292 l 135 292 l 135 435 l 278 435 l 278 578 l -14 578 l -14 726 l 426 726 l 426 0 z " + }, + "8": { + "ha": 582, + "x_min": 1, + "x_max": 436, + "o": "m 436 -1 l 1 -1 l 1 725 l 436 725 l 436 -1 m 293 290 l 144 290 l 144 142 l 293 142 l 293 290 m 293 576 l 144 576 l 144 433 l 293 433 l 293 576 z " + }, + "9": { + "ha": 585, + "x_min": -1, + "x_max": 433, + "o": "m 433 1 l -1 1 l -1 144 l 285 144 l 285 293 l -1 293 l -1 726 l 433 726 l 433 1 m 285 436 l 285 579 l 142 579 l 142 436 l 285 436 z " + }, + "\u0000": { + "ha": 0, + "x_min": 0, + "x_max": 0, + "o": "" + }, + "\r": { + "ha": 476, + "x_min": 0, + "x_max": 0, + "o": "" + }, + " ": { + "ha": 476, + "x_min": 0, + "x_max": 0, + "o": "" + }, + "H": { + "ha": 874, + "x_min": 0, + "x_max": 726, + "o": "m 726 726 l 726 1 l 583 1 l 583 293 l 149 293 l 149 1 l 0 1 l 0 726 l 149 726 l 149 436 l 583 436 l 583 726 l 726 726 z " + }, + "I": { + "ha": 750, + "x_min": 0, + "x_max": 599, + "o": "m 371 583 l 371 149 l 599 149 l 599 0 l 0 0 l 0 149 l 228 149 l 228 583 l 0 583 l 0 726 l 599 726 l 599 583 l 371 583 z " + }, + "J": { + "ha": 757, + "x_min": 0, + "x_max": 599, + "o": "m 599 0 l 0 0 l 0 149 l 450 149 l 450 583 l 228 583 l 228 726 l 599 726 l 599 0 z " + }, + "K": { + "ha": 869, + "x_min": 0, + "x_max": 726, + "o": "m 465 363 l 726 103 l 726 0 l 624 0 l 332 286 l 149 286 l 149 0 l 0 0 l 0 726 l 149 726 l 149 435 l 332 435 l 624 726 l 726 726 l 726 618 l 465 363 z " + }, + "L": { + "ha": 743, + "x_min": 0, + "x_max": 599, + "o": "m 599 0 l 0 0 l 0 726 l 143 726 l 143 143 l 599 143 l 599 0 z " + }, + "M": { + "ha": 869, + "x_min": 0, + "x_max": 726, + "o": "m 726 726 l 726 0 l 583 0 l 583 475 l 363 261 l 149 475 l 149 0 l 0 0 l 0 726 l 107 726 l 363 465 l 624 726 l 726 726 z " + }, + "N": { + "ha": 871, + "x_min": 0, + "x_max": 721, + "o": "m 721 726 l 721 0 l 578 0 l 143 499 l 143 0 l 0 0 l 0 726 l 143 726 l 578 228 l 578 726 l 721 726 z " + }, + "O": { + "ha": 886, + "x_min": 0, + "x_max": 726, + "o": "m 726 0 l 0 0 l 0 726 l 726 726 l 726 0 m 583 583 l 149 583 l 149 149 l 583 149 l 583 583 z " + }, + "P": { + "ha": 874, + "x_min": 0, + "x_max": 726, + "o": "m 726 292 l 143 292 l 143 0 l 0 0 l 0 726 l 726 726 l 726 292 m 578 578 l 143 578 l 143 435 l 578 435 l 578 578 z " + }, + "Q": { + "ha": 892, + "x_min": 0, + "x_max": 726, + "o": "m 726 0 l 0 0 l 0 726 l 726 726 l 726 0 m 143 143 l 475 143 l 301 317 l 404 419 l 578 246 l 578 578 l 143 578 l 143 143 z " + }, + "R": { + "ha": 874, + "x_min": 0, + "x_max": 726, + "o": "m 726 726 l 726 286 l 536 286 l 726 103 l 726 0 l 618 0 l 332 286 l 143 286 l 143 0 l 0 0 l 0 726 l 726 726 m 578 578 l 143 578 l 143 435 l 578 435 l 578 578 z " + }, + "S": { + "ha": 874, + "x_min": 1, + "x_max": 722, + "o": "m 144 578 l 144 435 l 722 435 l 722 0 l 1 0 l 1 143 l 579 143 l 579 286 l 1 286 l 1 721 l 722 721 l 722 578 l 144 578 z " + }, + "T": { + "ha": 721, + "x_min": 0, + "x_max": 721, + "o": "m 721 578 l 435 578 l 435 0 l 286 0 l 286 578 l 0 578 l 0 726 l 721 726 l 721 578 z " + }, + "U": { + "ha": 881, + "x_min": 0, + "x_max": 726, + "o": "m 726 0 l 0 0 l 0 726 l 149 726 l 149 143 l 583 143 l 583 726 l 726 726 l 726 0 z " + }, + "V": { + "ha": 857, + "x_min": 1, + "x_max": 726, + "o": "m 726 286 l 467 0 l 263 0 l 1 286 l 1 726 l 150 726 l 150 378 l 364 143 l 583 378 l 583 726 l 726 726 l 726 286 z " + }, + "W": { + "ha": 881, + "x_min": 0, + "x_max": 726, + "o": "m 726 726 l 726 0 l 624 0 l 363 261 l 103 0 l 0 0 l 0 726 l 149 726 l 149 246 l 363 465 l 583 246 l 583 726 l 726 726 z " + }, + "X": { + "ha": 850, + "x_min": 0, + "x_max": 721, + "o": "m 465 363 l 721 103 l 721 0 l 618 0 l 358 261 l 103 0 l 0 0 l 0 103 l 256 363 l 0 624 l 0 726 l 103 726 l 358 465 l 618 726 l 721 726 l 721 624 l 465 363 z " + }, + "Y": { + "ha": 886, + "x_min": 0, + "x_max": 726, + "o": "m 726 219 l 481 0 l 363 0 l 363 97 l 506 219 l 0 219 l 0 726 l 149 726 l 149 363 l 578 363 l 578 726 l 726 726 l 726 219 z " + }, + "Z": { + "ha": 868, + "x_min": 1, + "x_max": 726, + "o": "m 726 654 l 264 143 l 726 143 l 726 0 l 1 0 l 1 67 l 471 578 l 1 578 l 1 721 l 726 721 l 726 654 z " + }, + "[": { + "ha": 457, + "x_min": 0, + "x_max": 292, + "o": "m 143 721 l 143 0 l 292 0 l 292 -149 l 0 -149 l 0 869 l 292 869 l 292 721 l 143 721 z " + }, + "\"": { + "ha": 458, + "x_min": -1, + "x_max": 351, + "o": "m 351 836 l 279 621 l 208 621 l 208 836 l 351 836 m -1 836 l 142 836 l 71 621 l -1 621 l -1 836 z " + }, + "a": { + "ha": 728, + "x_min": 0, + "x_max": 583, + "o": "m 583 579 l 583 1 l 0 1 l 0 349 l 435 349 l 435 443 l 0 443 l 0 579 l 583 579 m 435 131 l 435 131 l 435 231 l 149 231 l 149 131 l 435 131 z " + }, + "b": { + "ha": 738, + "x_min": 0, + "x_max": 578, + "o": "m 578 583 l 578 0 l 0 0 l 0 768 l 143 768 l 143 583 l 578 583 m 435 435 l 143 435 l 143 149 l 435 149 l 435 435 z " + }, + "c": { + "ha": 729, + "x_min": 0, + "x_max": 583, + "o": "m 149 436 l 149 150 l 583 150 l 583 1 l 0 1 l 0 583 l 583 583 l 583 436 l 149 436 z " + }, + "d": { + "ha": 726, + "x_min": 0, + "x_max": 583, + "o": "m 583 771 l 583 0 l 0 0 l 0 578 l 435 578 l 435 771 l 583 771 m 435 143 l 435 435 l 143 435 l 143 143 l 435 143 z " + }, + "e": { + "ha": 726, + "x_min": 0, + "x_max": 583, + "o": "m 0 579 l 583 579 l 583 232 l 149 232 l 149 138 l 583 138 l 583 1 l 0 1 l 0 579 m 149 350 l 435 350 l 435 450 l 149 450 l 149 350 z " + }, + "f": { + "ha": 550, + "x_min": 0, + "x_max": 435, + "o": "m 149 358 l 435 358 l 435 215 l 149 215 l 149 0 l 0 0 l 0 724 l 435 724 l 435 581 l 149 581 l 149 358 z " + }, + "g": { + "ha": 726, + "x_min": 0, + "x_max": 578, + "o": "m 578 -237 l 0 -237 l 0 -94 l 435 -94 l 435 0 l 0 0 l 0 578 l 578 578 l 578 -237 m 435 143 l 435 435 l 143 435 l 143 143 l 435 143 z " + }, + "h": { + "ha": 726, + "x_min": 0, + "x_max": 578, + "o": "m 578 578 l 578 0 l 435 0 l 435 435 l 143 435 l 143 0 l 0 0 l 0 785 l 143 785 l 143 578 l 578 578 z " + }, + "i": { + "ha": 292, + "x_min": 0, + "x_max": 143, + "o": "m 143 764 l 143 651 l 0 651 l 0 764 l 143 764 m 0 569 l 143 569 l 143 0 l 0 0 l 0 569 z " + }, + "j": { + "ha": 289, + "x_min": -164, + "x_max": 143, + "o": "m 0 571 l 143 571 l 143 -218 l -164 -218 l -164 -75 l 0 -75 l 0 571 m 143 761 l 143 653 l 0 653 l 0 761 l 143 761 z " + }, + "k": { + "ha": 663, + "x_min": 0, + "x_max": 578, + "o": "m 363 292 l 578 72 l 578 0 l 444 0 l 231 215 l 143 215 l 143 0 l 0 0 l 0 765 l 143 765 l 143 363 l 231 363 l 450 578 l 578 578 l 578 506 l 363 292 z " + }, + "l": { + "ha": 283, + "x_min": 0, + "x_max": 143, + "o": "m 143 0 l 0 0 l 0 764 l 143 764 l 143 0 z " + }, + "m": { + "ha": 876, + "x_min": 0, + "x_max": 726, + "o": "m 726 578 l 726 0 l 578 0 l 578 435 l 435 435 l 435 0 l 292 0 l 292 435 l 143 435 l 143 0 l 0 0 l 0 578 l 726 578 z " + }, + "n": { + "ha": 726, + "x_min": 0, + "x_max": 578, + "o": "m 578 578 l 578 0 l 435 0 l 435 435 l 143 435 l 143 0 l 0 0 l 0 578 l 578 578 z " + }, + "o": { + "ha": 732, + "x_min": 0, + "x_max": 583, + "o": "m 583 578 l 583 0 l 0 0 l 0 578 l 583 578 m 435 435 l 149 435 l 149 143 l 435 143 l 435 435 z " + }, + "p": { + "ha": 726, + "x_min": 0, + "x_max": 578, + "o": "m 578 0 l 143 0 l 143 -219 l 0 -219 l 0 578 l 578 578 l 578 0 m 435 435 l 143 435 l 143 143 l 435 143 l 435 435 z " + }, + "q": { + "ha": 743, + "x_min": 0, + "x_max": 583, + "o": "m 583 -237 l 435 -237 l 435 0 l 0 0 l 0 578 l 583 578 l 583 -237 m 435 143 l 435 435 l 149 435 l 149 143 l 435 143 z " + }, + "r": { + "ha": 586, + "x_min": 0, + "x_max": 456, + "o": "m 456 578 l 456 292 l 307 292 l 307 435 l 149 435 l 149 0 l 0 0 l 0 578 l 456 578 z " + }, + "s": { + "ha": 726, + "x_min": 0, + "x_max": 583, + "o": "m 149 347 l 583 347 l 583 0 l 0 0 l 0 131 l 435 131 l 435 231 l 0 231 l 0 578 l 583 578 l 583 443 l 149 443 l 149 347 z " + }, + "t": { + "ha": 582, + "x_min": 0, + "x_max": 435, + "o": "m 143 435 l 143 143 l 435 143 l 435 0 l 0 0 l 0 767 l 143 767 l 143 578 l 435 578 l 435 435 l 143 435 z " + }, + "u": { + "ha": 724, + "x_min": 0, + "x_max": 578, + "o": "m 578 0 l 0 0 l 0 578 l 143 578 l 143 143 l 435 143 l 435 578 l 578 578 l 578 0 z " + }, + "v": { + "ha": 665, + "x_min": -10, + "x_max": 567, + "o": "m 567 497 l 351 0 l 203 0 l -10 497 l -10 583 l 119 583 l 279 197 l 436 583 l 567 583 l 567 497 z " + }, + "w": { + "ha": 874, + "x_min": 0, + "x_max": 726, + "o": "m 726 578 l 726 0 l 0 0 l 0 578 l 143 578 l 143 143 l 292 143 l 292 578 l 435 578 l 435 143 l 578 143 l 578 578 l 726 578 z " + }, + "x": { + "ha": 707, + "x_min": 0, + "x_max": 583, + "o": "m 393 292 l 583 103 l 583 0 l 481 0 l 292 189 l 103 0 l 0 0 l 0 103 l 189 292 l 0 475 l 0 578 l 103 578 l 292 393 l 481 578 l 583 578 l 583 475 l 393 292 z " + }, + "y": { + "ha": 724, + "x_min": 0, + "x_max": 578, + "o": "m 578 0 l 336 -239 l 224 -239 l 224 -146 l 375 0 l 0 0 l 0 578 l 143 578 l 143 143 l 435 143 l 435 578 l 578 578 l 578 0 z " + }, + "z": { + "ha": 732, + "x_min": 1, + "x_max": 583, + "o": "m 583 579 l 583 476 l 251 144 l 583 144 l 583 1 l 1 1 l 1 104 l 333 436 l 1 436 l 1 579 l 583 579 z " + }, + ":": { + "ha": 279, + "x_min": 0, + "x_max": 143, + "o": "m 143 578 l 143 435 l 0 435 l 0 578 l 143 578 m 0 143 l 143 143 l 143 0 l 0 0 l 0 143 z " + }, + "±": { + "ha": 583, + "x_min": 1, + "x_max": 436, + "o": "m 436 631 l 436 488 l 293 488 l 293 339 l 144 339 l 144 488 l 1 488 l 1 631 l 144 631 l 144 774 l 293 774 l 293 631 l 436 631 m 1 196 l 436 196 l 436 53 l 1 53 l 1 196 z " + }, + "¡": { + "ha": 290, + "x_min": 0, + "x_max": 143, + "o": "m 143 506 l 143 0 l 0 0 l 0 506 l 143 506 m 143 649 l 0 649 l 0 797 l 143 797 l 143 649 z " + }, + "!": { + "ha": 301, + "x_min": 0, + "x_max": 143, + "o": "m 143 290 l 0 290 l 0 801 l 143 801 l 143 290 m 143 147 l 143 4 l 0 4 l 0 147 l 143 147 z " + }, + "@": { + "ha": 956, + "x_min": 0, + "x_max": 797, + "o": "m 797 218 l 215 218 l 215 510 l 578 510 l 578 290 l 649 290 l 649 582 l 143 582 l 143 147 l 649 147 l 649 -1 l 0 -1 l 0 725 l 797 725 l 797 218 m 363 290 l 435 290 l 435 439 l 363 439 l 363 290 z " + }, + "?": { + "ha": 736, + "x_min": -1, + "x_max": 582, + "o": "m 582 363 l 361 363 l 361 219 l 218 219 l 218 511 l 433 511 l 433 654 l 147 654 l 147 583 l -1 583 l -1 797 l 582 797 l 582 363 m 218 149 l 361 149 l 361 0 l 218 0 l 218 149 z " + }, + "#": { + "ha": 871, + "x_min": 0, + "x_max": 726, + "o": "m 578 435 l 578 286 l 726 286 l 726 143 l 578 143 l 578 0 l 435 0 l 435 143 l 292 143 l 292 0 l 143 0 l 143 143 l 0 143 l 0 286 l 143 286 l 143 435 l 0 435 l 0 578 l 143 578 l 143 721 l 292 721 l 292 578 l 435 578 l 435 721 l 578 721 l 578 578 l 726 578 l 726 435 l 578 435 m 435 435 l 292 435 l 292 286 l 435 286 l 435 435 z " + }, + "$": { + "ha": 725, + "x_min": -1, + "x_max": 582, + "o": "m 326 576 l 326 433 l 582 433 l 582 -1 l 326 -1 l 326 -83 l 254 -83 l 254 -1 l -1 -1 l -1 142 l 254 142 l 254 285 l -1 285 l -1 725 l 254 725 l 254 786 l 326 786 l 326 725 l 582 725 l 582 576 l 326 576 m 326 285 l 326 142 l 433 142 l 433 285 l 326 285 m 254 576 l 147 576 l 147 433 l 254 433 l 254 576 z " + }, + "%": { + "ha": 886, + "x_min": 1, + "x_max": 722, + "o": "m 722 719 l 722 617 l 104 -1 l 1 -1 l 1 101 l 619 719 l 722 719 m 215 504 l 1 504 l 1 719 l 215 719 l 215 504 m 507 214 l 722 214 l 722 -1 l 507 -1 l 507 214 z " + }, + "ˆ": { + "ha": 443, + "x_min": -1, + "x_max": 311, + "o": "m 199 836 l 311 783 l 311 701 l 264 701 l 151 758 l 44 701 l -1 701 l -1 783 l 111 836 l 199 836 z " + }, + "&": { + "ha": 879, + "x_min": 0, + "x_max": 726, + "o": "m 654 286 l 654 0 l 0 0 l 0 435 l 149 435 l 149 721 l 511 721 l 511 578 l 292 578 l 292 435 l 511 435 l 511 506 l 654 506 l 654 435 l 726 435 l 726 286 l 654 286 m 511 286 l 149 286 l 149 143 l 511 143 l 511 286 z " + }, + "·": { + "ha": 471, + "x_min": 0, + "x_max": 292, + "o": "m 292 217 l 0 217 l 0 508 l 292 508 l 292 217 z " + }, + "*": { + "ha": 571, + "x_min": 1, + "x_max": 436, + "o": "m 436 331 l 324 218 l 436 101 l 436 -1 l 333 -1 l 221 117 l 104 -1 l 1 -1 l 1 101 l 119 218 l 1 331 l 1 433 l 104 433 l 221 321 l 333 433 l 436 433 l 436 331 z " + }, + "+": { + "ha": 721, + "x_min": -3, + "x_max": 581, + "o": "m 581 214 l 360 214 l 360 -1 l 217 -1 l 217 214 l -3 214 l -3 361 l 217 361 l 217 576 l 360 576 l 360 361 l 581 361 l 581 214 z " + }, + "(": { + "ha": 406, + "x_min": 0, + "x_max": 276, + "o": "m 143 667 l 143 0 l 276 -133 l 276 -204 l 143 -204 l 0 -61 l 0 728 l 143 871 l 276 871 l 276 800 l 143 667 z " + }, + ")": { + "ha": 417, + "x_min": 0, + "x_max": 281, + "o": "m 281 728 l 281 -61 l 133 -204 l 0 -204 l 0 -132 l 133 0 l 133 667 l 0 799 l 0 871 l 133 871 l 281 728 z " + }, + "_": { + "ha": 792, + "x_min": 0, + "x_max": 651, + "o": "m 0 -51 l 651 -51 l 651 -194 l 0 -194 l 0 -51 z " + }, + ",": { + "ha": 243, + "x_min": -1, + "x_max": 142, + "o": "m -1 113 l 142 113 l 71 -103 l -1 -103 l -1 113 z " + }, + "{": { + "ha": 565, + "x_min": 0, + "x_max": 424, + "o": "m 143 411 l 143 722 l 290 871 l 424 871 l 424 794 l 290 661 l 290 0 l 424 -133 l 424 -204 l 290 -204 l 143 -61 l 143 264 l 0 264 l 0 411 l 143 411 z " + }, + "}": { + "ha": 571, + "x_min": 0, + "x_max": 424, + "o": "m 424 411 l 424 264 l 281 264 l 281 -61 l 133 -204 l 0 -204 l 0 -133 l 133 0 l 133 661 l 0 794 l 0 871 l 133 871 l 281 722 l 281 411 l 424 411 z " + }, + "|": { + "ha": 256, + "x_min": -1, + "x_max": 106, + "o": "m 106 878 l 106 -154 l -1 -154 l -1 878 l 106 878 z " + }, + ">": { + "ha": 565, + "x_min": -1, + "x_max": 424, + "o": "m 424 221 l 132 1 l -1 1 l -1 72 l 290 293 l -1 507 l -1 583 l 132 583 l 424 364 l 424 221 z " + }, + "<": { + "ha": 563, + "x_min": 1, + "x_max": 421, + "o": "m 1 363 l 288 583 l 421 583 l 421 506 l 135 292 l 129 292 l 135 292 l 421 72 l 421 0 l 288 0 l 1 219 l 1 363 z " + }, + "~": { + "ha": 790, + "x_min": 0, + "x_max": 654, + "o": "m 654 432 l 654 213 l 278 213 l 278 342 l 129 342 l 129 213 l 0 213 l 0 432 l 376 432 l 376 297 l 519 297 l 519 432 l 654 432 z " + }, + "`": { + "ha": 365, + "x_min": 1, + "x_max": 240, + "o": "m 240 703 l 133 703 l 1 836 l 158 836 l 240 703 z " + }, + "´": { + "ha": 279, + "x_min": 6, + "x_max": 238, + "o": "m 88 838 l 238 838 l 113 704 l 6 704 l 88 838 z " + }, + "'": { + "ha": 276, + "x_min": 0, + "x_max": 143, + "o": "m 0 838 l 143 838 l 72 622 l 0 622 l 0 838 z " + }, + "¯": { + "ha": 575, + "x_min": 1, + "x_max": 436, + "o": "m 1 914 l 436 914 l 436 771 l 1 771 l 1 914 z " + }, + ".": { + "ha": 279, + "x_min": 0, + "x_max": 143, + "o": "m 143 0 l 0 0 l 0 143 l 143 143 l 143 0 z " + }, + "/": { + "ha": 649, + "x_min": -1, + "x_max": 619, + "o": "m 119 -139 l -1 -139 l 494 878 l 619 878 l 119 -139 z " + }, + "-": { + "ha": 685, + "x_min": 0, + "x_max": 547, + "o": "m 0 417 l 547 417 l 547 274 l 0 274 l 0 417 z " + }, + ";": { + "ha": 290, + "x_min": 0, + "x_max": 143, + "o": "m 0 -1 l 72 -1 l 143 214 l 0 214 l 0 -1 m 143 433 l 0 433 l 0 576 l 143 576 l 143 433 z " + }, + "=": { + "ha": 740, + "x_min": -1, + "x_max": 582, + "o": "m 582 531 l 582 382 l -1 382 l -1 531 l 582 531 m -1 311 l 582 311 l 582 168 l -1 168 l -1 311 z " + }, + "\\": { + "ha": 675, + "x_min": 18, + "x_max": 644, + "o": "m 18 878 l 143 878 l 644 -139 l 519 -139 l 18 878 z " + }, + "]": { + "ha": 451, + "x_min": 0, + "x_max": 292, + "o": "m 292 869 l 292 -149 l 0 -149 l 0 0 l 143 0 l 143 721 l 0 721 l 0 869 l 292 869 z " + }, + "^": { + "ha": 735, + "x_min": 4, + "x_max": 586, + "o": "m 367 835 l 586 615 l 586 482 l 515 482 l 296 701 l 75 482 l 4 482 l 4 615 l 224 835 l 367 835 z " + }, + "¶": { + "ha": 706, + "x_min": 1, + "x_max": 579, + "o": "m 364 871 l 364 1 l 215 1 l 215 507 l 1 507 l 1 871 l 364 871 m 579 871 l 579 1 l 436 1 l 436 871 l 579 871 z " + }, + "µ": { + "ha": 726, + "x_min": 0, + "x_max": 583, + "o": "m 583 1 l 149 1 l 149 -142 l 0 -142 l 0 726 l 149 726 l 149 150 l 439 150 l 439 726 l 583 726 l 583 1 z " + }, + "¢": { + "ha": 728, + "x_min": 0, + "x_max": 583, + "o": "m 353 435 l 353 149 l 583 149 l 583 0 l 353 0 l 353 -82 l 281 -82 l 281 0 l 0 0 l 0 583 l 281 583 l 281 644 l 353 644 l 353 583 l 583 583 l 583 435 l 353 435 m 281 435 l 143 435 l 143 149 l 281 149 l 281 435 z " + }, + "˘": { + "ha": 526, + "x_min": 1, + "x_max": 394, + "o": "m 394 686 l 1 686 l 1 838 l 124 838 l 124 758 l 272 758 l 272 838 l 394 838 l 394 686 z " + }, + "˙": { + "ha": 297, + "x_min": 0, + "x_max": 149, + "o": "m 149 836 l 149 693 l 0 693 l 0 836 l 149 836 z " + }, + "˚": { + "ha": 335, + "x_min": 0, + "x_max": 222, + "o": "m 222 836 l 222 610 l 0 610 l 0 836 l 222 836 m 151 765 l 72 765 l 72 681 l 151 681 l 151 765 z " + }, + "˝": { + "ha": 586, + "x_min": -1, + "x_max": 351, + "o": "m 351 833 l 279 618 l 208 618 l 208 833 l 351 833 m -1 833 l 142 833 l 71 618 l -1 618 l -1 833 z " + }, + "˛": { + "ha": 510, + "x_min": 113, + "x_max": 378, + "o": "m 274 40 l 231 -90 l 378 -90 l 378 -178 l 113 -178 l 186 40 l 274 40 z " + }, + "ˇ": { + "ha": 426, + "x_min": -1, + "x_max": 311, + "o": "m 111 701 l -1 754 l -1 836 l 44 836 l 151 779 l 264 836 l 311 836 l 311 754 l 199 701 l 111 701 z " + }, + "‚": { + "ha": 338, + "x_min": 1, + "x_max": 221, + "o": "m 221 144 l 150 -142 l 72 -142 l 72 1 l 1 1 l 1 144 l 221 144 z " + }, + "€": { + "ha": 868, + "x_min": 0, + "x_max": 721, + "o": "m 286 578 l 286 475 l 514 475 l 514 404 l 286 404 l 286 332 l 514 332 l 514 256 l 286 256 l 286 143 l 721 143 l 721 0 l 138 0 l 138 256 l 0 256 l 0 332 l 138 332 l 138 404 l 0 404 l 0 475 l 138 475 l 138 721 l 721 721 l 721 578 l 286 578 z " + }, + "ƒ": { + "ha": 600, + "x_min": -119, + "x_max": 457, + "o": "m 238 644 l 238 429 l 386 429 l 386 358 l 238 358 l 238 -225 l -119 -225 l -119 -76 l 94 -76 l 94 358 l -49 358 l -49 429 l 94 429 l 94 792 l 457 792 l 457 644 l 238 644 z " + }, + "„": { + "ha": 589, + "x_min": 0, + "x_max": 499, + "o": "m 499 143 l 426 -143 l 356 -143 l 356 0 l 283 0 l 283 143 l 499 143 m 219 143 l 149 -143 l 72 -143 l 72 0 l 0 0 l 0 143 l 219 143 z " + }, + "…": { + "ha": 856, + "x_min": -1, + "x_max": 725, + "o": "m -1 143 l 142 143 l 142 0 l -1 0 l -1 143 m 290 143 l 433 143 l 433 0 l 290 0 l 290 143 m 725 143 l 725 0 l 576 0 l 576 143 l 725 143 z " + }, + "†": { + "ha": 856, + "x_min": -1, + "x_max": 725, + "o": "m 725 433 l 433 433 l 433 -144 l 290 -144 l 290 433 l -1 433 l -1 582 l 290 582 l 290 868 l 433 868 l 433 582 l 725 582 l 725 433 z " + }, + "‡": { + "ha": 700, + "x_min": -3, + "x_max": 581, + "o": "m 360 408 l 360 329 l 581 329 l 581 243 l 360 243 l 360 1 l 217 1 l 217 243 l -3 243 l -3 329 l 217 329 l 217 408 l -3 408 l -3 493 l 217 493 l 217 722 l 360 722 l 360 493 l 581 493 l 581 408 l 360 408 z " + }, + "‰": { + "ha": 1068, + "x_min": 1, + "x_max": 947, + "o": "m 215 504 l 1 504 l 1 725 l 215 725 l 215 504 m 440 214 l 656 214 l 656 -1 l 440 -1 l 440 214 m 947 214 l 947 -1 l 726 -1 l 726 214 l 947 214 m 1 101 l 625 725 l 726 725 l 726 622 l 104 -1 l 1 -1 l 1 101 z " + }, + "Š": { + "ha": 861, + "x_min": 1, + "x_max": 722, + "o": "m 722 575 l 722 718 l 1 718 l 1 283 l 579 283 l 579 140 l 1 140 l 1 -3 l 722 -3 l 722 432 l 144 432 l 144 575 l 722 575 m 318 768 l 206 821 l 206 903 l 251 903 l 360 846 l 471 903 l 518 903 l 518 821 l 406 768 l 318 768 z " + }, + "£": { + "ha": 717, + "x_min": 0, + "x_max": 581, + "o": "m 363 332 l 363 149 l 578 149 l 578 0 l 0 0 l 0 149 l 215 149 l 215 332 l 0 332 l 0 404 l 215 404 l 215 726 l 578 726 l 578 583 l 363 583 l 363 404 l 581 404 l 581 332 l 363 332 z " + }, + "¤": { + "ha": 906, + "x_min": 0, + "x_max": 776, + "o": "m 675 567 l 675 207 l 776 104 l 672 -1 l 567 104 l 211 104 l 104 -1 l 0 104 l 104 207 l 104 567 l 0 669 l 104 775 l 211 669 l 567 669 l 672 775 l 776 669 l 675 567 m 251 526 l 251 247 l 526 247 l 526 526 l 251 526 z " + }, + "¥": { + "ha": 868, + "x_min": -1, + "x_max": 719, + "o": "m 719 625 l 489 390 l 653 390 l 653 318 l 433 318 l 433 247 l 653 247 l 653 175 l 433 175 l 433 1 l 285 1 l 285 175 l 71 175 l 71 247 l 285 247 l 285 318 l 71 318 l 71 390 l 229 390 l -1 625 l -1 726 l 101 726 l 361 467 l 617 726 l 719 726 l 719 625 z " + }, + "¦": { + "ha": 283, + "x_min": 0, + "x_max": 143, + "o": "m 0 531 l 0 875 l 143 875 l 143 531 l 0 531 m 0 -99 l 0 247 l 143 247 l 143 -99 l 0 -99 z " + }, + "§": { + "ha": 582, + "x_min": -1, + "x_max": 433, + "o": "m 147 725 l 147 653 l 433 653 l 433 -1 l -1 -1 l -1 142 l 290 142 l 290 218 l -1 218 l -1 868 l 433 868 l 433 725 l 147 725 m 147 504 l 147 361 l 290 361 l 290 504 l 147 504 z " + }, + "¨": { + "ha": 556, + "x_min": 0, + "x_max": 435, + "o": "m 0 838 l 143 838 l 143 694 l 0 694 l 0 838 m 435 838 l 435 694 l 286 694 l 286 838 l 435 838 z " + }, + "©": { + "ha": 933, + "x_min": 0, + "x_max": 792, + "o": "m 214 219 l 214 511 l 578 511 l 578 439 l 358 439 l 358 290 l 578 290 l 578 219 l 214 219 m 792 4 l 0 4 l 0 725 l 792 725 l 792 4 m 649 582 l 143 582 l 143 147 l 649 147 l 649 582 z " + }, + "ª": { + "ha": 400, + "x_min": 0, + "x_max": 256, + "o": "m 256 838 l 256 474 l 0 474 l 0 692 l 183 692 l 183 765 l 36 765 l 36 838 l 183 838 l 256 838 m 183 619 l 72 619 l 72 546 l 183 546 l 183 619 z " + }, + "«": { + "ha": 1144, + "x_min": -1, + "x_max": 1017, + "o": "m 510 583 l 168 435 l 510 292 l 510 149 l -1 363 l -1 511 l 510 726 l 510 583 m 1017 583 l 675 435 l 1017 292 l 1017 149 l 510 363 l 510 511 l 1017 726 l 1017 583 z " + }, + "®": { + "ha": 950, + "x_min": 0, + "x_max": 797, + "o": "m 219 218 l 219 504 l 578 504 l 578 361 l 542 326 l 578 290 l 578 218 l 506 218 l 506 290 l 363 290 l 363 218 l 219 218 m 363 361 l 506 361 l 506 433 l 363 433 l 363 361 m 797 -1 l 0 -1 l 0 725 l 797 725 l 797 -1 m 654 576 l 143 576 l 143 142 l 654 142 l 654 576 z " + }, + "°": { + "ha": 443, + "x_min": 0, + "x_max": 288, + "o": "m 288 838 l 288 547 l 0 547 l 0 838 l 288 838 m 215 767 l 72 767 l 72 618 l 215 618 l 215 767 z " + }, + "²": { + "ha": 329, + "x_min": 1, + "x_max": 218, + "o": "m 218 618 l 75 618 l 75 544 l 218 544 l 218 472 l 1 472 l 1 690 l 147 690 l 147 761 l 1 761 l 1 836 l 218 836 l 218 618 z " + }, + "³": { + "ha": 311, + "x_min": 0, + "x_max": 217, + "o": "m 217 474 l 0 474 l 0 544 l 143 544 l 143 618 l 72 618 l 72 690 l 143 690 l 143 761 l 0 761 l 0 836 l 217 836 l 217 474 z " + }, + "¸": { + "ha": 518, + "x_min": 113, + "x_max": 378, + "o": "m 304 40 l 378 -178 l 113 -178 l 113 -90 l 261 -90 l 217 40 l 304 40 z " + }, + "¿": { + "ha": 700, + "x_min": -1, + "x_max": 576, + "o": "m 576 215 l 576 0 l -1 0 l -1 435 l 214 435 l 214 578 l 357 578 l 357 286 l 142 286 l 142 143 l 433 143 l 433 215 l 576 215 m 357 649 l 214 649 l 214 797 l 357 797 l 357 649 z " + }, + "À": { + "ha": 861, + "x_min": 1, + "x_max": 722, + "o": "m 722 726 l 1 726 l 1 1 l 144 1 l 144 293 l 579 293 l 579 1 l 722 1 l 722 726 m 579 436 l 144 436 l 144 579 l 579 579 l 579 436 m 421 792 l 313 792 l 182 925 l 339 925 l 421 792 z " + }, + "Á": { + "ha": 849, + "x_min": -3, + "x_max": 718, + "o": "m -3 1 l 140 1 l 140 293 l 575 293 l 575 1 l 718 1 l 718 726 l -3 726 l -3 1 m 140 579 l 575 579 l 575 436 l 140 436 l 140 579 m 283 924 l 435 924 l 310 792 l 201 792 l 283 924 z " + }, + "Â": { + "ha": 860, + "x_min": -3, + "x_max": 718, + "o": "m 163 890 l 319 890 l 239 771 l 132 771 l 163 890 m 567 771 l 458 771 l 378 890 l 535 890 l 567 771 m -3 1 l 140 1 l 140 293 l 575 293 l 575 1 l 718 1 l 718 726 l -3 726 l -3 1 m 140 579 l 575 579 l 575 436 l 140 436 l 140 579 z " + }, + "Ä": { + "ha": 854, + "x_min": -3, + "x_max": 718, + "o": "m -3 726 l 718 726 l 718 1 l 575 1 l 575 293 l 140 293 l 140 1 l -3 1 l -3 726 m 140 436 l 575 436 l 575 579 l 140 579 l 140 436 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z " + }, + "Å": { + "ha": 867, + "x_min": 0, + "x_max": 726, + "o": "m 726 1 l 583 1 l 583 293 l 149 293 l 149 1 l 0 1 l 0 726 l 726 726 l 726 1 m 583 579 l 149 579 l 149 436 l 583 436 l 583 579 m 256 792 l 256 1006 l 471 1006 l 471 792 l 256 792 m 328 863 l 399 863 l 399 935 l 328 935 l 328 863 z " + }, + "Ã": { + "ha": 854, + "x_min": -3, + "x_max": 718, + "o": "m 568 936 l 568 793 l 321 793 l 321 864 l 244 864 l 244 793 l 139 793 l 139 936 l 392 936 l 392 864 l 464 864 l 464 936 l 568 936 m -3 726 l 718 726 l 718 1 l 575 1 l 575 293 l 140 293 l 140 1 l -3 1 l -3 726 m 140 436 l 575 436 l 575 579 l 140 579 l 140 436 z " + }, + "Æ": { + "ha": 1367, + "x_min": -1, + "x_max": 1236, + "o": "m 725 583 l 725 436 l 1236 436 l 1236 293 l 725 293 l 725 150 l 1236 150 l 1236 1 l 582 1 l 582 293 l 147 293 l 147 1 l -1 1 l -1 726 l 1236 726 l 1236 583 l 725 583 m 582 436 l 582 583 l 147 583 l 147 436 l 582 436 z " + }, + "Ç": { + "ha": 726, + "x_min": 1, + "x_max": 583, + "o": "m 150 435 l 150 143 l 583 143 l 583 0 l 390 0 l 436 -143 l 221 -143 l 221 -72 l 343 -72 l 318 0 l 1 0 l 1 578 l 583 578 l 583 435 l 150 435 z " + }, + "È": { + "ha": 861, + "x_min": 1, + "x_max": 726, + "o": "m 500 790 l 392 790 l 261 924 l 418 924 l 500 790 m 726 579 l 726 722 l 1 722 l 1 1 l 726 1 l 726 144 l 150 144 l 150 288 l 726 288 l 726 436 l 150 436 l 150 579 l 726 579 z " + }, + "É": { + "ha": 883, + "x_min": 1, + "x_max": 726, + "o": "m 343 925 l 500 925 l 368 793 l 261 793 l 343 925 m 726 579 l 726 722 l 1 722 l 1 1 l 726 1 l 726 144 l 150 144 l 150 288 l 726 288 l 726 436 l 150 436 l 150 579 l 726 579 z " + }, + "Ê": { + "ha": 875, + "x_min": 1, + "x_max": 726, + "o": "m 163 911 l 319 911 l 239 792 l 132 792 l 163 911 m 567 792 l 458 792 l 378 911 l 535 911 l 567 792 m 726 579 l 726 722 l 1 722 l 1 1 l 726 1 l 726 144 l 150 144 l 150 288 l 726 288 l 726 436 l 150 436 l 150 579 l 726 579 z " + }, + "Ë": { + "ha": 854, + "x_min": 1, + "x_max": 726, + "o": "m 150 579 l 150 436 l 726 436 l 726 288 l 150 288 l 150 144 l 726 144 l 726 1 l 1 1 l 1 722 l 726 722 l 726 579 l 150 579 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z " + }, + "™": { + "ha": 950, + "x_min": 6, + "x_max": 803, + "o": "m 803 724 l 803 432 l 731 432 l 731 651 l 660 651 l 660 432 l 583 432 l 583 651 l 511 651 l 511 432 l 439 432 l 439 724 l 803 724 m 368 724 l 368 651 l 225 651 l 225 432 l 149 432 l 149 651 l 6 651 l 6 724 l 368 724 z " + }, + "Ω": { + "ha": 871, + "x_min": 1, + "x_max": 726, + "o": "m 583 147 l 583 75 l 726 75 l 726 -1 l 436 -1 l 436 290 l 583 290 l 583 582 l 150 582 l 150 290 l 293 290 l 293 -1 l 1 -1 l 1 75 l 150 75 l 150 147 l 1 147 l 1 725 l 726 725 l 726 147 l 583 147 z " + }, + "∂": { + "ha": 563, + "x_min": -1, + "x_max": 433, + "o": "m 433 629 l 433 88 l 335 -3 l -1 -3 l -1 432 l 290 432 l 290 581 l 71 581 l 71 724 l 332 724 l 433 629 m 290 289 l 142 289 l 142 140 l 290 140 l 290 289 z " + }, + "∆": { + "ha": 840, + "x_min": 1, + "x_max": 722, + "o": "m 722 1 l 1 1 l 288 799 l 436 799 l 722 1 m 528 150 l 360 599 l 196 150 l 528 150 z " + }, + "∏": { + "ha": 732, + "x_min": 0, + "x_max": 578, + "o": "m 578 578 l 506 578 l 506 -6 l 363 -6 l 363 578 l 215 578 l 215 -6 l 72 -6 l 72 578 l 0 578 l 0 721 l 578 721 l 578 578 z " + }, + "∑": { + "ha": 875, + "x_min": -1, + "x_max": 719, + "o": "m 719 578 l 244 578 l 458 363 l 244 143 l 719 143 l 719 0 l -1 0 l -1 103 l 254 363 l -1 624 l -1 726 l 719 726 l 719 578 z " + }, + "−": { + "ha": 1003, + "x_min": 1, + "x_max": 875, + "o": "m 1 383 l 875 383 l 875 311 l 1 311 l 1 383 z " + }, + "√": { + "ha": 764, + "x_min": -1, + "x_max": 643, + "o": "m 643 658 l 351 -1 l 208 -1 l 71 218 l -1 218 l -1 361 l 157 361 l 275 168 l 567 801 l 643 801 l 643 658 z " + }, + "∞": { + "ha": 868, + "x_min": 0, + "x_max": 721, + "o": "m 721 575 l 721 140 l 0 140 l 0 575 l 721 575 m 286 283 l 286 426 l 143 426 l 143 283 l 286 283 m 578 426 l 435 426 l 435 283 l 578 283 l 578 426 z " + }, + "∫": { + "ha": 604, + "x_min": -119, + "x_max": 457, + "o": "m 238 644 l 238 -225 l -119 -225 l -119 -76 l 94 -76 l 94 792 l 457 792 l 457 644 l 238 644 z " + }, + "≈": { + "ha": 786, + "x_min": 1, + "x_max": 650, + "o": "m 650 571 l 650 422 l 288 422 l 288 499 l 144 499 l 144 422 l 1 422 l 1 571 l 360 571 l 360 499 l 507 499 l 507 571 l 650 571 m 507 350 l 650 350 l 650 207 l 288 207 l 288 279 l 144 279 l 144 207 l 1 207 l 1 350 l 360 350 l 360 279 l 507 279 l 507 350 z " + }, + "≠": { + "ha": 740, + "x_min": 1, + "x_max": 583, + "o": "m 390 399 l 354 322 l 583 322 l 583 179 l 282 179 l 196 0 l 108 0 l 129 179 l 1 179 l 1 322 l 196 322 l 232 399 l 1 399 l 1 542 l 303 542 l 390 721 l 476 721 l 461 542 l 583 542 l 583 399 l 390 399 z " + }, + "≤": { + "ha": 667, + "x_min": -1, + "x_max": 510, + "o": "m -1 128 l 510 128 l 510 0 l -1 0 l -1 128 m 510 633 l 168 486 l 510 343 l 510 200 l -1 414 l -1 563 l 510 776 l 510 633 z " + }, + "≥": { + "ha": 633, + "x_min": -1, + "x_max": 510, + "o": "m 510 0 l -1 0 l -1 128 l 510 128 l 510 0 m -1 776 l 510 563 l 510 414 l -1 200 l -1 343 l 342 486 l -1 633 l -1 776 z " + }, + "◊": { + "ha": 860, + "x_min": -32, + "x_max": 751, + "o": "m 751 393 l 358 4 l -32 393 l 358 782 l 751 393 m 551 393 l 358 588 l 163 393 l 358 199 l 551 393 z " + }, + "": { + "ha": 717, + "x_min": 0, + "x_max": 561, + "o": "m 267 0 l 196 0 l 196 118 l 267 118 l 267 0 m 243 93 l 219 93 l 219 25 l 243 25 l 243 93 m 72 0 l 0 0 l 0 118 l 72 118 l 72 0 m 47 93 l 24 93 l 24 25 l 47 25 l 47 93 m 171 25 l 171 0 l 97 0 l 97 25 l 122 25 l 122 93 l 97 93 l 97 118 l 144 118 l 144 25 l 171 25 m 561 25 l 561 0 l 489 0 l 489 25 l 513 25 l 513 93 l 489 93 l 489 118 l 536 118 l 536 25 l 561 25 m 464 25 l 464 0 l 392 0 l 392 25 l 415 25 l 415 93 l 392 93 l 392 118 l 438 118 l 438 25 l 464 25 m 365 0 l 340 0 l 340 47 l 317 47 l 317 71 l 340 71 l 340 93 l 296 93 l 296 118 l 365 118 l 365 0 m 254 474 l 0 474 l 0 726 l 254 726 l 254 474 m 204 575 l 51 575 l 51 525 l 204 525 l 204 575 m 204 676 l 51 676 l 51 626 l 204 626 l 204 676 m 254 171 l 204 171 l 204 268 l 51 268 l 51 171 l 0 171 l 0 421 l 254 421 l 254 171 m 204 371 l 51 371 l 51 319 l 204 319 l 204 371 m 561 726 l 561 575 l 496 575 l 561 511 l 561 474 l 522 474 l 424 575 l 358 575 l 358 474 l 308 474 l 308 726 l 561 726 m 510 676 l 358 676 l 358 626 l 510 626 l 510 676 m 561 421 l 561 171 l 510 171 l 510 335 l 433 258 l 358 335 l 358 171 l 308 171 l 308 421 l 343 421 l 433 331 l 525 421 l 561 421 z " + }, + "fl": { + "ha": 613, + "x_min": 0, + "x_max": 481, + "o": "m 0 726 l 481 726 l 481 1 l 338 1 l 338 579 l 143 579 l 143 364 l 271 364 l 271 221 l 143 221 l 143 1 l 0 1 l 0 726 l 0 726 z " + }, + "fi": { + "ha": 624, + "x_min": -1, + "x_max": 479, + "o": "m 142 361 l 269 361 l 269 218 l 142 218 l 142 -1 l -1 -1 l -1 725 l 479 725 l 479 576 l 142 576 l 142 361 m 331 504 l 479 504 l 479 -1 l 331 -1 l 331 504 z " + }, + "⁄": { + "ha": 667, + "x_min": 3, + "x_max": 624, + "o": "m 128 -131 l 3 -131 l 499 882 l 624 882 l 128 -131 z " + }, + "›": { + "ha": 422, + "x_min": -1, + "x_max": 275, + "o": "m 275 271 l 132 128 l -1 128 l -1 200 l 142 343 l -1 490 l -1 563 l 132 563 l 275 419 l 275 271 z " + }, + "‹": { + "ha": 422, + "x_min": 1, + "x_max": 278, + "o": "m 1 424 l 144 567 l 278 567 l 278 494 l 135 346 l 278 203 l 278 132 l 144 132 l 1 275 l 1 424 z " + }, + "•": { + "ha": 496, + "x_min": 3, + "x_max": 350, + "o": "m 350 415 l 281 347 l 350 274 l 350 171 l 247 171 l 179 244 l 106 171 l 3 171 l 3 274 l 76 347 l 3 415 l 3 518 l 106 518 l 179 449 l 247 518 l 350 518 l 350 415 z " + }, + "”": { + "ha": 622, + "x_min": 0, + "x_max": 499, + "o": "m 499 838 l 426 551 l 356 551 l 356 694 l 283 694 l 283 838 l 499 838 m 219 838 l 149 551 l 72 551 l 72 694 l 0 694 l 0 838 l 219 838 z " + }, + "“": { + "ha": 642, + "x_min": 0, + "x_max": 492, + "o": "m 0 593 l 72 879 l 143 879 l 143 736 l 215 736 l 215 593 l 0 593 m 272 593 l 343 879 l 421 879 l 421 736 l 492 736 l 492 593 l 272 593 z " + }, + "’": { + "ha": 342, + "x_min": 3, + "x_max": 222, + "o": "m 222 838 l 151 551 l 74 551 l 74 694 l 3 694 l 3 838 l 222 838 z " + }, + "‘": { + "ha": 364, + "x_min": 0, + "x_max": 215, + "o": "m 0 588 l 72 874 l 143 874 l 143 731 l 215 731 l 215 588 l 0 588 z " + }, + "π": { + "ha": 703, + "x_min": -1, + "x_max": 576, + "o": "m 576 583 l 504 583 l 504 1 l 361 1 l 361 583 l 214 583 l 214 1 l 71 1 l 71 583 l -1 583 l -1 726 l 576 726 l 576 583 z " + }, + "–": { + "ha": 1063, + "x_min": 1, + "x_max": 913, + "o": "m 1 418 l 913 418 l 913 306 l 1 306 l 1 418 z " + }, + "—": { + "ha": 735, + "x_min": 0, + "x_max": 583, + "o": "m 0 406 l 583 406 l 583 263 l 0 263 l 0 406 z " + }, + "˜": { + "ha": 561, + "x_min": 1, + "x_max": 431, + "o": "m 431 522 l 431 379 l 183 379 l 183 451 l 106 451 l 106 379 l 1 379 l 1 522 l 254 522 l 254 451 l 326 451 l 326 522 l 431 522 z " + }, + "ž": { + "ha": 714, + "x_min": 1, + "x_max": 583, + "o": "m 1 579 l 1 436 l 333 436 l 1 104 l 1 1 l 583 1 l 583 144 l 251 144 l 583 476 l 583 579 l 1 579 m 240 638 l 128 690 l 128 772 l 174 772 l 281 715 l 393 772 l 439 772 l 439 690 l 328 638 l 240 638 z " + }, + "ß": { + "ha": 868, + "x_min": -1, + "x_max": 725, + "o": "m 725 0 l 290 0 l 290 149 l 582 149 l 582 292 l 147 292 l 147 0 l -1 0 l -1 583 l 147 726 l 725 726 l 725 0 m 582 583 l 147 583 l 147 435 l 582 435 l 582 583 z " + }, + "ç": { + "ha": 721, + "x_min": 1, + "x_max": 583, + "o": "m 150 435 l 150 143 l 583 143 l 583 0 l 396 0 l 449 -150 l 215 -150 l 215 -72 l 338 -72 l 311 0 l 1 0 l 1 578 l 583 578 l 583 435 l 150 435 z " + }, + "÷": { + "ha": 722, + "x_min": -1, + "x_max": 576, + "o": "m 576 451 l 576 303 l -1 303 l -1 451 l 576 451 m 361 522 l 214 522 l 214 665 l 361 665 l 361 522 m 214 232 l 361 232 l 361 88 l 214 88 l 214 232 z " + }, + "à": { + "ha": 724, + "x_min": 0, + "x_max": 583, + "o": "m 369 658 l 263 658 l 131 792 l 288 792 l 369 658 m 583 579 l 0 579 l 0 443 l 435 443 l 435 349 l 0 349 l 0 1 l 583 1 l 583 579 m 435 131 l 149 131 l 149 231 l 435 231 l 435 131 z " + }, + "á": { + "ha": 725, + "x_min": 0, + "x_max": 583, + "o": "m 283 790 l 435 790 l 310 657 l 201 657 l 283 790 m 583 579 l 0 579 l 0 443 l 435 443 l 435 349 l 0 349 l 0 1 l 583 1 l 583 579 m 435 131 l 149 131 l 149 231 l 435 231 l 435 131 z " + }, + "â": { + "ha": 742, + "x_min": 0, + "x_max": 583, + "o": "m 326 790 l 439 731 l 439 656 l 392 656 l 279 713 l 172 656 l 126 656 l 126 731 l 239 790 l 326 790 m 583 579 l 0 579 l 0 443 l 435 443 l 435 349 l 0 349 l 0 1 l 583 1 l 583 579 m 435 131 l 149 131 l 149 231 l 435 231 l 435 131 z " + }, + "ã": { + "ha": 726, + "x_min": 0, + "x_max": 583, + "o": "m 500 793 l 500 650 l 251 650 l 251 722 l 175 722 l 175 650 l 71 650 l 71 793 l 324 793 l 324 722 l 394 722 l 394 793 l 500 793 m 583 0 l 0 0 l 0 354 l 435 354 l 435 435 l 0 435 l 0 578 l 583 578 l 583 0 m 435 238 l 149 238 l 149 135 l 435 135 l 435 238 z " + }, + "": { + "ha": 0, + "x_min": 0, + "x_max": 0, + "o": "" + }, + "¬": { + "ha": 743, + "x_min": 1, + "x_max": 579, + "o": "m 579 640 l 579 278 l 436 278 l 436 497 l 1 497 l 1 640 l 579 640 z " + }, + "¹": { + "ha": 332, + "x_min": 1, + "x_max": 218, + "o": "m 218 544 l 218 472 l 1 472 l 1 544 l 75 544 l 75 761 l 1 761 l 1 836 l 147 836 l 147 544 l 218 544 z " + }, + "º": { + "ha": 433, + "x_min": 0, + "x_max": 286, + "o": "m 286 836 l 286 544 l 0 544 l 0 836 l 286 836 m 215 765 l 72 765 l 72 617 l 215 617 l 215 765 z " + }, + "Ì": { + "ha": 897, + "x_min": 0, + "x_max": 726, + "o": "m 726 583 l 726 726 l 0 726 l 0 583 l 292 583 l 292 149 l 0 149 l 0 0 l 726 0 l 726 149 l 435 149 l 435 583 l 726 583 m 424 792 l 317 792 l 185 924 l 343 924 l 424 792 z " + }, + "×": { + "ha": 692, + "x_min": 3, + "x_max": 585, + "o": "m 396 292 l 585 103 l 483 0 l 294 189 l 104 0 l 3 103 l 192 292 l 3 475 l 104 578 l 294 393 l 483 578 l 585 475 l 396 292 z " + }, + "Ø": { + "ha": 729, + "x_min": 0, + "x_max": 583, + "o": "m 583 724 l 583 3 l 0 3 l 0 724 l 583 724 m 149 146 l 353 581 l 149 581 l 149 146 m 435 581 l 231 146 l 435 146 l 435 581 z " + }, + "ø": { + "ha": 879, + "x_min": 1, + "x_max": 726, + "o": "m 726 -1 l 1 -1 l 1 725 l 726 725 l 726 -1 m 144 147 l 497 582 l 144 582 l 144 147 m 579 582 l 232 147 l 579 147 l 579 582 z " + }, + "Ž": { + "ha": 1064, + "x_min": 1, + "x_max": 726, + "o": "m 726 721 l 1 721 l 1 578 l 471 578 l 1 67 l 1 0 l 726 0 l 726 143 l 264 143 l 726 654 l 726 721 m 347 772 l 235 824 l 235 906 l 281 906 l 389 850 l 501 906 l 547 906 l 547 824 l 435 772 l 347 772 z " + }, + "š": { + "ha": 738, + "x_min": 0, + "x_max": 583, + "o": "m 240 638 l 128 690 l 128 772 l 174 772 l 281 715 l 393 772 l 439 772 l 439 690 l 328 638 l 240 638 m 149 443 l 583 443 l 583 578 l 0 578 l 0 231 l 435 231 l 435 131 l 0 131 l 0 0 l 583 0 l 583 347 l 149 347 l 149 443 z " + }, + "Ÿ": { + "ha": 571, + "x_min": 0, + "x_max": 435, + "o": "m 0 838 l 143 838 l 143 694 l 0 694 l 0 838 m 435 838 l 435 694 l 286 694 l 286 838 l 435 838 z " + }, + "í": { + "ha": 289, + "x_min": 0, + "x_max": 256, + "o": "m 0 3 l 143 3 l 143 572 l 0 572 l 0 3 m 99 790 l 256 790 l 143 669 l 15 669 l 99 790 z " + }, + "­": { + "ha": 603, + "x_min": 0, + "x_max": 472, + "o": "m 472 238 l 0 238 l 0 381 l 472 381 l 472 238 z " + }, + "D": { + "ha": 864, + "x_min": -1, + "x_max": 725, + "o": "m 725 460 l 725 261 l 439 0 l -1 0 l -1 721 l 439 721 l 725 460 m 582 358 l 346 578 l 147 578 l 147 143 l 346 143 l 582 358 z " + }, + "Í": { + "ha": 883, + "x_min": 0, + "x_max": 726, + "o": "m 726 583 l 726 726 l 0 726 l 0 583 l 292 583 l 292 149 l 0 149 l 0 0 l 726 0 l 726 149 l 435 149 l 435 583 l 726 583 m 726 583 l 726 726 l 0 726 l 0 583 l 292 583 l 292 149 l 0 149 l 0 0 l 726 0 l 726 149 l 435 149 l 435 583 l 726 583 m 343 925 l 500 925 l 368 792 l 261 792 l 343 925 z " + }, + "Î": { + "ha": 871, + "x_min": 0, + "x_max": 726, + "o": "m 726 583 l 726 726 l 0 726 l 0 583 l 292 583 l 292 149 l 0 149 l 0 0 l 726 0 l 726 149 l 435 149 l 435 583 l 726 583 m 172 913 l 329 913 l 249 793 l 142 793 l 172 913 m 576 793 l 469 793 l 389 913 l 546 913 l 576 793 z " + }, + "Ï": { + "ha": 875, + "x_min": 0, + "x_max": 726, + "o": "m 435 583 l 435 149 l 726 149 l 726 0 l 0 0 l 0 149 l 292 149 l 292 583 l 0 583 l 0 726 l 726 726 l 726 583 l 435 583 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z " + }, + "Ð": { + "ha": 738, + "x_min": -42, + "x_max": 592, + "o": "m 592 422 l 592 286 l 407 0 l 44 0 l 44 282 l -42 282 l -42 425 l 44 425 l 44 721 l 407 721 l 592 422 m 458 358 l 328 578 l 186 578 l 186 425 l 274 425 l 274 282 l 186 282 l 186 143 l 328 143 l 458 358 z " + }, + "å": { + "ha": 706, + "x_min": 0, + "x_max": 583, + "o": "m 175 642 l 175 861 l 394 861 l 394 642 l 175 642 m 247 713 l 318 713 l 318 785 l 247 785 l 247 713 m 583 1 l 0 1 l 0 349 l 435 349 l 435 443 l 0 443 l 0 579 l 583 579 l 583 1 m 435 231 l 149 231 l 149 131 l 435 131 l 435 231 z " + }, + "ä": { + "ha": 729, + "x_min": 0, + "x_max": 583, + "o": "m 583 1 l 0 1 l 0 349 l 435 349 l 435 443 l 0 443 l 0 579 l 583 579 l 583 1 m 435 231 l 149 231 l 149 131 l 435 131 l 435 231 m 110 793 l 221 793 l 221 682 l 110 682 l 110 793 m 447 793 l 447 682 l 332 682 l 332 793 l 447 793 z " + }, + "ï": { + "ha": 306, + "x_min": 0, + "x_max": 143, + "o": "m 143 767 l 143 654 l 0 654 l 0 767 l 143 767 m 0 572 l 143 572 l 143 3 l 0 3 l 0 572 z " + }, + "ì": { + "ha": 296, + "x_min": -106, + "x_max": 143, + "o": "m 135 671 l 7 671 l -106 792 l 51 792 l 135 671 m 0 3 l 143 3 l 143 572 l 0 572 l 0 3 z " + }, + "Ñ": { + "ha": 874, + "x_min": 0, + "x_max": 721, + "o": "m 721 725 l 721 -1 l 578 -1 l 143 469 l 143 -1 l 0 -1 l 0 725 l 143 725 l 578 254 l 578 725 l 721 725 m 571 914 l 571 771 l 324 771 l 324 842 l 247 842 l 247 771 l 142 771 l 142 914 l 394 914 l 394 842 l 467 842 l 467 914 l 571 914 z " + }, + "Ò": { + "ha": 874, + "x_min": 0, + "x_max": 726, + "o": "m 726 726 l 0 726 l 0 0 l 726 0 l 726 726 m 583 149 l 149 149 l 149 583 l 583 583 l 583 149 m 421 782 l 313 782 l 182 915 l 339 915 l 421 782 z " + }, + "Ó": { + "ha": 858, + "x_min": 0, + "x_max": 726, + "o": "m 726 725 l 0 725 l 0 -1 l 726 -1 l 726 725 m 583 147 l 149 147 l 149 582 l 583 582 l 583 147 m 358 908 l 508 908 l 383 775 l 276 775 l 358 908 z " + }, + "Ô": { + "ha": 871, + "x_min": 0, + "x_max": 726, + "o": "m 726 726 l 0 726 l 0 0 l 726 0 l 726 726 m 583 149 l 149 149 l 149 583 l 583 583 l 583 149 m 163 903 l 319 903 l 239 782 l 132 782 l 163 903 m 567 782 l 458 782 l 378 903 l 535 903 l 567 782 z " + }, + "Õ": { + "ha": 856, + "x_min": 0, + "x_max": 726, + "o": "m 726 0 l 0 0 l 0 726 l 726 726 l 726 0 m 583 583 l 149 583 l 149 149 l 583 149 l 583 583 m 574 921 l 574 778 l 326 778 l 326 850 l 249 850 l 249 778 l 144 778 l 144 921 l 397 921 l 397 850 l 469 850 l 469 921 l 574 921 z " + }, + "Ö": { + "ha": 868, + "x_min": 0, + "x_max": 726, + "o": "m 726 0 l 0 0 l 0 726 l 726 726 l 726 0 m 583 583 l 149 583 l 149 149 l 583 149 l 583 583 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z " + }, + "Ù": { + "ha": 879, + "x_min": 0, + "x_max": 726, + "o": "m 726 729 l 583 729 l 583 147 l 149 147 l 149 729 l 0 729 l 0 4 l 726 4 l 726 729 m 442 771 l 335 771 l 203 903 l 360 903 l 442 771 z " + }, + "Ú": { + "ha": 874, + "x_min": 0, + "x_max": 726, + "o": "m 726 729 l 583 729 l 583 147 l 149 147 l 149 729 l 0 729 l 0 4 l 726 4 l 726 729 m 368 904 l 519 904 l 393 772 l 286 772 l 368 904 z " + }, + "Û": { + "ha": 875, + "x_min": 0, + "x_max": 726, + "o": "m 726 729 l 583 729 l 583 147 l 149 147 l 149 729 l 0 729 l 0 4 l 726 4 l 726 729 m 410 925 l 522 872 l 522 790 l 475 790 l 363 847 l 256 790 l 210 790 l 210 872 l 322 925 l 410 925 z " + }, + "Ü": { + "ha": 890, + "x_min": 0, + "x_max": 726, + "o": "m 726 0 l 0 0 l 0 726 l 149 726 l 149 143 l 583 143 l 583 726 l 726 726 l 726 0 m 190 903 l 301 903 l 301 792 l 190 792 l 190 903 m 528 903 l 528 792 l 413 792 l 413 903 l 528 903 z " + }, + "Ý": { + "ha": 876, + "x_min": 0, + "x_max": 726, + "o": "m 726 725 l 578 725 l 578 361 l 149 361 l 149 725 l 0 725 l 0 218 l 506 218 l 363 96 l 363 -1 l 481 -1 l 726 218 l 726 725 m 449 774 l 342 774 l 210 906 l 367 906 l 449 774 z " + }, + "Þ": { + "ha": 707, + "x_min": 0, + "x_max": 578, + "o": "m 0 815 l 144 815 l 144 699 l 578 699 l 578 121 l 143 121 l 143 -99 l 0 -99 l 0 815 m 435 556 l 144 556 l 144 264 l 435 264 l 435 556 z " + }, + "è": { + "ha": 731, + "x_min": 0, + "x_max": 583, + "o": "m 369 656 l 263 656 l 131 789 l 288 789 l 369 656 m 0 1 l 583 1 l 583 138 l 149 138 l 149 232 l 583 232 l 583 579 l 0 579 l 0 1 m 149 450 l 435 450 l 435 350 l 149 350 l 149 450 z " + }, + "é": { + "ha": 728, + "x_min": 0, + "x_max": 583, + "o": "m 283 792 l 435 792 l 310 658 l 201 658 l 283 792 m 0 1 l 583 1 l 583 138 l 149 138 l 149 232 l 583 232 l 583 579 l 0 579 l 0 1 m 149 450 l 435 450 l 435 350 l 149 350 l 149 450 z " + }, + "ê": { + "ha": 718, + "x_min": 0, + "x_max": 583, + "o": "m 326 790 l 439 731 l 439 656 l 392 656 l 282 714 l 172 656 l 126 656 l 126 731 l 239 790 l 326 790 m 0 1 l 583 1 l 583 138 l 149 138 l 149 232 l 583 232 l 583 579 l 0 579 l 0 1 m 149 450 l 435 450 l 435 350 l 149 350 l 149 450 z " + }, + "ë": { + "ha": 721, + "x_min": 0, + "x_max": 583, + "o": "m 0 579 l 583 579 l 583 232 l 149 232 l 149 138 l 583 138 l 583 1 l 0 1 l 0 579 m 149 350 l 435 350 l 435 450 l 149 450 l 149 350 m 129 789 l 240 789 l 240 678 l 129 678 l 129 789 m 467 789 l 467 678 l 351 678 l 351 789 l 467 789 z " + }, + "î": { + "ha": 360, + "x_min": -25, + "x_max": 286, + "o": "m 64 3 l 207 3 l 207 572 l 64 572 l 64 3 m 174 790 l 286 738 l 286 656 l 240 656 l 128 713 l 21 656 l -25 656 l -25 738 l 88 790 l 174 790 z " + }, + "æ": { + "ha": 1171, + "x_min": 3, + "x_max": 1019, + "o": "m 1019 231 l 585 231 l 585 131 l 1019 131 l 1019 1 l 3 1 l 3 349 l 438 349 l 438 443 l 3 443 l 3 579 l 1019 579 l 1019 231 m 438 231 l 151 231 l 151 131 l 438 131 l 438 231 m 871 443 l 585 443 l 585 349 l 871 349 l 871 443 z " + }, + "ò": { + "ha": 733, + "x_min": 0, + "x_max": 583, + "o": "m 0 578 l 0 0 l 583 0 l 583 578 l 0 578 m 435 143 l 149 143 l 149 435 l 435 435 l 435 143 m 369 658 l 263 658 l 131 792 l 288 792 l 369 658 z " + }, + "ð": { + "ha": 721, + "x_min": 0, + "x_max": 578, + "o": "m 435 583 l 290 768 l 433 768 l 578 579 l 578 0 l 0 0 l 0 583 l 435 583 m 143 149 l 435 149 l 435 435 l 143 435 l 143 149 z " + }, + "ó": { + "ha": 738, + "x_min": 0, + "x_max": 583, + "o": "m 0 578 l 0 0 l 583 0 l 583 578 l 0 578 m 435 143 l 149 143 l 149 435 l 435 435 l 435 143 m 283 771 l 435 771 l 310 638 l 201 638 l 283 771 z " + }, + "ô": { + "ha": 733, + "x_min": 0, + "x_max": 583, + "o": "m 0 578 l 0 0 l 583 0 l 583 578 l 0 578 m 435 143 l 149 143 l 149 435 l 435 435 l 435 143 m 328 793 l 439 740 l 439 658 l 393 658 l 281 715 l 174 658 l 128 658 l 128 740 l 240 793 l 328 793 z " + }, + "õ": { + "ha": 738, + "x_min": 0, + "x_max": 583, + "o": "m 583 578 l 583 0 l 0 0 l 0 578 l 583 578 m 435 435 l 149 435 l 149 143 l 435 143 l 435 435 m 501 792 l 501 649 l 253 649 l 253 719 l 176 719 l 176 649 l 72 649 l 72 792 l 325 792 l 325 719 l 396 719 l 396 792 l 501 792 z " + }, + "ö": { + "ha": 726, + "x_min": 0, + "x_max": 583, + "o": "m 583 578 l 583 0 l 0 0 l 0 578 l 583 578 m 435 435 l 149 435 l 149 143 l 435 143 l 435 435 m 111 790 l 222 790 l 222 679 l 111 679 l 111 790 m 449 790 l 449 679 l 333 679 l 333 790 l 449 790 z " + }, + "ù": { + "ha": 726, + "x_min": 0, + "x_max": 578, + "o": "m 578 576 l 435 576 l 435 142 l 143 142 l 143 576 l 0 576 l 0 -1 l 578 -1 l 578 576 m 369 638 l 263 638 l 131 771 l 288 771 l 369 638 z " + }, + "ú": { + "ha": 718, + "x_min": 0, + "x_max": 578, + "o": "m 578 576 l 435 576 l 435 142 l 143 142 l 143 576 l 0 576 l 0 -1 l 578 -1 l 578 576 m 283 792 l 435 792 l 310 658 l 201 658 l 283 792 z " + }, + "û": { + "ha": 726, + "x_min": 0, + "x_max": 578, + "o": "m 578 576 l 435 576 l 435 142 l 143 142 l 143 576 l 0 576 l 0 -1 l 578 -1 l 578 576 m 328 792 l 439 739 l 439 657 l 393 657 l 281 714 l 174 657 l 128 657 l 128 739 l 240 792 l 328 792 z " + }, + "ü": { + "ha": 579, + "x_min": 0, + "x_max": 578, + "o": "m 578 -1 l 0 -1 l 0 576 l 143 576 l 143 142 l 435 142 l 435 576 l 578 576 l 578 -1 m 114 793 l 225 793 l 225 682 l 114 682 l 114 793 m 451 793 l 451 682 l 336 682 l 336 793 l 451 793 z " + }, + "ñ": { + "ha": 722, + "x_min": 0, + "x_max": 578, + "o": "m 578 578 l 578 0 l 435 0 l 435 435 l 143 435 l 143 0 l 0 0 l 0 578 l 578 578 m 510 792 l 510 649 l 263 649 l 263 721 l 185 721 l 185 649 l 81 649 l 81 792 l 333 792 l 333 721 l 406 721 l 406 792 l 510 792 z " + }, + "»": { + "ha": 1126, + "x_min": -1, + "x_max": 1017, + "o": "m 506 726 l 1017 511 l 1017 363 l 506 149 l 506 292 l 849 435 l 506 583 l 506 726 m -1 726 l 510 511 l 510 363 l -1 149 l -1 292 l 342 435 l -1 583 l -1 726 z " + }, + "¼": { + "ha": 711, + "x_min": 1, + "x_max": 599, + "o": "m 218 546 l 218 475 l 1 475 l 1 546 l 75 546 l 75 764 l 1 764 l 1 838 l 147 838 l 147 546 l 218 546 m 599 4 l 524 4 l 524 150 l 378 150 l 378 367 l 453 367 l 453 221 l 524 221 l 524 367 l 599 367 l 599 4 m 125 0 l 31 0 l 465 838 l 565 838 l 125 0 z " + }, + "¾": { + "ha": 683, + "x_min": 0, + "x_max": 585, + "o": "m 217 469 l 0 469 l 0 540 l 143 540 l 143 615 l 72 615 l 72 686 l 143 686 l 143 758 l 0 758 l 0 832 l 217 832 l 217 469 m 585 4 l 511 4 l 511 150 l 365 150 l 365 367 l 439 367 l 439 221 l 511 221 l 511 367 l 585 367 l 585 4 m 125 0 l 31 0 l 465 838 l 565 838 l 125 0 z " + }, + "½": { + "ha": 676, + "x_min": 1, + "x_max": 583, + "o": "m 218 546 l 218 475 l 1 475 l 1 546 l 75 546 l 75 764 l 1 764 l 1 838 l 147 838 l 147 546 l 218 546 m 583 147 l 440 147 l 440 72 l 583 72 l 583 1 l 367 1 l 367 218 l 513 218 l 513 290 l 367 290 l 367 364 l 583 364 l 583 147 m 125 0 l 31 0 l 465 838 l 565 838 l 125 0 z " + }, + "ý": { + "ha": 728, + "x_min": 0, + "x_max": 578, + "o": "m 578 578 l 435 578 l 435 143 l 143 143 l 143 578 l 0 578 l 0 0 l 363 0 l 225 -122 l 225 -215 l 338 -215 l 578 0 l 578 578 m 283 790 l 440 790 l 310 657 l 201 657 l 283 790 z " + }, + "þ": { + "ha": 735, + "x_min": -1, + "x_max": 576, + "o": "m 142 0 l 142 -185 l -1 -185 l -1 768 l 142 768 l 142 583 l 576 583 l 576 0 l 142 0 m 142 149 l 433 149 l 433 435 l 142 435 l 142 149 z " + }, + "ÿ": { + "ha": 735, + "x_min": 1, + "x_max": 579, + "o": "m 579 0 l 339 -215 l 226 -215 l 226 -122 l 364 0 l 1 0 l 1 578 l 144 578 l 144 143 l 436 143 l 436 578 l 579 578 l 579 0 m 126 790 l 238 790 l 238 679 l 126 679 l 126 790 m 464 790 l 464 679 l 349 679 l 349 790 l 464 790 z " + }, + "ı": { + "ha": 443, + "x_min": 1, + "x_max": 285, + "o": "m 285 3 l 142 3 l 142 438 l 1 438 l 1 581 l 285 581 l 285 3 z " + }, + "œ": { + "ha": 1179, + "x_min": 0, + "x_max": 1018, + "o": "m 1018 221 l 583 221 l 583 138 l 1018 138 l 1018 0 l 0 0 l 0 578 l 1018 578 l 1018 221 m 583 439 l 583 347 l 871 347 l 871 439 l 583 439 m 435 143 l 435 435 l 149 435 l 149 143 l 435 143 z " + }, + "Œ": { + "ha": 1390, + "x_min": -1, + "x_max": 1236, + "o": "m 725 583 l 725 436 l 1236 436 l 1236 293 l 725 293 l 725 150 l 1236 150 l 1236 1 l -1 1 l -1 726 l 1236 726 l 1236 583 l 725 583 m 582 144 l 582 583 l 147 583 l 147 144 l 582 144 z " + }, + "A": { + "ha": 871, + "x_min": 0, + "x_max": 726, + "o": "m 726 0 l 583 0 l 583 286 l 149 286 l 149 0 l 0 0 l 0 721 l 726 721 l 726 0 m 583 578 l 149 578 l 149 435 l 583 435 l 583 578 z " + }, + "B": { + "ha": 882, + "x_min": 0, + "x_max": 726, + "o": "m 726 0 l 0 0 l 0 726 l 726 726 l 726 0 m 583 292 l 149 292 l 149 149 l 583 149 l 583 292 m 583 583 l 149 583 l 149 435 l 583 435 l 583 583 z " + }, + "C": { + "ha": 886, + "x_min": 0, + "x_max": 726, + "o": "m 149 578 l 149 143 l 726 143 l 726 0 l 0 0 l 0 721 l 726 721 l 726 578 l 149 578 z " + }, + "Ł": { + "ha": 660, + "x_min": -4, + "x_max": 503, + "o": "m 144 772 l 288 772 l 288 481 l 431 569 l 431 499 l 288 408 l 288 156 l 503 156 l 503 8 l 144 8 l 144 319 l -4 231 l -4 301 l 144 392 l 144 772 z " + }, + "ł": { + "ha": 706, + "x_min": 1, + "x_max": 579, + "o": "m 1 622 l 1 771 l 364 771 l 364 468 l 507 557 l 507 486 l 364 396 l 364 143 l 579 143 l 579 -6 l 221 -6 l 221 307 l 72 217 l 72 289 l 221 378 l 221 622 l 1 622 z " + }, + "G": { + "ha": 874, + "x_min": 0, + "x_max": 726, + "o": "m 583 149 l 583 292 l 363 292 l 363 435 l 726 435 l 726 0 l 0 0 l 0 726 l 726 726 l 726 583 l 149 583 l 149 149 l 583 149 z " + }, + "E": { + "ha": 886, + "x_min": 0, + "x_max": 726, + "o": "m 149 583 l 149 435 l 726 435 l 726 292 l 149 292 l 149 149 l 726 149 l 726 0 l 0 0 l 0 726 l 726 726 l 726 583 l 149 583 z " + }, + "F": { + "ha": 881, + "x_min": 0, + "x_max": 721, + "o": "m 143 583 l 143 435 l 721 435 l 721 292 l 143 292 l 143 0 l 0 0 l 0 726 l 721 726 l 721 583 l 143 583 z " + } + }, + "familyName": "FORCED SQUARE", + "ascender": 838, + "descender": -239, + "underlinePosition": -104, + "underlineThickness": 69, + "boundingBox": { + "yMin": -239, + "xMin": -164, + "yMax": 1006, + "xMax": 1236 + }, + "resolution": 1000, + "original_font_information": { + "format": 0, + "copyright": "Copyright (c) 2014 by Paul IJsendoorn - Drawperfect. All rights reserved. http://www.drawperfect.com", + "fontFamily": "FORCED SQUARE", + "fontSubfamily": "Medium", + "uniqueID": "pyrs: FORCED SQUARE: ", + "fullName": "FORCED SQUARE", + "version": "Version 1.000", + "postScriptName": "FORCED SQUARE", + "trademark": "Hiptobe is a trademark of Paul IJsendoorn.", + "manufacturer": "Paul IJsendoorn - Drawperfect", + "designer": "Paul IJsendoorn", + "description": "Copyright (c) 2014 by Paul IJsendoorn - Drawperfect. All rights reserved. http://www.drawperfect.com", + "manufacturerURL": "http://www.drawperfect.com/", + "designerURL": "http://www.drawperfect.com/", + "licence": "http://www.drawperfect.com/", + "licenceURL": "http://www.drawperfect.com/" + }, + "cssFontWeight": "normal", + "cssFontStyle": "normal" +} \ No newline at end of file diff --git a/public/assets/g/polytrack/images/car_thumbnail_placeholder.png b/public/assets/g/polytrack/images/car_thumbnail_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..637c393d45ff0e0bc7554023d11141c07ff5340a GIT binary patch literal 2756 zcmbVOi&xUw7FI4OLgf>zF)J;!A+*$y9#)1*RtyG)@+)81!%+yed}cl_s8i}><+IUp z#3Th2$s`p`5i=XB(M)s%%|^3_Z!6Q(WPZ(E>;3_A&N^$a^R4xLd!M!UUi+j`Jlt0! zzC&nfX{|nd$jwtrOB?s?z;!_6LPBN~Xmn1J+}*S^-*)kXvTP913qN!`LQBhb^S7fN z%Xf|jLEXs1WTNgn#2P~#hhW9AZ<6aGi9n=l7@K`2G*Zj;{F%VWGp9GjghU2!az9L_ z&^c>NwX_hp!)^pxtZH(Q${IOns`Dz_>aoF$dp;Dgq)Afy=RncRgm8IR#vwmC%es2s z=4ZbY>AJ){-|~lB-2Bav>n7TupMSaJKTg?bZ;?(qZ^Wg_x!tWyGsCNf&*ylUIwRRV z=(Qgz9(^{vn{hdYRI1=+wPG!Yc~x~T!Fo7A^@6%7A?P-_$4Jo~D6JnJuStU-gI*9H zMsTO^UA;_yBEY0{w_=A+H90`iq)avyAavrJ3}GHZ$JU4*Kl;jctESw$h3e=3$&<6 zjCdygns?90(;cyzIg&Ugd@bH9BgGWo$wPC0UxCJ2T3FbRkj-+;?KGfW@GO8 z)}J2n(S}2O|7NX!t+4);5fBXPGxQ}7JbKi1E6b-PEYBh>DD>23$yViW*TbCTC%lph zgE&NiQmMhY-e-zbYy${Vsgxy)gm@~0C+oKIb{H}O%EfEBqJ@8ulLJ<0GhaxCCwJ_w zhT@lN?AsO0Qf{$KV@Q|sho~kb#9j3gvfJtK57<+TmS)v^D3a=rqw$Ul`4>Q`-huJ^)$kOa z)aL-@N|c=@I(5CREUXdK=|RydQ+tW6v7lD@0yK0>jTQZP5D>DD`0(}_#vMue!VT?7 zvt3hG4<$#JFnj+sr!1x`r_pD-lK_MA;_`bj>bsOT#Tf6D!VZ^ zAt5_ap92$$m~dQhBi0Z&pf~wy436tslgH?G;zN*>K<(p|AH*9$;)~&BW;cH~1WBWl z3L9SpFtks&93bs_{uJrdOELD#TC&U*1MM~N z46vDyI7HJQv+$?OUQ4h%@{dinG05$&bBgz%d`aHEiuCWe%=fQ4s_~>}lKY0UlO1gr z-z|LQXV9h7mT0olm;t~P^9s9KUB6jsu!Oc0;HQ0-zPu0<_A=c{(;CZ z65XqM<`;;hs9LNlph{Jw``f8EKiWzD{9MxTv^n;B>m_MEY;AQ_XSX`&$ZE;fK=OH= z-uVuFw?MwIWJf(j^g27?Ncg&HBo>i#Y9#o*DOBI==={037Xpcqcf}ToY~jxq|KxV# zgbU=V-_*%tj!%WctVO|Ysh5?S3S4lfcoF}aq;_OCKeCv^k2UVZbD2?|YX+NrJW^1O zG(cz!MfLLw0`+hyC@&hIKoE$Is64p~KqaOskGnuoQfS^-I=>z`&LF=TX3)H7hJcCy z8sq;Nr4hHdWI_Jj2JVrs7CYis#(L`%2oyR4CJzsrYMB|Ta@TCNG56=DYwA7^|FpB- zhwh^^|N20b*s~jpQ>_+`jE&cQ=;+^rz-G~b4P6xXLv5?9lRCyo0N8-!GmhdW{JAfM z_FM$maY6GNnuj)PM7>nt`UA`lkpXmd{_Q9eTDipAgf_y~9mDUhJ_dQ55*Ib7Mt= zj4V4mHY z4z%qt`^)a6SYBw4Kl@;1-@v?sv(lI@J|Qq1pUTalXyjeKHiw8>HDCzPT9*-=)Mx`JT19}OMSGu1li@fv z&5p$hlFTiKE4yCBy${$3$EB|k`)T41FlNt$6LC9-RH^&u zaGb5AC!Pd6PjMniZrJWGs>^N|Hu8q!vUK|HNgy1rY \ No newline at end of file diff --git a/public/assets/g/polytrack/images/community_tracks.jpg b/public/assets/g/polytrack/images/community_tracks.jpg new file mode 100644 index 0000000000000000000000000000000000000000..869182a5572e093dfd49faf1707679fe2f45c2d7 GIT binary patch literal 65520 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
pd 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 literal 0 HcmV?d00001 diff --git a/public/assets/g/polytrack/images/custom_tracks.jpg b/public/assets/g/polytrack/images/custom_tracks.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18bdfa383629e1550b41a9c1ebdb9b45857a020e GIT binary patch literal 32017 zcmc$_Wn5g(vM4$bAb4z$9=23+AZ4|`%K$0B3q-`{1P3H|LPkYKMnXbHfB6yx6%!p369XLs0}C4u2MZe) z8v_G}2nQFRfRK<7^A+)HB7)a=1cU_7jUc>$;~*iUAtR#^U}0bp{9nW09sn*XUP$77vXOofDC{DKzxCK0Qe6eAi{Y>c?qv1eeT;c{Ljk2O90Fla73IJH~;{` z?O#CKgNQy-kQq~f9=#z^(iA7NZ3CvC#)!W1K1HmI0ehz2aC$rs`W(eRMM515I$|kO zQj!%^>2CJ5cZQcvzmiTlc+`4bC|09CiuG;e=Zs@E&)R6q@myxDy0_ZQlAvTZ$KB7B zW^1nJoNjb#`r$nX``3IIUEW#){Esrh}z&Rfkt*hM@Qi^j>D zTiG3SjNJZMd-{}}yz(f{VA=(Mf&&LWyAN_GXZ`8M-07MYMea^ED-#tz8Y6d+ zAvHoKS;iSx+dlXEr+mUT;zs+YnKAVi6%+IPhWI$o5}oT=qO*MMbL?CY)X3@UX1&`# zoK8GEjq!H=F`0&?9?N zL4VifnaLoad?Ul<1w$ZxlZr;=307YdcOFC`0jmb@0Mdn@^d$j^2*x$WI(0=_DF77} zaKPaFxwbNvGrlAU4KDY34G?2v>rtnOf9rNvuTybya`uJirEw?IzVSvA2$;@dP?f}D z9p5?e)jpXVYG)r1eN$(YqDHJ@eecq|%w$lZ&xh{@#+X|-x))caP)+nPI2}9wR{Rt- zcp%zQt`U-=B@I=|W5OZU9reu?Hk!z;6w@J6$D;v3e*z17QC`rrPKB;nH&a0s@vX|i zHj|gztNVk%ps4T1OHtrUCQwA(Ug3Q5@j<60^v3c>`V3dFlTB@JqKer4CI8%?tmC7L zbMO7&V5uY zZ_VuqVMI}qQ9;L;Fr?1$fWW!;-mZ⪙E)n;GPINg3$j*@~hMNNWRW4tm`fR9GpJ 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 literal 0 HcmV?d00001 diff --git a/public/assets/g/polytrack/images/desert.svg b/public/assets/g/polytrack/images/desert.svg new file mode 100644 index 00000000..96f8f0ba --- /dev/null +++ b/public/assets/g/polytrack/images/desert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/desert_colored.svg b/public/assets/g/polytrack/images/desert_colored.svg new file mode 100644 index 00000000..a1ff85ce --- /dev/null +++ b/public/assets/g/polytrack/images/desert_colored.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/empty.svg b/public/assets/g/polytrack/images/empty.svg new file mode 100644 index 00000000..998b119f --- /dev/null +++ b/public/assets/g/polytrack/images/empty.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/g/polytrack/images/fullscreen.svg b/public/assets/g/polytrack/images/fullscreen.svg new file mode 100644 index 00000000..f631267e --- /dev/null +++ b/public/assets/g/polytrack/images/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/grid_large.svg b/public/assets/g/polytrack/images/grid_large.svg new file mode 100644 index 00000000..7ab8cab3 --- /dev/null +++ b/public/assets/g/polytrack/images/grid_large.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/g/polytrack/images/grid_small.svg b/public/assets/g/polytrack/images/grid_small.svg new file mode 100644 index 00000000..04319661 --- /dev/null +++ b/public/assets/g/polytrack/images/grid_small.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/g/polytrack/images/icon.svg b/public/assets/g/polytrack/images/icon.svg index 87214321..5505a7e3 100644 --- a/public/assets/g/polytrack/images/icon.svg +++ b/public/assets/g/polytrack/images/icon.svg @@ -1,53 +1,3 @@ - + - - + diff --git a/public/assets/g/polytrack/images/official_tracks.jpg b/public/assets/g/polytrack/images/official_tracks.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dced089f55c5b62a668b2d4cb966bf271232a1b GIT binary patch literal 38124 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ℜ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 F|JlyXSiS%N literal 0 HcmV?d00001 diff --git a/public/assets/g/polytrack/images/overlapping_disabled.svg b/public/assets/g/polytrack/images/overlapping_disabled.svg new file mode 100644 index 00000000..7728d71b --- /dev/null +++ b/public/assets/g/polytrack/images/overlapping_disabled.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/assets/g/polytrack/images/overlapping_enabled.svg b/public/assets/g/polytrack/images/overlapping_enabled.svg new file mode 100644 index 00000000..18933909 --- /dev/null +++ b/public/assets/g/polytrack/images/overlapping_enabled.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/g/polytrack/images/pending.svg b/public/assets/g/polytrack/images/pending.svg new file mode 100644 index 00000000..1ea1275a --- /dev/null +++ b/public/assets/g/polytrack/images/pending.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/rotate.svg b/public/assets/g/polytrack/images/rotate.svg index e989e8e5..8845aea3 100644 --- a/public/assets/g/polytrack/images/rotate.svg +++ b/public/assets/g/polytrack/images/rotate.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + + + diff --git a/public/assets/g/polytrack/images/rotation_axis_x_negative.svg b/public/assets/g/polytrack/images/rotation_axis_x_negative.svg new file mode 100644 index 00000000..7765fa46 --- /dev/null +++ b/public/assets/g/polytrack/images/rotation_axis_x_negative.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/g/polytrack/images/rotation_axis_x_positive.svg b/public/assets/g/polytrack/images/rotation_axis_x_positive.svg new file mode 100644 index 00000000..5b0a8714 --- /dev/null +++ b/public/assets/g/polytrack/images/rotation_axis_x_positive.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/g/polytrack/images/rotation_axis_y_negative.svg b/public/assets/g/polytrack/images/rotation_axis_y_negative.svg new file mode 100644 index 00000000..9d884df7 --- /dev/null +++ b/public/assets/g/polytrack/images/rotation_axis_y_negative.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/g/polytrack/images/rotation_axis_y_positive.svg b/public/assets/g/polytrack/images/rotation_axis_y_positive.svg new file mode 100644 index 00000000..336d022d --- /dev/null +++ b/public/assets/g/polytrack/images/rotation_axis_y_positive.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/g/polytrack/images/rotation_axis_z_negative.svg b/public/assets/g/polytrack/images/rotation_axis_z_negative.svg new file mode 100644 index 00000000..90d0d4d8 --- /dev/null +++ b/public/assets/g/polytrack/images/rotation_axis_z_negative.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/g/polytrack/images/rotation_axis_z_positive.svg b/public/assets/g/polytrack/images/rotation_axis_z_positive.svg new file mode 100644 index 00000000..fda0864c --- /dev/null +++ b/public/assets/g/polytrack/images/rotation_axis_z_positive.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/g/polytrack/images/search.svg b/public/assets/g/polytrack/images/search.svg new file mode 100644 index 00000000..df92a0c5 --- /dev/null +++ b/public/assets/g/polytrack/images/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/share.svg b/public/assets/g/polytrack/images/share.svg new file mode 100644 index 00000000..2bc89d1f --- /dev/null +++ b/public/assets/g/polytrack/images/share.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/summer.svg b/public/assets/g/polytrack/images/summer.svg new file mode 100644 index 00000000..a2db9f6e --- /dev/null +++ b/public/assets/g/polytrack/images/summer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/test.svg b/public/assets/g/polytrack/images/test.svg index 5492de06..84b1ad20 100644 --- a/public/assets/g/polytrack/images/test.svg +++ b/public/assets/g/polytrack/images/test.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/public/assets/g/polytrack/images/windowed.svg b/public/assets/g/polytrack/images/windowed.svg new file mode 100644 index 00000000..106f32a7 --- /dev/null +++ b/public/assets/g/polytrack/images/windowed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/winter.svg b/public/assets/g/polytrack/images/winter.svg new file mode 100644 index 00000000..e1405551 --- /dev/null +++ b/public/assets/g/polytrack/images/winter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/images/winter_colored.svg b/public/assets/g/polytrack/images/winter_colored.svg new file mode 100644 index 00000000..4b002252 --- /dev/null +++ b/public/assets/g/polytrack/images/winter_colored.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/g/polytrack/index.html b/public/assets/g/polytrack/index.html index c1914972..8b223c28 100644 --- a/public/assets/g/polytrack/index.html +++ b/public/assets/g/polytrack/index.html @@ -1,17 +1,18 @@ - - Polytrack - - - - - - -
-
- - - + + + + + + + +
+
+ + + + + \ No newline at end of file diff --git a/public/assets/g/polytrack/lib/ammo.wasm.js b/public/assets/g/polytrack/lib/ammo.wasm.js index 16fad58e..e3cbe65b 100644 --- a/public/assets/g/polytrack/lib/ammo.wasm.js +++ b/public/assets/g/polytrack/lib/ammo.wasm.js @@ -1 +1,9527 @@ -var Ammo=(()=>{var t="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0;return"undefined"!=typeof __filename&&(t=t||__filename),function(e={}){var n,o,_;n||(n=void 0!==e?e:{}),n.ready=new Promise((function(t,e){o=t,_=e}));var i,r,p,s=Object.assign({},n),c="object"==typeof window,a="function"==typeof importScripts,l="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,u="";if(l){var b=require("fs"),m=require("path");u=a?m.dirname(u)+"/":__dirname+"/",i=(t,e)=>(t=t.startsWith("file://")?new URL(t):m.normalize(t),b.readFileSync(t,e?void 0:"utf8")),p=t=>((t=i(t,!0)).buffer||(t=new Uint8Array(t)),t),r=(t,e,n)=>{t=t.startsWith("file://")?new URL(t):m.normalize(t),b.readFile(t,(function(t,o){t?n(t):e(o.buffer)}))},1{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.send(null),e.responseText},a&&(p=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),r=(t,e,n)=>{var o=new XMLHttpRequest;o.open("GET",t,!0),o.responseType="arraybuffer",o.onload=()=>{200==o.status||0==o.status&&o.response?e(o.response):n()},o.onerror=n,o.send(null)});n.print||console.log.bind(console);var y,d=n.printErr||console.warn.bind(console);Object.assign(n,s),s=null,n.wasmBinary&&(y=n.wasmBinary);n.noExitRuntime;"object"!=typeof WebAssembly&&x("no native wasm support detected");var f=!1,h="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function B(t,e){if(t){var n=k,o=t+e;for(e=t;n[e]&&!(e>=o);)++e;if(16(_=224==(240&_)?(15&_)<<12|i<<6|r:(7&_)<<18|i<<12|r<<6|63&n[t++])?o+=String.fromCharCode(_):(_-=65536,o+=String.fromCharCode(55296|_>>10,56320|1023&_))}}else o+=String.fromCharCode(_)}t=o}}else t="";return t}var g,k,C,S,j,v,I=[],R=[],D=[],P=!1;function T(){var t=n.preRun.shift();I.unshift(t)}var O,W=0,A=null,M=null;function x(t){throw n.onAbort&&n.onAbort(t),d(t="Aborted("+t+")"),f=!0,t=new WebAssembly.RuntimeError(t+". Build with -sASSERTIONS for more info."),_(t),t}function F(t){return t.startsWith("data:application/octet-stream;base64,")}if(!F(O="lib/ammo.wasm.wasm")){var L=O;O=n.locateFile?n.locateFile(L,u):u+L}function G(t){try{if(t==O&&y)return new Uint8Array(y);if(p)return p(t);throw"both async and sync fetching of the wasm failed"}catch(t){x(t)}}function w(t,e,n){return function(t){if(!y&&(c||a)){if("function"==typeof fetch&&!t.startsWith("file://"))return fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return G(t)}));if(r)return new Promise((function(e,n){r(t,(function(t){e(new Uint8Array(t))}),n)}))}return Promise.resolve().then((function(){return G(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(n,(function(t){d("failed to asynchronously prepare wasm: "+t),x(t)}))}var H={27338:(t,e,o,_)=>{if(!(t=n.getCache(n.DebugDrawer)[t]).hasOwnProperty("drawLine"))throw"a JSImplementation must implement all functions, you forgot DebugDrawer::drawLine.";t.drawLine(e,o,_)},27558:(t,e,o,_,i,r)=>{if(!(t=n.getCache(n.DebugDrawer)[t]).hasOwnProperty("drawContactPoint"))throw"a JSImplementation must implement all functions, you forgot DebugDrawer::drawContactPoint.";t.drawContactPoint(e,o,_,i,r)},27808:(t,e)=>{if(!(t=n.getCache(n.DebugDrawer)[t]).hasOwnProperty("reportErrorWarning"))throw"a JSImplementation must implement all functions, you forgot DebugDrawer::reportErrorWarning.";t.reportErrorWarning(e)},28052:(t,e,o)=>{if(!(t=n.getCache(n.DebugDrawer)[t]).hasOwnProperty("draw3dText"))throw"a JSImplementation must implement all functions, you forgot DebugDrawer::draw3dText.";t.draw3dText(e,o)},28275:(t,e)=>{if(!(t=n.getCache(n.DebugDrawer)[t]).hasOwnProperty("setDebugMode"))throw"a JSImplementation must implement all functions, you forgot DebugDrawer::setDebugMode.";t.setDebugMode(e)},28501:t=>{if(!(t=n.getCache(n.DebugDrawer)[t]).hasOwnProperty("getDebugMode"))throw"a JSImplementation must implement all functions, you forgot DebugDrawer::getDebugMode.";return t.getDebugMode()},28732:(t,e)=>{if(!(t=n.getCache(n.MotionState)[t]).hasOwnProperty("getWorldTransform"))throw"a JSImplementation must implement all functions, you forgot MotionState::getWorldTransform.";t.getWorldTransform(e)},28973:(t,e)=>{if(!(t=n.getCache(n.MotionState)[t]).hasOwnProperty("setWorldTransform"))throw"a JSImplementation must implement all functions, you forgot MotionState::setWorldTransform.";t.setWorldTransform(e)},29214:(t,e,o,_,i,r,p,s)=>{if(!(t=n.getCache(n.ConcreteContactResultCallback)[t]).hasOwnProperty("addSingleResult"))throw"a JSImplementation must implement all functions, you forgot ConcreteContactResultCallback::addSingleResult.";return t.addSingleResult(e,o,_,i,r,p,s)}};function V(t){for(;0>=2;o=k[e++];)n+=105!=o&n,E.push(105==o?C[n]:j[n++>>1]),++n;return H[t].apply(null,E)}var U=[],z=void 0,q=[],K={b:function(){x("")},f:function(t,e,n){return N(t,e,n)},a:function(t,e,n){return N(t,e,n)},d:function(){return Date.now()},e:function(t,e,n){k.copyWithin(t,e,e+n)},c:function(){x("OOM")}};!function(){function t(t){t=t.exports,n.asm=t;var e=n.asm.g.buffer;return n.HEAP8=g=new Int8Array(e),n.HEAP16=new Int16Array(e),n.HEAP32=C=new Int32Array(e),n.HEAPU8=k=new Uint8Array(e),n.HEAPU16=new Uint16Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=S=new Float32Array(e),n.HEAPF64=j=new Float64Array(e),v=n.asm.iB,R.unshift(n.asm.h),W--,n.monitorRunDependencies&&n.monitorRunDependencies(W),0==W&&(null!==A&&(clearInterval(A),A=null),M&&(e=M,M=null,e())),t}var e={a:K};if(W++,n.monitorRunDependencies&&n.monitorRunDependencies(W),n.instantiateWasm)try{return n.instantiateWasm(e,t)}catch(t){d("Module.instantiateWasm callback failed with error: "+t),_(t)}(function(t,e){var n=O;return y||"function"!=typeof WebAssembly.instantiateStreaming||F(n)||n.startsWith("file://")||l||"function"!=typeof fetch?w(n,t,e):fetch(n,{credentials:"same-origin"}).then((function(o){return WebAssembly.instantiateStreaming(o,t).then(e,(function(o){return d("wasm streaming compile failed: "+o),d("falling back to ArrayBuffer instantiation"),w(n,t,e)}))}))})(e,(function(e){t(e.instance)})).catch(_)}();var Q,X=n._emscripten_bind_btCollisionShape_setLocalScaling_1=function(){return(X=n._emscripten_bind_btCollisionShape_setLocalScaling_1=n.asm.i).apply(null,arguments)},Z=n._emscripten_bind_btCollisionShape_getLocalScaling_0=function(){return(Z=n._emscripten_bind_btCollisionShape_getLocalScaling_0=n.asm.j).apply(null,arguments)},Y=n._emscripten_bind_btCollisionShape_calculateLocalInertia_2=function(){return(Y=n._emscripten_bind_btCollisionShape_calculateLocalInertia_2=n.asm.k).apply(null,arguments)},J=n._emscripten_bind_btCollisionShape_setMargin_1=function(){return(J=n._emscripten_bind_btCollisionShape_setMargin_1=n.asm.l).apply(null,arguments)},$=n._emscripten_bind_btCollisionShape_getMargin_0=function(){return($=n._emscripten_bind_btCollisionShape_getMargin_0=n.asm.m).apply(null,arguments)},tt=n._emscripten_bind_btCollisionShape___destroy___0=function(){return(tt=n._emscripten_bind_btCollisionShape___destroy___0=n.asm.n).apply(null,arguments)},et=n._emscripten_bind_btCollisionWorld_getDispatcher_0=function(){return(et=n._emscripten_bind_btCollisionWorld_getDispatcher_0=n.asm.o).apply(null,arguments)},nt=n._emscripten_bind_btCollisionWorld_rayTest_3=function(){return(nt=n._emscripten_bind_btCollisionWorld_rayTest_3=n.asm.p).apply(null,arguments)},ot=n._emscripten_bind_btCollisionWorld_getPairCache_0=function(){return(ot=n._emscripten_bind_btCollisionWorld_getPairCache_0=n.asm.q).apply(null,arguments)},_t=n._emscripten_bind_btCollisionWorld_getDispatchInfo_0=function(){return(_t=n._emscripten_bind_btCollisionWorld_getDispatchInfo_0=n.asm.r).apply(null,arguments)},it=n._emscripten_bind_btCollisionWorld_addCollisionObject_1=function(){return(it=n._emscripten_bind_btCollisionWorld_addCollisionObject_1=n.asm.s).apply(null,arguments)},rt=n._emscripten_bind_btCollisionWorld_addCollisionObject_2=function(){return(rt=n._emscripten_bind_btCollisionWorld_addCollisionObject_2=n.asm.t).apply(null,arguments)},pt=n._emscripten_bind_btCollisionWorld_addCollisionObject_3=function(){return(pt=n._emscripten_bind_btCollisionWorld_addCollisionObject_3=n.asm.u).apply(null,arguments)},st=n._emscripten_bind_btCollisionWorld_removeCollisionObject_1=function(){return(st=n._emscripten_bind_btCollisionWorld_removeCollisionObject_1=n.asm.v).apply(null,arguments)},ct=n._emscripten_bind_btCollisionWorld_getBroadphase_0=function(){return(ct=n._emscripten_bind_btCollisionWorld_getBroadphase_0=n.asm.w).apply(null,arguments)},at=n._emscripten_bind_btCollisionWorld_convexSweepTest_5=function(){return(at=n._emscripten_bind_btCollisionWorld_convexSweepTest_5=n.asm.x).apply(null,arguments)},lt=n._emscripten_bind_btCollisionWorld_contactPairTest_3=function(){return(lt=n._emscripten_bind_btCollisionWorld_contactPairTest_3=n.asm.y).apply(null,arguments)},ut=n._emscripten_bind_btCollisionWorld_contactTest_2=function(){return(ut=n._emscripten_bind_btCollisionWorld_contactTest_2=n.asm.z).apply(null,arguments)},bt=n._emscripten_bind_btCollisionWorld_updateSingleAabb_1=function(){return(bt=n._emscripten_bind_btCollisionWorld_updateSingleAabb_1=n.asm.A).apply(null,arguments)},mt=n._emscripten_bind_btCollisionWorld_setDebugDrawer_1=function(){return(mt=n._emscripten_bind_btCollisionWorld_setDebugDrawer_1=n.asm.B).apply(null,arguments)},yt=n._emscripten_bind_btCollisionWorld_getDebugDrawer_0=function(){return(yt=n._emscripten_bind_btCollisionWorld_getDebugDrawer_0=n.asm.C).apply(null,arguments)},dt=n._emscripten_bind_btCollisionWorld_debugDrawWorld_0=function(){return(dt=n._emscripten_bind_btCollisionWorld_debugDrawWorld_0=n.asm.D).apply(null,arguments)},ft=n._emscripten_bind_btCollisionWorld_debugDrawObject_3=function(){return(ft=n._emscripten_bind_btCollisionWorld_debugDrawObject_3=n.asm.E).apply(null,arguments)},ht=n._emscripten_bind_btCollisionWorld___destroy___0=function(){return(ht=n._emscripten_bind_btCollisionWorld___destroy___0=n.asm.F).apply(null,arguments)},Bt=n._emscripten_bind_btCollisionObject_setAnisotropicFriction_2=function(){return(Bt=n._emscripten_bind_btCollisionObject_setAnisotropicFriction_2=n.asm.G).apply(null,arguments)},gt=n._emscripten_bind_btCollisionObject_getCollisionShape_0=function(){return(gt=n._emscripten_bind_btCollisionObject_getCollisionShape_0=n.asm.H).apply(null,arguments)},kt=n._emscripten_bind_btCollisionObject_setContactProcessingThreshold_1=function(){return(kt=n._emscripten_bind_btCollisionObject_setContactProcessingThreshold_1=n.asm.I).apply(null,arguments)},Ct=n._emscripten_bind_btCollisionObject_setActivationState_1=function(){return(Ct=n._emscripten_bind_btCollisionObject_setActivationState_1=n.asm.J).apply(null,arguments)},St=n._emscripten_bind_btCollisionObject_forceActivationState_1=function(){return(St=n._emscripten_bind_btCollisionObject_forceActivationState_1=n.asm.K).apply(null,arguments)},jt=n._emscripten_bind_btCollisionObject_activate_0=function(){return(jt=n._emscripten_bind_btCollisionObject_activate_0=n.asm.L).apply(null,arguments)},vt=n._emscripten_bind_btCollisionObject_activate_1=function(){return(vt=n._emscripten_bind_btCollisionObject_activate_1=n.asm.M).apply(null,arguments)},It=n._emscripten_bind_btCollisionObject_isActive_0=function(){return(It=n._emscripten_bind_btCollisionObject_isActive_0=n.asm.N).apply(null,arguments)},Rt=n._emscripten_bind_btCollisionObject_isKinematicObject_0=function(){return(Rt=n._emscripten_bind_btCollisionObject_isKinematicObject_0=n.asm.O).apply(null,arguments)},Dt=n._emscripten_bind_btCollisionObject_isStaticObject_0=function(){return(Dt=n._emscripten_bind_btCollisionObject_isStaticObject_0=n.asm.P).apply(null,arguments)},Pt=n._emscripten_bind_btCollisionObject_isStaticOrKinematicObject_0=function(){return(Pt=n._emscripten_bind_btCollisionObject_isStaticOrKinematicObject_0=n.asm.Q).apply(null,arguments)},Tt=n._emscripten_bind_btCollisionObject_getRestitution_0=function(){return(Tt=n._emscripten_bind_btCollisionObject_getRestitution_0=n.asm.R).apply(null,arguments)},Ot=n._emscripten_bind_btCollisionObject_getFriction_0=function(){return(Ot=n._emscripten_bind_btCollisionObject_getFriction_0=n.asm.S).apply(null,arguments)},Wt=n._emscripten_bind_btCollisionObject_getRollingFriction_0=function(){return(Wt=n._emscripten_bind_btCollisionObject_getRollingFriction_0=n.asm.T).apply(null,arguments)},At=n._emscripten_bind_btCollisionObject_setRestitution_1=function(){return(At=n._emscripten_bind_btCollisionObject_setRestitution_1=n.asm.U).apply(null,arguments)},Mt=n._emscripten_bind_btCollisionObject_setFriction_1=function(){return(Mt=n._emscripten_bind_btCollisionObject_setFriction_1=n.asm.V).apply(null,arguments)},xt=n._emscripten_bind_btCollisionObject_setRollingFriction_1=function(){return(xt=n._emscripten_bind_btCollisionObject_setRollingFriction_1=n.asm.W).apply(null,arguments)},Ft=n._emscripten_bind_btCollisionObject_getWorldTransform_0=function(){return(Ft=n._emscripten_bind_btCollisionObject_getWorldTransform_0=n.asm.X).apply(null,arguments)},Lt=n._emscripten_bind_btCollisionObject_getCollisionFlags_0=function(){return(Lt=n._emscripten_bind_btCollisionObject_getCollisionFlags_0=n.asm.Y).apply(null,arguments)},Gt=n._emscripten_bind_btCollisionObject_setCollisionFlags_1=function(){return(Gt=n._emscripten_bind_btCollisionObject_setCollisionFlags_1=n.asm.Z).apply(null,arguments)},wt=n._emscripten_bind_btCollisionObject_setWorldTransform_1=function(){return(wt=n._emscripten_bind_btCollisionObject_setWorldTransform_1=n.asm._).apply(null,arguments)},Ht=n._emscripten_bind_btCollisionObject_setCollisionShape_1=function(){return(Ht=n._emscripten_bind_btCollisionObject_setCollisionShape_1=n.asm.$).apply(null,arguments)},Vt=n._emscripten_bind_btCollisionObject_setCcdMotionThreshold_1=function(){return(Vt=n._emscripten_bind_btCollisionObject_setCcdMotionThreshold_1=n.asm.aa).apply(null,arguments)},Et=n._emscripten_bind_btCollisionObject_setCcdSweptSphereRadius_1=function(){return(Et=n._emscripten_bind_btCollisionObject_setCcdSweptSphereRadius_1=n.asm.ba).apply(null,arguments)},Nt=n._emscripten_bind_btCollisionObject_getUserIndex_0=function(){return(Nt=n._emscripten_bind_btCollisionObject_getUserIndex_0=n.asm.ca).apply(null,arguments)},Ut=n._emscripten_bind_btCollisionObject_setUserIndex_1=function(){return(Ut=n._emscripten_bind_btCollisionObject_setUserIndex_1=n.asm.da).apply(null,arguments)},zt=n._emscripten_bind_btCollisionObject_getUserPointer_0=function(){return(zt=n._emscripten_bind_btCollisionObject_getUserPointer_0=n.asm.ea).apply(null,arguments)},qt=n._emscripten_bind_btCollisionObject_setUserPointer_1=function(){return(qt=n._emscripten_bind_btCollisionObject_setUserPointer_1=n.asm.fa).apply(null,arguments)},Kt=n._emscripten_bind_btCollisionObject_getBroadphaseHandle_0=function(){return(Kt=n._emscripten_bind_btCollisionObject_getBroadphaseHandle_0=n.asm.ga).apply(null,arguments)},Qt=n._emscripten_bind_btCollisionObject___destroy___0=function(){return(Qt=n._emscripten_bind_btCollisionObject___destroy___0=n.asm.ha).apply(null,arguments)},Xt=n._emscripten_bind_btConcaveShape_setLocalScaling_1=function(){return(Xt=n._emscripten_bind_btConcaveShape_setLocalScaling_1=n.asm.ia).apply(null,arguments)},Zt=n._emscripten_bind_btConcaveShape_getLocalScaling_0=function(){return(Zt=n._emscripten_bind_btConcaveShape_getLocalScaling_0=n.asm.ja).apply(null,arguments)},Yt=n._emscripten_bind_btConcaveShape_calculateLocalInertia_2=function(){return(Yt=n._emscripten_bind_btConcaveShape_calculateLocalInertia_2=n.asm.ka).apply(null,arguments)},Jt=n._emscripten_bind_btConcaveShape___destroy___0=function(){return(Jt=n._emscripten_bind_btConcaveShape___destroy___0=n.asm.la).apply(null,arguments)},$t=n._emscripten_bind_btCollisionAlgorithm___destroy___0=function(){return($t=n._emscripten_bind_btCollisionAlgorithm___destroy___0=n.asm.ma).apply(null,arguments)},te=n._emscripten_bind_btTypedConstraint_enableFeedback_1=function(){return(te=n._emscripten_bind_btTypedConstraint_enableFeedback_1=n.asm.na).apply(null,arguments)},ee=n._emscripten_bind_btTypedConstraint_getBreakingImpulseThreshold_0=function(){return(ee=n._emscripten_bind_btTypedConstraint_getBreakingImpulseThreshold_0=n.asm.oa).apply(null,arguments)},ne=n._emscripten_bind_btTypedConstraint_setBreakingImpulseThreshold_1=function(){return(ne=n._emscripten_bind_btTypedConstraint_setBreakingImpulseThreshold_1=n.asm.pa).apply(null,arguments)},oe=n._emscripten_bind_btTypedConstraint_getParam_2=function(){return(oe=n._emscripten_bind_btTypedConstraint_getParam_2=n.asm.qa).apply(null,arguments)},_e=n._emscripten_bind_btTypedConstraint_setParam_3=function(){return(_e=n._emscripten_bind_btTypedConstraint_setParam_3=n.asm.ra).apply(null,arguments)},ie=n._emscripten_bind_btTypedConstraint___destroy___0=function(){return(ie=n._emscripten_bind_btTypedConstraint___destroy___0=n.asm.sa).apply(null,arguments)},re=n._emscripten_bind_btDynamicsWorld_addAction_1=function(){return(re=n._emscripten_bind_btDynamicsWorld_addAction_1=n.asm.ta).apply(null,arguments)},pe=n._emscripten_bind_btDynamicsWorld_removeAction_1=function(){return(pe=n._emscripten_bind_btDynamicsWorld_removeAction_1=n.asm.ua).apply(null,arguments)},se=n._emscripten_bind_btDynamicsWorld_getSolverInfo_0=function(){return(se=n._emscripten_bind_btDynamicsWorld_getSolverInfo_0=n.asm.va).apply(null,arguments)},ce=n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_1=function(){return(ce=n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_1=n.asm.wa).apply(null,arguments)},ae=n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_2=function(){return(ae=n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_2=n.asm.xa).apply(null,arguments)},le=n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_3=function(){return(le=n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_3=n.asm.ya).apply(null,arguments)},ue=n._emscripten_bind_btDynamicsWorld_getDispatcher_0=function(){return(ue=n._emscripten_bind_btDynamicsWorld_getDispatcher_0=n.asm.za).apply(null,arguments)},be=n._emscripten_bind_btDynamicsWorld_rayTest_3=function(){return(be=n._emscripten_bind_btDynamicsWorld_rayTest_3=n.asm.Aa).apply(null,arguments)},me=n._emscripten_bind_btDynamicsWorld_getPairCache_0=function(){return(me=n._emscripten_bind_btDynamicsWorld_getPairCache_0=n.asm.Ba).apply(null,arguments)},ye=n._emscripten_bind_btDynamicsWorld_getDispatchInfo_0=function(){return(ye=n._emscripten_bind_btDynamicsWorld_getDispatchInfo_0=n.asm.Ca).apply(null,arguments)},de=n._emscripten_bind_btDynamicsWorld_addCollisionObject_1=function(){return(de=n._emscripten_bind_btDynamicsWorld_addCollisionObject_1=n.asm.Da).apply(null,arguments)},fe=n._emscripten_bind_btDynamicsWorld_addCollisionObject_2=function(){return(fe=n._emscripten_bind_btDynamicsWorld_addCollisionObject_2=n.asm.Ea).apply(null,arguments)},he=n._emscripten_bind_btDynamicsWorld_addCollisionObject_3=function(){return(he=n._emscripten_bind_btDynamicsWorld_addCollisionObject_3=n.asm.Fa).apply(null,arguments)},Be=n._emscripten_bind_btDynamicsWorld_removeCollisionObject_1=function(){return(Be=n._emscripten_bind_btDynamicsWorld_removeCollisionObject_1=n.asm.Ga).apply(null,arguments)},ge=n._emscripten_bind_btDynamicsWorld_getBroadphase_0=function(){return(ge=n._emscripten_bind_btDynamicsWorld_getBroadphase_0=n.asm.Ha).apply(null,arguments)},ke=n._emscripten_bind_btDynamicsWorld_convexSweepTest_5=function(){return(ke=n._emscripten_bind_btDynamicsWorld_convexSweepTest_5=n.asm.Ia).apply(null,arguments)},Ce=n._emscripten_bind_btDynamicsWorld_contactPairTest_3=function(){return(Ce=n._emscripten_bind_btDynamicsWorld_contactPairTest_3=n.asm.Ja).apply(null,arguments)},Se=n._emscripten_bind_btDynamicsWorld_contactTest_2=function(){return(Se=n._emscripten_bind_btDynamicsWorld_contactTest_2=n.asm.Ka).apply(null,arguments)},je=n._emscripten_bind_btDynamicsWorld_updateSingleAabb_1=function(){return(je=n._emscripten_bind_btDynamicsWorld_updateSingleAabb_1=n.asm.La).apply(null,arguments)},ve=n._emscripten_bind_btDynamicsWorld_setDebugDrawer_1=function(){return(ve=n._emscripten_bind_btDynamicsWorld_setDebugDrawer_1=n.asm.Ma).apply(null,arguments)},Ie=n._emscripten_bind_btDynamicsWorld_getDebugDrawer_0=function(){return(Ie=n._emscripten_bind_btDynamicsWorld_getDebugDrawer_0=n.asm.Na).apply(null,arguments)},Re=n._emscripten_bind_btDynamicsWorld_debugDrawWorld_0=function(){return(Re=n._emscripten_bind_btDynamicsWorld_debugDrawWorld_0=n.asm.Oa).apply(null,arguments)},De=n._emscripten_bind_btDynamicsWorld_debugDrawObject_3=function(){return(De=n._emscripten_bind_btDynamicsWorld_debugDrawObject_3=n.asm.Pa).apply(null,arguments)},Pe=n._emscripten_bind_btDynamicsWorld___destroy___0=function(){return(Pe=n._emscripten_bind_btDynamicsWorld___destroy___0=n.asm.Qa).apply(null,arguments)},Te=n._emscripten_bind_btIDebugDraw_drawLine_3=function(){return(Te=n._emscripten_bind_btIDebugDraw_drawLine_3=n.asm.Ra).apply(null,arguments)},Oe=n._emscripten_bind_btIDebugDraw_drawContactPoint_5=function(){return(Oe=n._emscripten_bind_btIDebugDraw_drawContactPoint_5=n.asm.Sa).apply(null,arguments)},We=n._emscripten_bind_btIDebugDraw_reportErrorWarning_1=function(){return(We=n._emscripten_bind_btIDebugDraw_reportErrorWarning_1=n.asm.Ta).apply(null,arguments)},Ae=n._emscripten_bind_btIDebugDraw_draw3dText_2=function(){return(Ae=n._emscripten_bind_btIDebugDraw_draw3dText_2=n.asm.Ua).apply(null,arguments)},Me=n._emscripten_bind_btIDebugDraw_setDebugMode_1=function(){return(Me=n._emscripten_bind_btIDebugDraw_setDebugMode_1=n.asm.Va).apply(null,arguments)},xe=n._emscripten_bind_btIDebugDraw_getDebugMode_0=function(){return(xe=n._emscripten_bind_btIDebugDraw_getDebugMode_0=n.asm.Wa).apply(null,arguments)},Fe=n._emscripten_bind_btIDebugDraw___destroy___0=function(){return(Fe=n._emscripten_bind_btIDebugDraw___destroy___0=n.asm.Xa).apply(null,arguments)},Le=n._emscripten_bind_btVector3_btVector3_0=function(){return(Le=n._emscripten_bind_btVector3_btVector3_0=n.asm.Ya).apply(null,arguments)},Ge=n._emscripten_bind_btVector3_btVector3_3=function(){return(Ge=n._emscripten_bind_btVector3_btVector3_3=n.asm.Za).apply(null,arguments)},we=n._emscripten_bind_btVector3_length_0=function(){return(we=n._emscripten_bind_btVector3_length_0=n.asm._a).apply(null,arguments)},He=n._emscripten_bind_btVector3_x_0=function(){return(He=n._emscripten_bind_btVector3_x_0=n.asm.$a).apply(null,arguments)},Ve=n._emscripten_bind_btVector3_y_0=function(){return(Ve=n._emscripten_bind_btVector3_y_0=n.asm.ab).apply(null,arguments)},Ee=n._emscripten_bind_btVector3_z_0=function(){return(Ee=n._emscripten_bind_btVector3_z_0=n.asm.bb).apply(null,arguments)},Ne=n._emscripten_bind_btVector3_setX_1=function(){return(Ne=n._emscripten_bind_btVector3_setX_1=n.asm.cb).apply(null,arguments)},Ue=n._emscripten_bind_btVector3_setY_1=function(){return(Ue=n._emscripten_bind_btVector3_setY_1=n.asm.db).apply(null,arguments)},ze=n._emscripten_bind_btVector3_setZ_1=function(){return(ze=n._emscripten_bind_btVector3_setZ_1=n.asm.eb).apply(null,arguments)},qe=n._emscripten_bind_btVector3_setValue_3=function(){return(qe=n._emscripten_bind_btVector3_setValue_3=n.asm.fb).apply(null,arguments)},Ke=n._emscripten_bind_btVector3_normalize_0=function(){return(Ke=n._emscripten_bind_btVector3_normalize_0=n.asm.gb).apply(null,arguments)},Qe=n._emscripten_bind_btVector3_rotate_2=function(){return(Qe=n._emscripten_bind_btVector3_rotate_2=n.asm.hb).apply(null,arguments)},Xe=n._emscripten_bind_btVector3_dot_1=function(){return(Xe=n._emscripten_bind_btVector3_dot_1=n.asm.ib).apply(null,arguments)},Ze=n._emscripten_bind_btVector3_op_mul_1=function(){return(Ze=n._emscripten_bind_btVector3_op_mul_1=n.asm.jb).apply(null,arguments)},Ye=n._emscripten_bind_btVector3_op_add_1=function(){return(Ye=n._emscripten_bind_btVector3_op_add_1=n.asm.kb).apply(null,arguments)},Je=n._emscripten_bind_btVector3_op_sub_1=function(){return(Je=n._emscripten_bind_btVector3_op_sub_1=n.asm.lb).apply(null,arguments)},$e=n._emscripten_bind_btVector3___destroy___0=function(){return($e=n._emscripten_bind_btVector3___destroy___0=n.asm.mb).apply(null,arguments)},tn=n._emscripten_bind_btQuadWord_x_0=function(){return(tn=n._emscripten_bind_btQuadWord_x_0=n.asm.nb).apply(null,arguments)},en=n._emscripten_bind_btQuadWord_y_0=function(){return(en=n._emscripten_bind_btQuadWord_y_0=n.asm.ob).apply(null,arguments)},nn=n._emscripten_bind_btQuadWord_z_0=function(){return(nn=n._emscripten_bind_btQuadWord_z_0=n.asm.pb).apply(null,arguments)},on=n._emscripten_bind_btQuadWord_w_0=function(){return(on=n._emscripten_bind_btQuadWord_w_0=n.asm.qb).apply(null,arguments)},_n=n._emscripten_bind_btQuadWord_setX_1=function(){return(_n=n._emscripten_bind_btQuadWord_setX_1=n.asm.rb).apply(null,arguments)},rn=n._emscripten_bind_btQuadWord_setY_1=function(){return(rn=n._emscripten_bind_btQuadWord_setY_1=n.asm.sb).apply(null,arguments)},pn=n._emscripten_bind_btQuadWord_setZ_1=function(){return(pn=n._emscripten_bind_btQuadWord_setZ_1=n.asm.tb).apply(null,arguments)},sn=n._emscripten_bind_btQuadWord_setW_1=function(){return(sn=n._emscripten_bind_btQuadWord_setW_1=n.asm.ub).apply(null,arguments)},cn=n._emscripten_bind_btQuadWord___destroy___0=function(){return(cn=n._emscripten_bind_btQuadWord___destroy___0=n.asm.vb).apply(null,arguments)},an=n._emscripten_bind_btMotionState_getWorldTransform_1=function(){return(an=n._emscripten_bind_btMotionState_getWorldTransform_1=n.asm.wb).apply(null,arguments)},ln=n._emscripten_bind_btMotionState_setWorldTransform_1=function(){return(ln=n._emscripten_bind_btMotionState_setWorldTransform_1=n.asm.xb).apply(null,arguments)},un=n._emscripten_bind_btMotionState___destroy___0=function(){return(un=n._emscripten_bind_btMotionState___destroy___0=n.asm.yb).apply(null,arguments)},bn=n._emscripten_bind_RayResultCallback_hasHit_0=function(){return(bn=n._emscripten_bind_RayResultCallback_hasHit_0=n.asm.zb).apply(null,arguments)},mn=n._emscripten_bind_RayResultCallback_get_m_collisionFilterGroup_0=function(){return(mn=n._emscripten_bind_RayResultCallback_get_m_collisionFilterGroup_0=n.asm.Ab).apply(null,arguments)},yn=n._emscripten_bind_RayResultCallback_set_m_collisionFilterGroup_1=function(){return(yn=n._emscripten_bind_RayResultCallback_set_m_collisionFilterGroup_1=n.asm.Bb).apply(null,arguments)},dn=n._emscripten_bind_RayResultCallback_get_m_collisionFilterMask_0=function(){return(dn=n._emscripten_bind_RayResultCallback_get_m_collisionFilterMask_0=n.asm.Cb).apply(null,arguments)},fn=n._emscripten_bind_RayResultCallback_set_m_collisionFilterMask_1=function(){return(fn=n._emscripten_bind_RayResultCallback_set_m_collisionFilterMask_1=n.asm.Db).apply(null,arguments)},hn=n._emscripten_bind_RayResultCallback_get_m_closestHitFraction_0=function(){return(hn=n._emscripten_bind_RayResultCallback_get_m_closestHitFraction_0=n.asm.Eb).apply(null,arguments)},Bn=n._emscripten_bind_RayResultCallback_set_m_closestHitFraction_1=function(){return(Bn=n._emscripten_bind_RayResultCallback_set_m_closestHitFraction_1=n.asm.Fb).apply(null,arguments)},gn=n._emscripten_bind_RayResultCallback_get_m_collisionObject_0=function(){return(gn=n._emscripten_bind_RayResultCallback_get_m_collisionObject_0=n.asm.Gb).apply(null,arguments)},kn=n._emscripten_bind_RayResultCallback_set_m_collisionObject_1=function(){return(kn=n._emscripten_bind_RayResultCallback_set_m_collisionObject_1=n.asm.Hb).apply(null,arguments)},Cn=n._emscripten_bind_RayResultCallback_get_m_flags_0=function(){return(Cn=n._emscripten_bind_RayResultCallback_get_m_flags_0=n.asm.Ib).apply(null,arguments)},Sn=n._emscripten_bind_RayResultCallback_set_m_flags_1=function(){return(Sn=n._emscripten_bind_RayResultCallback_set_m_flags_1=n.asm.Jb).apply(null,arguments)},jn=n._emscripten_bind_RayResultCallback___destroy___0=function(){return(jn=n._emscripten_bind_RayResultCallback___destroy___0=n.asm.Kb).apply(null,arguments)},vn=n._emscripten_bind_ContactResultCallback_addSingleResult_7=function(){return(vn=n._emscripten_bind_ContactResultCallback_addSingleResult_7=n.asm.Lb).apply(null,arguments)},In=n._emscripten_bind_ContactResultCallback___destroy___0=function(){return(In=n._emscripten_bind_ContactResultCallback___destroy___0=n.asm.Mb).apply(null,arguments)},Rn=n._emscripten_bind_ConvexResultCallback_hasHit_0=function(){return(Rn=n._emscripten_bind_ConvexResultCallback_hasHit_0=n.asm.Nb).apply(null,arguments)},Dn=n._emscripten_bind_ConvexResultCallback_get_m_collisionFilterGroup_0=function(){return(Dn=n._emscripten_bind_ConvexResultCallback_get_m_collisionFilterGroup_0=n.asm.Ob).apply(null,arguments)},Pn=n._emscripten_bind_ConvexResultCallback_set_m_collisionFilterGroup_1=function(){return(Pn=n._emscripten_bind_ConvexResultCallback_set_m_collisionFilterGroup_1=n.asm.Pb).apply(null,arguments)},Tn=n._emscripten_bind_ConvexResultCallback_get_m_collisionFilterMask_0=function(){return(Tn=n._emscripten_bind_ConvexResultCallback_get_m_collisionFilterMask_0=n.asm.Qb).apply(null,arguments)},On=n._emscripten_bind_ConvexResultCallback_set_m_collisionFilterMask_1=function(){return(On=n._emscripten_bind_ConvexResultCallback_set_m_collisionFilterMask_1=n.asm.Rb).apply(null,arguments)},Wn=n._emscripten_bind_ConvexResultCallback_get_m_closestHitFraction_0=function(){return(Wn=n._emscripten_bind_ConvexResultCallback_get_m_closestHitFraction_0=n.asm.Sb).apply(null,arguments)},An=n._emscripten_bind_ConvexResultCallback_set_m_closestHitFraction_1=function(){return(An=n._emscripten_bind_ConvexResultCallback_set_m_closestHitFraction_1=n.asm.Tb).apply(null,arguments)},Mn=n._emscripten_bind_ConvexResultCallback___destroy___0=function(){return(Mn=n._emscripten_bind_ConvexResultCallback___destroy___0=n.asm.Ub).apply(null,arguments)},xn=n._emscripten_bind_btConvexShape_setLocalScaling_1=function(){return(xn=n._emscripten_bind_btConvexShape_setLocalScaling_1=n.asm.Vb).apply(null,arguments)},Fn=n._emscripten_bind_btConvexShape_getLocalScaling_0=function(){return(Fn=n._emscripten_bind_btConvexShape_getLocalScaling_0=n.asm.Wb).apply(null,arguments)},Ln=n._emscripten_bind_btConvexShape_calculateLocalInertia_2=function(){return(Ln=n._emscripten_bind_btConvexShape_calculateLocalInertia_2=n.asm.Xb).apply(null,arguments)},Gn=n._emscripten_bind_btConvexShape_setMargin_1=function(){return(Gn=n._emscripten_bind_btConvexShape_setMargin_1=n.asm.Yb).apply(null,arguments)},wn=n._emscripten_bind_btConvexShape_getMargin_0=function(){return(wn=n._emscripten_bind_btConvexShape_getMargin_0=n.asm.Zb).apply(null,arguments)},Hn=n._emscripten_bind_btConvexShape___destroy___0=function(){return(Hn=n._emscripten_bind_btConvexShape___destroy___0=n.asm._b).apply(null,arguments)},Vn=n._emscripten_bind_btCapsuleShape_btCapsuleShape_2=function(){return(Vn=n._emscripten_bind_btCapsuleShape_btCapsuleShape_2=n.asm.$b).apply(null,arguments)},En=n._emscripten_bind_btCapsuleShape_setMargin_1=function(){return(En=n._emscripten_bind_btCapsuleShape_setMargin_1=n.asm.ac).apply(null,arguments)},Nn=n._emscripten_bind_btCapsuleShape_getMargin_0=function(){return(Nn=n._emscripten_bind_btCapsuleShape_getMargin_0=n.asm.bc).apply(null,arguments)},Un=n._emscripten_bind_btCapsuleShape_getUpAxis_0=function(){return(Un=n._emscripten_bind_btCapsuleShape_getUpAxis_0=n.asm.cc).apply(null,arguments)},zn=n._emscripten_bind_btCapsuleShape_getRadius_0=function(){return(zn=n._emscripten_bind_btCapsuleShape_getRadius_0=n.asm.dc).apply(null,arguments)},qn=n._emscripten_bind_btCapsuleShape_getHalfHeight_0=function(){return(qn=n._emscripten_bind_btCapsuleShape_getHalfHeight_0=n.asm.ec).apply(null,arguments)},Kn=n._emscripten_bind_btCapsuleShape_setLocalScaling_1=function(){return(Kn=n._emscripten_bind_btCapsuleShape_setLocalScaling_1=n.asm.fc).apply(null,arguments)},Qn=n._emscripten_bind_btCapsuleShape_getLocalScaling_0=function(){return(Qn=n._emscripten_bind_btCapsuleShape_getLocalScaling_0=n.asm.gc).apply(null,arguments)},Xn=n._emscripten_bind_btCapsuleShape_calculateLocalInertia_2=function(){return(Xn=n._emscripten_bind_btCapsuleShape_calculateLocalInertia_2=n.asm.hc).apply(null,arguments)},Zn=n._emscripten_bind_btCapsuleShape___destroy___0=function(){return(Zn=n._emscripten_bind_btCapsuleShape___destroy___0=n.asm.ic).apply(null,arguments)},Yn=n._emscripten_bind_btCylinderShape_btCylinderShape_1=function(){return(Yn=n._emscripten_bind_btCylinderShape_btCylinderShape_1=n.asm.jc).apply(null,arguments)},Jn=n._emscripten_bind_btCylinderShape_setMargin_1=function(){return(Jn=n._emscripten_bind_btCylinderShape_setMargin_1=n.asm.kc).apply(null,arguments)},$n=n._emscripten_bind_btCylinderShape_getMargin_0=function(){return($n=n._emscripten_bind_btCylinderShape_getMargin_0=n.asm.lc).apply(null,arguments)},to=n._emscripten_bind_btCylinderShape_setLocalScaling_1=function(){return(to=n._emscripten_bind_btCylinderShape_setLocalScaling_1=n.asm.mc).apply(null,arguments)},eo=n._emscripten_bind_btCylinderShape_getLocalScaling_0=function(){return(eo=n._emscripten_bind_btCylinderShape_getLocalScaling_0=n.asm.nc).apply(null,arguments)},no=n._emscripten_bind_btCylinderShape_calculateLocalInertia_2=function(){return(no=n._emscripten_bind_btCylinderShape_calculateLocalInertia_2=n.asm.oc).apply(null,arguments)},oo=n._emscripten_bind_btCylinderShape___destroy___0=function(){return(oo=n._emscripten_bind_btCylinderShape___destroy___0=n.asm.pc).apply(null,arguments)},_o=n._emscripten_bind_btConeShape_btConeShape_2=function(){return(_o=n._emscripten_bind_btConeShape_btConeShape_2=n.asm.qc).apply(null,arguments)},io=n._emscripten_bind_btConeShape_setLocalScaling_1=function(){return(io=n._emscripten_bind_btConeShape_setLocalScaling_1=n.asm.rc).apply(null,arguments)},ro=n._emscripten_bind_btConeShape_getLocalScaling_0=function(){return(ro=n._emscripten_bind_btConeShape_getLocalScaling_0=n.asm.sc).apply(null,arguments)},po=n._emscripten_bind_btConeShape_calculateLocalInertia_2=function(){return(po=n._emscripten_bind_btConeShape_calculateLocalInertia_2=n.asm.tc).apply(null,arguments)},so=n._emscripten_bind_btConeShape___destroy___0=function(){return(so=n._emscripten_bind_btConeShape___destroy___0=n.asm.uc).apply(null,arguments)},co=n._emscripten_bind_btStridingMeshInterface_setScaling_1=function(){return(co=n._emscripten_bind_btStridingMeshInterface_setScaling_1=n.asm.vc).apply(null,arguments)},ao=n._emscripten_bind_btStridingMeshInterface___destroy___0=function(){return(ao=n._emscripten_bind_btStridingMeshInterface___destroy___0=n.asm.wc).apply(null,arguments)},lo=n._emscripten_bind_btTriangleMeshShape_setLocalScaling_1=function(){return(lo=n._emscripten_bind_btTriangleMeshShape_setLocalScaling_1=n.asm.xc).apply(null,arguments)},uo=n._emscripten_bind_btTriangleMeshShape_getLocalScaling_0=function(){return(uo=n._emscripten_bind_btTriangleMeshShape_getLocalScaling_0=n.asm.yc).apply(null,arguments)},bo=n._emscripten_bind_btTriangleMeshShape_calculateLocalInertia_2=function(){return(bo=n._emscripten_bind_btTriangleMeshShape_calculateLocalInertia_2=n.asm.zc).apply(null,arguments)},mo=n._emscripten_bind_btTriangleMeshShape___destroy___0=function(){return(mo=n._emscripten_bind_btTriangleMeshShape___destroy___0=n.asm.Ac).apply(null,arguments)},yo=n._emscripten_bind_btPrimitiveManagerBase_is_trimesh_0=function(){return(yo=n._emscripten_bind_btPrimitiveManagerBase_is_trimesh_0=n.asm.Bc).apply(null,arguments)},fo=n._emscripten_bind_btPrimitiveManagerBase_get_primitive_count_0=function(){return(fo=n._emscripten_bind_btPrimitiveManagerBase_get_primitive_count_0=n.asm.Cc).apply(null,arguments)},ho=n._emscripten_bind_btPrimitiveManagerBase_get_primitive_box_2=function(){return(ho=n._emscripten_bind_btPrimitiveManagerBase_get_primitive_box_2=n.asm.Dc).apply(null,arguments)},Bo=n._emscripten_bind_btPrimitiveManagerBase_get_primitive_triangle_2=function(){return(Bo=n._emscripten_bind_btPrimitiveManagerBase_get_primitive_triangle_2=n.asm.Ec).apply(null,arguments)},go=n._emscripten_bind_btPrimitiveManagerBase___destroy___0=function(){return(go=n._emscripten_bind_btPrimitiveManagerBase___destroy___0=n.asm.Fc).apply(null,arguments)},ko=n._emscripten_bind_btGImpactShapeInterface_updateBound_0=function(){return(ko=n._emscripten_bind_btGImpactShapeInterface_updateBound_0=n.asm.Gc).apply(null,arguments)},Co=n._emscripten_bind_btGImpactShapeInterface_postUpdate_0=function(){return(Co=n._emscripten_bind_btGImpactShapeInterface_postUpdate_0=n.asm.Hc).apply(null,arguments)},So=n._emscripten_bind_btGImpactShapeInterface_getShapeType_0=function(){return(So=n._emscripten_bind_btGImpactShapeInterface_getShapeType_0=n.asm.Ic).apply(null,arguments)},jo=n._emscripten_bind_btGImpactShapeInterface_getName_0=function(){return(jo=n._emscripten_bind_btGImpactShapeInterface_getName_0=n.asm.Jc).apply(null,arguments)},vo=n._emscripten_bind_btGImpactShapeInterface_getGImpactShapeType_0=function(){return(vo=n._emscripten_bind_btGImpactShapeInterface_getGImpactShapeType_0=n.asm.Kc).apply(null,arguments)},Io=n._emscripten_bind_btGImpactShapeInterface_getPrimitiveManager_0=function(){return(Io=n._emscripten_bind_btGImpactShapeInterface_getPrimitiveManager_0=n.asm.Lc).apply(null,arguments)},Ro=n._emscripten_bind_btGImpactShapeInterface_getNumChildShapes_0=function(){return(Ro=n._emscripten_bind_btGImpactShapeInterface_getNumChildShapes_0=n.asm.Mc).apply(null,arguments)},Do=n._emscripten_bind_btGImpactShapeInterface_childrenHasTransform_0=function(){return(Do=n._emscripten_bind_btGImpactShapeInterface_childrenHasTransform_0=n.asm.Nc).apply(null,arguments)},Po=n._emscripten_bind_btGImpactShapeInterface_needsRetrieveTriangles_0=function(){return(Po=n._emscripten_bind_btGImpactShapeInterface_needsRetrieveTriangles_0=n.asm.Oc).apply(null,arguments)},To=n._emscripten_bind_btGImpactShapeInterface_needsRetrieveTetrahedrons_0=function(){return(To=n._emscripten_bind_btGImpactShapeInterface_needsRetrieveTetrahedrons_0=n.asm.Pc).apply(null,arguments)},Oo=n._emscripten_bind_btGImpactShapeInterface_getBulletTriangle_2=function(){return(Oo=n._emscripten_bind_btGImpactShapeInterface_getBulletTriangle_2=n.asm.Qc).apply(null,arguments)},Wo=n._emscripten_bind_btGImpactShapeInterface_getBulletTetrahedron_2=function(){return(Wo=n._emscripten_bind_btGImpactShapeInterface_getBulletTetrahedron_2=n.asm.Rc).apply(null,arguments)},Ao=n._emscripten_bind_btGImpactShapeInterface_getChildShape_1=function(){return(Ao=n._emscripten_bind_btGImpactShapeInterface_getChildShape_1=n.asm.Sc).apply(null,arguments)},Mo=n._emscripten_bind_btGImpactShapeInterface_getChildTransform_1=function(){return(Mo=n._emscripten_bind_btGImpactShapeInterface_getChildTransform_1=n.asm.Tc).apply(null,arguments)},xo=n._emscripten_bind_btGImpactShapeInterface_setChildTransform_2=function(){return(xo=n._emscripten_bind_btGImpactShapeInterface_setChildTransform_2=n.asm.Uc).apply(null,arguments)},Fo=n._emscripten_bind_btGImpactShapeInterface_setLocalScaling_1=function(){return(Fo=n._emscripten_bind_btGImpactShapeInterface_setLocalScaling_1=n.asm.Vc).apply(null,arguments)},Lo=n._emscripten_bind_btGImpactShapeInterface_getLocalScaling_0=function(){return(Lo=n._emscripten_bind_btGImpactShapeInterface_getLocalScaling_0=n.asm.Wc).apply(null,arguments)},Go=n._emscripten_bind_btGImpactShapeInterface_calculateLocalInertia_2=function(){return(Go=n._emscripten_bind_btGImpactShapeInterface_calculateLocalInertia_2=n.asm.Xc).apply(null,arguments)},wo=n._emscripten_bind_btGImpactShapeInterface___destroy___0=function(){return(wo=n._emscripten_bind_btGImpactShapeInterface___destroy___0=n.asm.Yc).apply(null,arguments)},Ho=n._emscripten_bind_btActivatingCollisionAlgorithm___destroy___0=function(){return(Ho=n._emscripten_bind_btActivatingCollisionAlgorithm___destroy___0=n.asm.Zc).apply(null,arguments)},Vo=n._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_0=function(){return(Vo=n._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_0=n.asm._c).apply(null,arguments)},Eo=n._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_1=function(){return(Eo=n._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_1=n.asm.$c).apply(null,arguments)},No=n._emscripten_bind_btDefaultCollisionConfiguration___destroy___0=function(){return(No=n._emscripten_bind_btDefaultCollisionConfiguration___destroy___0=n.asm.ad).apply(null,arguments)},Uo=n._emscripten_bind_btDispatcher_getNumManifolds_0=function(){return(Uo=n._emscripten_bind_btDispatcher_getNumManifolds_0=n.asm.bd).apply(null,arguments)},zo=n._emscripten_bind_btDispatcher_getManifoldByIndexInternal_1=function(){return(zo=n._emscripten_bind_btDispatcher_getManifoldByIndexInternal_1=n.asm.cd).apply(null,arguments)},qo=n._emscripten_bind_btDispatcher___destroy___0=function(){return(qo=n._emscripten_bind_btDispatcher___destroy___0=n.asm.dd).apply(null,arguments)},Ko=n._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_3=function(){return(Ko=n._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_3=n.asm.ed).apply(null,arguments)},Qo=n._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_5=function(){return(Qo=n._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_5=n.asm.fd).apply(null,arguments)},Xo=n._emscripten_bind_btGeneric6DofConstraint_setLinearLowerLimit_1=function(){return(Xo=n._emscripten_bind_btGeneric6DofConstraint_setLinearLowerLimit_1=n.asm.gd).apply(null,arguments)},Zo=n._emscripten_bind_btGeneric6DofConstraint_setLinearUpperLimit_1=function(){return(Zo=n._emscripten_bind_btGeneric6DofConstraint_setLinearUpperLimit_1=n.asm.hd).apply(null,arguments)},Yo=n._emscripten_bind_btGeneric6DofConstraint_setAngularLowerLimit_1=function(){return(Yo=n._emscripten_bind_btGeneric6DofConstraint_setAngularLowerLimit_1=n.asm.id).apply(null,arguments)},Jo=n._emscripten_bind_btGeneric6DofConstraint_setAngularUpperLimit_1=function(){return(Jo=n._emscripten_bind_btGeneric6DofConstraint_setAngularUpperLimit_1=n.asm.jd).apply(null,arguments)},$o=n._emscripten_bind_btGeneric6DofConstraint_getFrameOffsetA_0=function(){return($o=n._emscripten_bind_btGeneric6DofConstraint_getFrameOffsetA_0=n.asm.kd).apply(null,arguments)},t_=n._emscripten_bind_btGeneric6DofConstraint_enableFeedback_1=function(){return(t_=n._emscripten_bind_btGeneric6DofConstraint_enableFeedback_1=n.asm.ld).apply(null,arguments)},e_=n._emscripten_bind_btGeneric6DofConstraint_getBreakingImpulseThreshold_0=function(){return(e_=n._emscripten_bind_btGeneric6DofConstraint_getBreakingImpulseThreshold_0=n.asm.md).apply(null,arguments)},n_=n._emscripten_bind_btGeneric6DofConstraint_setBreakingImpulseThreshold_1=function(){return(n_=n._emscripten_bind_btGeneric6DofConstraint_setBreakingImpulseThreshold_1=n.asm.nd).apply(null,arguments)},o_=n._emscripten_bind_btGeneric6DofConstraint_getParam_2=function(){return(o_=n._emscripten_bind_btGeneric6DofConstraint_getParam_2=n.asm.od).apply(null,arguments)},__=n._emscripten_bind_btGeneric6DofConstraint_setParam_3=function(){return(__=n._emscripten_bind_btGeneric6DofConstraint_setParam_3=n.asm.pd).apply(null,arguments)},i_=n._emscripten_bind_btGeneric6DofConstraint___destroy___0=function(){return(i_=n._emscripten_bind_btGeneric6DofConstraint___destroy___0=n.asm.qd).apply(null,arguments)},r_=n._emscripten_bind_btDiscreteDynamicsWorld_btDiscreteDynamicsWorld_4=function(){return(r_=n._emscripten_bind_btDiscreteDynamicsWorld_btDiscreteDynamicsWorld_4=n.asm.rd).apply(null,arguments)},p_=n._emscripten_bind_btDiscreteDynamicsWorld_setGravity_1=function(){return(p_=n._emscripten_bind_btDiscreteDynamicsWorld_setGravity_1=n.asm.sd).apply(null,arguments)},s_=n._emscripten_bind_btDiscreteDynamicsWorld_getGravity_0=function(){return(s_=n._emscripten_bind_btDiscreteDynamicsWorld_getGravity_0=n.asm.td).apply(null,arguments)},c_=n._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_1=function(){return(c_=n._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_1=n.asm.ud).apply(null,arguments)},a_=n._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_3=function(){return(a_=n._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_3=n.asm.vd).apply(null,arguments)},l_=n._emscripten_bind_btDiscreteDynamicsWorld_removeRigidBody_1=function(){return(l_=n._emscripten_bind_btDiscreteDynamicsWorld_removeRigidBody_1=n.asm.wd).apply(null,arguments)},u_=n._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_1=function(){return(u_=n._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_1=n.asm.xd).apply(null,arguments)},b_=n._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_2=function(){return(b_=n._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_2=n.asm.yd).apply(null,arguments)},m_=n._emscripten_bind_btDiscreteDynamicsWorld_removeConstraint_1=function(){return(m_=n._emscripten_bind_btDiscreteDynamicsWorld_removeConstraint_1=n.asm.zd).apply(null,arguments)},y_=n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_1=function(){return(y_=n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_1=n.asm.Ad).apply(null,arguments)},d_=n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_2=function(){return(d_=n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_2=n.asm.Bd).apply(null,arguments)},f_=n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_3=function(){return(f_=n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_3=n.asm.Cd).apply(null,arguments)},h_=n._emscripten_bind_btDiscreteDynamicsWorld_setContactAddedCallback_1=function(){return(h_=n._emscripten_bind_btDiscreteDynamicsWorld_setContactAddedCallback_1=n.asm.Dd).apply(null,arguments)},B_=n._emscripten_bind_btDiscreteDynamicsWorld_setContactProcessedCallback_1=function(){return(B_=n._emscripten_bind_btDiscreteDynamicsWorld_setContactProcessedCallback_1=n.asm.Ed).apply(null,arguments)},g_=n._emscripten_bind_btDiscreteDynamicsWorld_setContactDestroyedCallback_1=function(){return(g_=n._emscripten_bind_btDiscreteDynamicsWorld_setContactDestroyedCallback_1=n.asm.Fd).apply(null,arguments)},k_=n._emscripten_bind_btDiscreteDynamicsWorld_getDispatcher_0=function(){return(k_=n._emscripten_bind_btDiscreteDynamicsWorld_getDispatcher_0=n.asm.Gd).apply(null,arguments)},C_=n._emscripten_bind_btDiscreteDynamicsWorld_rayTest_3=function(){return(C_=n._emscripten_bind_btDiscreteDynamicsWorld_rayTest_3=n.asm.Hd).apply(null,arguments)},S_=n._emscripten_bind_btDiscreteDynamicsWorld_getPairCache_0=function(){return(S_=n._emscripten_bind_btDiscreteDynamicsWorld_getPairCache_0=n.asm.Id).apply(null,arguments)},j_=n._emscripten_bind_btDiscreteDynamicsWorld_getDispatchInfo_0=function(){return(j_=n._emscripten_bind_btDiscreteDynamicsWorld_getDispatchInfo_0=n.asm.Jd).apply(null,arguments)},v_=n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_1=function(){return(v_=n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_1=n.asm.Kd).apply(null,arguments)},I_=n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_2=function(){return(I_=n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_2=n.asm.Ld).apply(null,arguments)},R_=n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_3=function(){return(R_=n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_3=n.asm.Md).apply(null,arguments)},D_=n._emscripten_bind_btDiscreteDynamicsWorld_removeCollisionObject_1=function(){return(D_=n._emscripten_bind_btDiscreteDynamicsWorld_removeCollisionObject_1=n.asm.Nd).apply(null,arguments)},P_=n._emscripten_bind_btDiscreteDynamicsWorld_getBroadphase_0=function(){return(P_=n._emscripten_bind_btDiscreteDynamicsWorld_getBroadphase_0=n.asm.Od).apply(null,arguments)},T_=n._emscripten_bind_btDiscreteDynamicsWorld_convexSweepTest_5=function(){return(T_=n._emscripten_bind_btDiscreteDynamicsWorld_convexSweepTest_5=n.asm.Pd).apply(null,arguments)},O_=n._emscripten_bind_btDiscreteDynamicsWorld_contactPairTest_3=function(){return(O_=n._emscripten_bind_btDiscreteDynamicsWorld_contactPairTest_3=n.asm.Qd).apply(null,arguments)},W_=n._emscripten_bind_btDiscreteDynamicsWorld_contactTest_2=function(){return(W_=n._emscripten_bind_btDiscreteDynamicsWorld_contactTest_2=n.asm.Rd).apply(null,arguments)},A_=n._emscripten_bind_btDiscreteDynamicsWorld_updateSingleAabb_1=function(){return(A_=n._emscripten_bind_btDiscreteDynamicsWorld_updateSingleAabb_1=n.asm.Sd).apply(null,arguments)},M_=n._emscripten_bind_btDiscreteDynamicsWorld_setDebugDrawer_1=function(){return(M_=n._emscripten_bind_btDiscreteDynamicsWorld_setDebugDrawer_1=n.asm.Td).apply(null,arguments)},x_=n._emscripten_bind_btDiscreteDynamicsWorld_getDebugDrawer_0=function(){return(x_=n._emscripten_bind_btDiscreteDynamicsWorld_getDebugDrawer_0=n.asm.Ud).apply(null,arguments)},F_=n._emscripten_bind_btDiscreteDynamicsWorld_debugDrawWorld_0=function(){return(F_=n._emscripten_bind_btDiscreteDynamicsWorld_debugDrawWorld_0=n.asm.Vd).apply(null,arguments)},L_=n._emscripten_bind_btDiscreteDynamicsWorld_debugDrawObject_3=function(){return(L_=n._emscripten_bind_btDiscreteDynamicsWorld_debugDrawObject_3=n.asm.Wd).apply(null,arguments)},G_=n._emscripten_bind_btDiscreteDynamicsWorld_addAction_1=function(){return(G_=n._emscripten_bind_btDiscreteDynamicsWorld_addAction_1=n.asm.Xd).apply(null,arguments)},w_=n._emscripten_bind_btDiscreteDynamicsWorld_removeAction_1=function(){return(w_=n._emscripten_bind_btDiscreteDynamicsWorld_removeAction_1=n.asm.Yd).apply(null,arguments)},H_=n._emscripten_bind_btDiscreteDynamicsWorld_getSolverInfo_0=function(){return(H_=n._emscripten_bind_btDiscreteDynamicsWorld_getSolverInfo_0=n.asm.Zd).apply(null,arguments)},V_=n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_1=function(){return(V_=n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_1=n.asm._d).apply(null,arguments)},E_=n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_2=function(){return(E_=n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_2=n.asm.$d).apply(null,arguments)},N_=n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_3=function(){return(N_=n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_3=n.asm.ae).apply(null,arguments)},U_=n._emscripten_bind_btDiscreteDynamicsWorld___destroy___0=function(){return(U_=n._emscripten_bind_btDiscreteDynamicsWorld___destroy___0=n.asm.be).apply(null,arguments)},z_=n._emscripten_bind_btVehicleRaycaster_castRay_3=function(){return(z_=n._emscripten_bind_btVehicleRaycaster_castRay_3=n.asm.ce).apply(null,arguments)},q_=n._emscripten_bind_btVehicleRaycaster___destroy___0=function(){return(q_=n._emscripten_bind_btVehicleRaycaster___destroy___0=n.asm.de).apply(null,arguments)},K_=n._emscripten_bind_btActionInterface_updateAction_2=function(){return(K_=n._emscripten_bind_btActionInterface_updateAction_2=n.asm.ee).apply(null,arguments)},Q_=n._emscripten_bind_btActionInterface___destroy___0=function(){return(Q_=n._emscripten_bind_btActionInterface___destroy___0=n.asm.fe).apply(null,arguments)},X_=n._emscripten_bind_btGhostObject_btGhostObject_0=function(){return(X_=n._emscripten_bind_btGhostObject_btGhostObject_0=n.asm.ge).apply(null,arguments)},Z_=n._emscripten_bind_btGhostObject_getNumOverlappingObjects_0=function(){return(Z_=n._emscripten_bind_btGhostObject_getNumOverlappingObjects_0=n.asm.he).apply(null,arguments)},Y_=n._emscripten_bind_btGhostObject_getOverlappingObject_1=function(){return(Y_=n._emscripten_bind_btGhostObject_getOverlappingObject_1=n.asm.ie).apply(null,arguments)},J_=n._emscripten_bind_btGhostObject_setAnisotropicFriction_2=function(){return(J_=n._emscripten_bind_btGhostObject_setAnisotropicFriction_2=n.asm.je).apply(null,arguments)},$_=n._emscripten_bind_btGhostObject_getCollisionShape_0=function(){return($_=n._emscripten_bind_btGhostObject_getCollisionShape_0=n.asm.ke).apply(null,arguments)},ti=n._emscripten_bind_btGhostObject_setContactProcessingThreshold_1=function(){return(ti=n._emscripten_bind_btGhostObject_setContactProcessingThreshold_1=n.asm.le).apply(null,arguments)},ei=n._emscripten_bind_btGhostObject_setActivationState_1=function(){return(ei=n._emscripten_bind_btGhostObject_setActivationState_1=n.asm.me).apply(null,arguments)},ni=n._emscripten_bind_btGhostObject_forceActivationState_1=function(){return(ni=n._emscripten_bind_btGhostObject_forceActivationState_1=n.asm.ne).apply(null,arguments)},oi=n._emscripten_bind_btGhostObject_activate_0=function(){return(oi=n._emscripten_bind_btGhostObject_activate_0=n.asm.oe).apply(null,arguments)},_i=n._emscripten_bind_btGhostObject_activate_1=function(){return(_i=n._emscripten_bind_btGhostObject_activate_1=n.asm.pe).apply(null,arguments)},ii=n._emscripten_bind_btGhostObject_isActive_0=function(){return(ii=n._emscripten_bind_btGhostObject_isActive_0=n.asm.qe).apply(null,arguments)},ri=n._emscripten_bind_btGhostObject_isKinematicObject_0=function(){return(ri=n._emscripten_bind_btGhostObject_isKinematicObject_0=n.asm.re).apply(null,arguments)},pi=n._emscripten_bind_btGhostObject_isStaticObject_0=function(){return(pi=n._emscripten_bind_btGhostObject_isStaticObject_0=n.asm.se).apply(null,arguments)},si=n._emscripten_bind_btGhostObject_isStaticOrKinematicObject_0=function(){return(si=n._emscripten_bind_btGhostObject_isStaticOrKinematicObject_0=n.asm.te).apply(null,arguments)},ci=n._emscripten_bind_btGhostObject_getRestitution_0=function(){return(ci=n._emscripten_bind_btGhostObject_getRestitution_0=n.asm.ue).apply(null,arguments)},ai=n._emscripten_bind_btGhostObject_getFriction_0=function(){return(ai=n._emscripten_bind_btGhostObject_getFriction_0=n.asm.ve).apply(null,arguments)},li=n._emscripten_bind_btGhostObject_getRollingFriction_0=function(){return(li=n._emscripten_bind_btGhostObject_getRollingFriction_0=n.asm.we).apply(null,arguments)},ui=n._emscripten_bind_btGhostObject_setRestitution_1=function(){return(ui=n._emscripten_bind_btGhostObject_setRestitution_1=n.asm.xe).apply(null,arguments)},bi=n._emscripten_bind_btGhostObject_setFriction_1=function(){return(bi=n._emscripten_bind_btGhostObject_setFriction_1=n.asm.ye).apply(null,arguments)},mi=n._emscripten_bind_btGhostObject_setRollingFriction_1=function(){return(mi=n._emscripten_bind_btGhostObject_setRollingFriction_1=n.asm.ze).apply(null,arguments)},yi=n._emscripten_bind_btGhostObject_getWorldTransform_0=function(){return(yi=n._emscripten_bind_btGhostObject_getWorldTransform_0=n.asm.Ae).apply(null,arguments)},di=n._emscripten_bind_btGhostObject_getCollisionFlags_0=function(){return(di=n._emscripten_bind_btGhostObject_getCollisionFlags_0=n.asm.Be).apply(null,arguments)},fi=n._emscripten_bind_btGhostObject_setCollisionFlags_1=function(){return(fi=n._emscripten_bind_btGhostObject_setCollisionFlags_1=n.asm.Ce).apply(null,arguments)},hi=n._emscripten_bind_btGhostObject_setWorldTransform_1=function(){return(hi=n._emscripten_bind_btGhostObject_setWorldTransform_1=n.asm.De).apply(null,arguments)},Bi=n._emscripten_bind_btGhostObject_setCollisionShape_1=function(){return(Bi=n._emscripten_bind_btGhostObject_setCollisionShape_1=n.asm.Ee).apply(null,arguments)},gi=n._emscripten_bind_btGhostObject_setCcdMotionThreshold_1=function(){return(gi=n._emscripten_bind_btGhostObject_setCcdMotionThreshold_1=n.asm.Fe).apply(null,arguments)},ki=n._emscripten_bind_btGhostObject_setCcdSweptSphereRadius_1=function(){return(ki=n._emscripten_bind_btGhostObject_setCcdSweptSphereRadius_1=n.asm.Ge).apply(null,arguments)},Ci=n._emscripten_bind_btGhostObject_getUserIndex_0=function(){return(Ci=n._emscripten_bind_btGhostObject_getUserIndex_0=n.asm.He).apply(null,arguments)},Si=n._emscripten_bind_btGhostObject_setUserIndex_1=function(){return(Si=n._emscripten_bind_btGhostObject_setUserIndex_1=n.asm.Ie).apply(null,arguments)},ji=n._emscripten_bind_btGhostObject_getUserPointer_0=function(){return(ji=n._emscripten_bind_btGhostObject_getUserPointer_0=n.asm.Je).apply(null,arguments)},vi=n._emscripten_bind_btGhostObject_setUserPointer_1=function(){return(vi=n._emscripten_bind_btGhostObject_setUserPointer_1=n.asm.Ke).apply(null,arguments)},Ii=n._emscripten_bind_btGhostObject_getBroadphaseHandle_0=function(){return(Ii=n._emscripten_bind_btGhostObject_getBroadphaseHandle_0=n.asm.Le).apply(null,arguments)},Ri=n._emscripten_bind_btGhostObject___destroy___0=function(){return(Ri=n._emscripten_bind_btGhostObject___destroy___0=n.asm.Me).apply(null,arguments)},Di=n._emscripten_bind_btSoftBodySolver___destroy___0=function(){return(Di=n._emscripten_bind_btSoftBodySolver___destroy___0=n.asm.Ne).apply(null,arguments)},Pi=n._emscripten_bind_VoidPtr___destroy___0=function(){return(Pi=n._emscripten_bind_VoidPtr___destroy___0=n.asm.Oe).apply(null,arguments)},Ti=n._emscripten_bind_DebugDrawer_DebugDrawer_0=function(){return(Ti=n._emscripten_bind_DebugDrawer_DebugDrawer_0=n.asm.Pe).apply(null,arguments)},Oi=n._emscripten_bind_DebugDrawer_drawLine_3=function(){return(Oi=n._emscripten_bind_DebugDrawer_drawLine_3=n.asm.Qe).apply(null,arguments)},Wi=n._emscripten_bind_DebugDrawer_drawContactPoint_5=function(){return(Wi=n._emscripten_bind_DebugDrawer_drawContactPoint_5=n.asm.Re).apply(null,arguments)},Ai=n._emscripten_bind_DebugDrawer_reportErrorWarning_1=function(){return(Ai=n._emscripten_bind_DebugDrawer_reportErrorWarning_1=n.asm.Se).apply(null,arguments)},Mi=n._emscripten_bind_DebugDrawer_draw3dText_2=function(){return(Mi=n._emscripten_bind_DebugDrawer_draw3dText_2=n.asm.Te).apply(null,arguments)},xi=n._emscripten_bind_DebugDrawer_setDebugMode_1=function(){return(xi=n._emscripten_bind_DebugDrawer_setDebugMode_1=n.asm.Ue).apply(null,arguments)},Fi=n._emscripten_bind_DebugDrawer_getDebugMode_0=function(){return(Fi=n._emscripten_bind_DebugDrawer_getDebugMode_0=n.asm.Ve).apply(null,arguments)},Li=n._emscripten_bind_DebugDrawer___destroy___0=function(){return(Li=n._emscripten_bind_DebugDrawer___destroy___0=n.asm.We).apply(null,arguments)},Gi=n._emscripten_bind_btVector4_btVector4_0=function(){return(Gi=n._emscripten_bind_btVector4_btVector4_0=n.asm.Xe).apply(null,arguments)},wi=n._emscripten_bind_btVector4_btVector4_4=function(){return(wi=n._emscripten_bind_btVector4_btVector4_4=n.asm.Ye).apply(null,arguments)},Hi=n._emscripten_bind_btVector4_w_0=function(){return(Hi=n._emscripten_bind_btVector4_w_0=n.asm.Ze).apply(null,arguments)},Vi=n._emscripten_bind_btVector4_setValue_4=function(){return(Vi=n._emscripten_bind_btVector4_setValue_4=n.asm._e).apply(null,arguments)},Ei=n._emscripten_bind_btVector4_length_0=function(){return(Ei=n._emscripten_bind_btVector4_length_0=n.asm.$e).apply(null,arguments)},Ni=n._emscripten_bind_btVector4_x_0=function(){return(Ni=n._emscripten_bind_btVector4_x_0=n.asm.af).apply(null,arguments)},Ui=n._emscripten_bind_btVector4_y_0=function(){return(Ui=n._emscripten_bind_btVector4_y_0=n.asm.bf).apply(null,arguments)},zi=n._emscripten_bind_btVector4_z_0=function(){return(zi=n._emscripten_bind_btVector4_z_0=n.asm.cf).apply(null,arguments)},qi=n._emscripten_bind_btVector4_setX_1=function(){return(qi=n._emscripten_bind_btVector4_setX_1=n.asm.df).apply(null,arguments)},Ki=n._emscripten_bind_btVector4_setY_1=function(){return(Ki=n._emscripten_bind_btVector4_setY_1=n.asm.ef).apply(null,arguments)},Qi=n._emscripten_bind_btVector4_setZ_1=function(){return(Qi=n._emscripten_bind_btVector4_setZ_1=n.asm.ff).apply(null,arguments)},Xi=n._emscripten_bind_btVector4_normalize_0=function(){return(Xi=n._emscripten_bind_btVector4_normalize_0=n.asm.gf).apply(null,arguments)},Zi=n._emscripten_bind_btVector4_rotate_2=function(){return(Zi=n._emscripten_bind_btVector4_rotate_2=n.asm.hf).apply(null,arguments)},Yi=n._emscripten_bind_btVector4_dot_1=function(){return(Yi=n._emscripten_bind_btVector4_dot_1=n.asm.jf).apply(null,arguments)},Ji=n._emscripten_bind_btVector4_op_mul_1=function(){return(Ji=n._emscripten_bind_btVector4_op_mul_1=n.asm.kf).apply(null,arguments)},$i=n._emscripten_bind_btVector4_op_add_1=function(){return($i=n._emscripten_bind_btVector4_op_add_1=n.asm.lf).apply(null,arguments)},tr=n._emscripten_bind_btVector4_op_sub_1=function(){return(tr=n._emscripten_bind_btVector4_op_sub_1=n.asm.mf).apply(null,arguments)},er=n._emscripten_bind_btVector4___destroy___0=function(){return(er=n._emscripten_bind_btVector4___destroy___0=n.asm.nf).apply(null,arguments)},nr=n._emscripten_bind_btQuaternion_btQuaternion_4=function(){return(nr=n._emscripten_bind_btQuaternion_btQuaternion_4=n.asm.of).apply(null,arguments)},or=n._emscripten_bind_btQuaternion_setValue_4=function(){return(or=n._emscripten_bind_btQuaternion_setValue_4=n.asm.pf).apply(null,arguments)},_r=n._emscripten_bind_btQuaternion_setEulerZYX_3=function(){return(_r=n._emscripten_bind_btQuaternion_setEulerZYX_3=n.asm.qf).apply(null,arguments)},ir=n._emscripten_bind_btQuaternion_setRotation_2=function(){return(ir=n._emscripten_bind_btQuaternion_setRotation_2=n.asm.rf).apply(null,arguments)},rr=n._emscripten_bind_btQuaternion_normalize_0=function(){return(rr=n._emscripten_bind_btQuaternion_normalize_0=n.asm.sf).apply(null,arguments)},pr=n._emscripten_bind_btQuaternion_length2_0=function(){return(pr=n._emscripten_bind_btQuaternion_length2_0=n.asm.tf).apply(null,arguments)},sr=n._emscripten_bind_btQuaternion_length_0=function(){return(sr=n._emscripten_bind_btQuaternion_length_0=n.asm.uf).apply(null,arguments)},cr=n._emscripten_bind_btQuaternion_dot_1=function(){return(cr=n._emscripten_bind_btQuaternion_dot_1=n.asm.vf).apply(null,arguments)},ar=n._emscripten_bind_btQuaternion_normalized_0=function(){return(ar=n._emscripten_bind_btQuaternion_normalized_0=n.asm.wf).apply(null,arguments)},lr=n._emscripten_bind_btQuaternion_getAxis_0=function(){return(lr=n._emscripten_bind_btQuaternion_getAxis_0=n.asm.xf).apply(null,arguments)},ur=n._emscripten_bind_btQuaternion_inverse_0=function(){return(ur=n._emscripten_bind_btQuaternion_inverse_0=n.asm.yf).apply(null,arguments)},br=n._emscripten_bind_btQuaternion_getAngle_0=function(){return(br=n._emscripten_bind_btQuaternion_getAngle_0=n.asm.zf).apply(null,arguments)},mr=n._emscripten_bind_btQuaternion_getAngleShortestPath_0=function(){return(mr=n._emscripten_bind_btQuaternion_getAngleShortestPath_0=n.asm.Af).apply(null,arguments)},yr=n._emscripten_bind_btQuaternion_angle_1=function(){return(yr=n._emscripten_bind_btQuaternion_angle_1=n.asm.Bf).apply(null,arguments)},dr=n._emscripten_bind_btQuaternion_angleShortestPath_1=function(){return(dr=n._emscripten_bind_btQuaternion_angleShortestPath_1=n.asm.Cf).apply(null,arguments)},fr=n._emscripten_bind_btQuaternion_op_add_1=function(){return(fr=n._emscripten_bind_btQuaternion_op_add_1=n.asm.Df).apply(null,arguments)},hr=n._emscripten_bind_btQuaternion_op_sub_1=function(){return(hr=n._emscripten_bind_btQuaternion_op_sub_1=n.asm.Ef).apply(null,arguments)},Br=n._emscripten_bind_btQuaternion_op_mul_1=function(){return(Br=n._emscripten_bind_btQuaternion_op_mul_1=n.asm.Ff).apply(null,arguments)},gr=n._emscripten_bind_btQuaternion_op_mulq_1=function(){return(gr=n._emscripten_bind_btQuaternion_op_mulq_1=n.asm.Gf).apply(null,arguments)},kr=n._emscripten_bind_btQuaternion_op_div_1=function(){return(kr=n._emscripten_bind_btQuaternion_op_div_1=n.asm.Hf).apply(null,arguments)},Cr=n._emscripten_bind_btQuaternion_x_0=function(){return(Cr=n._emscripten_bind_btQuaternion_x_0=n.asm.If).apply(null,arguments)},Sr=n._emscripten_bind_btQuaternion_y_0=function(){return(Sr=n._emscripten_bind_btQuaternion_y_0=n.asm.Jf).apply(null,arguments)},jr=n._emscripten_bind_btQuaternion_z_0=function(){return(jr=n._emscripten_bind_btQuaternion_z_0=n.asm.Kf).apply(null,arguments)},vr=n._emscripten_bind_btQuaternion_w_0=function(){return(vr=n._emscripten_bind_btQuaternion_w_0=n.asm.Lf).apply(null,arguments)},Ir=n._emscripten_bind_btQuaternion_setX_1=function(){return(Ir=n._emscripten_bind_btQuaternion_setX_1=n.asm.Mf).apply(null,arguments)},Rr=n._emscripten_bind_btQuaternion_setY_1=function(){return(Rr=n._emscripten_bind_btQuaternion_setY_1=n.asm.Nf).apply(null,arguments)},Dr=n._emscripten_bind_btQuaternion_setZ_1=function(){return(Dr=n._emscripten_bind_btQuaternion_setZ_1=n.asm.Of).apply(null,arguments)},Pr=n._emscripten_bind_btQuaternion_setW_1=function(){return(Pr=n._emscripten_bind_btQuaternion_setW_1=n.asm.Pf).apply(null,arguments)},Tr=n._emscripten_bind_btQuaternion___destroy___0=function(){return(Tr=n._emscripten_bind_btQuaternion___destroy___0=n.asm.Qf).apply(null,arguments)},Or=n._emscripten_bind_btMatrix3x3_setEulerZYX_3=function(){return(Or=n._emscripten_bind_btMatrix3x3_setEulerZYX_3=n.asm.Rf).apply(null,arguments)},Wr=n._emscripten_bind_btMatrix3x3_getRotation_1=function(){return(Wr=n._emscripten_bind_btMatrix3x3_getRotation_1=n.asm.Sf).apply(null,arguments)},Ar=n._emscripten_bind_btMatrix3x3_getRow_1=function(){return(Ar=n._emscripten_bind_btMatrix3x3_getRow_1=n.asm.Tf).apply(null,arguments)},Mr=n._emscripten_bind_btMatrix3x3___destroy___0=function(){return(Mr=n._emscripten_bind_btMatrix3x3___destroy___0=n.asm.Uf).apply(null,arguments)},xr=n._emscripten_bind_btTransform_btTransform_0=function(){return(xr=n._emscripten_bind_btTransform_btTransform_0=n.asm.Vf).apply(null,arguments)},Fr=n._emscripten_bind_btTransform_btTransform_2=function(){return(Fr=n._emscripten_bind_btTransform_btTransform_2=n.asm.Wf).apply(null,arguments)},Lr=n._emscripten_bind_btTransform_setIdentity_0=function(){return(Lr=n._emscripten_bind_btTransform_setIdentity_0=n.asm.Xf).apply(null,arguments)},Gr=n._emscripten_bind_btTransform_setOrigin_1=function(){return(Gr=n._emscripten_bind_btTransform_setOrigin_1=n.asm.Yf).apply(null,arguments)},wr=n._emscripten_bind_btTransform_setRotation_1=function(){return(wr=n._emscripten_bind_btTransform_setRotation_1=n.asm.Zf).apply(null,arguments)},Hr=n._emscripten_bind_btTransform_getOrigin_0=function(){return(Hr=n._emscripten_bind_btTransform_getOrigin_0=n.asm._f).apply(null,arguments)},Vr=n._emscripten_bind_btTransform_getRotation_0=function(){return(Vr=n._emscripten_bind_btTransform_getRotation_0=n.asm.$f).apply(null,arguments)},Er=n._emscripten_bind_btTransform_getBasis_0=function(){return(Er=n._emscripten_bind_btTransform_getBasis_0=n.asm.ag).apply(null,arguments)},Nr=n._emscripten_bind_btTransform_setFromOpenGLMatrix_1=function(){return(Nr=n._emscripten_bind_btTransform_setFromOpenGLMatrix_1=n.asm.bg).apply(null,arguments)},Ur=n._emscripten_bind_btTransform_inverse_0=function(){return(Ur=n._emscripten_bind_btTransform_inverse_0=n.asm.cg).apply(null,arguments)},zr=n._emscripten_bind_btTransform_op_mul_1=function(){return(zr=n._emscripten_bind_btTransform_op_mul_1=n.asm.dg).apply(null,arguments)},qr=n._emscripten_bind_btTransform___destroy___0=function(){return(qr=n._emscripten_bind_btTransform___destroy___0=n.asm.eg).apply(null,arguments)},Kr=n._emscripten_bind_MotionState_MotionState_0=function(){return(Kr=n._emscripten_bind_MotionState_MotionState_0=n.asm.fg).apply(null,arguments)},Qr=n._emscripten_bind_MotionState_getWorldTransform_1=function(){return(Qr=n._emscripten_bind_MotionState_getWorldTransform_1=n.asm.gg).apply(null,arguments)},Xr=n._emscripten_bind_MotionState_setWorldTransform_1=function(){return(Xr=n._emscripten_bind_MotionState_setWorldTransform_1=n.asm.hg).apply(null,arguments)},Zr=n._emscripten_bind_MotionState___destroy___0=function(){return(Zr=n._emscripten_bind_MotionState___destroy___0=n.asm.ig).apply(null,arguments)},Yr=n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_0=function(){return(Yr=n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_0=n.asm.jg).apply(null,arguments)},Jr=n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_1=function(){return(Jr=n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_1=n.asm.kg).apply(null,arguments)},$r=n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_2=function(){return($r=n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_2=n.asm.lg).apply(null,arguments)},tp=n._emscripten_bind_btDefaultMotionState_getWorldTransform_1=function(){return(tp=n._emscripten_bind_btDefaultMotionState_getWorldTransform_1=n.asm.mg).apply(null,arguments)},ep=n._emscripten_bind_btDefaultMotionState_setWorldTransform_1=function(){return(ep=n._emscripten_bind_btDefaultMotionState_setWorldTransform_1=n.asm.ng).apply(null,arguments)},np=n._emscripten_bind_btDefaultMotionState_get_m_graphicsWorldTrans_0=function(){return(np=n._emscripten_bind_btDefaultMotionState_get_m_graphicsWorldTrans_0=n.asm.og).apply(null,arguments)},op=n._emscripten_bind_btDefaultMotionState_set_m_graphicsWorldTrans_1=function(){return(op=n._emscripten_bind_btDefaultMotionState_set_m_graphicsWorldTrans_1=n.asm.pg).apply(null,arguments)},_p=n._emscripten_bind_btDefaultMotionState___destroy___0=function(){return(_p=n._emscripten_bind_btDefaultMotionState___destroy___0=n.asm.qg).apply(null,arguments)},ip=n._emscripten_bind_btCollisionObjectWrapper_getWorldTransform_0=function(){return(ip=n._emscripten_bind_btCollisionObjectWrapper_getWorldTransform_0=n.asm.rg).apply(null,arguments)},rp=n._emscripten_bind_btCollisionObjectWrapper_getCollisionObject_0=function(){return(rp=n._emscripten_bind_btCollisionObjectWrapper_getCollisionObject_0=n.asm.sg).apply(null,arguments)},pp=n._emscripten_bind_btCollisionObjectWrapper_getCollisionShape_0=function(){return(pp=n._emscripten_bind_btCollisionObjectWrapper_getCollisionShape_0=n.asm.tg).apply(null,arguments)},sp=n._emscripten_bind_ClosestRayResultCallback_ClosestRayResultCallback_2=function(){return(sp=n._emscripten_bind_ClosestRayResultCallback_ClosestRayResultCallback_2=n.asm.ug).apply(null,arguments)},cp=n._emscripten_bind_ClosestRayResultCallback_hasHit_0=function(){return(cp=n._emscripten_bind_ClosestRayResultCallback_hasHit_0=n.asm.vg).apply(null,arguments)},ap=n._emscripten_bind_ClosestRayResultCallback_get_m_rayFromWorld_0=function(){return(ap=n._emscripten_bind_ClosestRayResultCallback_get_m_rayFromWorld_0=n.asm.wg).apply(null,arguments)},lp=n._emscripten_bind_ClosestRayResultCallback_set_m_rayFromWorld_1=function(){return(lp=n._emscripten_bind_ClosestRayResultCallback_set_m_rayFromWorld_1=n.asm.xg).apply(null,arguments)},up=n._emscripten_bind_ClosestRayResultCallback_get_m_rayToWorld_0=function(){return(up=n._emscripten_bind_ClosestRayResultCallback_get_m_rayToWorld_0=n.asm.yg).apply(null,arguments)},bp=n._emscripten_bind_ClosestRayResultCallback_set_m_rayToWorld_1=function(){return(bp=n._emscripten_bind_ClosestRayResultCallback_set_m_rayToWorld_1=n.asm.zg).apply(null,arguments)},mp=n._emscripten_bind_ClosestRayResultCallback_get_m_hitNormalWorld_0=function(){return(mp=n._emscripten_bind_ClosestRayResultCallback_get_m_hitNormalWorld_0=n.asm.Ag).apply(null,arguments)},yp=n._emscripten_bind_ClosestRayResultCallback_set_m_hitNormalWorld_1=function(){return(yp=n._emscripten_bind_ClosestRayResultCallback_set_m_hitNormalWorld_1=n.asm.Bg).apply(null,arguments)},dp=n._emscripten_bind_ClosestRayResultCallback_get_m_hitPointWorld_0=function(){return(dp=n._emscripten_bind_ClosestRayResultCallback_get_m_hitPointWorld_0=n.asm.Cg).apply(null,arguments)},fp=n._emscripten_bind_ClosestRayResultCallback_set_m_hitPointWorld_1=function(){return(fp=n._emscripten_bind_ClosestRayResultCallback_set_m_hitPointWorld_1=n.asm.Dg).apply(null,arguments)},hp=n._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterGroup_0=function(){return(hp=n._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterGroup_0=n.asm.Eg).apply(null,arguments)},Bp=n._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterGroup_1=function(){return(Bp=n._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterGroup_1=n.asm.Fg).apply(null,arguments)},gp=n._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterMask_0=function(){return(gp=n._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterMask_0=n.asm.Gg).apply(null,arguments)},kp=n._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterMask_1=function(){return(kp=n._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterMask_1=n.asm.Hg).apply(null,arguments)},Cp=n._emscripten_bind_ClosestRayResultCallback_get_m_closestHitFraction_0=function(){return(Cp=n._emscripten_bind_ClosestRayResultCallback_get_m_closestHitFraction_0=n.asm.Ig).apply(null,arguments)},Sp=n._emscripten_bind_ClosestRayResultCallback_set_m_closestHitFraction_1=function(){return(Sp=n._emscripten_bind_ClosestRayResultCallback_set_m_closestHitFraction_1=n.asm.Jg).apply(null,arguments)},jp=n._emscripten_bind_ClosestRayResultCallback_get_m_collisionObject_0=function(){return(jp=n._emscripten_bind_ClosestRayResultCallback_get_m_collisionObject_0=n.asm.Kg).apply(null,arguments)},vp=n._emscripten_bind_ClosestRayResultCallback_set_m_collisionObject_1=function(){return(vp=n._emscripten_bind_ClosestRayResultCallback_set_m_collisionObject_1=n.asm.Lg).apply(null,arguments)},Ip=n._emscripten_bind_ClosestRayResultCallback_get_m_flags_0=function(){return(Ip=n._emscripten_bind_ClosestRayResultCallback_get_m_flags_0=n.asm.Mg).apply(null,arguments)},Rp=n._emscripten_bind_ClosestRayResultCallback_set_m_flags_1=function(){return(Rp=n._emscripten_bind_ClosestRayResultCallback_set_m_flags_1=n.asm.Ng).apply(null,arguments)},Dp=n._emscripten_bind_ClosestRayResultCallback___destroy___0=function(){return(Dp=n._emscripten_bind_ClosestRayResultCallback___destroy___0=n.asm.Og).apply(null,arguments)},Pp=n._emscripten_bind_btConstCollisionObjectArray_size_0=function(){return(Pp=n._emscripten_bind_btConstCollisionObjectArray_size_0=n.asm.Pg).apply(null,arguments)},Tp=n._emscripten_bind_btConstCollisionObjectArray_at_1=function(){return(Tp=n._emscripten_bind_btConstCollisionObjectArray_at_1=n.asm.Qg).apply(null,arguments)},Op=n._emscripten_bind_btConstCollisionObjectArray___destroy___0=function(){return(Op=n._emscripten_bind_btConstCollisionObjectArray___destroy___0=n.asm.Rg).apply(null,arguments)},Wp=n._emscripten_bind_btScalarArray_size_0=function(){return(Wp=n._emscripten_bind_btScalarArray_size_0=n.asm.Sg).apply(null,arguments)},Ap=n._emscripten_bind_btScalarArray_at_1=function(){return(Ap=n._emscripten_bind_btScalarArray_at_1=n.asm.Tg).apply(null,arguments)},Mp=n._emscripten_bind_btScalarArray___destroy___0=function(){return(Mp=n._emscripten_bind_btScalarArray___destroy___0=n.asm.Ug).apply(null,arguments)},xp=n._emscripten_bind_AllHitsRayResultCallback_AllHitsRayResultCallback_2=function(){return(xp=n._emscripten_bind_AllHitsRayResultCallback_AllHitsRayResultCallback_2=n.asm.Vg).apply(null,arguments)},Fp=n._emscripten_bind_AllHitsRayResultCallback_hasHit_0=function(){return(Fp=n._emscripten_bind_AllHitsRayResultCallback_hasHit_0=n.asm.Wg).apply(null,arguments)},Lp=n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionObjects_0=function(){return(Lp=n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionObjects_0=n.asm.Xg).apply(null,arguments)},Gp=n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionObjects_1=function(){return(Gp=n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionObjects_1=n.asm.Yg).apply(null,arguments)},wp=n._emscripten_bind_AllHitsRayResultCallback_get_m_rayFromWorld_0=function(){return(wp=n._emscripten_bind_AllHitsRayResultCallback_get_m_rayFromWorld_0=n.asm.Zg).apply(null,arguments)},Hp=n._emscripten_bind_AllHitsRayResultCallback_set_m_rayFromWorld_1=function(){return(Hp=n._emscripten_bind_AllHitsRayResultCallback_set_m_rayFromWorld_1=n.asm._g).apply(null,arguments)},Vp=n._emscripten_bind_AllHitsRayResultCallback_get_m_rayToWorld_0=function(){return(Vp=n._emscripten_bind_AllHitsRayResultCallback_get_m_rayToWorld_0=n.asm.$g).apply(null,arguments)},Ep=n._emscripten_bind_AllHitsRayResultCallback_set_m_rayToWorld_1=function(){return(Ep=n._emscripten_bind_AllHitsRayResultCallback_set_m_rayToWorld_1=n.asm.ah).apply(null,arguments)},Np=n._emscripten_bind_AllHitsRayResultCallback_get_m_hitNormalWorld_0=function(){return(Np=n._emscripten_bind_AllHitsRayResultCallback_get_m_hitNormalWorld_0=n.asm.bh).apply(null,arguments)},Up=n._emscripten_bind_AllHitsRayResultCallback_set_m_hitNormalWorld_1=function(){return(Up=n._emscripten_bind_AllHitsRayResultCallback_set_m_hitNormalWorld_1=n.asm.ch).apply(null,arguments)},zp=n._emscripten_bind_AllHitsRayResultCallback_get_m_hitPointWorld_0=function(){return(zp=n._emscripten_bind_AllHitsRayResultCallback_get_m_hitPointWorld_0=n.asm.dh).apply(null,arguments)},qp=n._emscripten_bind_AllHitsRayResultCallback_set_m_hitPointWorld_1=function(){return(qp=n._emscripten_bind_AllHitsRayResultCallback_set_m_hitPointWorld_1=n.asm.eh).apply(null,arguments)},Kp=n._emscripten_bind_AllHitsRayResultCallback_get_m_hitFractions_0=function(){return(Kp=n._emscripten_bind_AllHitsRayResultCallback_get_m_hitFractions_0=n.asm.fh).apply(null,arguments)},Qp=n._emscripten_bind_AllHitsRayResultCallback_set_m_hitFractions_1=function(){return(Qp=n._emscripten_bind_AllHitsRayResultCallback_set_m_hitFractions_1=n.asm.gh).apply(null,arguments)},Xp=n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionFilterGroup_0=function(){return(Xp=n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionFilterGroup_0=n.asm.hh).apply(null,arguments)},Zp=n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionFilterGroup_1=function(){return(Zp=n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionFilterGroup_1=n.asm.ih).apply(null,arguments)},Yp=n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionFilterMask_0=function(){return(Yp=n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionFilterMask_0=n.asm.jh).apply(null,arguments)},Jp=n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionFilterMask_1=function(){return(Jp=n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionFilterMask_1=n.asm.kh).apply(null,arguments)},$p=n._emscripten_bind_AllHitsRayResultCallback_get_m_closestHitFraction_0=function(){return($p=n._emscripten_bind_AllHitsRayResultCallback_get_m_closestHitFraction_0=n.asm.lh).apply(null,arguments)},ts=n._emscripten_bind_AllHitsRayResultCallback_set_m_closestHitFraction_1=function(){return(ts=n._emscripten_bind_AllHitsRayResultCallback_set_m_closestHitFraction_1=n.asm.mh).apply(null,arguments)},es=n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionObject_0=function(){return(es=n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionObject_0=n.asm.nh).apply(null,arguments)},ns=n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionObject_1=function(){return(ns=n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionObject_1=n.asm.oh).apply(null,arguments)},os=n._emscripten_bind_AllHitsRayResultCallback_get_m_flags_0=function(){return(os=n._emscripten_bind_AllHitsRayResultCallback_get_m_flags_0=n.asm.ph).apply(null,arguments)},_s=n._emscripten_bind_AllHitsRayResultCallback_set_m_flags_1=function(){return(_s=n._emscripten_bind_AllHitsRayResultCallback_set_m_flags_1=n.asm.qh).apply(null,arguments)},is=n._emscripten_bind_AllHitsRayResultCallback___destroy___0=function(){return(is=n._emscripten_bind_AllHitsRayResultCallback___destroy___0=n.asm.rh).apply(null,arguments)},rs=n._emscripten_bind_btManifoldPoint_getPositionWorldOnA_0=function(){return(rs=n._emscripten_bind_btManifoldPoint_getPositionWorldOnA_0=n.asm.sh).apply(null,arguments)},ps=n._emscripten_bind_btManifoldPoint_getPositionWorldOnB_0=function(){return(ps=n._emscripten_bind_btManifoldPoint_getPositionWorldOnB_0=n.asm.th).apply(null,arguments)},ss=n._emscripten_bind_btManifoldPoint_getAppliedImpulse_0=function(){return(ss=n._emscripten_bind_btManifoldPoint_getAppliedImpulse_0=n.asm.uh).apply(null,arguments)},cs=n._emscripten_bind_btManifoldPoint_getDistance_0=function(){return(cs=n._emscripten_bind_btManifoldPoint_getDistance_0=n.asm.vh).apply(null,arguments)},as=n._emscripten_bind_btManifoldPoint_get_m_localPointA_0=function(){return(as=n._emscripten_bind_btManifoldPoint_get_m_localPointA_0=n.asm.wh).apply(null,arguments)},ls=n._emscripten_bind_btManifoldPoint_set_m_localPointA_1=function(){return(ls=n._emscripten_bind_btManifoldPoint_set_m_localPointA_1=n.asm.xh).apply(null,arguments)},us=n._emscripten_bind_btManifoldPoint_get_m_localPointB_0=function(){return(us=n._emscripten_bind_btManifoldPoint_get_m_localPointB_0=n.asm.yh).apply(null,arguments)},bs=n._emscripten_bind_btManifoldPoint_set_m_localPointB_1=function(){return(bs=n._emscripten_bind_btManifoldPoint_set_m_localPointB_1=n.asm.zh).apply(null,arguments)},ms=n._emscripten_bind_btManifoldPoint_get_m_positionWorldOnB_0=function(){return(ms=n._emscripten_bind_btManifoldPoint_get_m_positionWorldOnB_0=n.asm.Ah).apply(null,arguments)},ys=n._emscripten_bind_btManifoldPoint_set_m_positionWorldOnB_1=function(){return(ys=n._emscripten_bind_btManifoldPoint_set_m_positionWorldOnB_1=n.asm.Bh).apply(null,arguments)},ds=n._emscripten_bind_btManifoldPoint_get_m_positionWorldOnA_0=function(){return(ds=n._emscripten_bind_btManifoldPoint_get_m_positionWorldOnA_0=n.asm.Ch).apply(null,arguments)},fs=n._emscripten_bind_btManifoldPoint_set_m_positionWorldOnA_1=function(){return(fs=n._emscripten_bind_btManifoldPoint_set_m_positionWorldOnA_1=n.asm.Dh).apply(null,arguments)},hs=n._emscripten_bind_btManifoldPoint_get_m_normalWorldOnB_0=function(){return(hs=n._emscripten_bind_btManifoldPoint_get_m_normalWorldOnB_0=n.asm.Eh).apply(null,arguments)},Bs=n._emscripten_bind_btManifoldPoint_set_m_normalWorldOnB_1=function(){return(Bs=n._emscripten_bind_btManifoldPoint_set_m_normalWorldOnB_1=n.asm.Fh).apply(null,arguments)},gs=n._emscripten_bind_btManifoldPoint_get_m_userPersistentData_0=function(){return(gs=n._emscripten_bind_btManifoldPoint_get_m_userPersistentData_0=n.asm.Gh).apply(null,arguments)},ks=n._emscripten_bind_btManifoldPoint_set_m_userPersistentData_1=function(){return(ks=n._emscripten_bind_btManifoldPoint_set_m_userPersistentData_1=n.asm.Hh).apply(null,arguments)},Cs=n._emscripten_bind_btManifoldPoint___destroy___0=function(){return(Cs=n._emscripten_bind_btManifoldPoint___destroy___0=n.asm.Ih).apply(null,arguments)},Ss=n._emscripten_bind_ConcreteContactResultCallback_ConcreteContactResultCallback_0=function(){return(Ss=n._emscripten_bind_ConcreteContactResultCallback_ConcreteContactResultCallback_0=n.asm.Jh).apply(null,arguments)},js=n._emscripten_bind_ConcreteContactResultCallback_addSingleResult_7=function(){return(js=n._emscripten_bind_ConcreteContactResultCallback_addSingleResult_7=n.asm.Kh).apply(null,arguments)},vs=n._emscripten_bind_ConcreteContactResultCallback___destroy___0=function(){return(vs=n._emscripten_bind_ConcreteContactResultCallback___destroy___0=n.asm.Lh).apply(null,arguments)},Is=n._emscripten_bind_LocalShapeInfo_get_m_shapePart_0=function(){return(Is=n._emscripten_bind_LocalShapeInfo_get_m_shapePart_0=n.asm.Mh).apply(null,arguments)},Rs=n._emscripten_bind_LocalShapeInfo_set_m_shapePart_1=function(){return(Rs=n._emscripten_bind_LocalShapeInfo_set_m_shapePart_1=n.asm.Nh).apply(null,arguments)},Ds=n._emscripten_bind_LocalShapeInfo_get_m_triangleIndex_0=function(){return(Ds=n._emscripten_bind_LocalShapeInfo_get_m_triangleIndex_0=n.asm.Oh).apply(null,arguments)},Ps=n._emscripten_bind_LocalShapeInfo_set_m_triangleIndex_1=function(){return(Ps=n._emscripten_bind_LocalShapeInfo_set_m_triangleIndex_1=n.asm.Ph).apply(null,arguments)},Ts=n._emscripten_bind_LocalShapeInfo___destroy___0=function(){return(Ts=n._emscripten_bind_LocalShapeInfo___destroy___0=n.asm.Qh).apply(null,arguments)},Os=n._emscripten_bind_LocalConvexResult_LocalConvexResult_5=function(){return(Os=n._emscripten_bind_LocalConvexResult_LocalConvexResult_5=n.asm.Rh).apply(null,arguments)},Ws=n._emscripten_bind_LocalConvexResult_get_m_hitCollisionObject_0=function(){return(Ws=n._emscripten_bind_LocalConvexResult_get_m_hitCollisionObject_0=n.asm.Sh).apply(null,arguments)},As=n._emscripten_bind_LocalConvexResult_set_m_hitCollisionObject_1=function(){return(As=n._emscripten_bind_LocalConvexResult_set_m_hitCollisionObject_1=n.asm.Th).apply(null,arguments)},Ms=n._emscripten_bind_LocalConvexResult_get_m_localShapeInfo_0=function(){return(Ms=n._emscripten_bind_LocalConvexResult_get_m_localShapeInfo_0=n.asm.Uh).apply(null,arguments)},xs=n._emscripten_bind_LocalConvexResult_set_m_localShapeInfo_1=function(){return(xs=n._emscripten_bind_LocalConvexResult_set_m_localShapeInfo_1=n.asm.Vh).apply(null,arguments)},Fs=n._emscripten_bind_LocalConvexResult_get_m_hitNormalLocal_0=function(){return(Fs=n._emscripten_bind_LocalConvexResult_get_m_hitNormalLocal_0=n.asm.Wh).apply(null,arguments)},Ls=n._emscripten_bind_LocalConvexResult_set_m_hitNormalLocal_1=function(){return(Ls=n._emscripten_bind_LocalConvexResult_set_m_hitNormalLocal_1=n.asm.Xh).apply(null,arguments)},Gs=n._emscripten_bind_LocalConvexResult_get_m_hitPointLocal_0=function(){return(Gs=n._emscripten_bind_LocalConvexResult_get_m_hitPointLocal_0=n.asm.Yh).apply(null,arguments)},ws=n._emscripten_bind_LocalConvexResult_set_m_hitPointLocal_1=function(){return(ws=n._emscripten_bind_LocalConvexResult_set_m_hitPointLocal_1=n.asm.Zh).apply(null,arguments)},Hs=n._emscripten_bind_LocalConvexResult_get_m_hitFraction_0=function(){return(Hs=n._emscripten_bind_LocalConvexResult_get_m_hitFraction_0=n.asm._h).apply(null,arguments)},Vs=n._emscripten_bind_LocalConvexResult_set_m_hitFraction_1=function(){return(Vs=n._emscripten_bind_LocalConvexResult_set_m_hitFraction_1=n.asm.$h).apply(null,arguments)},Es=n._emscripten_bind_LocalConvexResult___destroy___0=function(){return(Es=n._emscripten_bind_LocalConvexResult___destroy___0=n.asm.ai).apply(null,arguments)},Ns=n._emscripten_bind_ClosestConvexResultCallback_ClosestConvexResultCallback_2=function(){return(Ns=n._emscripten_bind_ClosestConvexResultCallback_ClosestConvexResultCallback_2=n.asm.bi).apply(null,arguments)},Us=n._emscripten_bind_ClosestConvexResultCallback_hasHit_0=function(){return(Us=n._emscripten_bind_ClosestConvexResultCallback_hasHit_0=n.asm.ci).apply(null,arguments)},zs=n._emscripten_bind_ClosestConvexResultCallback_get_m_hitCollisionObject_0=function(){return(zs=n._emscripten_bind_ClosestConvexResultCallback_get_m_hitCollisionObject_0=n.asm.di).apply(null,arguments)},qs=n._emscripten_bind_ClosestConvexResultCallback_set_m_hitCollisionObject_1=function(){return(qs=n._emscripten_bind_ClosestConvexResultCallback_set_m_hitCollisionObject_1=n.asm.ei).apply(null,arguments)},Ks=n._emscripten_bind_ClosestConvexResultCallback_get_m_convexFromWorld_0=function(){return(Ks=n._emscripten_bind_ClosestConvexResultCallback_get_m_convexFromWorld_0=n.asm.fi).apply(null,arguments)},Qs=n._emscripten_bind_ClosestConvexResultCallback_set_m_convexFromWorld_1=function(){return(Qs=n._emscripten_bind_ClosestConvexResultCallback_set_m_convexFromWorld_1=n.asm.gi).apply(null,arguments)},Xs=n._emscripten_bind_ClosestConvexResultCallback_get_m_convexToWorld_0=function(){return(Xs=n._emscripten_bind_ClosestConvexResultCallback_get_m_convexToWorld_0=n.asm.hi).apply(null,arguments)},Zs=n._emscripten_bind_ClosestConvexResultCallback_set_m_convexToWorld_1=function(){return(Zs=n._emscripten_bind_ClosestConvexResultCallback_set_m_convexToWorld_1=n.asm.ii).apply(null,arguments)},Ys=n._emscripten_bind_ClosestConvexResultCallback_get_m_hitNormalWorld_0=function(){return(Ys=n._emscripten_bind_ClosestConvexResultCallback_get_m_hitNormalWorld_0=n.asm.ji).apply(null,arguments)},Js=n._emscripten_bind_ClosestConvexResultCallback_set_m_hitNormalWorld_1=function(){return(Js=n._emscripten_bind_ClosestConvexResultCallback_set_m_hitNormalWorld_1=n.asm.ki).apply(null,arguments)},$s=n._emscripten_bind_ClosestConvexResultCallback_get_m_hitPointWorld_0=function(){return($s=n._emscripten_bind_ClosestConvexResultCallback_get_m_hitPointWorld_0=n.asm.li).apply(null,arguments)},tc=n._emscripten_bind_ClosestConvexResultCallback_set_m_hitPointWorld_1=function(){return(tc=n._emscripten_bind_ClosestConvexResultCallback_set_m_hitPointWorld_1=n.asm.mi).apply(null,arguments)},ec=n._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterGroup_0=function(){return(ec=n._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterGroup_0=n.asm.ni).apply(null,arguments)},nc=n._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterGroup_1=function(){return(nc=n._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterGroup_1=n.asm.oi).apply(null,arguments)},oc=n._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterMask_0=function(){return(oc=n._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterMask_0=n.asm.pi).apply(null,arguments)},_c=n._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterMask_1=function(){return(_c=n._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterMask_1=n.asm.qi).apply(null,arguments)},ic=n._emscripten_bind_ClosestConvexResultCallback_get_m_closestHitFraction_0=function(){return(ic=n._emscripten_bind_ClosestConvexResultCallback_get_m_closestHitFraction_0=n.asm.ri).apply(null,arguments)},rc=n._emscripten_bind_ClosestConvexResultCallback_set_m_closestHitFraction_1=function(){return(rc=n._emscripten_bind_ClosestConvexResultCallback_set_m_closestHitFraction_1=n.asm.si).apply(null,arguments)},pc=n._emscripten_bind_ClosestConvexResultCallback___destroy___0=function(){return(pc=n._emscripten_bind_ClosestConvexResultCallback___destroy___0=n.asm.ti).apply(null,arguments)},sc=n._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_1=function(){return(sc=n._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_1=n.asm.ui).apply(null,arguments)},cc=n._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_2=function(){return(cc=n._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_2=n.asm.vi).apply(null,arguments)},ac=n._emscripten_bind_btConvexTriangleMeshShape_setLocalScaling_1=function(){return(ac=n._emscripten_bind_btConvexTriangleMeshShape_setLocalScaling_1=n.asm.wi).apply(null,arguments)},lc=n._emscripten_bind_btConvexTriangleMeshShape_getLocalScaling_0=function(){return(lc=n._emscripten_bind_btConvexTriangleMeshShape_getLocalScaling_0=n.asm.xi).apply(null,arguments)},uc=n._emscripten_bind_btConvexTriangleMeshShape_calculateLocalInertia_2=function(){return(uc=n._emscripten_bind_btConvexTriangleMeshShape_calculateLocalInertia_2=n.asm.yi).apply(null,arguments)},bc=n._emscripten_bind_btConvexTriangleMeshShape_setMargin_1=function(){return(bc=n._emscripten_bind_btConvexTriangleMeshShape_setMargin_1=n.asm.zi).apply(null,arguments)},mc=n._emscripten_bind_btConvexTriangleMeshShape_getMargin_0=function(){return(mc=n._emscripten_bind_btConvexTriangleMeshShape_getMargin_0=n.asm.Ai).apply(null,arguments)},yc=n._emscripten_bind_btConvexTriangleMeshShape___destroy___0=function(){return(yc=n._emscripten_bind_btConvexTriangleMeshShape___destroy___0=n.asm.Bi).apply(null,arguments)},dc=n._emscripten_bind_btBoxShape_btBoxShape_1=function(){return(dc=n._emscripten_bind_btBoxShape_btBoxShape_1=n.asm.Ci).apply(null,arguments)},fc=n._emscripten_bind_btBoxShape_setMargin_1=function(){return(fc=n._emscripten_bind_btBoxShape_setMargin_1=n.asm.Di).apply(null,arguments)},hc=n._emscripten_bind_btBoxShape_getMargin_0=function(){return(hc=n._emscripten_bind_btBoxShape_getMargin_0=n.asm.Ei).apply(null,arguments)},Bc=n._emscripten_bind_btBoxShape_setLocalScaling_1=function(){return(Bc=n._emscripten_bind_btBoxShape_setLocalScaling_1=n.asm.Fi).apply(null,arguments)},gc=n._emscripten_bind_btBoxShape_getLocalScaling_0=function(){return(gc=n._emscripten_bind_btBoxShape_getLocalScaling_0=n.asm.Gi).apply(null,arguments)},kc=n._emscripten_bind_btBoxShape_calculateLocalInertia_2=function(){return(kc=n._emscripten_bind_btBoxShape_calculateLocalInertia_2=n.asm.Hi).apply(null,arguments)},Cc=n._emscripten_bind_btBoxShape___destroy___0=function(){return(Cc=n._emscripten_bind_btBoxShape___destroy___0=n.asm.Ii).apply(null,arguments)},Sc=n._emscripten_bind_btCapsuleShapeX_btCapsuleShapeX_2=function(){return(Sc=n._emscripten_bind_btCapsuleShapeX_btCapsuleShapeX_2=n.asm.Ji).apply(null,arguments)},jc=n._emscripten_bind_btCapsuleShapeX_setMargin_1=function(){return(jc=n._emscripten_bind_btCapsuleShapeX_setMargin_1=n.asm.Ki).apply(null,arguments)},vc=n._emscripten_bind_btCapsuleShapeX_getMargin_0=function(){return(vc=n._emscripten_bind_btCapsuleShapeX_getMargin_0=n.asm.Li).apply(null,arguments)},Ic=n._emscripten_bind_btCapsuleShapeX_getUpAxis_0=function(){return(Ic=n._emscripten_bind_btCapsuleShapeX_getUpAxis_0=n.asm.Mi).apply(null,arguments)},Rc=n._emscripten_bind_btCapsuleShapeX_getRadius_0=function(){return(Rc=n._emscripten_bind_btCapsuleShapeX_getRadius_0=n.asm.Ni).apply(null,arguments)},Dc=n._emscripten_bind_btCapsuleShapeX_getHalfHeight_0=function(){return(Dc=n._emscripten_bind_btCapsuleShapeX_getHalfHeight_0=n.asm.Oi).apply(null,arguments)},Pc=n._emscripten_bind_btCapsuleShapeX_setLocalScaling_1=function(){return(Pc=n._emscripten_bind_btCapsuleShapeX_setLocalScaling_1=n.asm.Pi).apply(null,arguments)},Tc=n._emscripten_bind_btCapsuleShapeX_getLocalScaling_0=function(){return(Tc=n._emscripten_bind_btCapsuleShapeX_getLocalScaling_0=n.asm.Qi).apply(null,arguments)},Oc=n._emscripten_bind_btCapsuleShapeX_calculateLocalInertia_2=function(){return(Oc=n._emscripten_bind_btCapsuleShapeX_calculateLocalInertia_2=n.asm.Ri).apply(null,arguments)},Wc=n._emscripten_bind_btCapsuleShapeX___destroy___0=function(){return(Wc=n._emscripten_bind_btCapsuleShapeX___destroy___0=n.asm.Si).apply(null,arguments)},Ac=n._emscripten_bind_btCapsuleShapeZ_btCapsuleShapeZ_2=function(){return(Ac=n._emscripten_bind_btCapsuleShapeZ_btCapsuleShapeZ_2=n.asm.Ti).apply(null,arguments)},Mc=n._emscripten_bind_btCapsuleShapeZ_setMargin_1=function(){return(Mc=n._emscripten_bind_btCapsuleShapeZ_setMargin_1=n.asm.Ui).apply(null,arguments)},xc=n._emscripten_bind_btCapsuleShapeZ_getMargin_0=function(){return(xc=n._emscripten_bind_btCapsuleShapeZ_getMargin_0=n.asm.Vi).apply(null,arguments)},Fc=n._emscripten_bind_btCapsuleShapeZ_getUpAxis_0=function(){return(Fc=n._emscripten_bind_btCapsuleShapeZ_getUpAxis_0=n.asm.Wi).apply(null,arguments)},Lc=n._emscripten_bind_btCapsuleShapeZ_getRadius_0=function(){return(Lc=n._emscripten_bind_btCapsuleShapeZ_getRadius_0=n.asm.Xi).apply(null,arguments)},Gc=n._emscripten_bind_btCapsuleShapeZ_getHalfHeight_0=function(){return(Gc=n._emscripten_bind_btCapsuleShapeZ_getHalfHeight_0=n.asm.Yi).apply(null,arguments)},wc=n._emscripten_bind_btCapsuleShapeZ_setLocalScaling_1=function(){return(wc=n._emscripten_bind_btCapsuleShapeZ_setLocalScaling_1=n.asm.Zi).apply(null,arguments)},Hc=n._emscripten_bind_btCapsuleShapeZ_getLocalScaling_0=function(){return(Hc=n._emscripten_bind_btCapsuleShapeZ_getLocalScaling_0=n.asm._i).apply(null,arguments)},Vc=n._emscripten_bind_btCapsuleShapeZ_calculateLocalInertia_2=function(){return(Vc=n._emscripten_bind_btCapsuleShapeZ_calculateLocalInertia_2=n.asm.$i).apply(null,arguments)},Ec=n._emscripten_bind_btCapsuleShapeZ___destroy___0=function(){return(Ec=n._emscripten_bind_btCapsuleShapeZ___destroy___0=n.asm.aj).apply(null,arguments)},Nc=n._emscripten_bind_btCylinderShapeX_btCylinderShapeX_1=function(){return(Nc=n._emscripten_bind_btCylinderShapeX_btCylinderShapeX_1=n.asm.bj).apply(null,arguments)},Uc=n._emscripten_bind_btCylinderShapeX_setMargin_1=function(){return(Uc=n._emscripten_bind_btCylinderShapeX_setMargin_1=n.asm.cj).apply(null,arguments)},zc=n._emscripten_bind_btCylinderShapeX_getMargin_0=function(){return(zc=n._emscripten_bind_btCylinderShapeX_getMargin_0=n.asm.dj).apply(null,arguments)},qc=n._emscripten_bind_btCylinderShapeX_setLocalScaling_1=function(){return(qc=n._emscripten_bind_btCylinderShapeX_setLocalScaling_1=n.asm.ej).apply(null,arguments)},Kc=n._emscripten_bind_btCylinderShapeX_getLocalScaling_0=function(){return(Kc=n._emscripten_bind_btCylinderShapeX_getLocalScaling_0=n.asm.fj).apply(null,arguments)},Qc=n._emscripten_bind_btCylinderShapeX_calculateLocalInertia_2=function(){return(Qc=n._emscripten_bind_btCylinderShapeX_calculateLocalInertia_2=n.asm.gj).apply(null,arguments)},Xc=n._emscripten_bind_btCylinderShapeX___destroy___0=function(){return(Xc=n._emscripten_bind_btCylinderShapeX___destroy___0=n.asm.hj).apply(null,arguments)},Zc=n._emscripten_bind_btCylinderShapeZ_btCylinderShapeZ_1=function(){return(Zc=n._emscripten_bind_btCylinderShapeZ_btCylinderShapeZ_1=n.asm.ij).apply(null,arguments)},Yc=n._emscripten_bind_btCylinderShapeZ_setMargin_1=function(){return(Yc=n._emscripten_bind_btCylinderShapeZ_setMargin_1=n.asm.jj).apply(null,arguments)},Jc=n._emscripten_bind_btCylinderShapeZ_getMargin_0=function(){return(Jc=n._emscripten_bind_btCylinderShapeZ_getMargin_0=n.asm.kj).apply(null,arguments)},$c=n._emscripten_bind_btCylinderShapeZ_setLocalScaling_1=function(){return($c=n._emscripten_bind_btCylinderShapeZ_setLocalScaling_1=n.asm.lj).apply(null,arguments)},ta=n._emscripten_bind_btCylinderShapeZ_getLocalScaling_0=function(){return(ta=n._emscripten_bind_btCylinderShapeZ_getLocalScaling_0=n.asm.mj).apply(null,arguments)},ea=n._emscripten_bind_btCylinderShapeZ_calculateLocalInertia_2=function(){return(ea=n._emscripten_bind_btCylinderShapeZ_calculateLocalInertia_2=n.asm.nj).apply(null,arguments)},na=n._emscripten_bind_btCylinderShapeZ___destroy___0=function(){return(na=n._emscripten_bind_btCylinderShapeZ___destroy___0=n.asm.oj).apply(null,arguments)},oa=n._emscripten_bind_btSphereShape_btSphereShape_1=function(){return(oa=n._emscripten_bind_btSphereShape_btSphereShape_1=n.asm.pj).apply(null,arguments)},_a=n._emscripten_bind_btSphereShape_setMargin_1=function(){return(_a=n._emscripten_bind_btSphereShape_setMargin_1=n.asm.qj).apply(null,arguments)},ia=n._emscripten_bind_btSphereShape_getMargin_0=function(){return(ia=n._emscripten_bind_btSphereShape_getMargin_0=n.asm.rj).apply(null,arguments)},ra=n._emscripten_bind_btSphereShape_setLocalScaling_1=function(){return(ra=n._emscripten_bind_btSphereShape_setLocalScaling_1=n.asm.sj).apply(null,arguments)},pa=n._emscripten_bind_btSphereShape_getLocalScaling_0=function(){return(pa=n._emscripten_bind_btSphereShape_getLocalScaling_0=n.asm.tj).apply(null,arguments)},sa=n._emscripten_bind_btSphereShape_calculateLocalInertia_2=function(){return(sa=n._emscripten_bind_btSphereShape_calculateLocalInertia_2=n.asm.uj).apply(null,arguments)},ca=n._emscripten_bind_btSphereShape___destroy___0=function(){return(ca=n._emscripten_bind_btSphereShape___destroy___0=n.asm.vj).apply(null,arguments)},aa=n._emscripten_bind_btMultiSphereShape_btMultiSphereShape_3=function(){return(aa=n._emscripten_bind_btMultiSphereShape_btMultiSphereShape_3=n.asm.wj).apply(null,arguments)},la=n._emscripten_bind_btMultiSphereShape_setLocalScaling_1=function(){return(la=n._emscripten_bind_btMultiSphereShape_setLocalScaling_1=n.asm.xj).apply(null,arguments)},ua=n._emscripten_bind_btMultiSphereShape_getLocalScaling_0=function(){return(ua=n._emscripten_bind_btMultiSphereShape_getLocalScaling_0=n.asm.yj).apply(null,arguments)},ba=n._emscripten_bind_btMultiSphereShape_calculateLocalInertia_2=function(){return(ba=n._emscripten_bind_btMultiSphereShape_calculateLocalInertia_2=n.asm.zj).apply(null,arguments)},ma=n._emscripten_bind_btMultiSphereShape___destroy___0=function(){return(ma=n._emscripten_bind_btMultiSphereShape___destroy___0=n.asm.Aj).apply(null,arguments)},ya=n._emscripten_bind_btConeShapeX_btConeShapeX_2=function(){return(ya=n._emscripten_bind_btConeShapeX_btConeShapeX_2=n.asm.Bj).apply(null,arguments)},da=n._emscripten_bind_btConeShapeX_setLocalScaling_1=function(){return(da=n._emscripten_bind_btConeShapeX_setLocalScaling_1=n.asm.Cj).apply(null,arguments)},fa=n._emscripten_bind_btConeShapeX_getLocalScaling_0=function(){return(fa=n._emscripten_bind_btConeShapeX_getLocalScaling_0=n.asm.Dj).apply(null,arguments)},ha=n._emscripten_bind_btConeShapeX_calculateLocalInertia_2=function(){return(ha=n._emscripten_bind_btConeShapeX_calculateLocalInertia_2=n.asm.Ej).apply(null,arguments)},Ba=n._emscripten_bind_btConeShapeX___destroy___0=function(){return(Ba=n._emscripten_bind_btConeShapeX___destroy___0=n.asm.Fj).apply(null,arguments)},ga=n._emscripten_bind_btConeShapeZ_btConeShapeZ_2=function(){return(ga=n._emscripten_bind_btConeShapeZ_btConeShapeZ_2=n.asm.Gj).apply(null,arguments)},ka=n._emscripten_bind_btConeShapeZ_setLocalScaling_1=function(){return(ka=n._emscripten_bind_btConeShapeZ_setLocalScaling_1=n.asm.Hj).apply(null,arguments)},Ca=n._emscripten_bind_btConeShapeZ_getLocalScaling_0=function(){return(Ca=n._emscripten_bind_btConeShapeZ_getLocalScaling_0=n.asm.Ij).apply(null,arguments)},Sa=n._emscripten_bind_btConeShapeZ_calculateLocalInertia_2=function(){return(Sa=n._emscripten_bind_btConeShapeZ_calculateLocalInertia_2=n.asm.Jj).apply(null,arguments)},ja=n._emscripten_bind_btConeShapeZ___destroy___0=function(){return(ja=n._emscripten_bind_btConeShapeZ___destroy___0=n.asm.Kj).apply(null,arguments)},va=n._emscripten_bind_btIntArray_size_0=function(){return(va=n._emscripten_bind_btIntArray_size_0=n.asm.Lj).apply(null,arguments)},Ia=n._emscripten_bind_btIntArray_at_1=function(){return(Ia=n._emscripten_bind_btIntArray_at_1=n.asm.Mj).apply(null,arguments)},Ra=n._emscripten_bind_btIntArray___destroy___0=function(){return(Ra=n._emscripten_bind_btIntArray___destroy___0=n.asm.Nj).apply(null,arguments)},Da=n._emscripten_bind_btFace_get_m_indices_0=function(){return(Da=n._emscripten_bind_btFace_get_m_indices_0=n.asm.Oj).apply(null,arguments)},Pa=n._emscripten_bind_btFace_set_m_indices_1=function(){return(Pa=n._emscripten_bind_btFace_set_m_indices_1=n.asm.Pj).apply(null,arguments)},Ta=n._emscripten_bind_btFace_get_m_plane_1=function(){return(Ta=n._emscripten_bind_btFace_get_m_plane_1=n.asm.Qj).apply(null,arguments)},Oa=n._emscripten_bind_btFace_set_m_plane_2=function(){return(Oa=n._emscripten_bind_btFace_set_m_plane_2=n.asm.Rj).apply(null,arguments)},Wa=n._emscripten_bind_btFace___destroy___0=function(){return(Wa=n._emscripten_bind_btFace___destroy___0=n.asm.Sj).apply(null,arguments)},Aa=n._emscripten_bind_btVector3Array_size_0=function(){return(Aa=n._emscripten_bind_btVector3Array_size_0=n.asm.Tj).apply(null,arguments)},Ma=n._emscripten_bind_btVector3Array_at_1=function(){return(Ma=n._emscripten_bind_btVector3Array_at_1=n.asm.Uj).apply(null,arguments)},xa=n._emscripten_bind_btVector3Array___destroy___0=function(){return(xa=n._emscripten_bind_btVector3Array___destroy___0=n.asm.Vj).apply(null,arguments)},Fa=n._emscripten_bind_btFaceArray_size_0=function(){return(Fa=n._emscripten_bind_btFaceArray_size_0=n.asm.Wj).apply(null,arguments)},La=n._emscripten_bind_btFaceArray_at_1=function(){return(La=n._emscripten_bind_btFaceArray_at_1=n.asm.Xj).apply(null,arguments)},Ga=n._emscripten_bind_btFaceArray___destroy___0=function(){return(Ga=n._emscripten_bind_btFaceArray___destroy___0=n.asm.Yj).apply(null,arguments)},wa=n._emscripten_bind_btConvexPolyhedron_get_m_vertices_0=function(){return(wa=n._emscripten_bind_btConvexPolyhedron_get_m_vertices_0=n.asm.Zj).apply(null,arguments)},Ha=n._emscripten_bind_btConvexPolyhedron_set_m_vertices_1=function(){return(Ha=n._emscripten_bind_btConvexPolyhedron_set_m_vertices_1=n.asm._j).apply(null,arguments)},Va=n._emscripten_bind_btConvexPolyhedron_get_m_faces_0=function(){return(Va=n._emscripten_bind_btConvexPolyhedron_get_m_faces_0=n.asm.$j).apply(null,arguments)},Ea=n._emscripten_bind_btConvexPolyhedron_set_m_faces_1=function(){return(Ea=n._emscripten_bind_btConvexPolyhedron_set_m_faces_1=n.asm.ak).apply(null,arguments)},Na=n._emscripten_bind_btConvexPolyhedron___destroy___0=function(){return(Na=n._emscripten_bind_btConvexPolyhedron___destroy___0=n.asm.bk).apply(null,arguments)},Ua=n._emscripten_bind_btConvexHullShape_btConvexHullShape_0=function(){return(Ua=n._emscripten_bind_btConvexHullShape_btConvexHullShape_0=n.asm.ck).apply(null,arguments)},za=n._emscripten_bind_btConvexHullShape_btConvexHullShape_1=function(){return(za=n._emscripten_bind_btConvexHullShape_btConvexHullShape_1=n.asm.dk).apply(null,arguments)},qa=n._emscripten_bind_btConvexHullShape_btConvexHullShape_2=function(){return(qa=n._emscripten_bind_btConvexHullShape_btConvexHullShape_2=n.asm.ek).apply(null,arguments)},Ka=n._emscripten_bind_btConvexHullShape_addPoint_1=function(){return(Ka=n._emscripten_bind_btConvexHullShape_addPoint_1=n.asm.fk).apply(null,arguments)},Qa=n._emscripten_bind_btConvexHullShape_addPoint_2=function(){return(Qa=n._emscripten_bind_btConvexHullShape_addPoint_2=n.asm.gk).apply(null,arguments)},Xa=n._emscripten_bind_btConvexHullShape_setMargin_1=function(){return(Xa=n._emscripten_bind_btConvexHullShape_setMargin_1=n.asm.hk).apply(null,arguments)},Za=n._emscripten_bind_btConvexHullShape_getMargin_0=function(){return(Za=n._emscripten_bind_btConvexHullShape_getMargin_0=n.asm.ik).apply(null,arguments)},Ya=n._emscripten_bind_btConvexHullShape_getNumVertices_0=function(){return(Ya=n._emscripten_bind_btConvexHullShape_getNumVertices_0=n.asm.jk).apply(null,arguments)},Ja=n._emscripten_bind_btConvexHullShape_initializePolyhedralFeatures_1=function(){return(Ja=n._emscripten_bind_btConvexHullShape_initializePolyhedralFeatures_1=n.asm.kk).apply(null,arguments)},$a=n._emscripten_bind_btConvexHullShape_recalcLocalAabb_0=function(){return($a=n._emscripten_bind_btConvexHullShape_recalcLocalAabb_0=n.asm.lk).apply(null,arguments)},tl=n._emscripten_bind_btConvexHullShape_getConvexPolyhedron_0=function(){return(tl=n._emscripten_bind_btConvexHullShape_getConvexPolyhedron_0=n.asm.mk).apply(null,arguments)},el=n._emscripten_bind_btConvexHullShape_setLocalScaling_1=function(){return(el=n._emscripten_bind_btConvexHullShape_setLocalScaling_1=n.asm.nk).apply(null,arguments)},nl=n._emscripten_bind_btConvexHullShape_getLocalScaling_0=function(){return(nl=n._emscripten_bind_btConvexHullShape_getLocalScaling_0=n.asm.ok).apply(null,arguments)},ol=n._emscripten_bind_btConvexHullShape_calculateLocalInertia_2=function(){return(ol=n._emscripten_bind_btConvexHullShape_calculateLocalInertia_2=n.asm.pk).apply(null,arguments)},_l=n._emscripten_bind_btConvexHullShape___destroy___0=function(){return(_l=n._emscripten_bind_btConvexHullShape___destroy___0=n.asm.qk).apply(null,arguments)},il=n._emscripten_bind_btShapeHull_btShapeHull_1=function(){return(il=n._emscripten_bind_btShapeHull_btShapeHull_1=n.asm.rk).apply(null,arguments)},rl=n._emscripten_bind_btShapeHull_buildHull_1=function(){return(rl=n._emscripten_bind_btShapeHull_buildHull_1=n.asm.sk).apply(null,arguments)},pl=n._emscripten_bind_btShapeHull_numVertices_0=function(){return(pl=n._emscripten_bind_btShapeHull_numVertices_0=n.asm.tk).apply(null,arguments)},sl=n._emscripten_bind_btShapeHull_getVertexPointer_0=function(){return(sl=n._emscripten_bind_btShapeHull_getVertexPointer_0=n.asm.uk).apply(null,arguments)},cl=n._emscripten_bind_btShapeHull___destroy___0=function(){return(cl=n._emscripten_bind_btShapeHull___destroy___0=n.asm.vk).apply(null,arguments)},al=n._emscripten_bind_btCompoundShape_btCompoundShape_0=function(){return(al=n._emscripten_bind_btCompoundShape_btCompoundShape_0=n.asm.wk).apply(null,arguments)},ll=n._emscripten_bind_btCompoundShape_btCompoundShape_1=function(){return(ll=n._emscripten_bind_btCompoundShape_btCompoundShape_1=n.asm.xk).apply(null,arguments)},ul=n._emscripten_bind_btCompoundShape_addChildShape_2=function(){return(ul=n._emscripten_bind_btCompoundShape_addChildShape_2=n.asm.yk).apply(null,arguments)},bl=n._emscripten_bind_btCompoundShape_removeChildShape_1=function(){return(bl=n._emscripten_bind_btCompoundShape_removeChildShape_1=n.asm.zk).apply(null,arguments)},ml=n._emscripten_bind_btCompoundShape_removeChildShapeByIndex_1=function(){return(ml=n._emscripten_bind_btCompoundShape_removeChildShapeByIndex_1=n.asm.Ak).apply(null,arguments)},yl=n._emscripten_bind_btCompoundShape_getNumChildShapes_0=function(){return(yl=n._emscripten_bind_btCompoundShape_getNumChildShapes_0=n.asm.Bk).apply(null,arguments)},dl=n._emscripten_bind_btCompoundShape_getChildShape_1=function(){return(dl=n._emscripten_bind_btCompoundShape_getChildShape_1=n.asm.Ck).apply(null,arguments)},fl=n._emscripten_bind_btCompoundShape_updateChildTransform_2=function(){return(fl=n._emscripten_bind_btCompoundShape_updateChildTransform_2=n.asm.Dk).apply(null,arguments)},hl=n._emscripten_bind_btCompoundShape_updateChildTransform_3=function(){return(hl=n._emscripten_bind_btCompoundShape_updateChildTransform_3=n.asm.Ek).apply(null,arguments)},Bl=n._emscripten_bind_btCompoundShape_setMargin_1=function(){return(Bl=n._emscripten_bind_btCompoundShape_setMargin_1=n.asm.Fk).apply(null,arguments)},gl=n._emscripten_bind_btCompoundShape_getMargin_0=function(){return(gl=n._emscripten_bind_btCompoundShape_getMargin_0=n.asm.Gk).apply(null,arguments)},kl=n._emscripten_bind_btCompoundShape_setLocalScaling_1=function(){return(kl=n._emscripten_bind_btCompoundShape_setLocalScaling_1=n.asm.Hk).apply(null,arguments)},Cl=n._emscripten_bind_btCompoundShape_getLocalScaling_0=function(){return(Cl=n._emscripten_bind_btCompoundShape_getLocalScaling_0=n.asm.Ik).apply(null,arguments)},Sl=n._emscripten_bind_btCompoundShape_calculateLocalInertia_2=function(){return(Sl=n._emscripten_bind_btCompoundShape_calculateLocalInertia_2=n.asm.Jk).apply(null,arguments)},jl=n._emscripten_bind_btCompoundShape___destroy___0=function(){return(jl=n._emscripten_bind_btCompoundShape___destroy___0=n.asm.Kk).apply(null,arguments)},vl=n._emscripten_bind_btIndexedMesh_get_m_numTriangles_0=function(){return(vl=n._emscripten_bind_btIndexedMesh_get_m_numTriangles_0=n.asm.Lk).apply(null,arguments)},Il=n._emscripten_bind_btIndexedMesh_set_m_numTriangles_1=function(){return(Il=n._emscripten_bind_btIndexedMesh_set_m_numTriangles_1=n.asm.Mk).apply(null,arguments)},Rl=n._emscripten_bind_btIndexedMesh___destroy___0=function(){return(Rl=n._emscripten_bind_btIndexedMesh___destroy___0=n.asm.Nk).apply(null,arguments)},Dl=n._emscripten_bind_btIndexedMeshArray_size_0=function(){return(Dl=n._emscripten_bind_btIndexedMeshArray_size_0=n.asm.Ok).apply(null,arguments)},Pl=n._emscripten_bind_btIndexedMeshArray_at_1=function(){return(Pl=n._emscripten_bind_btIndexedMeshArray_at_1=n.asm.Pk).apply(null,arguments)},Tl=n._emscripten_bind_btIndexedMeshArray___destroy___0=function(){return(Tl=n._emscripten_bind_btIndexedMeshArray___destroy___0=n.asm.Qk).apply(null,arguments)},Ol=n._emscripten_bind_btTriangleMesh_btTriangleMesh_0=function(){return(Ol=n._emscripten_bind_btTriangleMesh_btTriangleMesh_0=n.asm.Rk).apply(null,arguments)},Wl=n._emscripten_bind_btTriangleMesh_btTriangleMesh_1=function(){return(Wl=n._emscripten_bind_btTriangleMesh_btTriangleMesh_1=n.asm.Sk).apply(null,arguments)},Al=n._emscripten_bind_btTriangleMesh_btTriangleMesh_2=function(){return(Al=n._emscripten_bind_btTriangleMesh_btTriangleMesh_2=n.asm.Tk).apply(null,arguments)},Ml=n._emscripten_bind_btTriangleMesh_addTriangle_3=function(){return(Ml=n._emscripten_bind_btTriangleMesh_addTriangle_3=n.asm.Uk).apply(null,arguments)},xl=n._emscripten_bind_btTriangleMesh_addTriangle_4=function(){return(xl=n._emscripten_bind_btTriangleMesh_addTriangle_4=n.asm.Vk).apply(null,arguments)},Fl=n._emscripten_bind_btTriangleMesh_findOrAddVertex_2=function(){return(Fl=n._emscripten_bind_btTriangleMesh_findOrAddVertex_2=n.asm.Wk).apply(null,arguments)},Ll=n._emscripten_bind_btTriangleMesh_addIndex_1=function(){return(Ll=n._emscripten_bind_btTriangleMesh_addIndex_1=n.asm.Xk).apply(null,arguments)},Gl=n._emscripten_bind_btTriangleMesh_getIndexedMeshArray_0=function(){return(Gl=n._emscripten_bind_btTriangleMesh_getIndexedMeshArray_0=n.asm.Yk).apply(null,arguments)},wl=n._emscripten_bind_btTriangleMesh_setScaling_1=function(){return(wl=n._emscripten_bind_btTriangleMesh_setScaling_1=n.asm.Zk).apply(null,arguments)},Hl=n._emscripten_bind_btTriangleMesh___destroy___0=function(){return(Hl=n._emscripten_bind_btTriangleMesh___destroy___0=n.asm._k).apply(null,arguments)},Vl=n._emscripten_bind_btEmptyShape_btEmptyShape_0=function(){return(Vl=n._emscripten_bind_btEmptyShape_btEmptyShape_0=n.asm.$k).apply(null,arguments)},El=n._emscripten_bind_btEmptyShape_setLocalScaling_1=function(){return(El=n._emscripten_bind_btEmptyShape_setLocalScaling_1=n.asm.al).apply(null,arguments)},Nl=n._emscripten_bind_btEmptyShape_getLocalScaling_0=function(){return(Nl=n._emscripten_bind_btEmptyShape_getLocalScaling_0=n.asm.bl).apply(null,arguments)},Ul=n._emscripten_bind_btEmptyShape_calculateLocalInertia_2=function(){return(Ul=n._emscripten_bind_btEmptyShape_calculateLocalInertia_2=n.asm.cl).apply(null,arguments)},zl=n._emscripten_bind_btEmptyShape___destroy___0=function(){return(zl=n._emscripten_bind_btEmptyShape___destroy___0=n.asm.dl).apply(null,arguments)},ql=n._emscripten_bind_btStaticPlaneShape_btStaticPlaneShape_2=function(){return(ql=n._emscripten_bind_btStaticPlaneShape_btStaticPlaneShape_2=n.asm.el).apply(null,arguments)},Kl=n._emscripten_bind_btStaticPlaneShape_setLocalScaling_1=function(){return(Kl=n._emscripten_bind_btStaticPlaneShape_setLocalScaling_1=n.asm.fl).apply(null,arguments)},Ql=n._emscripten_bind_btStaticPlaneShape_getLocalScaling_0=function(){return(Ql=n._emscripten_bind_btStaticPlaneShape_getLocalScaling_0=n.asm.gl).apply(null,arguments)},Xl=n._emscripten_bind_btStaticPlaneShape_calculateLocalInertia_2=function(){return(Xl=n._emscripten_bind_btStaticPlaneShape_calculateLocalInertia_2=n.asm.hl).apply(null,arguments)},Zl=n._emscripten_bind_btStaticPlaneShape___destroy___0=function(){return(Zl=n._emscripten_bind_btStaticPlaneShape___destroy___0=n.asm.il).apply(null,arguments)},Yl=n._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_2=function(){return(Yl=n._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_2=n.asm.jl).apply(null,arguments)},Jl=n._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_3=function(){return(Jl=n._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_3=n.asm.kl).apply(null,arguments)},$l=n._emscripten_bind_btBvhTriangleMeshShape_setLocalScaling_1=function(){return($l=n._emscripten_bind_btBvhTriangleMeshShape_setLocalScaling_1=n.asm.ll).apply(null,arguments)},tu=n._emscripten_bind_btBvhTriangleMeshShape_getLocalScaling_0=function(){return(tu=n._emscripten_bind_btBvhTriangleMeshShape_getLocalScaling_0=n.asm.ml).apply(null,arguments)},eu=n._emscripten_bind_btBvhTriangleMeshShape_calculateLocalInertia_2=function(){return(eu=n._emscripten_bind_btBvhTriangleMeshShape_calculateLocalInertia_2=n.asm.nl).apply(null,arguments)},nu=n._emscripten_bind_btBvhTriangleMeshShape___destroy___0=function(){return(nu=n._emscripten_bind_btBvhTriangleMeshShape___destroy___0=n.asm.ol).apply(null,arguments)},ou=n._emscripten_bind_btHeightfieldTerrainShape_btHeightfieldTerrainShape_9=function(){return(ou=n._emscripten_bind_btHeightfieldTerrainShape_btHeightfieldTerrainShape_9=n.asm.pl).apply(null,arguments)},_u=n._emscripten_bind_btHeightfieldTerrainShape_setMargin_1=function(){return(_u=n._emscripten_bind_btHeightfieldTerrainShape_setMargin_1=n.asm.ql).apply(null,arguments)},iu=n._emscripten_bind_btHeightfieldTerrainShape_getMargin_0=function(){return(iu=n._emscripten_bind_btHeightfieldTerrainShape_getMargin_0=n.asm.rl).apply(null,arguments)},ru=n._emscripten_bind_btHeightfieldTerrainShape_setLocalScaling_1=function(){return(ru=n._emscripten_bind_btHeightfieldTerrainShape_setLocalScaling_1=n.asm.sl).apply(null,arguments)},pu=n._emscripten_bind_btHeightfieldTerrainShape_getLocalScaling_0=function(){return(pu=n._emscripten_bind_btHeightfieldTerrainShape_getLocalScaling_0=n.asm.tl).apply(null,arguments)},su=n._emscripten_bind_btHeightfieldTerrainShape_calculateLocalInertia_2=function(){return(su=n._emscripten_bind_btHeightfieldTerrainShape_calculateLocalInertia_2=n.asm.ul).apply(null,arguments)},cu=n._emscripten_bind_btHeightfieldTerrainShape___destroy___0=function(){return(cu=n._emscripten_bind_btHeightfieldTerrainShape___destroy___0=n.asm.vl).apply(null,arguments)},au=n._emscripten_bind_btAABB_btAABB_4=function(){return(au=n._emscripten_bind_btAABB_btAABB_4=n.asm.wl).apply(null,arguments)},lu=n._emscripten_bind_btAABB_invalidate_0=function(){return(lu=n._emscripten_bind_btAABB_invalidate_0=n.asm.xl).apply(null,arguments)},uu=n._emscripten_bind_btAABB_increment_margin_1=function(){return(uu=n._emscripten_bind_btAABB_increment_margin_1=n.asm.yl).apply(null,arguments)},bu=n._emscripten_bind_btAABB_copy_with_margin_2=function(){return(bu=n._emscripten_bind_btAABB_copy_with_margin_2=n.asm.zl).apply(null,arguments)},mu=n._emscripten_bind_btAABB___destroy___0=function(){return(mu=n._emscripten_bind_btAABB___destroy___0=n.asm.Al).apply(null,arguments)},yu=n._emscripten_bind_btPrimitiveTriangle_btPrimitiveTriangle_0=function(){return(yu=n._emscripten_bind_btPrimitiveTriangle_btPrimitiveTriangle_0=n.asm.Bl).apply(null,arguments)},du=n._emscripten_bind_btPrimitiveTriangle___destroy___0=function(){return(du=n._emscripten_bind_btPrimitiveTriangle___destroy___0=n.asm.Cl).apply(null,arguments)},fu=n._emscripten_bind_btTriangleShapeEx_btTriangleShapeEx_3=function(){return(fu=n._emscripten_bind_btTriangleShapeEx_btTriangleShapeEx_3=n.asm.Dl).apply(null,arguments)},hu=n._emscripten_bind_btTriangleShapeEx_getAabb_3=function(){return(hu=n._emscripten_bind_btTriangleShapeEx_getAabb_3=n.asm.El).apply(null,arguments)},Bu=n._emscripten_bind_btTriangleShapeEx_applyTransform_1=function(){return(Bu=n._emscripten_bind_btTriangleShapeEx_applyTransform_1=n.asm.Fl).apply(null,arguments)},gu=n._emscripten_bind_btTriangleShapeEx_buildTriPlane_1=function(){return(gu=n._emscripten_bind_btTriangleShapeEx_buildTriPlane_1=n.asm.Gl).apply(null,arguments)},ku=n._emscripten_bind_btTriangleShapeEx___destroy___0=function(){return(ku=n._emscripten_bind_btTriangleShapeEx___destroy___0=n.asm.Hl).apply(null,arguments)},Cu=n._emscripten_bind_btTetrahedronShapeEx_btTetrahedronShapeEx_0=function(){return(Cu=n._emscripten_bind_btTetrahedronShapeEx_btTetrahedronShapeEx_0=n.asm.Il).apply(null,arguments)},Su=n._emscripten_bind_btTetrahedronShapeEx_setVertices_4=function(){return(Su=n._emscripten_bind_btTetrahedronShapeEx_setVertices_4=n.asm.Jl).apply(null,arguments)},ju=n._emscripten_bind_btTetrahedronShapeEx___destroy___0=function(){return(ju=n._emscripten_bind_btTetrahedronShapeEx___destroy___0=n.asm.Kl).apply(null,arguments)},vu=n._emscripten_bind_CompoundPrimitiveManager_get_primitive_count_0=function(){return(vu=n._emscripten_bind_CompoundPrimitiveManager_get_primitive_count_0=n.asm.Ll).apply(null,arguments)},Iu=n._emscripten_bind_CompoundPrimitiveManager_get_primitive_box_2=function(){return(Iu=n._emscripten_bind_CompoundPrimitiveManager_get_primitive_box_2=n.asm.Ml).apply(null,arguments)},Ru=n._emscripten_bind_CompoundPrimitiveManager_get_primitive_triangle_2=function(){return(Ru=n._emscripten_bind_CompoundPrimitiveManager_get_primitive_triangle_2=n.asm.Nl).apply(null,arguments)},Du=n._emscripten_bind_CompoundPrimitiveManager_is_trimesh_0=function(){return(Du=n._emscripten_bind_CompoundPrimitiveManager_is_trimesh_0=n.asm.Ol).apply(null,arguments)},Pu=n._emscripten_bind_CompoundPrimitiveManager_get_m_compoundShape_0=function(){return(Pu=n._emscripten_bind_CompoundPrimitiveManager_get_m_compoundShape_0=n.asm.Pl).apply(null,arguments)},Tu=n._emscripten_bind_CompoundPrimitiveManager_set_m_compoundShape_1=function(){return(Tu=n._emscripten_bind_CompoundPrimitiveManager_set_m_compoundShape_1=n.asm.Ql).apply(null,arguments)},Ou=n._emscripten_bind_CompoundPrimitiveManager___destroy___0=function(){return(Ou=n._emscripten_bind_CompoundPrimitiveManager___destroy___0=n.asm.Rl).apply(null,arguments)},Wu=n._emscripten_bind_btGImpactCompoundShape_btGImpactCompoundShape_0=function(){return(Wu=n._emscripten_bind_btGImpactCompoundShape_btGImpactCompoundShape_0=n.asm.Sl).apply(null,arguments)},Au=n._emscripten_bind_btGImpactCompoundShape_btGImpactCompoundShape_1=function(){return(Au=n._emscripten_bind_btGImpactCompoundShape_btGImpactCompoundShape_1=n.asm.Tl).apply(null,arguments)},Mu=n._emscripten_bind_btGImpactCompoundShape_childrenHasTransform_0=function(){return(Mu=n._emscripten_bind_btGImpactCompoundShape_childrenHasTransform_0=n.asm.Ul).apply(null,arguments)},xu=n._emscripten_bind_btGImpactCompoundShape_getPrimitiveManager_0=function(){return(xu=n._emscripten_bind_btGImpactCompoundShape_getPrimitiveManager_0=n.asm.Vl).apply(null,arguments)},Fu=n._emscripten_bind_btGImpactCompoundShape_getCompoundPrimitiveManager_0=function(){return(Fu=n._emscripten_bind_btGImpactCompoundShape_getCompoundPrimitiveManager_0=n.asm.Wl).apply(null,arguments)},Lu=n._emscripten_bind_btGImpactCompoundShape_getNumChildShapes_0=function(){return(Lu=n._emscripten_bind_btGImpactCompoundShape_getNumChildShapes_0=n.asm.Xl).apply(null,arguments)},Gu=n._emscripten_bind_btGImpactCompoundShape_addChildShape_2=function(){return(Gu=n._emscripten_bind_btGImpactCompoundShape_addChildShape_2=n.asm.Yl).apply(null,arguments)},wu=n._emscripten_bind_btGImpactCompoundShape_getChildShape_1=function(){return(wu=n._emscripten_bind_btGImpactCompoundShape_getChildShape_1=n.asm.Zl).apply(null,arguments)},Hu=n._emscripten_bind_btGImpactCompoundShape_getChildAabb_4=function(){return(Hu=n._emscripten_bind_btGImpactCompoundShape_getChildAabb_4=n.asm._l).apply(null,arguments)},Vu=n._emscripten_bind_btGImpactCompoundShape_getChildTransform_1=function(){return(Vu=n._emscripten_bind_btGImpactCompoundShape_getChildTransform_1=n.asm.$l).apply(null,arguments)},Eu=n._emscripten_bind_btGImpactCompoundShape_setChildTransform_2=function(){return(Eu=n._emscripten_bind_btGImpactCompoundShape_setChildTransform_2=n.asm.am).apply(null,arguments)},Nu=n._emscripten_bind_btGImpactCompoundShape_calculateLocalInertia_2=function(){return(Nu=n._emscripten_bind_btGImpactCompoundShape_calculateLocalInertia_2=n.asm.bm).apply(null,arguments)},Uu=n._emscripten_bind_btGImpactCompoundShape_getName_0=function(){return(Uu=n._emscripten_bind_btGImpactCompoundShape_getName_0=n.asm.cm).apply(null,arguments)},zu=n._emscripten_bind_btGImpactCompoundShape_getGImpactShapeType_0=function(){return(zu=n._emscripten_bind_btGImpactCompoundShape_getGImpactShapeType_0=n.asm.dm).apply(null,arguments)},qu=n._emscripten_bind_btGImpactCompoundShape_setLocalScaling_1=function(){return(qu=n._emscripten_bind_btGImpactCompoundShape_setLocalScaling_1=n.asm.em).apply(null,arguments)},Ku=n._emscripten_bind_btGImpactCompoundShape_getLocalScaling_0=function(){return(Ku=n._emscripten_bind_btGImpactCompoundShape_getLocalScaling_0=n.asm.fm).apply(null,arguments)},Qu=n._emscripten_bind_btGImpactCompoundShape_updateBound_0=function(){return(Qu=n._emscripten_bind_btGImpactCompoundShape_updateBound_0=n.asm.gm).apply(null,arguments)},Xu=n._emscripten_bind_btGImpactCompoundShape_postUpdate_0=function(){return(Xu=n._emscripten_bind_btGImpactCompoundShape_postUpdate_0=n.asm.hm).apply(null,arguments)},Zu=n._emscripten_bind_btGImpactCompoundShape_getShapeType_0=function(){return(Zu=n._emscripten_bind_btGImpactCompoundShape_getShapeType_0=n.asm.im).apply(null,arguments)},Yu=n._emscripten_bind_btGImpactCompoundShape_needsRetrieveTriangles_0=function(){return(Yu=n._emscripten_bind_btGImpactCompoundShape_needsRetrieveTriangles_0=n.asm.jm).apply(null,arguments)},Ju=n._emscripten_bind_btGImpactCompoundShape_needsRetrieveTetrahedrons_0=function(){return(Ju=n._emscripten_bind_btGImpactCompoundShape_needsRetrieveTetrahedrons_0=n.asm.km).apply(null,arguments)},$u=n._emscripten_bind_btGImpactCompoundShape_getBulletTriangle_2=function(){return($u=n._emscripten_bind_btGImpactCompoundShape_getBulletTriangle_2=n.asm.lm).apply(null,arguments)},tb=n._emscripten_bind_btGImpactCompoundShape_getBulletTetrahedron_2=function(){return(tb=n._emscripten_bind_btGImpactCompoundShape_getBulletTetrahedron_2=n.asm.mm).apply(null,arguments)},eb=n._emscripten_bind_btGImpactCompoundShape___destroy___0=function(){return(eb=n._emscripten_bind_btGImpactCompoundShape___destroy___0=n.asm.nm).apply(null,arguments)},nb=n._emscripten_bind_TrimeshPrimitiveManager_TrimeshPrimitiveManager_0=function(){return(nb=n._emscripten_bind_TrimeshPrimitiveManager_TrimeshPrimitiveManager_0=n.asm.om).apply(null,arguments)},ob=n._emscripten_bind_TrimeshPrimitiveManager_TrimeshPrimitiveManager_1=function(){return(ob=n._emscripten_bind_TrimeshPrimitiveManager_TrimeshPrimitiveManager_1=n.asm.pm).apply(null,arguments)},_b=n._emscripten_bind_TrimeshPrimitiveManager_lock_0=function(){return(_b=n._emscripten_bind_TrimeshPrimitiveManager_lock_0=n.asm.qm).apply(null,arguments)},ib=n._emscripten_bind_TrimeshPrimitiveManager_unlock_0=function(){return(ib=n._emscripten_bind_TrimeshPrimitiveManager_unlock_0=n.asm.rm).apply(null,arguments)},rb=n._emscripten_bind_TrimeshPrimitiveManager_is_trimesh_0=function(){return(rb=n._emscripten_bind_TrimeshPrimitiveManager_is_trimesh_0=n.asm.sm).apply(null,arguments)},pb=n._emscripten_bind_TrimeshPrimitiveManager_get_vertex_count_0=function(){return(pb=n._emscripten_bind_TrimeshPrimitiveManager_get_vertex_count_0=n.asm.tm).apply(null,arguments)},sb=n._emscripten_bind_TrimeshPrimitiveManager_get_indices_4=function(){return(sb=n._emscripten_bind_TrimeshPrimitiveManager_get_indices_4=n.asm.um).apply(null,arguments)},cb=n._emscripten_bind_TrimeshPrimitiveManager_get_vertex_2=function(){return(cb=n._emscripten_bind_TrimeshPrimitiveManager_get_vertex_2=n.asm.vm).apply(null,arguments)},ab=n._emscripten_bind_TrimeshPrimitiveManager_get_bullet_triangle_2=function(){return(ab=n._emscripten_bind_TrimeshPrimitiveManager_get_bullet_triangle_2=n.asm.wm).apply(null,arguments)},lb=n._emscripten_bind_TrimeshPrimitiveManager_get_m_margin_0=function(){return(lb=n._emscripten_bind_TrimeshPrimitiveManager_get_m_margin_0=n.asm.xm).apply(null,arguments)},ub=n._emscripten_bind_TrimeshPrimitiveManager_set_m_margin_1=function(){return(ub=n._emscripten_bind_TrimeshPrimitiveManager_set_m_margin_1=n.asm.ym).apply(null,arguments)},bb=n._emscripten_bind_TrimeshPrimitiveManager_get_m_meshInterface_0=function(){return(bb=n._emscripten_bind_TrimeshPrimitiveManager_get_m_meshInterface_0=n.asm.zm).apply(null,arguments)},mb=n._emscripten_bind_TrimeshPrimitiveManager_set_m_meshInterface_1=function(){return(mb=n._emscripten_bind_TrimeshPrimitiveManager_set_m_meshInterface_1=n.asm.Am).apply(null,arguments)},yb=n._emscripten_bind_TrimeshPrimitiveManager_get_m_part_0=function(){return(yb=n._emscripten_bind_TrimeshPrimitiveManager_get_m_part_0=n.asm.Bm).apply(null,arguments)},db=n._emscripten_bind_TrimeshPrimitiveManager_set_m_part_1=function(){return(db=n._emscripten_bind_TrimeshPrimitiveManager_set_m_part_1=n.asm.Cm).apply(null,arguments)},fb=n._emscripten_bind_TrimeshPrimitiveManager_get_m_lock_count_0=function(){return(fb=n._emscripten_bind_TrimeshPrimitiveManager_get_m_lock_count_0=n.asm.Dm).apply(null,arguments)},hb=n._emscripten_bind_TrimeshPrimitiveManager_set_m_lock_count_1=function(){return(hb=n._emscripten_bind_TrimeshPrimitiveManager_set_m_lock_count_1=n.asm.Em).apply(null,arguments)},Bb=n._emscripten_bind_TrimeshPrimitiveManager_get_numverts_0=function(){return(Bb=n._emscripten_bind_TrimeshPrimitiveManager_get_numverts_0=n.asm.Fm).apply(null,arguments)},gb=n._emscripten_bind_TrimeshPrimitiveManager_set_numverts_1=function(){return(gb=n._emscripten_bind_TrimeshPrimitiveManager_set_numverts_1=n.asm.Gm).apply(null,arguments)},kb=n._emscripten_bind_TrimeshPrimitiveManager_get_type_0=function(){return(kb=n._emscripten_bind_TrimeshPrimitiveManager_get_type_0=n.asm.Hm).apply(null,arguments)},Cb=n._emscripten_bind_TrimeshPrimitiveManager_set_type_1=function(){return(Cb=n._emscripten_bind_TrimeshPrimitiveManager_set_type_1=n.asm.Im).apply(null,arguments)},Sb=n._emscripten_bind_TrimeshPrimitiveManager_get_stride_0=function(){return(Sb=n._emscripten_bind_TrimeshPrimitiveManager_get_stride_0=n.asm.Jm).apply(null,arguments)},jb=n._emscripten_bind_TrimeshPrimitiveManager_set_stride_1=function(){return(jb=n._emscripten_bind_TrimeshPrimitiveManager_set_stride_1=n.asm.Km).apply(null,arguments)},vb=n._emscripten_bind_TrimeshPrimitiveManager_get_indexstride_0=function(){return(vb=n._emscripten_bind_TrimeshPrimitiveManager_get_indexstride_0=n.asm.Lm).apply(null,arguments)},Ib=n._emscripten_bind_TrimeshPrimitiveManager_set_indexstride_1=function(){return(Ib=n._emscripten_bind_TrimeshPrimitiveManager_set_indexstride_1=n.asm.Mm).apply(null,arguments)},Rb=n._emscripten_bind_TrimeshPrimitiveManager_get_numfaces_0=function(){return(Rb=n._emscripten_bind_TrimeshPrimitiveManager_get_numfaces_0=n.asm.Nm).apply(null,arguments)},Db=n._emscripten_bind_TrimeshPrimitiveManager_set_numfaces_1=function(){return(Db=n._emscripten_bind_TrimeshPrimitiveManager_set_numfaces_1=n.asm.Om).apply(null,arguments)},Pb=n._emscripten_bind_TrimeshPrimitiveManager_get_indicestype_0=function(){return(Pb=n._emscripten_bind_TrimeshPrimitiveManager_get_indicestype_0=n.asm.Pm).apply(null,arguments)},Tb=n._emscripten_bind_TrimeshPrimitiveManager_set_indicestype_1=function(){return(Tb=n._emscripten_bind_TrimeshPrimitiveManager_set_indicestype_1=n.asm.Qm).apply(null,arguments)},Ob=n._emscripten_bind_TrimeshPrimitiveManager___destroy___0=function(){return(Ob=n._emscripten_bind_TrimeshPrimitiveManager___destroy___0=n.asm.Rm).apply(null,arguments)},Wb=n._emscripten_bind_btGImpactMeshShapePart_btGImpactMeshShapePart_2=function(){return(Wb=n._emscripten_bind_btGImpactMeshShapePart_btGImpactMeshShapePart_2=n.asm.Sm).apply(null,arguments)},Ab=n._emscripten_bind_btGImpactMeshShapePart_getTrimeshPrimitiveManager_0=function(){return(Ab=n._emscripten_bind_btGImpactMeshShapePart_getTrimeshPrimitiveManager_0=n.asm.Tm).apply(null,arguments)},Mb=n._emscripten_bind_btGImpactMeshShapePart_getVertexCount_0=function(){return(Mb=n._emscripten_bind_btGImpactMeshShapePart_getVertexCount_0=n.asm.Um).apply(null,arguments)},xb=n._emscripten_bind_btGImpactMeshShapePart_getVertex_2=function(){return(xb=n._emscripten_bind_btGImpactMeshShapePart_getVertex_2=n.asm.Vm).apply(null,arguments)},Fb=n._emscripten_bind_btGImpactMeshShapePart_getPart_0=function(){return(Fb=n._emscripten_bind_btGImpactMeshShapePart_getPart_0=n.asm.Wm).apply(null,arguments)},Lb=n._emscripten_bind_btGImpactMeshShapePart_setLocalScaling_1=function(){return(Lb=n._emscripten_bind_btGImpactMeshShapePart_setLocalScaling_1=n.asm.Xm).apply(null,arguments)},Gb=n._emscripten_bind_btGImpactMeshShapePart_getLocalScaling_0=function(){return(Gb=n._emscripten_bind_btGImpactMeshShapePart_getLocalScaling_0=n.asm.Ym).apply(null,arguments)},wb=n._emscripten_bind_btGImpactMeshShapePart_updateBound_0=function(){return(wb=n._emscripten_bind_btGImpactMeshShapePart_updateBound_0=n.asm.Zm).apply(null,arguments)},Hb=n._emscripten_bind_btGImpactMeshShapePart_postUpdate_0=function(){return(Hb=n._emscripten_bind_btGImpactMeshShapePart_postUpdate_0=n.asm._m).apply(null,arguments)},Vb=n._emscripten_bind_btGImpactMeshShapePart_getShapeType_0=function(){return(Vb=n._emscripten_bind_btGImpactMeshShapePart_getShapeType_0=n.asm.$m).apply(null,arguments)},Eb=n._emscripten_bind_btGImpactMeshShapePart_needsRetrieveTriangles_0=function(){return(Eb=n._emscripten_bind_btGImpactMeshShapePart_needsRetrieveTriangles_0=n.asm.an).apply(null,arguments)},Nb=n._emscripten_bind_btGImpactMeshShapePart_needsRetrieveTetrahedrons_0=function(){return(Nb=n._emscripten_bind_btGImpactMeshShapePart_needsRetrieveTetrahedrons_0=n.asm.bn).apply(null,arguments)},Ub=n._emscripten_bind_btGImpactMeshShapePart_getBulletTriangle_2=function(){return(Ub=n._emscripten_bind_btGImpactMeshShapePart_getBulletTriangle_2=n.asm.cn).apply(null,arguments)},zb=n._emscripten_bind_btGImpactMeshShapePart_getBulletTetrahedron_2=function(){return(zb=n._emscripten_bind_btGImpactMeshShapePart_getBulletTetrahedron_2=n.asm.dn).apply(null,arguments)},qb=n._emscripten_bind_btGImpactMeshShapePart___destroy___0=function(){return(qb=n._emscripten_bind_btGImpactMeshShapePart___destroy___0=n.asm.en).apply(null,arguments)},Kb=n._emscripten_bind_btGImpactMeshShape_btGImpactMeshShape_1=function(){return(Kb=n._emscripten_bind_btGImpactMeshShape_btGImpactMeshShape_1=n.asm.fn).apply(null,arguments)},Qb=n._emscripten_bind_btGImpactMeshShape_getMeshInterface_0=function(){return(Qb=n._emscripten_bind_btGImpactMeshShape_getMeshInterface_0=n.asm.gn).apply(null,arguments)},Xb=n._emscripten_bind_btGImpactMeshShape_getMeshPartCount_0=function(){return(Xb=n._emscripten_bind_btGImpactMeshShape_getMeshPartCount_0=n.asm.hn).apply(null,arguments)},Zb=n._emscripten_bind_btGImpactMeshShape_getMeshPart_1=function(){return(Zb=n._emscripten_bind_btGImpactMeshShape_getMeshPart_1=n.asm.jn).apply(null,arguments)},Yb=n._emscripten_bind_btGImpactMeshShape_calculateSerializeBufferSize_0=function(){return(Yb=n._emscripten_bind_btGImpactMeshShape_calculateSerializeBufferSize_0=n.asm.kn).apply(null,arguments)},Jb=n._emscripten_bind_btGImpactMeshShape_setLocalScaling_1=function(){return(Jb=n._emscripten_bind_btGImpactMeshShape_setLocalScaling_1=n.asm.ln).apply(null,arguments)},$b=n._emscripten_bind_btGImpactMeshShape_getLocalScaling_0=function(){return($b=n._emscripten_bind_btGImpactMeshShape_getLocalScaling_0=n.asm.mn).apply(null,arguments)},tm=n._emscripten_bind_btGImpactMeshShape_updateBound_0=function(){return(tm=n._emscripten_bind_btGImpactMeshShape_updateBound_0=n.asm.nn).apply(null,arguments)},em=n._emscripten_bind_btGImpactMeshShape_postUpdate_0=function(){return(em=n._emscripten_bind_btGImpactMeshShape_postUpdate_0=n.asm.on).apply(null,arguments)},nm=n._emscripten_bind_btGImpactMeshShape_getShapeType_0=function(){return(nm=n._emscripten_bind_btGImpactMeshShape_getShapeType_0=n.asm.pn).apply(null,arguments)},om=n._emscripten_bind_btGImpactMeshShape_needsRetrieveTriangles_0=function(){return(om=n._emscripten_bind_btGImpactMeshShape_needsRetrieveTriangles_0=n.asm.qn).apply(null,arguments)},_m=n._emscripten_bind_btGImpactMeshShape_needsRetrieveTetrahedrons_0=function(){return(_m=n._emscripten_bind_btGImpactMeshShape_needsRetrieveTetrahedrons_0=n.asm.rn).apply(null,arguments)},im=n._emscripten_bind_btGImpactMeshShape_getBulletTriangle_2=function(){return(im=n._emscripten_bind_btGImpactMeshShape_getBulletTriangle_2=n.asm.sn).apply(null,arguments)},rm=n._emscripten_bind_btGImpactMeshShape_getBulletTetrahedron_2=function(){return(rm=n._emscripten_bind_btGImpactMeshShape_getBulletTetrahedron_2=n.asm.tn).apply(null,arguments)},pm=n._emscripten_bind_btGImpactMeshShape___destroy___0=function(){return(pm=n._emscripten_bind_btGImpactMeshShape___destroy___0=n.asm.un).apply(null,arguments)},sm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_0=function(){return(sm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_0=n.asm.vn).apply(null,arguments)},cm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_2=function(){return(cm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_2=n.asm.wn).apply(null,arguments)},am=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_get_m_dispatcher1_0=function(){return(am=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_get_m_dispatcher1_0=n.asm.xn).apply(null,arguments)},lm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_set_m_dispatcher1_1=function(){return(lm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_set_m_dispatcher1_1=n.asm.yn).apply(null,arguments)},um=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_get_m_manifold_0=function(){return(um=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_get_m_manifold_0=n.asm.zn).apply(null,arguments)},bm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_set_m_manifold_1=function(){return(bm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo_set_m_manifold_1=n.asm.An).apply(null,arguments)},mm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo___destroy___0=function(){return(mm=n._emscripten_bind_btCollisionAlgorithmConstructionInfo___destroy___0=n.asm.Bn).apply(null,arguments)},ym=n._emscripten_bind_btGImpactCollisionAlgorithm_btGImpactCollisionAlgorithm_3=function(){return(ym=n._emscripten_bind_btGImpactCollisionAlgorithm_btGImpactCollisionAlgorithm_3=n.asm.Cn).apply(null,arguments)},dm=n._emscripten_bind_btGImpactCollisionAlgorithm_registerAlgorithm_1=function(){return(dm=n._emscripten_bind_btGImpactCollisionAlgorithm_registerAlgorithm_1=n.asm.Dn).apply(null,arguments)},fm=n._emscripten_bind_btGImpactCollisionAlgorithm___destroy___0=function(){return(fm=n._emscripten_bind_btGImpactCollisionAlgorithm___destroy___0=n.asm.En).apply(null,arguments)},hm=n._emscripten_bind_btDefaultCollisionConstructionInfo_btDefaultCollisionConstructionInfo_0=function(){return(hm=n._emscripten_bind_btDefaultCollisionConstructionInfo_btDefaultCollisionConstructionInfo_0=n.asm.Fn).apply(null,arguments)},Bm=n._emscripten_bind_btDefaultCollisionConstructionInfo___destroy___0=function(){return(Bm=n._emscripten_bind_btDefaultCollisionConstructionInfo___destroy___0=n.asm.Gn).apply(null,arguments)},gm=n._emscripten_bind_btPersistentManifold_btPersistentManifold_0=function(){return(gm=n._emscripten_bind_btPersistentManifold_btPersistentManifold_0=n.asm.Hn).apply(null,arguments)},km=n._emscripten_bind_btPersistentManifold_getBody0_0=function(){return(km=n._emscripten_bind_btPersistentManifold_getBody0_0=n.asm.In).apply(null,arguments)},Cm=n._emscripten_bind_btPersistentManifold_getBody1_0=function(){return(Cm=n._emscripten_bind_btPersistentManifold_getBody1_0=n.asm.Jn).apply(null,arguments)},Sm=n._emscripten_bind_btPersistentManifold_getNumContacts_0=function(){return(Sm=n._emscripten_bind_btPersistentManifold_getNumContacts_0=n.asm.Kn).apply(null,arguments)},jm=n._emscripten_bind_btPersistentManifold_getContactPoint_1=function(){return(jm=n._emscripten_bind_btPersistentManifold_getContactPoint_1=n.asm.Ln).apply(null,arguments)},vm=n._emscripten_bind_btPersistentManifold___destroy___0=function(){return(vm=n._emscripten_bind_btPersistentManifold___destroy___0=n.asm.Mn).apply(null,arguments)},Im=n._emscripten_bind_btCollisionDispatcher_btCollisionDispatcher_1=function(){return(Im=n._emscripten_bind_btCollisionDispatcher_btCollisionDispatcher_1=n.asm.Nn).apply(null,arguments)},Rm=n._emscripten_bind_btCollisionDispatcher_getNumManifolds_0=function(){return(Rm=n._emscripten_bind_btCollisionDispatcher_getNumManifolds_0=n.asm.On).apply(null,arguments)},Dm=n._emscripten_bind_btCollisionDispatcher_getManifoldByIndexInternal_1=function(){return(Dm=n._emscripten_bind_btCollisionDispatcher_getManifoldByIndexInternal_1=n.asm.Pn).apply(null,arguments)},Pm=n._emscripten_bind_btCollisionDispatcher___destroy___0=function(){return(Pm=n._emscripten_bind_btCollisionDispatcher___destroy___0=n.asm.Qn).apply(null,arguments)},Tm=n._emscripten_bind_btOverlappingPairCallback___destroy___0=function(){return(Tm=n._emscripten_bind_btOverlappingPairCallback___destroy___0=n.asm.Rn).apply(null,arguments)},Om=n._emscripten_bind_btOverlappingPairCache_setInternalGhostPairCallback_1=function(){return(Om=n._emscripten_bind_btOverlappingPairCache_setInternalGhostPairCallback_1=n.asm.Sn).apply(null,arguments)},Wm=n._emscripten_bind_btOverlappingPairCache_getNumOverlappingPairs_0=function(){return(Wm=n._emscripten_bind_btOverlappingPairCache_getNumOverlappingPairs_0=n.asm.Tn).apply(null,arguments)},Am=n._emscripten_bind_btOverlappingPairCache___destroy___0=function(){return(Am=n._emscripten_bind_btOverlappingPairCache___destroy___0=n.asm.Un).apply(null,arguments)},Mm=n._emscripten_bind_btAxisSweep3_btAxisSweep3_2=function(){return(Mm=n._emscripten_bind_btAxisSweep3_btAxisSweep3_2=n.asm.Vn).apply(null,arguments)},xm=n._emscripten_bind_btAxisSweep3_btAxisSweep3_3=function(){return(xm=n._emscripten_bind_btAxisSweep3_btAxisSweep3_3=n.asm.Wn).apply(null,arguments)},Fm=n._emscripten_bind_btAxisSweep3_btAxisSweep3_4=function(){return(Fm=n._emscripten_bind_btAxisSweep3_btAxisSweep3_4=n.asm.Xn).apply(null,arguments)},Lm=n._emscripten_bind_btAxisSweep3_btAxisSweep3_5=function(){return(Lm=n._emscripten_bind_btAxisSweep3_btAxisSweep3_5=n.asm.Yn).apply(null,arguments)},Gm=n._emscripten_bind_btAxisSweep3___destroy___0=function(){return(Gm=n._emscripten_bind_btAxisSweep3___destroy___0=n.asm.Zn).apply(null,arguments)},wm=n._emscripten_bind_btBroadphaseInterface_getOverlappingPairCache_0=function(){return(wm=n._emscripten_bind_btBroadphaseInterface_getOverlappingPairCache_0=n.asm._n).apply(null,arguments)},Hm=n._emscripten_bind_btBroadphaseInterface___destroy___0=function(){return(Hm=n._emscripten_bind_btBroadphaseInterface___destroy___0=n.asm.$n).apply(null,arguments)},Vm=n._emscripten_bind_btCollisionConfiguration___destroy___0=function(){return(Vm=n._emscripten_bind_btCollisionConfiguration___destroy___0=n.asm.ao).apply(null,arguments)},Em=n._emscripten_bind_btDbvtBroadphase_btDbvtBroadphase_0=function(){return(Em=n._emscripten_bind_btDbvtBroadphase_btDbvtBroadphase_0=n.asm.bo).apply(null,arguments)},Nm=n._emscripten_bind_btDbvtBroadphase___destroy___0=function(){return(Nm=n._emscripten_bind_btDbvtBroadphase___destroy___0=n.asm.co).apply(null,arguments)},Um=n._emscripten_bind_btBroadphaseProxy_get_m_collisionFilterGroup_0=function(){return(Um=n._emscripten_bind_btBroadphaseProxy_get_m_collisionFilterGroup_0=n.asm.eo).apply(null,arguments)},zm=n._emscripten_bind_btBroadphaseProxy_set_m_collisionFilterGroup_1=function(){return(zm=n._emscripten_bind_btBroadphaseProxy_set_m_collisionFilterGroup_1=n.asm.fo).apply(null,arguments)},qm=n._emscripten_bind_btBroadphaseProxy_get_m_collisionFilterMask_0=function(){return(qm=n._emscripten_bind_btBroadphaseProxy_get_m_collisionFilterMask_0=n.asm.go).apply(null,arguments)},Km=n._emscripten_bind_btBroadphaseProxy_set_m_collisionFilterMask_1=function(){return(Km=n._emscripten_bind_btBroadphaseProxy_set_m_collisionFilterMask_1=n.asm.ho).apply(null,arguments)},Qm=n._emscripten_bind_btBroadphaseProxy___destroy___0=function(){return(Qm=n._emscripten_bind_btBroadphaseProxy___destroy___0=n.asm.io).apply(null,arguments)},Xm=n._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_3=function(){return(Xm=n._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_3=n.asm.jo).apply(null,arguments)},Zm=n._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_4=function(){return(Zm=n._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_4=n.asm.ko).apply(null,arguments)},Ym=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearDamping_0=function(){return(Ym=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearDamping_0=n.asm.lo).apply(null,arguments)},Jm=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearDamping_1=function(){return(Jm=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearDamping_1=n.asm.mo).apply(null,arguments)},$m=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularDamping_0=function(){return($m=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularDamping_0=n.asm.no).apply(null,arguments)},ty=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularDamping_1=function(){return(ty=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularDamping_1=n.asm.oo).apply(null,arguments)},ey=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_friction_0=function(){return(ey=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_friction_0=n.asm.po).apply(null,arguments)},ny=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_friction_1=function(){return(ny=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_friction_1=n.asm.qo).apply(null,arguments)},oy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_rollingFriction_0=function(){return(oy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_rollingFriction_0=n.asm.ro).apply(null,arguments)},_y=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_rollingFriction_1=function(){return(_y=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_rollingFriction_1=n.asm.so).apply(null,arguments)},iy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_restitution_0=function(){return(iy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_restitution_0=n.asm.to).apply(null,arguments)},ry=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_restitution_1=function(){return(ry=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_restitution_1=n.asm.uo).apply(null,arguments)},py=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearSleepingThreshold_0=function(){return(py=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearSleepingThreshold_0=n.asm.vo).apply(null,arguments)},sy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearSleepingThreshold_1=function(){return(sy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearSleepingThreshold_1=n.asm.wo).apply(null,arguments)},cy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularSleepingThreshold_0=function(){return(cy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularSleepingThreshold_0=n.asm.xo).apply(null,arguments)},ay=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularSleepingThreshold_1=function(){return(ay=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularSleepingThreshold_1=n.asm.yo).apply(null,arguments)},ly=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDamping_0=function(){return(ly=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDamping_0=n.asm.zo).apply(null,arguments)},uy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDamping_1=function(){return(uy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDamping_1=n.asm.Ao).apply(null,arguments)},by=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDampingFactor_0=function(){return(by=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDampingFactor_0=n.asm.Bo).apply(null,arguments)},my=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDampingFactor_1=function(){return(my=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDampingFactor_1=n.asm.Co).apply(null,arguments)},yy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalLinearDampingThresholdSqr_0=function(){return(yy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalLinearDampingThresholdSqr_0=n.asm.Do).apply(null,arguments)},dy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalLinearDampingThresholdSqr_1=function(){return(dy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalLinearDampingThresholdSqr_1=n.asm.Eo).apply(null,arguments)},fy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingThresholdSqr_0=function(){return(fy=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingThresholdSqr_0=n.asm.Fo).apply(null,arguments)},hy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingThresholdSqr_1=function(){return(hy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingThresholdSqr_1=n.asm.Go).apply(null,arguments)},By=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingFactor_0=function(){return(By=n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingFactor_0=n.asm.Ho).apply(null,arguments)},gy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingFactor_1=function(){return(gy=n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingFactor_1=n.asm.Io).apply(null,arguments)},ky=n._emscripten_bind_btRigidBodyConstructionInfo___destroy___0=function(){return(ky=n._emscripten_bind_btRigidBodyConstructionInfo___destroy___0=n.asm.Jo).apply(null,arguments)},Cy=n._emscripten_bind_btRigidBody_btRigidBody_1=function(){return(Cy=n._emscripten_bind_btRigidBody_btRigidBody_1=n.asm.Ko).apply(null,arguments)},Sy=n._emscripten_bind_btRigidBody_getCenterOfMassTransform_0=function(){return(Sy=n._emscripten_bind_btRigidBody_getCenterOfMassTransform_0=n.asm.Lo).apply(null,arguments)},jy=n._emscripten_bind_btRigidBody_setCenterOfMassTransform_1=function(){return(jy=n._emscripten_bind_btRigidBody_setCenterOfMassTransform_1=n.asm.Mo).apply(null,arguments)},vy=n._emscripten_bind_btRigidBody_setSleepingThresholds_2=function(){return(vy=n._emscripten_bind_btRigidBody_setSleepingThresholds_2=n.asm.No).apply(null,arguments)},Iy=n._emscripten_bind_btRigidBody_getLinearDamping_0=function(){return(Iy=n._emscripten_bind_btRigidBody_getLinearDamping_0=n.asm.Oo).apply(null,arguments)},Ry=n._emscripten_bind_btRigidBody_getAngularDamping_0=function(){return(Ry=n._emscripten_bind_btRigidBody_getAngularDamping_0=n.asm.Po).apply(null,arguments)},Dy=n._emscripten_bind_btRigidBody_setDamping_2=function(){return(Dy=n._emscripten_bind_btRigidBody_setDamping_2=n.asm.Qo).apply(null,arguments)},Py=n._emscripten_bind_btRigidBody_setMassProps_2=function(){return(Py=n._emscripten_bind_btRigidBody_setMassProps_2=n.asm.Ro).apply(null,arguments)},Ty=n._emscripten_bind_btRigidBody_getLinearFactor_0=function(){return(Ty=n._emscripten_bind_btRigidBody_getLinearFactor_0=n.asm.So).apply(null,arguments)},Oy=n._emscripten_bind_btRigidBody_setLinearFactor_1=function(){return(Oy=n._emscripten_bind_btRigidBody_setLinearFactor_1=n.asm.To).apply(null,arguments)},Wy=n._emscripten_bind_btRigidBody_applyTorque_1=function(){return(Wy=n._emscripten_bind_btRigidBody_applyTorque_1=n.asm.Uo).apply(null,arguments)},Ay=n._emscripten_bind_btRigidBody_applyLocalTorque_1=function(){return(Ay=n._emscripten_bind_btRigidBody_applyLocalTorque_1=n.asm.Vo).apply(null,arguments)},My=n._emscripten_bind_btRigidBody_applyForce_2=function(){return(My=n._emscripten_bind_btRigidBody_applyForce_2=n.asm.Wo).apply(null,arguments)},xy=n._emscripten_bind_btRigidBody_applyCentralForce_1=function(){return(xy=n._emscripten_bind_btRigidBody_applyCentralForce_1=n.asm.Xo).apply(null,arguments)},Fy=n._emscripten_bind_btRigidBody_applyCentralLocalForce_1=function(){return(Fy=n._emscripten_bind_btRigidBody_applyCentralLocalForce_1=n.asm.Yo).apply(null,arguments)},Ly=n._emscripten_bind_btRigidBody_applyTorqueImpulse_1=function(){return(Ly=n._emscripten_bind_btRigidBody_applyTorqueImpulse_1=n.asm.Zo).apply(null,arguments)},Gy=n._emscripten_bind_btRigidBody_applyImpulse_2=function(){return(Gy=n._emscripten_bind_btRigidBody_applyImpulse_2=n.asm._o).apply(null,arguments)},wy=n._emscripten_bind_btRigidBody_applyCentralImpulse_1=function(){return(wy=n._emscripten_bind_btRigidBody_applyCentralImpulse_1=n.asm.$o).apply(null,arguments)},Hy=n._emscripten_bind_btRigidBody_updateInertiaTensor_0=function(){return(Hy=n._emscripten_bind_btRigidBody_updateInertiaTensor_0=n.asm.ap).apply(null,arguments)},Vy=n._emscripten_bind_btRigidBody_getLinearVelocity_0=function(){return(Vy=n._emscripten_bind_btRigidBody_getLinearVelocity_0=n.asm.bp).apply(null,arguments)},Ey=n._emscripten_bind_btRigidBody_getAngularVelocity_0=function(){return(Ey=n._emscripten_bind_btRigidBody_getAngularVelocity_0=n.asm.cp).apply(null,arguments)},Ny=n._emscripten_bind_btRigidBody_setLinearVelocity_1=function(){return(Ny=n._emscripten_bind_btRigidBody_setLinearVelocity_1=n.asm.dp).apply(null,arguments)},Uy=n._emscripten_bind_btRigidBody_setAngularVelocity_1=function(){return(Uy=n._emscripten_bind_btRigidBody_setAngularVelocity_1=n.asm.ep).apply(null,arguments)},zy=n._emscripten_bind_btRigidBody_getMotionState_0=function(){return(zy=n._emscripten_bind_btRigidBody_getMotionState_0=n.asm.fp).apply(null,arguments)},qy=n._emscripten_bind_btRigidBody_setMotionState_1=function(){return(qy=n._emscripten_bind_btRigidBody_setMotionState_1=n.asm.gp).apply(null,arguments)},Ky=n._emscripten_bind_btRigidBody_getAngularFactor_0=function(){return(Ky=n._emscripten_bind_btRigidBody_getAngularFactor_0=n.asm.hp).apply(null,arguments)},Qy=n._emscripten_bind_btRigidBody_setAngularFactor_1=function(){return(Qy=n._emscripten_bind_btRigidBody_setAngularFactor_1=n.asm.ip).apply(null,arguments)},Xy=n._emscripten_bind_btRigidBody_upcast_1=function(){return(Xy=n._emscripten_bind_btRigidBody_upcast_1=n.asm.jp).apply(null,arguments)},Zy=n._emscripten_bind_btRigidBody_getAabb_2=function(){return(Zy=n._emscripten_bind_btRigidBody_getAabb_2=n.asm.kp).apply(null,arguments)},Yy=n._emscripten_bind_btRigidBody_applyGravity_0=function(){return(Yy=n._emscripten_bind_btRigidBody_applyGravity_0=n.asm.lp).apply(null,arguments)},Jy=n._emscripten_bind_btRigidBody_getGravity_0=function(){return(Jy=n._emscripten_bind_btRigidBody_getGravity_0=n.asm.mp).apply(null,arguments)},$y=n._emscripten_bind_btRigidBody_setGravity_1=function(){return($y=n._emscripten_bind_btRigidBody_setGravity_1=n.asm.np).apply(null,arguments)},td=n._emscripten_bind_btRigidBody_getBroadphaseProxy_0=function(){return(td=n._emscripten_bind_btRigidBody_getBroadphaseProxy_0=n.asm.op).apply(null,arguments)},ed=n._emscripten_bind_btRigidBody_clearForces_0=function(){return(ed=n._emscripten_bind_btRigidBody_clearForces_0=n.asm.pp).apply(null,arguments)},nd=n._emscripten_bind_btRigidBody_setFlags_1=function(){return(nd=n._emscripten_bind_btRigidBody_setFlags_1=n.asm.qp).apply(null,arguments)},od=n._emscripten_bind_btRigidBody_getFlags_0=function(){return(od=n._emscripten_bind_btRigidBody_getFlags_0=n.asm.rp).apply(null,arguments)},_d=n._emscripten_bind_btRigidBody_setAnisotropicFriction_2=function(){return(_d=n._emscripten_bind_btRigidBody_setAnisotropicFriction_2=n.asm.sp).apply(null,arguments)},id=n._emscripten_bind_btRigidBody_getCollisionShape_0=function(){return(id=n._emscripten_bind_btRigidBody_getCollisionShape_0=n.asm.tp).apply(null,arguments)},rd=n._emscripten_bind_btRigidBody_setContactProcessingThreshold_1=function(){return(rd=n._emscripten_bind_btRigidBody_setContactProcessingThreshold_1=n.asm.up).apply(null,arguments)},pd=n._emscripten_bind_btRigidBody_setActivationState_1=function(){return(pd=n._emscripten_bind_btRigidBody_setActivationState_1=n.asm.vp).apply(null,arguments)},sd=n._emscripten_bind_btRigidBody_forceActivationState_1=function(){return(sd=n._emscripten_bind_btRigidBody_forceActivationState_1=n.asm.wp).apply(null,arguments)},cd=n._emscripten_bind_btRigidBody_activate_0=function(){return(cd=n._emscripten_bind_btRigidBody_activate_0=n.asm.xp).apply(null,arguments)},ad=n._emscripten_bind_btRigidBody_activate_1=function(){return(ad=n._emscripten_bind_btRigidBody_activate_1=n.asm.yp).apply(null,arguments)},ld=n._emscripten_bind_btRigidBody_isActive_0=function(){return(ld=n._emscripten_bind_btRigidBody_isActive_0=n.asm.zp).apply(null,arguments)},ud=n._emscripten_bind_btRigidBody_isKinematicObject_0=function(){return(ud=n._emscripten_bind_btRigidBody_isKinematicObject_0=n.asm.Ap).apply(null,arguments)},bd=n._emscripten_bind_btRigidBody_isStaticObject_0=function(){return(bd=n._emscripten_bind_btRigidBody_isStaticObject_0=n.asm.Bp).apply(null,arguments)},md=n._emscripten_bind_btRigidBody_isStaticOrKinematicObject_0=function(){return(md=n._emscripten_bind_btRigidBody_isStaticOrKinematicObject_0=n.asm.Cp).apply(null,arguments)},yd=n._emscripten_bind_btRigidBody_getRestitution_0=function(){return(yd=n._emscripten_bind_btRigidBody_getRestitution_0=n.asm.Dp).apply(null,arguments)},dd=n._emscripten_bind_btRigidBody_getFriction_0=function(){return(dd=n._emscripten_bind_btRigidBody_getFriction_0=n.asm.Ep).apply(null,arguments)},fd=n._emscripten_bind_btRigidBody_getRollingFriction_0=function(){return(fd=n._emscripten_bind_btRigidBody_getRollingFriction_0=n.asm.Fp).apply(null,arguments)},hd=n._emscripten_bind_btRigidBody_setRestitution_1=function(){return(hd=n._emscripten_bind_btRigidBody_setRestitution_1=n.asm.Gp).apply(null,arguments)},Bd=n._emscripten_bind_btRigidBody_setFriction_1=function(){return(Bd=n._emscripten_bind_btRigidBody_setFriction_1=n.asm.Hp).apply(null,arguments)},gd=n._emscripten_bind_btRigidBody_setRollingFriction_1=function(){return(gd=n._emscripten_bind_btRigidBody_setRollingFriction_1=n.asm.Ip).apply(null,arguments)},kd=n._emscripten_bind_btRigidBody_getWorldTransform_0=function(){return(kd=n._emscripten_bind_btRigidBody_getWorldTransform_0=n.asm.Jp).apply(null,arguments)},Cd=n._emscripten_bind_btRigidBody_getCollisionFlags_0=function(){return(Cd=n._emscripten_bind_btRigidBody_getCollisionFlags_0=n.asm.Kp).apply(null,arguments)},Sd=n._emscripten_bind_btRigidBody_setCollisionFlags_1=function(){return(Sd=n._emscripten_bind_btRigidBody_setCollisionFlags_1=n.asm.Lp).apply(null,arguments)},jd=n._emscripten_bind_btRigidBody_setWorldTransform_1=function(){return(jd=n._emscripten_bind_btRigidBody_setWorldTransform_1=n.asm.Mp).apply(null,arguments)},vd=n._emscripten_bind_btRigidBody_setCollisionShape_1=function(){return(vd=n._emscripten_bind_btRigidBody_setCollisionShape_1=n.asm.Np).apply(null,arguments)},Id=n._emscripten_bind_btRigidBody_setCcdMotionThreshold_1=function(){return(Id=n._emscripten_bind_btRigidBody_setCcdMotionThreshold_1=n.asm.Op).apply(null,arguments)},Rd=n._emscripten_bind_btRigidBody_setCcdSweptSphereRadius_1=function(){return(Rd=n._emscripten_bind_btRigidBody_setCcdSweptSphereRadius_1=n.asm.Pp).apply(null,arguments)},Dd=n._emscripten_bind_btRigidBody_getUserIndex_0=function(){return(Dd=n._emscripten_bind_btRigidBody_getUserIndex_0=n.asm.Qp).apply(null,arguments)},Pd=n._emscripten_bind_btRigidBody_setUserIndex_1=function(){return(Pd=n._emscripten_bind_btRigidBody_setUserIndex_1=n.asm.Rp).apply(null,arguments)},Td=n._emscripten_bind_btRigidBody_getUserPointer_0=function(){return(Td=n._emscripten_bind_btRigidBody_getUserPointer_0=n.asm.Sp).apply(null,arguments)},Od=n._emscripten_bind_btRigidBody_setUserPointer_1=function(){return(Od=n._emscripten_bind_btRigidBody_setUserPointer_1=n.asm.Tp).apply(null,arguments)},Wd=n._emscripten_bind_btRigidBody_getBroadphaseHandle_0=function(){return(Wd=n._emscripten_bind_btRigidBody_getBroadphaseHandle_0=n.asm.Up).apply(null,arguments)},Ad=n._emscripten_bind_btRigidBody___destroy___0=function(){return(Ad=n._emscripten_bind_btRigidBody___destroy___0=n.asm.Vp).apply(null,arguments)},Md=n._emscripten_bind_btConstraintSetting_btConstraintSetting_0=function(){return(Md=n._emscripten_bind_btConstraintSetting_btConstraintSetting_0=n.asm.Wp).apply(null,arguments)},xd=n._emscripten_bind_btConstraintSetting_get_m_tau_0=function(){return(xd=n._emscripten_bind_btConstraintSetting_get_m_tau_0=n.asm.Xp).apply(null,arguments)},Fd=n._emscripten_bind_btConstraintSetting_set_m_tau_1=function(){return(Fd=n._emscripten_bind_btConstraintSetting_set_m_tau_1=n.asm.Yp).apply(null,arguments)},Ld=n._emscripten_bind_btConstraintSetting_get_m_damping_0=function(){return(Ld=n._emscripten_bind_btConstraintSetting_get_m_damping_0=n.asm.Zp).apply(null,arguments)},Gd=n._emscripten_bind_btConstraintSetting_set_m_damping_1=function(){return(Gd=n._emscripten_bind_btConstraintSetting_set_m_damping_1=n.asm._p).apply(null,arguments)},wd=n._emscripten_bind_btConstraintSetting_get_m_impulseClamp_0=function(){return(wd=n._emscripten_bind_btConstraintSetting_get_m_impulseClamp_0=n.asm.$p).apply(null,arguments)},Hd=n._emscripten_bind_btConstraintSetting_set_m_impulseClamp_1=function(){return(Hd=n._emscripten_bind_btConstraintSetting_set_m_impulseClamp_1=n.asm.aq).apply(null,arguments)},Vd=n._emscripten_bind_btConstraintSetting___destroy___0=function(){return(Vd=n._emscripten_bind_btConstraintSetting___destroy___0=n.asm.bq).apply(null,arguments)},Ed=n._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_2=function(){return(Ed=n._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_2=n.asm.cq).apply(null,arguments)},Nd=n._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_4=function(){return(Nd=n._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_4=n.asm.dq).apply(null,arguments)},Ud=n._emscripten_bind_btPoint2PointConstraint_setPivotA_1=function(){return(Ud=n._emscripten_bind_btPoint2PointConstraint_setPivotA_1=n.asm.eq).apply(null,arguments)},zd=n._emscripten_bind_btPoint2PointConstraint_setPivotB_1=function(){return(zd=n._emscripten_bind_btPoint2PointConstraint_setPivotB_1=n.asm.fq).apply(null,arguments)},qd=n._emscripten_bind_btPoint2PointConstraint_getPivotInA_0=function(){return(qd=n._emscripten_bind_btPoint2PointConstraint_getPivotInA_0=n.asm.gq).apply(null,arguments)},Kd=n._emscripten_bind_btPoint2PointConstraint_getPivotInB_0=function(){return(Kd=n._emscripten_bind_btPoint2PointConstraint_getPivotInB_0=n.asm.hq).apply(null,arguments)},Qd=n._emscripten_bind_btPoint2PointConstraint_enableFeedback_1=function(){return(Qd=n._emscripten_bind_btPoint2PointConstraint_enableFeedback_1=n.asm.iq).apply(null,arguments)},Xd=n._emscripten_bind_btPoint2PointConstraint_getBreakingImpulseThreshold_0=function(){return(Xd=n._emscripten_bind_btPoint2PointConstraint_getBreakingImpulseThreshold_0=n.asm.jq).apply(null,arguments)},Zd=n._emscripten_bind_btPoint2PointConstraint_setBreakingImpulseThreshold_1=function(){return(Zd=n._emscripten_bind_btPoint2PointConstraint_setBreakingImpulseThreshold_1=n.asm.kq).apply(null,arguments)},Yd=n._emscripten_bind_btPoint2PointConstraint_getParam_2=function(){return(Yd=n._emscripten_bind_btPoint2PointConstraint_getParam_2=n.asm.lq).apply(null,arguments)},Jd=n._emscripten_bind_btPoint2PointConstraint_setParam_3=function(){return(Jd=n._emscripten_bind_btPoint2PointConstraint_setParam_3=n.asm.mq).apply(null,arguments)},$d=n._emscripten_bind_btPoint2PointConstraint_get_m_setting_0=function(){return($d=n._emscripten_bind_btPoint2PointConstraint_get_m_setting_0=n.asm.nq).apply(null,arguments)},tf=n._emscripten_bind_btPoint2PointConstraint_set_m_setting_1=function(){return(tf=n._emscripten_bind_btPoint2PointConstraint_set_m_setting_1=n.asm.oq).apply(null,arguments)},ef=n._emscripten_bind_btPoint2PointConstraint___destroy___0=function(){return(ef=n._emscripten_bind_btPoint2PointConstraint___destroy___0=n.asm.pq).apply(null,arguments)},nf=n._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_3=function(){return(nf=n._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_3=n.asm.qq).apply(null,arguments)},of=n._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_5=function(){return(of=n._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_5=n.asm.rq).apply(null,arguments)},_f=n._emscripten_bind_btGeneric6DofSpringConstraint_enableSpring_2=function(){return(_f=n._emscripten_bind_btGeneric6DofSpringConstraint_enableSpring_2=n.asm.sq).apply(null,arguments)},rf=n._emscripten_bind_btGeneric6DofSpringConstraint_setStiffness_2=function(){return(rf=n._emscripten_bind_btGeneric6DofSpringConstraint_setStiffness_2=n.asm.tq).apply(null,arguments)},pf=n._emscripten_bind_btGeneric6DofSpringConstraint_setDamping_2=function(){return(pf=n._emscripten_bind_btGeneric6DofSpringConstraint_setDamping_2=n.asm.uq).apply(null,arguments)},sf=n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_0=function(){return(sf=n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_0=n.asm.vq).apply(null,arguments)},cf=n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_1=function(){return(cf=n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_1=n.asm.wq).apply(null,arguments)},af=n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_2=function(){return(af=n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_2=n.asm.xq).apply(null,arguments)},lf=n._emscripten_bind_btGeneric6DofSpringConstraint_setLinearLowerLimit_1=function(){return(lf=n._emscripten_bind_btGeneric6DofSpringConstraint_setLinearLowerLimit_1=n.asm.yq).apply(null,arguments)},uf=n._emscripten_bind_btGeneric6DofSpringConstraint_setLinearUpperLimit_1=function(){return(uf=n._emscripten_bind_btGeneric6DofSpringConstraint_setLinearUpperLimit_1=n.asm.zq).apply(null,arguments)},bf=n._emscripten_bind_btGeneric6DofSpringConstraint_setAngularLowerLimit_1=function(){return(bf=n._emscripten_bind_btGeneric6DofSpringConstraint_setAngularLowerLimit_1=n.asm.Aq).apply(null,arguments)},mf=n._emscripten_bind_btGeneric6DofSpringConstraint_setAngularUpperLimit_1=function(){return(mf=n._emscripten_bind_btGeneric6DofSpringConstraint_setAngularUpperLimit_1=n.asm.Bq).apply(null,arguments)},yf=n._emscripten_bind_btGeneric6DofSpringConstraint_getFrameOffsetA_0=function(){return(yf=n._emscripten_bind_btGeneric6DofSpringConstraint_getFrameOffsetA_0=n.asm.Cq).apply(null,arguments)},df=n._emscripten_bind_btGeneric6DofSpringConstraint_enableFeedback_1=function(){return(df=n._emscripten_bind_btGeneric6DofSpringConstraint_enableFeedback_1=n.asm.Dq).apply(null,arguments)},ff=n._emscripten_bind_btGeneric6DofSpringConstraint_getBreakingImpulseThreshold_0=function(){return(ff=n._emscripten_bind_btGeneric6DofSpringConstraint_getBreakingImpulseThreshold_0=n.asm.Eq).apply(null,arguments)},hf=n._emscripten_bind_btGeneric6DofSpringConstraint_setBreakingImpulseThreshold_1=function(){return(hf=n._emscripten_bind_btGeneric6DofSpringConstraint_setBreakingImpulseThreshold_1=n.asm.Fq).apply(null,arguments)},Bf=n._emscripten_bind_btGeneric6DofSpringConstraint_getParam_2=function(){return(Bf=n._emscripten_bind_btGeneric6DofSpringConstraint_getParam_2=n.asm.Gq).apply(null,arguments)},gf=n._emscripten_bind_btGeneric6DofSpringConstraint_setParam_3=function(){return(gf=n._emscripten_bind_btGeneric6DofSpringConstraint_setParam_3=n.asm.Hq).apply(null,arguments)},kf=n._emscripten_bind_btGeneric6DofSpringConstraint___destroy___0=function(){return(kf=n._emscripten_bind_btGeneric6DofSpringConstraint___destroy___0=n.asm.Iq).apply(null,arguments)},Cf=n._emscripten_bind_btSequentialImpulseConstraintSolver_btSequentialImpulseConstraintSolver_0=function(){return(Cf=n._emscripten_bind_btSequentialImpulseConstraintSolver_btSequentialImpulseConstraintSolver_0=n.asm.Jq).apply(null,arguments)},Sf=n._emscripten_bind_btSequentialImpulseConstraintSolver___destroy___0=function(){return(Sf=n._emscripten_bind_btSequentialImpulseConstraintSolver___destroy___0=n.asm.Kq).apply(null,arguments)},jf=n._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_2=function(){return(jf=n._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_2=n.asm.Lq).apply(null,arguments)},vf=n._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_4=function(){return(vf=n._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_4=n.asm.Mq).apply(null,arguments)},If=n._emscripten_bind_btConeTwistConstraint_setLimit_2=function(){return(If=n._emscripten_bind_btConeTwistConstraint_setLimit_2=n.asm.Nq).apply(null,arguments)},Rf=n._emscripten_bind_btConeTwistConstraint_setAngularOnly_1=function(){return(Rf=n._emscripten_bind_btConeTwistConstraint_setAngularOnly_1=n.asm.Oq).apply(null,arguments)},Df=n._emscripten_bind_btConeTwistConstraint_setDamping_1=function(){return(Df=n._emscripten_bind_btConeTwistConstraint_setDamping_1=n.asm.Pq).apply(null,arguments)},Pf=n._emscripten_bind_btConeTwistConstraint_enableMotor_1=function(){return(Pf=n._emscripten_bind_btConeTwistConstraint_enableMotor_1=n.asm.Qq).apply(null,arguments)},Tf=n._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulse_1=function(){return(Tf=n._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulse_1=n.asm.Rq).apply(null,arguments)},Of=n._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulseNormalized_1=function(){return(Of=n._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulseNormalized_1=n.asm.Sq).apply(null,arguments)},Wf=n._emscripten_bind_btConeTwistConstraint_setMotorTarget_1=function(){return(Wf=n._emscripten_bind_btConeTwistConstraint_setMotorTarget_1=n.asm.Tq).apply(null,arguments)},Af=n._emscripten_bind_btConeTwistConstraint_setMotorTargetInConstraintSpace_1=function(){return(Af=n._emscripten_bind_btConeTwistConstraint_setMotorTargetInConstraintSpace_1=n.asm.Uq).apply(null,arguments)},Mf=n._emscripten_bind_btConeTwistConstraint_enableFeedback_1=function(){return(Mf=n._emscripten_bind_btConeTwistConstraint_enableFeedback_1=n.asm.Vq).apply(null,arguments)},xf=n._emscripten_bind_btConeTwistConstraint_getBreakingImpulseThreshold_0=function(){return(xf=n._emscripten_bind_btConeTwistConstraint_getBreakingImpulseThreshold_0=n.asm.Wq).apply(null,arguments)},Ff=n._emscripten_bind_btConeTwistConstraint_setBreakingImpulseThreshold_1=function(){return(Ff=n._emscripten_bind_btConeTwistConstraint_setBreakingImpulseThreshold_1=n.asm.Xq).apply(null,arguments)},Lf=n._emscripten_bind_btConeTwistConstraint_getParam_2=function(){return(Lf=n._emscripten_bind_btConeTwistConstraint_getParam_2=n.asm.Yq).apply(null,arguments)},Gf=n._emscripten_bind_btConeTwistConstraint_setParam_3=function(){return(Gf=n._emscripten_bind_btConeTwistConstraint_setParam_3=n.asm.Zq).apply(null,arguments)},wf=n._emscripten_bind_btConeTwistConstraint___destroy___0=function(){return(wf=n._emscripten_bind_btConeTwistConstraint___destroy___0=n.asm._q).apply(null,arguments)},Hf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_2=function(){return(Hf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_2=n.asm.$q).apply(null,arguments)},Vf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_3=function(){return(Vf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_3=n.asm.ar).apply(null,arguments)},Ef=n._emscripten_bind_btHingeConstraint_btHingeConstraint_4=function(){return(Ef=n._emscripten_bind_btHingeConstraint_btHingeConstraint_4=n.asm.br).apply(null,arguments)},Nf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_5=function(){return(Nf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_5=n.asm.cr).apply(null,arguments)},Uf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_6=function(){return(Uf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_6=n.asm.dr).apply(null,arguments)},zf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_7=function(){return(zf=n._emscripten_bind_btHingeConstraint_btHingeConstraint_7=n.asm.er).apply(null,arguments)},qf=n._emscripten_bind_btHingeConstraint_getHingeAngle_0=function(){return(qf=n._emscripten_bind_btHingeConstraint_getHingeAngle_0=n.asm.fr).apply(null,arguments)},Kf=n._emscripten_bind_btHingeConstraint_setLimit_4=function(){return(Kf=n._emscripten_bind_btHingeConstraint_setLimit_4=n.asm.gr).apply(null,arguments)},Qf=n._emscripten_bind_btHingeConstraint_setLimit_5=function(){return(Qf=n._emscripten_bind_btHingeConstraint_setLimit_5=n.asm.hr).apply(null,arguments)},Xf=n._emscripten_bind_btHingeConstraint_enableAngularMotor_3=function(){return(Xf=n._emscripten_bind_btHingeConstraint_enableAngularMotor_3=n.asm.ir).apply(null,arguments)},Zf=n._emscripten_bind_btHingeConstraint_setAngularOnly_1=function(){return(Zf=n._emscripten_bind_btHingeConstraint_setAngularOnly_1=n.asm.jr).apply(null,arguments)},Yf=n._emscripten_bind_btHingeConstraint_enableMotor_1=function(){return(Yf=n._emscripten_bind_btHingeConstraint_enableMotor_1=n.asm.kr).apply(null,arguments)},Jf=n._emscripten_bind_btHingeConstraint_setMaxMotorImpulse_1=function(){return(Jf=n._emscripten_bind_btHingeConstraint_setMaxMotorImpulse_1=n.asm.lr).apply(null,arguments)},$f=n._emscripten_bind_btHingeConstraint_setMotorTarget_2=function(){return($f=n._emscripten_bind_btHingeConstraint_setMotorTarget_2=n.asm.mr).apply(null,arguments)},th=n._emscripten_bind_btHingeConstraint_enableFeedback_1=function(){return(th=n._emscripten_bind_btHingeConstraint_enableFeedback_1=n.asm.nr).apply(null,arguments)},eh=n._emscripten_bind_btHingeConstraint_getBreakingImpulseThreshold_0=function(){return(eh=n._emscripten_bind_btHingeConstraint_getBreakingImpulseThreshold_0=n.asm.or).apply(null,arguments)},nh=n._emscripten_bind_btHingeConstraint_setBreakingImpulseThreshold_1=function(){return(nh=n._emscripten_bind_btHingeConstraint_setBreakingImpulseThreshold_1=n.asm.pr).apply(null,arguments)},oh=n._emscripten_bind_btHingeConstraint_getParam_2=function(){return(oh=n._emscripten_bind_btHingeConstraint_getParam_2=n.asm.qr).apply(null,arguments)},_h=n._emscripten_bind_btHingeConstraint_setParam_3=function(){return(_h=n._emscripten_bind_btHingeConstraint_setParam_3=n.asm.rr).apply(null,arguments)},ih=n._emscripten_bind_btHingeConstraint___destroy___0=function(){return(ih=n._emscripten_bind_btHingeConstraint___destroy___0=n.asm.sr).apply(null,arguments)},rh=n._emscripten_bind_btSliderConstraint_btSliderConstraint_3=function(){return(rh=n._emscripten_bind_btSliderConstraint_btSliderConstraint_3=n.asm.tr).apply(null,arguments)},ph=n._emscripten_bind_btSliderConstraint_btSliderConstraint_5=function(){return(ph=n._emscripten_bind_btSliderConstraint_btSliderConstraint_5=n.asm.ur).apply(null,arguments)},sh=n._emscripten_bind_btSliderConstraint_getLinearPos_0=function(){return(sh=n._emscripten_bind_btSliderConstraint_getLinearPos_0=n.asm.vr).apply(null,arguments)},ch=n._emscripten_bind_btSliderConstraint_getAngularPos_0=function(){return(ch=n._emscripten_bind_btSliderConstraint_getAngularPos_0=n.asm.wr).apply(null,arguments)},ah=n._emscripten_bind_btSliderConstraint_setLowerLinLimit_1=function(){return(ah=n._emscripten_bind_btSliderConstraint_setLowerLinLimit_1=n.asm.xr).apply(null,arguments)},lh=n._emscripten_bind_btSliderConstraint_setUpperLinLimit_1=function(){return(lh=n._emscripten_bind_btSliderConstraint_setUpperLinLimit_1=n.asm.yr).apply(null,arguments)},uh=n._emscripten_bind_btSliderConstraint_setLowerAngLimit_1=function(){return(uh=n._emscripten_bind_btSliderConstraint_setLowerAngLimit_1=n.asm.zr).apply(null,arguments)},bh=n._emscripten_bind_btSliderConstraint_setUpperAngLimit_1=function(){return(bh=n._emscripten_bind_btSliderConstraint_setUpperAngLimit_1=n.asm.Ar).apply(null,arguments)},mh=n._emscripten_bind_btSliderConstraint_setPoweredLinMotor_1=function(){return(mh=n._emscripten_bind_btSliderConstraint_setPoweredLinMotor_1=n.asm.Br).apply(null,arguments)},yh=n._emscripten_bind_btSliderConstraint_setMaxLinMotorForce_1=function(){return(yh=n._emscripten_bind_btSliderConstraint_setMaxLinMotorForce_1=n.asm.Cr).apply(null,arguments)},dh=n._emscripten_bind_btSliderConstraint_setTargetLinMotorVelocity_1=function(){return(dh=n._emscripten_bind_btSliderConstraint_setTargetLinMotorVelocity_1=n.asm.Dr).apply(null,arguments)},fh=n._emscripten_bind_btSliderConstraint_enableFeedback_1=function(){return(fh=n._emscripten_bind_btSliderConstraint_enableFeedback_1=n.asm.Er).apply(null,arguments)},hh=n._emscripten_bind_btSliderConstraint_getBreakingImpulseThreshold_0=function(){return(hh=n._emscripten_bind_btSliderConstraint_getBreakingImpulseThreshold_0=n.asm.Fr).apply(null,arguments)},Bh=n._emscripten_bind_btSliderConstraint_setBreakingImpulseThreshold_1=function(){return(Bh=n._emscripten_bind_btSliderConstraint_setBreakingImpulseThreshold_1=n.asm.Gr).apply(null,arguments)},gh=n._emscripten_bind_btSliderConstraint_getParam_2=function(){return(gh=n._emscripten_bind_btSliderConstraint_getParam_2=n.asm.Hr).apply(null,arguments)},kh=n._emscripten_bind_btSliderConstraint_setParam_3=function(){return(kh=n._emscripten_bind_btSliderConstraint_setParam_3=n.asm.Ir).apply(null,arguments)},Ch=n._emscripten_bind_btSliderConstraint___destroy___0=function(){return(Ch=n._emscripten_bind_btSliderConstraint___destroy___0=n.asm.Jr).apply(null,arguments)},Sh=n._emscripten_bind_btFixedConstraint_btFixedConstraint_4=function(){return(Sh=n._emscripten_bind_btFixedConstraint_btFixedConstraint_4=n.asm.Kr).apply(null,arguments)},jh=n._emscripten_bind_btFixedConstraint_enableFeedback_1=function(){return(jh=n._emscripten_bind_btFixedConstraint_enableFeedback_1=n.asm.Lr).apply(null,arguments)},vh=n._emscripten_bind_btFixedConstraint_getBreakingImpulseThreshold_0=function(){return(vh=n._emscripten_bind_btFixedConstraint_getBreakingImpulseThreshold_0=n.asm.Mr).apply(null,arguments)},Ih=n._emscripten_bind_btFixedConstraint_setBreakingImpulseThreshold_1=function(){return(Ih=n._emscripten_bind_btFixedConstraint_setBreakingImpulseThreshold_1=n.asm.Nr).apply(null,arguments)},Rh=n._emscripten_bind_btFixedConstraint_getParam_2=function(){return(Rh=n._emscripten_bind_btFixedConstraint_getParam_2=n.asm.Or).apply(null,arguments)},Dh=n._emscripten_bind_btFixedConstraint_setParam_3=function(){return(Dh=n._emscripten_bind_btFixedConstraint_setParam_3=n.asm.Pr).apply(null,arguments)},Ph=n._emscripten_bind_btFixedConstraint___destroy___0=function(){return(Ph=n._emscripten_bind_btFixedConstraint___destroy___0=n.asm.Qr).apply(null,arguments)},Th=n._emscripten_bind_btConstraintSolver___destroy___0=function(){return(Th=n._emscripten_bind_btConstraintSolver___destroy___0=n.asm.Rr).apply(null,arguments)},Oh=n._emscripten_bind_btDispatcherInfo_get_m_timeStep_0=function(){return(Oh=n._emscripten_bind_btDispatcherInfo_get_m_timeStep_0=n.asm.Sr).apply(null,arguments)},Wh=n._emscripten_bind_btDispatcherInfo_set_m_timeStep_1=function(){return(Wh=n._emscripten_bind_btDispatcherInfo_set_m_timeStep_1=n.asm.Tr).apply(null,arguments)},Ah=n._emscripten_bind_btDispatcherInfo_get_m_stepCount_0=function(){return(Ah=n._emscripten_bind_btDispatcherInfo_get_m_stepCount_0=n.asm.Ur).apply(null,arguments)},Mh=n._emscripten_bind_btDispatcherInfo_set_m_stepCount_1=function(){return(Mh=n._emscripten_bind_btDispatcherInfo_set_m_stepCount_1=n.asm.Vr).apply(null,arguments)},xh=n._emscripten_bind_btDispatcherInfo_get_m_dispatchFunc_0=function(){return(xh=n._emscripten_bind_btDispatcherInfo_get_m_dispatchFunc_0=n.asm.Wr).apply(null,arguments)},Fh=n._emscripten_bind_btDispatcherInfo_set_m_dispatchFunc_1=function(){return(Fh=n._emscripten_bind_btDispatcherInfo_set_m_dispatchFunc_1=n.asm.Xr).apply(null,arguments)},Lh=n._emscripten_bind_btDispatcherInfo_get_m_timeOfImpact_0=function(){return(Lh=n._emscripten_bind_btDispatcherInfo_get_m_timeOfImpact_0=n.asm.Yr).apply(null,arguments)},Gh=n._emscripten_bind_btDispatcherInfo_set_m_timeOfImpact_1=function(){return(Gh=n._emscripten_bind_btDispatcherInfo_set_m_timeOfImpact_1=n.asm.Zr).apply(null,arguments)},wh=n._emscripten_bind_btDispatcherInfo_get_m_useContinuous_0=function(){return(wh=n._emscripten_bind_btDispatcherInfo_get_m_useContinuous_0=n.asm._r).apply(null,arguments)},Hh=n._emscripten_bind_btDispatcherInfo_set_m_useContinuous_1=function(){return(Hh=n._emscripten_bind_btDispatcherInfo_set_m_useContinuous_1=n.asm.$r).apply(null,arguments)},Vh=n._emscripten_bind_btDispatcherInfo_get_m_enableSatConvex_0=function(){return(Vh=n._emscripten_bind_btDispatcherInfo_get_m_enableSatConvex_0=n.asm.as).apply(null,arguments)},Eh=n._emscripten_bind_btDispatcherInfo_set_m_enableSatConvex_1=function(){return(Eh=n._emscripten_bind_btDispatcherInfo_set_m_enableSatConvex_1=n.asm.bs).apply(null,arguments)},Nh=n._emscripten_bind_btDispatcherInfo_get_m_enableSPU_0=function(){return(Nh=n._emscripten_bind_btDispatcherInfo_get_m_enableSPU_0=n.asm.cs).apply(null,arguments)},Uh=n._emscripten_bind_btDispatcherInfo_set_m_enableSPU_1=function(){return(Uh=n._emscripten_bind_btDispatcherInfo_set_m_enableSPU_1=n.asm.ds).apply(null,arguments)},zh=n._emscripten_bind_btDispatcherInfo_get_m_useEpa_0=function(){return(zh=n._emscripten_bind_btDispatcherInfo_get_m_useEpa_0=n.asm.es).apply(null,arguments)},qh=n._emscripten_bind_btDispatcherInfo_set_m_useEpa_1=function(){return(qh=n._emscripten_bind_btDispatcherInfo_set_m_useEpa_1=n.asm.fs).apply(null,arguments)},Kh=n._emscripten_bind_btDispatcherInfo_get_m_allowedCcdPenetration_0=function(){return(Kh=n._emscripten_bind_btDispatcherInfo_get_m_allowedCcdPenetration_0=n.asm.gs).apply(null,arguments)},Qh=n._emscripten_bind_btDispatcherInfo_set_m_allowedCcdPenetration_1=function(){return(Qh=n._emscripten_bind_btDispatcherInfo_set_m_allowedCcdPenetration_1=n.asm.hs).apply(null,arguments)},Xh=n._emscripten_bind_btDispatcherInfo_get_m_useConvexConservativeDistanceUtil_0=function(){return(Xh=n._emscripten_bind_btDispatcherInfo_get_m_useConvexConservativeDistanceUtil_0=n.asm.is).apply(null,arguments)},Zh=n._emscripten_bind_btDispatcherInfo_set_m_useConvexConservativeDistanceUtil_1=function(){return(Zh=n._emscripten_bind_btDispatcherInfo_set_m_useConvexConservativeDistanceUtil_1=n.asm.js).apply(null,arguments)},Yh=n._emscripten_bind_btDispatcherInfo_get_m_convexConservativeDistanceThreshold_0=function(){return(Yh=n._emscripten_bind_btDispatcherInfo_get_m_convexConservativeDistanceThreshold_0=n.asm.ks).apply(null,arguments)},Jh=n._emscripten_bind_btDispatcherInfo_set_m_convexConservativeDistanceThreshold_1=function(){return(Jh=n._emscripten_bind_btDispatcherInfo_set_m_convexConservativeDistanceThreshold_1=n.asm.ls).apply(null,arguments)},$h=n._emscripten_bind_btDispatcherInfo___destroy___0=function(){return($h=n._emscripten_bind_btDispatcherInfo___destroy___0=n.asm.ms).apply(null,arguments)},tB=n._emscripten_bind_btContactSolverInfo_get_m_splitImpulse_0=function(){return(tB=n._emscripten_bind_btContactSolverInfo_get_m_splitImpulse_0=n.asm.ns).apply(null,arguments)},eB=n._emscripten_bind_btContactSolverInfo_set_m_splitImpulse_1=function(){return(eB=n._emscripten_bind_btContactSolverInfo_set_m_splitImpulse_1=n.asm.os).apply(null,arguments)},nB=n._emscripten_bind_btContactSolverInfo_get_m_splitImpulsePenetrationThreshold_0=function(){return(nB=n._emscripten_bind_btContactSolverInfo_get_m_splitImpulsePenetrationThreshold_0=n.asm.ps).apply(null,arguments)},oB=n._emscripten_bind_btContactSolverInfo_set_m_splitImpulsePenetrationThreshold_1=function(){return(oB=n._emscripten_bind_btContactSolverInfo_set_m_splitImpulsePenetrationThreshold_1=n.asm.qs).apply(null,arguments)},_B=n._emscripten_bind_btContactSolverInfo_get_m_numIterations_0=function(){return(_B=n._emscripten_bind_btContactSolverInfo_get_m_numIterations_0=n.asm.rs).apply(null,arguments)},iB=n._emscripten_bind_btContactSolverInfo_set_m_numIterations_1=function(){return(iB=n._emscripten_bind_btContactSolverInfo_set_m_numIterations_1=n.asm.ss).apply(null,arguments)},rB=n._emscripten_bind_btContactSolverInfo___destroy___0=function(){return(rB=n._emscripten_bind_btContactSolverInfo___destroy___0=n.asm.ts).apply(null,arguments)},pB=n._emscripten_bind_btVehicleTuning_btVehicleTuning_0=function(){return(pB=n._emscripten_bind_btVehicleTuning_btVehicleTuning_0=n.asm.us).apply(null,arguments)},sB=n._emscripten_bind_btVehicleTuning_get_m_suspensionStiffness_0=function(){return(sB=n._emscripten_bind_btVehicleTuning_get_m_suspensionStiffness_0=n.asm.vs).apply(null,arguments)},cB=n._emscripten_bind_btVehicleTuning_set_m_suspensionStiffness_1=function(){return(cB=n._emscripten_bind_btVehicleTuning_set_m_suspensionStiffness_1=n.asm.ws).apply(null,arguments)},aB=n._emscripten_bind_btVehicleTuning_get_m_suspensionCompression_0=function(){return(aB=n._emscripten_bind_btVehicleTuning_get_m_suspensionCompression_0=n.asm.xs).apply(null,arguments)},lB=n._emscripten_bind_btVehicleTuning_set_m_suspensionCompression_1=function(){return(lB=n._emscripten_bind_btVehicleTuning_set_m_suspensionCompression_1=n.asm.ys).apply(null,arguments)},uB=n._emscripten_bind_btVehicleTuning_get_m_suspensionDamping_0=function(){return(uB=n._emscripten_bind_btVehicleTuning_get_m_suspensionDamping_0=n.asm.zs).apply(null,arguments)},bB=n._emscripten_bind_btVehicleTuning_set_m_suspensionDamping_1=function(){return(bB=n._emscripten_bind_btVehicleTuning_set_m_suspensionDamping_1=n.asm.As).apply(null,arguments)},mB=n._emscripten_bind_btVehicleTuning_get_m_maxSuspensionTravelCm_0=function(){return(mB=n._emscripten_bind_btVehicleTuning_get_m_maxSuspensionTravelCm_0=n.asm.Bs).apply(null,arguments)},yB=n._emscripten_bind_btVehicleTuning_set_m_maxSuspensionTravelCm_1=function(){return(yB=n._emscripten_bind_btVehicleTuning_set_m_maxSuspensionTravelCm_1=n.asm.Cs).apply(null,arguments)},dB=n._emscripten_bind_btVehicleTuning_get_m_frictionSlip_0=function(){return(dB=n._emscripten_bind_btVehicleTuning_get_m_frictionSlip_0=n.asm.Ds).apply(null,arguments)},fB=n._emscripten_bind_btVehicleTuning_set_m_frictionSlip_1=function(){return(fB=n._emscripten_bind_btVehicleTuning_set_m_frictionSlip_1=n.asm.Es).apply(null,arguments)},hB=n._emscripten_bind_btVehicleTuning_get_m_maxSuspensionForce_0=function(){return(hB=n._emscripten_bind_btVehicleTuning_get_m_maxSuspensionForce_0=n.asm.Fs).apply(null,arguments)},BB=n._emscripten_bind_btVehicleTuning_set_m_maxSuspensionForce_1=function(){return(BB=n._emscripten_bind_btVehicleTuning_set_m_maxSuspensionForce_1=n.asm.Gs).apply(null,arguments)},gB=n._emscripten_bind_btVehicleRaycasterResult_get_m_hitPointInWorld_0=function(){return(gB=n._emscripten_bind_btVehicleRaycasterResult_get_m_hitPointInWorld_0=n.asm.Hs).apply(null,arguments)},kB=n._emscripten_bind_btVehicleRaycasterResult_set_m_hitPointInWorld_1=function(){return(kB=n._emscripten_bind_btVehicleRaycasterResult_set_m_hitPointInWorld_1=n.asm.Is).apply(null,arguments)},CB=n._emscripten_bind_btVehicleRaycasterResult_get_m_hitNormalInWorld_0=function(){return(CB=n._emscripten_bind_btVehicleRaycasterResult_get_m_hitNormalInWorld_0=n.asm.Js).apply(null,arguments)},SB=n._emscripten_bind_btVehicleRaycasterResult_set_m_hitNormalInWorld_1=function(){return(SB=n._emscripten_bind_btVehicleRaycasterResult_set_m_hitNormalInWorld_1=n.asm.Ks).apply(null,arguments)},jB=n._emscripten_bind_btVehicleRaycasterResult_get_m_distFraction_0=function(){return(jB=n._emscripten_bind_btVehicleRaycasterResult_get_m_distFraction_0=n.asm.Ls).apply(null,arguments)},vB=n._emscripten_bind_btVehicleRaycasterResult_set_m_distFraction_1=function(){return(vB=n._emscripten_bind_btVehicleRaycasterResult_set_m_distFraction_1=n.asm.Ms).apply(null,arguments)},IB=n._emscripten_bind_btVehicleRaycasterResult___destroy___0=function(){return(IB=n._emscripten_bind_btVehicleRaycasterResult___destroy___0=n.asm.Ns).apply(null,arguments)},RB=n._emscripten_bind_btDefaultVehicleRaycaster_btDefaultVehicleRaycaster_1=function(){return(RB=n._emscripten_bind_btDefaultVehicleRaycaster_btDefaultVehicleRaycaster_1=n.asm.Os).apply(null,arguments)},DB=n._emscripten_bind_btDefaultVehicleRaycaster_castRay_3=function(){return(DB=n._emscripten_bind_btDefaultVehicleRaycaster_castRay_3=n.asm.Ps).apply(null,arguments)},PB=n._emscripten_bind_btDefaultVehicleRaycaster___destroy___0=function(){return(PB=n._emscripten_bind_btDefaultVehicleRaycaster___destroy___0=n.asm.Qs).apply(null,arguments)},TB=n._emscripten_bind_RaycastInfo_get_m_contactNormalWS_0=function(){return(TB=n._emscripten_bind_RaycastInfo_get_m_contactNormalWS_0=n.asm.Rs).apply(null,arguments)},OB=n._emscripten_bind_RaycastInfo_set_m_contactNormalWS_1=function(){return(OB=n._emscripten_bind_RaycastInfo_set_m_contactNormalWS_1=n.asm.Ss).apply(null,arguments)},WB=n._emscripten_bind_RaycastInfo_get_m_contactPointWS_0=function(){return(WB=n._emscripten_bind_RaycastInfo_get_m_contactPointWS_0=n.asm.Ts).apply(null,arguments)},AB=n._emscripten_bind_RaycastInfo_set_m_contactPointWS_1=function(){return(AB=n._emscripten_bind_RaycastInfo_set_m_contactPointWS_1=n.asm.Us).apply(null,arguments)},MB=n._emscripten_bind_RaycastInfo_get_m_suspensionLength_0=function(){return(MB=n._emscripten_bind_RaycastInfo_get_m_suspensionLength_0=n.asm.Vs).apply(null,arguments)},xB=n._emscripten_bind_RaycastInfo_set_m_suspensionLength_1=function(){return(xB=n._emscripten_bind_RaycastInfo_set_m_suspensionLength_1=n.asm.Ws).apply(null,arguments)},FB=n._emscripten_bind_RaycastInfo_get_m_hardPointWS_0=function(){return(FB=n._emscripten_bind_RaycastInfo_get_m_hardPointWS_0=n.asm.Xs).apply(null,arguments)},LB=n._emscripten_bind_RaycastInfo_set_m_hardPointWS_1=function(){return(LB=n._emscripten_bind_RaycastInfo_set_m_hardPointWS_1=n.asm.Ys).apply(null,arguments)},GB=n._emscripten_bind_RaycastInfo_get_m_wheelDirectionWS_0=function(){return(GB=n._emscripten_bind_RaycastInfo_get_m_wheelDirectionWS_0=n.asm.Zs).apply(null,arguments)},wB=n._emscripten_bind_RaycastInfo_set_m_wheelDirectionWS_1=function(){return(wB=n._emscripten_bind_RaycastInfo_set_m_wheelDirectionWS_1=n.asm._s).apply(null,arguments)},HB=n._emscripten_bind_RaycastInfo_get_m_wheelAxleWS_0=function(){return(HB=n._emscripten_bind_RaycastInfo_get_m_wheelAxleWS_0=n.asm.$s).apply(null,arguments)},VB=n._emscripten_bind_RaycastInfo_set_m_wheelAxleWS_1=function(){return(VB=n._emscripten_bind_RaycastInfo_set_m_wheelAxleWS_1=n.asm.at).apply(null,arguments)},EB=n._emscripten_bind_RaycastInfo_get_m_isInContact_0=function(){return(EB=n._emscripten_bind_RaycastInfo_get_m_isInContact_0=n.asm.bt).apply(null,arguments)},NB=n._emscripten_bind_RaycastInfo_set_m_isInContact_1=function(){return(NB=n._emscripten_bind_RaycastInfo_set_m_isInContact_1=n.asm.ct).apply(null,arguments)},UB=n._emscripten_bind_RaycastInfo_get_m_groundObject_0=function(){return(UB=n._emscripten_bind_RaycastInfo_get_m_groundObject_0=n.asm.dt).apply(null,arguments)},zB=n._emscripten_bind_RaycastInfo_set_m_groundObject_1=function(){return(zB=n._emscripten_bind_RaycastInfo_set_m_groundObject_1=n.asm.et).apply(null,arguments)},qB=n._emscripten_bind_RaycastInfo___destroy___0=function(){return(qB=n._emscripten_bind_RaycastInfo___destroy___0=n.asm.ft).apply(null,arguments)},KB=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_chassisConnectionCS_0=function(){return(KB=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_chassisConnectionCS_0=n.asm.gt).apply(null,arguments)},QB=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_chassisConnectionCS_1=function(){return(QB=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_chassisConnectionCS_1=n.asm.ht).apply(null,arguments)},XB=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelDirectionCS_0=function(){return(XB=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelDirectionCS_0=n.asm.it).apply(null,arguments)},ZB=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelDirectionCS_1=function(){return(ZB=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelDirectionCS_1=n.asm.jt).apply(null,arguments)},YB=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelAxleCS_0=function(){return(YB=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelAxleCS_0=n.asm.kt).apply(null,arguments)},JB=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelAxleCS_1=function(){return(JB=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelAxleCS_1=n.asm.lt).apply(null,arguments)},$B=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionRestLength_0=function(){return($B=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionRestLength_0=n.asm.mt).apply(null,arguments)},tg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionRestLength_1=function(){return(tg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionRestLength_1=n.asm.nt).apply(null,arguments)},eg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionTravelCm_0=function(){return(eg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionTravelCm_0=n.asm.ot).apply(null,arguments)},ng=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionTravelCm_1=function(){return(ng=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionTravelCm_1=n.asm.pt).apply(null,arguments)},og=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelRadius_0=function(){return(og=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelRadius_0=n.asm.qt).apply(null,arguments)},_g=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelRadius_1=function(){return(_g=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelRadius_1=n.asm.rt).apply(null,arguments)},ig=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionStiffness_0=function(){return(ig=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionStiffness_0=n.asm.st).apply(null,arguments)},rg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionStiffness_1=function(){return(rg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionStiffness_1=n.asm.tt).apply(null,arguments)},pg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingCompression_0=function(){return(pg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingCompression_0=n.asm.ut).apply(null,arguments)},sg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingCompression_1=function(){return(sg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingCompression_1=n.asm.vt).apply(null,arguments)},cg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingRelaxation_0=function(){return(cg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingRelaxation_0=n.asm.wt).apply(null,arguments)},ag=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingRelaxation_1=function(){return(ag=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingRelaxation_1=n.asm.xt).apply(null,arguments)},lg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_frictionSlip_0=function(){return(lg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_frictionSlip_0=n.asm.yt).apply(null,arguments)},ug=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_frictionSlip_1=function(){return(ug=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_frictionSlip_1=n.asm.zt).apply(null,arguments)},bg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionForce_0=function(){return(bg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionForce_0=n.asm.At).apply(null,arguments)},mg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionForce_1=function(){return(mg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionForce_1=n.asm.Bt).apply(null,arguments)},yg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_bIsFrontWheel_0=function(){return(yg=n._emscripten_bind_btWheelInfoConstructionInfo_get_m_bIsFrontWheel_0=n.asm.Ct).apply(null,arguments)},dg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_bIsFrontWheel_1=function(){return(dg=n._emscripten_bind_btWheelInfoConstructionInfo_set_m_bIsFrontWheel_1=n.asm.Dt).apply(null,arguments)},fg=n._emscripten_bind_btWheelInfoConstructionInfo___destroy___0=function(){return(fg=n._emscripten_bind_btWheelInfoConstructionInfo___destroy___0=n.asm.Et).apply(null,arguments)},hg=n._emscripten_bind_btWheelInfo_btWheelInfo_1=function(){return(hg=n._emscripten_bind_btWheelInfo_btWheelInfo_1=n.asm.Ft).apply(null,arguments)},Bg=n._emscripten_bind_btWheelInfo_getSuspensionRestLength_0=function(){return(Bg=n._emscripten_bind_btWheelInfo_getSuspensionRestLength_0=n.asm.Gt).apply(null,arguments)},gg=n._emscripten_bind_btWheelInfo_updateWheel_2=function(){return(gg=n._emscripten_bind_btWheelInfo_updateWheel_2=n.asm.Ht).apply(null,arguments)},kg=n._emscripten_bind_btWheelInfo_get_m_suspensionStiffness_0=function(){return(kg=n._emscripten_bind_btWheelInfo_get_m_suspensionStiffness_0=n.asm.It).apply(null,arguments)},Cg=n._emscripten_bind_btWheelInfo_set_m_suspensionStiffness_1=function(){return(Cg=n._emscripten_bind_btWheelInfo_set_m_suspensionStiffness_1=n.asm.Jt).apply(null,arguments)},Sg=n._emscripten_bind_btWheelInfo_get_m_frictionSlip_0=function(){return(Sg=n._emscripten_bind_btWheelInfo_get_m_frictionSlip_0=n.asm.Kt).apply(null,arguments)},jg=n._emscripten_bind_btWheelInfo_set_m_frictionSlip_1=function(){return(jg=n._emscripten_bind_btWheelInfo_set_m_frictionSlip_1=n.asm.Lt).apply(null,arguments)},vg=n._emscripten_bind_btWheelInfo_get_m_engineForce_0=function(){return(vg=n._emscripten_bind_btWheelInfo_get_m_engineForce_0=n.asm.Mt).apply(null,arguments)},Ig=n._emscripten_bind_btWheelInfo_set_m_engineForce_1=function(){return(Ig=n._emscripten_bind_btWheelInfo_set_m_engineForce_1=n.asm.Nt).apply(null,arguments)},Rg=n._emscripten_bind_btWheelInfo_get_m_rollInfluence_0=function(){return(Rg=n._emscripten_bind_btWheelInfo_get_m_rollInfluence_0=n.asm.Ot).apply(null,arguments)},Dg=n._emscripten_bind_btWheelInfo_set_m_rollInfluence_1=function(){return(Dg=n._emscripten_bind_btWheelInfo_set_m_rollInfluence_1=n.asm.Pt).apply(null,arguments)},Pg=n._emscripten_bind_btWheelInfo_get_m_suspensionRestLength1_0=function(){return(Pg=n._emscripten_bind_btWheelInfo_get_m_suspensionRestLength1_0=n.asm.Qt).apply(null,arguments)},Tg=n._emscripten_bind_btWheelInfo_set_m_suspensionRestLength1_1=function(){return(Tg=n._emscripten_bind_btWheelInfo_set_m_suspensionRestLength1_1=n.asm.Rt).apply(null,arguments)},Og=n._emscripten_bind_btWheelInfo_get_m_wheelsRadius_0=function(){return(Og=n._emscripten_bind_btWheelInfo_get_m_wheelsRadius_0=n.asm.St).apply(null,arguments)},Wg=n._emscripten_bind_btWheelInfo_set_m_wheelsRadius_1=function(){return(Wg=n._emscripten_bind_btWheelInfo_set_m_wheelsRadius_1=n.asm.Tt).apply(null,arguments)},Ag=n._emscripten_bind_btWheelInfo_get_m_wheelsDampingCompression_0=function(){return(Ag=n._emscripten_bind_btWheelInfo_get_m_wheelsDampingCompression_0=n.asm.Ut).apply(null,arguments)},Mg=n._emscripten_bind_btWheelInfo_set_m_wheelsDampingCompression_1=function(){return(Mg=n._emscripten_bind_btWheelInfo_set_m_wheelsDampingCompression_1=n.asm.Vt).apply(null,arguments)},xg=n._emscripten_bind_btWheelInfo_get_m_wheelsDampingRelaxation_0=function(){return(xg=n._emscripten_bind_btWheelInfo_get_m_wheelsDampingRelaxation_0=n.asm.Wt).apply(null,arguments)},Fg=n._emscripten_bind_btWheelInfo_set_m_wheelsDampingRelaxation_1=function(){return(Fg=n._emscripten_bind_btWheelInfo_set_m_wheelsDampingRelaxation_1=n.asm.Xt).apply(null,arguments)},Lg=n._emscripten_bind_btWheelInfo_get_m_steering_0=function(){return(Lg=n._emscripten_bind_btWheelInfo_get_m_steering_0=n.asm.Yt).apply(null,arguments)},Gg=n._emscripten_bind_btWheelInfo_set_m_steering_1=function(){return(Gg=n._emscripten_bind_btWheelInfo_set_m_steering_1=n.asm.Zt).apply(null,arguments)},wg=n._emscripten_bind_btWheelInfo_get_m_maxSuspensionForce_0=function(){return(wg=n._emscripten_bind_btWheelInfo_get_m_maxSuspensionForce_0=n.asm._t).apply(null,arguments)},Hg=n._emscripten_bind_btWheelInfo_set_m_maxSuspensionForce_1=function(){return(Hg=n._emscripten_bind_btWheelInfo_set_m_maxSuspensionForce_1=n.asm.$t).apply(null,arguments)},Vg=n._emscripten_bind_btWheelInfo_get_m_maxSuspensionTravelCm_0=function(){return(Vg=n._emscripten_bind_btWheelInfo_get_m_maxSuspensionTravelCm_0=n.asm.au).apply(null,arguments)},Eg=n._emscripten_bind_btWheelInfo_set_m_maxSuspensionTravelCm_1=function(){return(Eg=n._emscripten_bind_btWheelInfo_set_m_maxSuspensionTravelCm_1=n.asm.bu).apply(null,arguments)},Ng=n._emscripten_bind_btWheelInfo_get_m_wheelsSuspensionForce_0=function(){return(Ng=n._emscripten_bind_btWheelInfo_get_m_wheelsSuspensionForce_0=n.asm.cu).apply(null,arguments)},Ug=n._emscripten_bind_btWheelInfo_set_m_wheelsSuspensionForce_1=function(){return(Ug=n._emscripten_bind_btWheelInfo_set_m_wheelsSuspensionForce_1=n.asm.du).apply(null,arguments)},zg=n._emscripten_bind_btWheelInfo_get_m_bIsFrontWheel_0=function(){return(zg=n._emscripten_bind_btWheelInfo_get_m_bIsFrontWheel_0=n.asm.eu).apply(null,arguments)},qg=n._emscripten_bind_btWheelInfo_set_m_bIsFrontWheel_1=function(){return(qg=n._emscripten_bind_btWheelInfo_set_m_bIsFrontWheel_1=n.asm.fu).apply(null,arguments)},Kg=n._emscripten_bind_btWheelInfo_get_m_raycastInfo_0=function(){return(Kg=n._emscripten_bind_btWheelInfo_get_m_raycastInfo_0=n.asm.gu).apply(null,arguments)},Qg=n._emscripten_bind_btWheelInfo_set_m_raycastInfo_1=function(){return(Qg=n._emscripten_bind_btWheelInfo_set_m_raycastInfo_1=n.asm.hu).apply(null,arguments)},Xg=n._emscripten_bind_btWheelInfo_get_m_chassisConnectionPointCS_0=function(){return(Xg=n._emscripten_bind_btWheelInfo_get_m_chassisConnectionPointCS_0=n.asm.iu).apply(null,arguments)},Zg=n._emscripten_bind_btWheelInfo_set_m_chassisConnectionPointCS_1=function(){return(Zg=n._emscripten_bind_btWheelInfo_set_m_chassisConnectionPointCS_1=n.asm.ju).apply(null,arguments)},Yg=n._emscripten_bind_btWheelInfo_get_m_worldTransform_0=function(){return(Yg=n._emscripten_bind_btWheelInfo_get_m_worldTransform_0=n.asm.ku).apply(null,arguments)},Jg=n._emscripten_bind_btWheelInfo_set_m_worldTransform_1=function(){return(Jg=n._emscripten_bind_btWheelInfo_set_m_worldTransform_1=n.asm.lu).apply(null,arguments)},$g=n._emscripten_bind_btWheelInfo_get_m_wheelDirectionCS_0=function(){return($g=n._emscripten_bind_btWheelInfo_get_m_wheelDirectionCS_0=n.asm.mu).apply(null,arguments)},tk=n._emscripten_bind_btWheelInfo_set_m_wheelDirectionCS_1=function(){return(tk=n._emscripten_bind_btWheelInfo_set_m_wheelDirectionCS_1=n.asm.nu).apply(null,arguments)},ek=n._emscripten_bind_btWheelInfo_get_m_wheelAxleCS_0=function(){return(ek=n._emscripten_bind_btWheelInfo_get_m_wheelAxleCS_0=n.asm.ou).apply(null,arguments)},nk=n._emscripten_bind_btWheelInfo_set_m_wheelAxleCS_1=function(){return(nk=n._emscripten_bind_btWheelInfo_set_m_wheelAxleCS_1=n.asm.pu).apply(null,arguments)},ok=n._emscripten_bind_btWheelInfo_get_m_rotation_0=function(){return(ok=n._emscripten_bind_btWheelInfo_get_m_rotation_0=n.asm.qu).apply(null,arguments)},_k=n._emscripten_bind_btWheelInfo_set_m_rotation_1=function(){return(_k=n._emscripten_bind_btWheelInfo_set_m_rotation_1=n.asm.ru).apply(null,arguments)},ik=n._emscripten_bind_btWheelInfo_get_m_deltaRotation_0=function(){return(ik=n._emscripten_bind_btWheelInfo_get_m_deltaRotation_0=n.asm.su).apply(null,arguments)},rk=n._emscripten_bind_btWheelInfo_set_m_deltaRotation_1=function(){return(rk=n._emscripten_bind_btWheelInfo_set_m_deltaRotation_1=n.asm.tu).apply(null,arguments)},pk=n._emscripten_bind_btWheelInfo_get_m_brake_0=function(){return(pk=n._emscripten_bind_btWheelInfo_get_m_brake_0=n.asm.uu).apply(null,arguments)},sk=n._emscripten_bind_btWheelInfo_set_m_brake_1=function(){return(sk=n._emscripten_bind_btWheelInfo_set_m_brake_1=n.asm.vu).apply(null,arguments)},ck=n._emscripten_bind_btWheelInfo_get_m_clippedInvContactDotSuspension_0=function(){return(ck=n._emscripten_bind_btWheelInfo_get_m_clippedInvContactDotSuspension_0=n.asm.wu).apply(null,arguments)},ak=n._emscripten_bind_btWheelInfo_set_m_clippedInvContactDotSuspension_1=function(){return(ak=n._emscripten_bind_btWheelInfo_set_m_clippedInvContactDotSuspension_1=n.asm.xu).apply(null,arguments)},lk=n._emscripten_bind_btWheelInfo_get_m_suspensionRelativeVelocity_0=function(){return(lk=n._emscripten_bind_btWheelInfo_get_m_suspensionRelativeVelocity_0=n.asm.yu).apply(null,arguments)},uk=n._emscripten_bind_btWheelInfo_set_m_suspensionRelativeVelocity_1=function(){return(uk=n._emscripten_bind_btWheelInfo_set_m_suspensionRelativeVelocity_1=n.asm.zu).apply(null,arguments)},bk=n._emscripten_bind_btWheelInfo_get_m_skidInfo_0=function(){return(bk=n._emscripten_bind_btWheelInfo_get_m_skidInfo_0=n.asm.Au).apply(null,arguments)},mk=n._emscripten_bind_btWheelInfo_set_m_skidInfo_1=function(){return(mk=n._emscripten_bind_btWheelInfo_set_m_skidInfo_1=n.asm.Bu).apply(null,arguments)},yk=n._emscripten_bind_btWheelInfo___destroy___0=function(){return(yk=n._emscripten_bind_btWheelInfo___destroy___0=n.asm.Cu).apply(null,arguments)},dk=n._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_3=function(){return(dk=n._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_3=n.asm.Du).apply(null,arguments)},fk=n._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_4=function(){return(fk=n._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_4=n.asm.Eu).apply(null,arguments)},hk=n._emscripten_bind_btKinematicCharacterController_setUpAxis_1=function(){return(hk=n._emscripten_bind_btKinematicCharacterController_setUpAxis_1=n.asm.Fu).apply(null,arguments)},Bk=n._emscripten_bind_btKinematicCharacterController_setWalkDirection_1=function(){return(Bk=n._emscripten_bind_btKinematicCharacterController_setWalkDirection_1=n.asm.Gu).apply(null,arguments)},gk=n._emscripten_bind_btKinematicCharacterController_setVelocityForTimeInterval_2=function(){return(gk=n._emscripten_bind_btKinematicCharacterController_setVelocityForTimeInterval_2=n.asm.Hu).apply(null,arguments)},kk=n._emscripten_bind_btKinematicCharacterController_warp_1=function(){return(kk=n._emscripten_bind_btKinematicCharacterController_warp_1=n.asm.Iu).apply(null,arguments)},Ck=n._emscripten_bind_btKinematicCharacterController_preStep_1=function(){return(Ck=n._emscripten_bind_btKinematicCharacterController_preStep_1=n.asm.Ju).apply(null,arguments)},Sk=n._emscripten_bind_btKinematicCharacterController_playerStep_2=function(){return(Sk=n._emscripten_bind_btKinematicCharacterController_playerStep_2=n.asm.Ku).apply(null,arguments)},jk=n._emscripten_bind_btKinematicCharacterController_setFallSpeed_1=function(){return(jk=n._emscripten_bind_btKinematicCharacterController_setFallSpeed_1=n.asm.Lu).apply(null,arguments)},vk=n._emscripten_bind_btKinematicCharacterController_setJumpSpeed_1=function(){return(vk=n._emscripten_bind_btKinematicCharacterController_setJumpSpeed_1=n.asm.Mu).apply(null,arguments)},Ik=n._emscripten_bind_btKinematicCharacterController_setMaxJumpHeight_1=function(){return(Ik=n._emscripten_bind_btKinematicCharacterController_setMaxJumpHeight_1=n.asm.Nu).apply(null,arguments)},Rk=n._emscripten_bind_btKinematicCharacterController_canJump_0=function(){return(Rk=n._emscripten_bind_btKinematicCharacterController_canJump_0=n.asm.Ou).apply(null,arguments)},Dk=n._emscripten_bind_btKinematicCharacterController_jump_0=function(){return(Dk=n._emscripten_bind_btKinematicCharacterController_jump_0=n.asm.Pu).apply(null,arguments)},Pk=n._emscripten_bind_btKinematicCharacterController_setGravity_1=function(){return(Pk=n._emscripten_bind_btKinematicCharacterController_setGravity_1=n.asm.Qu).apply(null,arguments)},Tk=n._emscripten_bind_btKinematicCharacterController_getGravity_0=function(){return(Tk=n._emscripten_bind_btKinematicCharacterController_getGravity_0=n.asm.Ru).apply(null,arguments)},Ok=n._emscripten_bind_btKinematicCharacterController_setMaxSlope_1=function(){return(Ok=n._emscripten_bind_btKinematicCharacterController_setMaxSlope_1=n.asm.Su).apply(null,arguments)},Wk=n._emscripten_bind_btKinematicCharacterController_getMaxSlope_0=function(){return(Wk=n._emscripten_bind_btKinematicCharacterController_getMaxSlope_0=n.asm.Tu).apply(null,arguments)},Ak=n._emscripten_bind_btKinematicCharacterController_getGhostObject_0=function(){return(Ak=n._emscripten_bind_btKinematicCharacterController_getGhostObject_0=n.asm.Uu).apply(null,arguments)},Mk=n._emscripten_bind_btKinematicCharacterController_setUseGhostSweepTest_1=function(){return(Mk=n._emscripten_bind_btKinematicCharacterController_setUseGhostSweepTest_1=n.asm.Vu).apply(null,arguments)},xk=n._emscripten_bind_btKinematicCharacterController_onGround_0=function(){return(xk=n._emscripten_bind_btKinematicCharacterController_onGround_0=n.asm.Wu).apply(null,arguments)},Fk=n._emscripten_bind_btKinematicCharacterController_setUpInterpolate_1=function(){return(Fk=n._emscripten_bind_btKinematicCharacterController_setUpInterpolate_1=n.asm.Xu).apply(null,arguments)},Lk=n._emscripten_bind_btKinematicCharacterController_updateAction_2=function(){return(Lk=n._emscripten_bind_btKinematicCharacterController_updateAction_2=n.asm.Yu).apply(null,arguments)},Gk=n._emscripten_bind_btKinematicCharacterController___destroy___0=function(){return(Gk=n._emscripten_bind_btKinematicCharacterController___destroy___0=n.asm.Zu).apply(null,arguments)},wk=n._emscripten_bind_btRaycastVehicle_btRaycastVehicle_3=function(){return(wk=n._emscripten_bind_btRaycastVehicle_btRaycastVehicle_3=n.asm._u).apply(null,arguments)},Hk=n._emscripten_bind_btRaycastVehicle_applyEngineForce_2=function(){return(Hk=n._emscripten_bind_btRaycastVehicle_applyEngineForce_2=n.asm.$u).apply(null,arguments)},Vk=n._emscripten_bind_btRaycastVehicle_setSteeringValue_2=function(){return(Vk=n._emscripten_bind_btRaycastVehicle_setSteeringValue_2=n.asm.av).apply(null,arguments)},Ek=n._emscripten_bind_btRaycastVehicle_getWheelTransformWS_1=function(){return(Ek=n._emscripten_bind_btRaycastVehicle_getWheelTransformWS_1=n.asm.bv).apply(null,arguments)},Nk=n._emscripten_bind_btRaycastVehicle_updateWheelTransform_2=function(){return(Nk=n._emscripten_bind_btRaycastVehicle_updateWheelTransform_2=n.asm.cv).apply(null,arguments)},Uk=n._emscripten_bind_btRaycastVehicle_addWheel_7=function(){return(Uk=n._emscripten_bind_btRaycastVehicle_addWheel_7=n.asm.dv).apply(null,arguments)},zk=n._emscripten_bind_btRaycastVehicle_getNumWheels_0=function(){return(zk=n._emscripten_bind_btRaycastVehicle_getNumWheels_0=n.asm.ev).apply(null,arguments)},qk=n._emscripten_bind_btRaycastVehicle_getRigidBody_0=function(){return(qk=n._emscripten_bind_btRaycastVehicle_getRigidBody_0=n.asm.fv).apply(null,arguments)},Kk=n._emscripten_bind_btRaycastVehicle_getWheelInfo_1=function(){return(Kk=n._emscripten_bind_btRaycastVehicle_getWheelInfo_1=n.asm.gv).apply(null,arguments)},Qk=n._emscripten_bind_btRaycastVehicle_setBrake_2=function(){return(Qk=n._emscripten_bind_btRaycastVehicle_setBrake_2=n.asm.hv).apply(null,arguments)},Xk=n._emscripten_bind_btRaycastVehicle_setCoordinateSystem_3=function(){return(Xk=n._emscripten_bind_btRaycastVehicle_setCoordinateSystem_3=n.asm.iv).apply(null,arguments)},Zk=n._emscripten_bind_btRaycastVehicle_getCurrentSpeedKmHour_0=function(){return(Zk=n._emscripten_bind_btRaycastVehicle_getCurrentSpeedKmHour_0=n.asm.jv).apply(null,arguments)},Yk=n._emscripten_bind_btRaycastVehicle_getChassisWorldTransform_0=function(){return(Yk=n._emscripten_bind_btRaycastVehicle_getChassisWorldTransform_0=n.asm.kv).apply(null,arguments)},Jk=n._emscripten_bind_btRaycastVehicle_rayCast_1=function(){return(Jk=n._emscripten_bind_btRaycastVehicle_rayCast_1=n.asm.lv).apply(null,arguments)},$k=n._emscripten_bind_btRaycastVehicle_updateVehicle_1=function(){return($k=n._emscripten_bind_btRaycastVehicle_updateVehicle_1=n.asm.mv).apply(null,arguments)},tC=n._emscripten_bind_btRaycastVehicle_resetSuspension_0=function(){return(tC=n._emscripten_bind_btRaycastVehicle_resetSuspension_0=n.asm.nv).apply(null,arguments)},eC=n._emscripten_bind_btRaycastVehicle_getSteeringValue_1=function(){return(eC=n._emscripten_bind_btRaycastVehicle_getSteeringValue_1=n.asm.ov).apply(null,arguments)},nC=n._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_1=function(){return(nC=n._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_1=n.asm.pv).apply(null,arguments)},oC=n._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_2=function(){return(oC=n._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_2=n.asm.qv).apply(null,arguments)},_C=n._emscripten_bind_btRaycastVehicle_setPitchControl_1=function(){return(_C=n._emscripten_bind_btRaycastVehicle_setPitchControl_1=n.asm.rv).apply(null,arguments)},iC=n._emscripten_bind_btRaycastVehicle_updateSuspension_1=function(){return(iC=n._emscripten_bind_btRaycastVehicle_updateSuspension_1=n.asm.sv).apply(null,arguments)},rC=n._emscripten_bind_btRaycastVehicle_updateFriction_1=function(){return(rC=n._emscripten_bind_btRaycastVehicle_updateFriction_1=n.asm.tv).apply(null,arguments)},pC=n._emscripten_bind_btRaycastVehicle_getRightAxis_0=function(){return(pC=n._emscripten_bind_btRaycastVehicle_getRightAxis_0=n.asm.uv).apply(null,arguments)},sC=n._emscripten_bind_btRaycastVehicle_getUpAxis_0=function(){return(sC=n._emscripten_bind_btRaycastVehicle_getUpAxis_0=n.asm.vv).apply(null,arguments)},cC=n._emscripten_bind_btRaycastVehicle_getForwardAxis_0=function(){return(cC=n._emscripten_bind_btRaycastVehicle_getForwardAxis_0=n.asm.wv).apply(null,arguments)},aC=n._emscripten_bind_btRaycastVehicle_getForwardVector_0=function(){return(aC=n._emscripten_bind_btRaycastVehicle_getForwardVector_0=n.asm.xv).apply(null,arguments)},lC=n._emscripten_bind_btRaycastVehicle_getUserConstraintType_0=function(){return(lC=n._emscripten_bind_btRaycastVehicle_getUserConstraintType_0=n.asm.yv).apply(null,arguments)},uC=n._emscripten_bind_btRaycastVehicle_setUserConstraintType_1=function(){return(uC=n._emscripten_bind_btRaycastVehicle_setUserConstraintType_1=n.asm.zv).apply(null,arguments)},bC=n._emscripten_bind_btRaycastVehicle_setUserConstraintId_1=function(){return(bC=n._emscripten_bind_btRaycastVehicle_setUserConstraintId_1=n.asm.Av).apply(null,arguments)},mC=n._emscripten_bind_btRaycastVehicle_getUserConstraintId_0=function(){return(mC=n._emscripten_bind_btRaycastVehicle_getUserConstraintId_0=n.asm.Bv).apply(null,arguments)},yC=n._emscripten_bind_btRaycastVehicle_updateAction_2=function(){return(yC=n._emscripten_bind_btRaycastVehicle_updateAction_2=n.asm.Cv).apply(null,arguments)},dC=n._emscripten_bind_btRaycastVehicle___destroy___0=function(){return(dC=n._emscripten_bind_btRaycastVehicle___destroy___0=n.asm.Dv).apply(null,arguments)},fC=n._emscripten_bind_btPairCachingGhostObject_btPairCachingGhostObject_0=function(){return(fC=n._emscripten_bind_btPairCachingGhostObject_btPairCachingGhostObject_0=n.asm.Ev).apply(null,arguments)},hC=n._emscripten_bind_btPairCachingGhostObject_setAnisotropicFriction_2=function(){return(hC=n._emscripten_bind_btPairCachingGhostObject_setAnisotropicFriction_2=n.asm.Fv).apply(null,arguments)},BC=n._emscripten_bind_btPairCachingGhostObject_getCollisionShape_0=function(){return(BC=n._emscripten_bind_btPairCachingGhostObject_getCollisionShape_0=n.asm.Gv).apply(null,arguments)},gC=n._emscripten_bind_btPairCachingGhostObject_setContactProcessingThreshold_1=function(){return(gC=n._emscripten_bind_btPairCachingGhostObject_setContactProcessingThreshold_1=n.asm.Hv).apply(null,arguments)},kC=n._emscripten_bind_btPairCachingGhostObject_setActivationState_1=function(){return(kC=n._emscripten_bind_btPairCachingGhostObject_setActivationState_1=n.asm.Iv).apply(null,arguments)},CC=n._emscripten_bind_btPairCachingGhostObject_forceActivationState_1=function(){return(CC=n._emscripten_bind_btPairCachingGhostObject_forceActivationState_1=n.asm.Jv).apply(null,arguments)},SC=n._emscripten_bind_btPairCachingGhostObject_activate_0=function(){return(SC=n._emscripten_bind_btPairCachingGhostObject_activate_0=n.asm.Kv).apply(null,arguments)},jC=n._emscripten_bind_btPairCachingGhostObject_activate_1=function(){return(jC=n._emscripten_bind_btPairCachingGhostObject_activate_1=n.asm.Lv).apply(null,arguments)},vC=n._emscripten_bind_btPairCachingGhostObject_isActive_0=function(){return(vC=n._emscripten_bind_btPairCachingGhostObject_isActive_0=n.asm.Mv).apply(null,arguments)},IC=n._emscripten_bind_btPairCachingGhostObject_isKinematicObject_0=function(){return(IC=n._emscripten_bind_btPairCachingGhostObject_isKinematicObject_0=n.asm.Nv).apply(null,arguments)},RC=n._emscripten_bind_btPairCachingGhostObject_isStaticObject_0=function(){return(RC=n._emscripten_bind_btPairCachingGhostObject_isStaticObject_0=n.asm.Ov).apply(null,arguments)},DC=n._emscripten_bind_btPairCachingGhostObject_isStaticOrKinematicObject_0=function(){return(DC=n._emscripten_bind_btPairCachingGhostObject_isStaticOrKinematicObject_0=n.asm.Pv).apply(null,arguments)},PC=n._emscripten_bind_btPairCachingGhostObject_getRestitution_0=function(){return(PC=n._emscripten_bind_btPairCachingGhostObject_getRestitution_0=n.asm.Qv).apply(null,arguments)},TC=n._emscripten_bind_btPairCachingGhostObject_getFriction_0=function(){return(TC=n._emscripten_bind_btPairCachingGhostObject_getFriction_0=n.asm.Rv).apply(null,arguments)},OC=n._emscripten_bind_btPairCachingGhostObject_getRollingFriction_0=function(){return(OC=n._emscripten_bind_btPairCachingGhostObject_getRollingFriction_0=n.asm.Sv).apply(null,arguments)},WC=n._emscripten_bind_btPairCachingGhostObject_setRestitution_1=function(){return(WC=n._emscripten_bind_btPairCachingGhostObject_setRestitution_1=n.asm.Tv).apply(null,arguments)},AC=n._emscripten_bind_btPairCachingGhostObject_setFriction_1=function(){return(AC=n._emscripten_bind_btPairCachingGhostObject_setFriction_1=n.asm.Uv).apply(null,arguments)},MC=n._emscripten_bind_btPairCachingGhostObject_setRollingFriction_1=function(){return(MC=n._emscripten_bind_btPairCachingGhostObject_setRollingFriction_1=n.asm.Vv).apply(null,arguments)},xC=n._emscripten_bind_btPairCachingGhostObject_getWorldTransform_0=function(){return(xC=n._emscripten_bind_btPairCachingGhostObject_getWorldTransform_0=n.asm.Wv).apply(null,arguments)},FC=n._emscripten_bind_btPairCachingGhostObject_getCollisionFlags_0=function(){return(FC=n._emscripten_bind_btPairCachingGhostObject_getCollisionFlags_0=n.asm.Xv).apply(null,arguments)},LC=n._emscripten_bind_btPairCachingGhostObject_setCollisionFlags_1=function(){return(LC=n._emscripten_bind_btPairCachingGhostObject_setCollisionFlags_1=n.asm.Yv).apply(null,arguments)},GC=n._emscripten_bind_btPairCachingGhostObject_setWorldTransform_1=function(){return(GC=n._emscripten_bind_btPairCachingGhostObject_setWorldTransform_1=n.asm.Zv).apply(null,arguments)},wC=n._emscripten_bind_btPairCachingGhostObject_setCollisionShape_1=function(){return(wC=n._emscripten_bind_btPairCachingGhostObject_setCollisionShape_1=n.asm._v).apply(null,arguments)},HC=n._emscripten_bind_btPairCachingGhostObject_setCcdMotionThreshold_1=function(){return(HC=n._emscripten_bind_btPairCachingGhostObject_setCcdMotionThreshold_1=n.asm.$v).apply(null,arguments)},VC=n._emscripten_bind_btPairCachingGhostObject_setCcdSweptSphereRadius_1=function(){return(VC=n._emscripten_bind_btPairCachingGhostObject_setCcdSweptSphereRadius_1=n.asm.aw).apply(null,arguments)},EC=n._emscripten_bind_btPairCachingGhostObject_getUserIndex_0=function(){return(EC=n._emscripten_bind_btPairCachingGhostObject_getUserIndex_0=n.asm.bw).apply(null,arguments)},NC=n._emscripten_bind_btPairCachingGhostObject_setUserIndex_1=function(){return(NC=n._emscripten_bind_btPairCachingGhostObject_setUserIndex_1=n.asm.cw).apply(null,arguments)},UC=n._emscripten_bind_btPairCachingGhostObject_getUserPointer_0=function(){return(UC=n._emscripten_bind_btPairCachingGhostObject_getUserPointer_0=n.asm.dw).apply(null,arguments)},zC=n._emscripten_bind_btPairCachingGhostObject_setUserPointer_1=function(){return(zC=n._emscripten_bind_btPairCachingGhostObject_setUserPointer_1=n.asm.ew).apply(null,arguments)},qC=n._emscripten_bind_btPairCachingGhostObject_getBroadphaseHandle_0=function(){return(qC=n._emscripten_bind_btPairCachingGhostObject_getBroadphaseHandle_0=n.asm.fw).apply(null,arguments)},KC=n._emscripten_bind_btPairCachingGhostObject_getNumOverlappingObjects_0=function(){return(KC=n._emscripten_bind_btPairCachingGhostObject_getNumOverlappingObjects_0=n.asm.gw).apply(null,arguments)},QC=n._emscripten_bind_btPairCachingGhostObject_getOverlappingObject_1=function(){return(QC=n._emscripten_bind_btPairCachingGhostObject_getOverlappingObject_1=n.asm.hw).apply(null,arguments)},XC=n._emscripten_bind_btPairCachingGhostObject___destroy___0=function(){return(XC=n._emscripten_bind_btPairCachingGhostObject___destroy___0=n.asm.iw).apply(null,arguments)},ZC=n._emscripten_bind_btGhostPairCallback_btGhostPairCallback_0=function(){return(ZC=n._emscripten_bind_btGhostPairCallback_btGhostPairCallback_0=n.asm.jw).apply(null,arguments)},YC=n._emscripten_bind_btGhostPairCallback___destroy___0=function(){return(YC=n._emscripten_bind_btGhostPairCallback___destroy___0=n.asm.kw).apply(null,arguments)},JC=n._emscripten_bind_btSoftBodyWorldInfo_btSoftBodyWorldInfo_0=function(){return(JC=n._emscripten_bind_btSoftBodyWorldInfo_btSoftBodyWorldInfo_0=n.asm.lw).apply(null,arguments)},$C=n._emscripten_bind_btSoftBodyWorldInfo_get_air_density_0=function(){return($C=n._emscripten_bind_btSoftBodyWorldInfo_get_air_density_0=n.asm.mw).apply(null,arguments)},tS=n._emscripten_bind_btSoftBodyWorldInfo_set_air_density_1=function(){return(tS=n._emscripten_bind_btSoftBodyWorldInfo_set_air_density_1=n.asm.nw).apply(null,arguments)},eS=n._emscripten_bind_btSoftBodyWorldInfo_get_water_density_0=function(){return(eS=n._emscripten_bind_btSoftBodyWorldInfo_get_water_density_0=n.asm.ow).apply(null,arguments)},nS=n._emscripten_bind_btSoftBodyWorldInfo_set_water_density_1=function(){return(nS=n._emscripten_bind_btSoftBodyWorldInfo_set_water_density_1=n.asm.pw).apply(null,arguments)},oS=n._emscripten_bind_btSoftBodyWorldInfo_get_water_offset_0=function(){return(oS=n._emscripten_bind_btSoftBodyWorldInfo_get_water_offset_0=n.asm.qw).apply(null,arguments)},_S=n._emscripten_bind_btSoftBodyWorldInfo_set_water_offset_1=function(){return(_S=n._emscripten_bind_btSoftBodyWorldInfo_set_water_offset_1=n.asm.rw).apply(null,arguments)},iS=n._emscripten_bind_btSoftBodyWorldInfo_get_m_maxDisplacement_0=function(){return(iS=n._emscripten_bind_btSoftBodyWorldInfo_get_m_maxDisplacement_0=n.asm.sw).apply(null,arguments)},rS=n._emscripten_bind_btSoftBodyWorldInfo_set_m_maxDisplacement_1=function(){return(rS=n._emscripten_bind_btSoftBodyWorldInfo_set_m_maxDisplacement_1=n.asm.tw).apply(null,arguments)},pS=n._emscripten_bind_btSoftBodyWorldInfo_get_water_normal_0=function(){return(pS=n._emscripten_bind_btSoftBodyWorldInfo_get_water_normal_0=n.asm.uw).apply(null,arguments)},sS=n._emscripten_bind_btSoftBodyWorldInfo_set_water_normal_1=function(){return(sS=n._emscripten_bind_btSoftBodyWorldInfo_set_water_normal_1=n.asm.vw).apply(null,arguments)},cS=n._emscripten_bind_btSoftBodyWorldInfo_get_m_broadphase_0=function(){return(cS=n._emscripten_bind_btSoftBodyWorldInfo_get_m_broadphase_0=n.asm.ww).apply(null,arguments)},aS=n._emscripten_bind_btSoftBodyWorldInfo_set_m_broadphase_1=function(){return(aS=n._emscripten_bind_btSoftBodyWorldInfo_set_m_broadphase_1=n.asm.xw).apply(null,arguments)},lS=n._emscripten_bind_btSoftBodyWorldInfo_get_m_dispatcher_0=function(){return(lS=n._emscripten_bind_btSoftBodyWorldInfo_get_m_dispatcher_0=n.asm.yw).apply(null,arguments)},uS=n._emscripten_bind_btSoftBodyWorldInfo_set_m_dispatcher_1=function(){return(uS=n._emscripten_bind_btSoftBodyWorldInfo_set_m_dispatcher_1=n.asm.zw).apply(null,arguments)},bS=n._emscripten_bind_btSoftBodyWorldInfo_get_m_gravity_0=function(){return(bS=n._emscripten_bind_btSoftBodyWorldInfo_get_m_gravity_0=n.asm.Aw).apply(null,arguments)},mS=n._emscripten_bind_btSoftBodyWorldInfo_set_m_gravity_1=function(){return(mS=n._emscripten_bind_btSoftBodyWorldInfo_set_m_gravity_1=n.asm.Bw).apply(null,arguments)},yS=n._emscripten_bind_btSoftBodyWorldInfo___destroy___0=function(){return(yS=n._emscripten_bind_btSoftBodyWorldInfo___destroy___0=n.asm.Cw).apply(null,arguments)},dS=n._emscripten_bind_Face_get_m_n_1=function(){return(dS=n._emscripten_bind_Face_get_m_n_1=n.asm.Dw).apply(null,arguments)},fS=n._emscripten_bind_Face_set_m_n_2=function(){return(fS=n._emscripten_bind_Face_set_m_n_2=n.asm.Ew).apply(null,arguments)},hS=n._emscripten_bind_Face_get_m_normal_0=function(){return(hS=n._emscripten_bind_Face_get_m_normal_0=n.asm.Fw).apply(null,arguments)},BS=n._emscripten_bind_Face_set_m_normal_1=function(){return(BS=n._emscripten_bind_Face_set_m_normal_1=n.asm.Gw).apply(null,arguments)},gS=n._emscripten_bind_Face_get_m_ra_0=function(){return(gS=n._emscripten_bind_Face_get_m_ra_0=n.asm.Hw).apply(null,arguments)},kS=n._emscripten_bind_Face_set_m_ra_1=function(){return(kS=n._emscripten_bind_Face_set_m_ra_1=n.asm.Iw).apply(null,arguments)},CS=n._emscripten_bind_Face___destroy___0=function(){return(CS=n._emscripten_bind_Face___destroy___0=n.asm.Jw).apply(null,arguments)},SS=n._emscripten_bind_tFaceArray_size_0=function(){return(SS=n._emscripten_bind_tFaceArray_size_0=n.asm.Kw).apply(null,arguments)},jS=n._emscripten_bind_tFaceArray_at_1=function(){return(jS=n._emscripten_bind_tFaceArray_at_1=n.asm.Lw).apply(null,arguments)},vS=n._emscripten_bind_tFaceArray___destroy___0=function(){return(vS=n._emscripten_bind_tFaceArray___destroy___0=n.asm.Mw).apply(null,arguments)},IS=n._emscripten_bind_Node_get_m_x_0=function(){return(IS=n._emscripten_bind_Node_get_m_x_0=n.asm.Nw).apply(null,arguments)},RS=n._emscripten_bind_Node_set_m_x_1=function(){return(RS=n._emscripten_bind_Node_set_m_x_1=n.asm.Ow).apply(null,arguments)},DS=n._emscripten_bind_Node_get_m_q_0=function(){return(DS=n._emscripten_bind_Node_get_m_q_0=n.asm.Pw).apply(null,arguments)},PS=n._emscripten_bind_Node_set_m_q_1=function(){return(PS=n._emscripten_bind_Node_set_m_q_1=n.asm.Qw).apply(null,arguments)},TS=n._emscripten_bind_Node_get_m_v_0=function(){return(TS=n._emscripten_bind_Node_get_m_v_0=n.asm.Rw).apply(null,arguments)},OS=n._emscripten_bind_Node_set_m_v_1=function(){return(OS=n._emscripten_bind_Node_set_m_v_1=n.asm.Sw).apply(null,arguments)},WS=n._emscripten_bind_Node_get_m_f_0=function(){return(WS=n._emscripten_bind_Node_get_m_f_0=n.asm.Tw).apply(null,arguments)},AS=n._emscripten_bind_Node_set_m_f_1=function(){return(AS=n._emscripten_bind_Node_set_m_f_1=n.asm.Uw).apply(null,arguments)},MS=n._emscripten_bind_Node_get_m_n_0=function(){return(MS=n._emscripten_bind_Node_get_m_n_0=n.asm.Vw).apply(null,arguments)},xS=n._emscripten_bind_Node_set_m_n_1=function(){return(xS=n._emscripten_bind_Node_set_m_n_1=n.asm.Ww).apply(null,arguments)},FS=n._emscripten_bind_Node_get_m_im_0=function(){return(FS=n._emscripten_bind_Node_get_m_im_0=n.asm.Xw).apply(null,arguments)},LS=n._emscripten_bind_Node_set_m_im_1=function(){return(LS=n._emscripten_bind_Node_set_m_im_1=n.asm.Yw).apply(null,arguments)},GS=n._emscripten_bind_Node_get_m_area_0=function(){return(GS=n._emscripten_bind_Node_get_m_area_0=n.asm.Zw).apply(null,arguments)},wS=n._emscripten_bind_Node_set_m_area_1=function(){return(wS=n._emscripten_bind_Node_set_m_area_1=n.asm._w).apply(null,arguments)},HS=n._emscripten_bind_Node___destroy___0=function(){return(HS=n._emscripten_bind_Node___destroy___0=n.asm.$w).apply(null,arguments)},VS=n._emscripten_bind_tNodeArray_size_0=function(){return(VS=n._emscripten_bind_tNodeArray_size_0=n.asm.ax).apply(null,arguments)},ES=n._emscripten_bind_tNodeArray_at_1=function(){return(ES=n._emscripten_bind_tNodeArray_at_1=n.asm.bx).apply(null,arguments)},NS=n._emscripten_bind_tNodeArray___destroy___0=function(){return(NS=n._emscripten_bind_tNodeArray___destroy___0=n.asm.cx).apply(null,arguments)},US=n._emscripten_bind_Material_get_m_kLST_0=function(){return(US=n._emscripten_bind_Material_get_m_kLST_0=n.asm.dx).apply(null,arguments)},zS=n._emscripten_bind_Material_set_m_kLST_1=function(){return(zS=n._emscripten_bind_Material_set_m_kLST_1=n.asm.ex).apply(null,arguments)},qS=n._emscripten_bind_Material_get_m_kAST_0=function(){return(qS=n._emscripten_bind_Material_get_m_kAST_0=n.asm.fx).apply(null,arguments)},KS=n._emscripten_bind_Material_set_m_kAST_1=function(){return(KS=n._emscripten_bind_Material_set_m_kAST_1=n.asm.gx).apply(null,arguments)},QS=n._emscripten_bind_Material_get_m_kVST_0=function(){return(QS=n._emscripten_bind_Material_get_m_kVST_0=n.asm.hx).apply(null,arguments)},XS=n._emscripten_bind_Material_set_m_kVST_1=function(){return(XS=n._emscripten_bind_Material_set_m_kVST_1=n.asm.ix).apply(null,arguments)},ZS=n._emscripten_bind_Material_get_m_flags_0=function(){return(ZS=n._emscripten_bind_Material_get_m_flags_0=n.asm.jx).apply(null,arguments)},YS=n._emscripten_bind_Material_set_m_flags_1=function(){return(YS=n._emscripten_bind_Material_set_m_flags_1=n.asm.kx).apply(null,arguments)},JS=n._emscripten_bind_Material___destroy___0=function(){return(JS=n._emscripten_bind_Material___destroy___0=n.asm.lx).apply(null,arguments)},$S=n._emscripten_bind_tMaterialArray_size_0=function(){return($S=n._emscripten_bind_tMaterialArray_size_0=n.asm.mx).apply(null,arguments)},tj=n._emscripten_bind_tMaterialArray_at_1=function(){return(tj=n._emscripten_bind_tMaterialArray_at_1=n.asm.nx).apply(null,arguments)},ej=n._emscripten_bind_tMaterialArray___destroy___0=function(){return(ej=n._emscripten_bind_tMaterialArray___destroy___0=n.asm.ox).apply(null,arguments)},nj=n._emscripten_bind_Anchor_get_m_node_0=function(){return(nj=n._emscripten_bind_Anchor_get_m_node_0=n.asm.px).apply(null,arguments)},oj=n._emscripten_bind_Anchor_set_m_node_1=function(){return(oj=n._emscripten_bind_Anchor_set_m_node_1=n.asm.qx).apply(null,arguments)},_j=n._emscripten_bind_Anchor_get_m_local_0=function(){return(_j=n._emscripten_bind_Anchor_get_m_local_0=n.asm.rx).apply(null,arguments)},ij=n._emscripten_bind_Anchor_set_m_local_1=function(){return(ij=n._emscripten_bind_Anchor_set_m_local_1=n.asm.sx).apply(null,arguments)},rj=n._emscripten_bind_Anchor_get_m_body_0=function(){return(rj=n._emscripten_bind_Anchor_get_m_body_0=n.asm.tx).apply(null,arguments)},pj=n._emscripten_bind_Anchor_set_m_body_1=function(){return(pj=n._emscripten_bind_Anchor_set_m_body_1=n.asm.ux).apply(null,arguments)},sj=n._emscripten_bind_Anchor_get_m_influence_0=function(){return(sj=n._emscripten_bind_Anchor_get_m_influence_0=n.asm.vx).apply(null,arguments)},cj=n._emscripten_bind_Anchor_set_m_influence_1=function(){return(cj=n._emscripten_bind_Anchor_set_m_influence_1=n.asm.wx).apply(null,arguments)},aj=n._emscripten_bind_Anchor_get_m_c0_0=function(){return(aj=n._emscripten_bind_Anchor_get_m_c0_0=n.asm.xx).apply(null,arguments)},lj=n._emscripten_bind_Anchor_set_m_c0_1=function(){return(lj=n._emscripten_bind_Anchor_set_m_c0_1=n.asm.yx).apply(null,arguments)},uj=n._emscripten_bind_Anchor_get_m_c1_0=function(){return(uj=n._emscripten_bind_Anchor_get_m_c1_0=n.asm.zx).apply(null,arguments)},bj=n._emscripten_bind_Anchor_set_m_c1_1=function(){return(bj=n._emscripten_bind_Anchor_set_m_c1_1=n.asm.Ax).apply(null,arguments)},mj=n._emscripten_bind_Anchor_get_m_c2_0=function(){return(mj=n._emscripten_bind_Anchor_get_m_c2_0=n.asm.Bx).apply(null,arguments)},yj=n._emscripten_bind_Anchor_set_m_c2_1=function(){return(yj=n._emscripten_bind_Anchor_set_m_c2_1=n.asm.Cx).apply(null,arguments)},dj=n._emscripten_bind_Anchor___destroy___0=function(){return(dj=n._emscripten_bind_Anchor___destroy___0=n.asm.Dx).apply(null,arguments)},fj=n._emscripten_bind_tAnchorArray_size_0=function(){return(fj=n._emscripten_bind_tAnchorArray_size_0=n.asm.Ex).apply(null,arguments)},hj=n._emscripten_bind_tAnchorArray_at_1=function(){return(hj=n._emscripten_bind_tAnchorArray_at_1=n.asm.Fx).apply(null,arguments)},Bj=n._emscripten_bind_tAnchorArray_clear_0=function(){return(Bj=n._emscripten_bind_tAnchorArray_clear_0=n.asm.Gx).apply(null,arguments)},gj=n._emscripten_bind_tAnchorArray_push_back_1=function(){return(gj=n._emscripten_bind_tAnchorArray_push_back_1=n.asm.Hx).apply(null,arguments)},kj=n._emscripten_bind_tAnchorArray_pop_back_0=function(){return(kj=n._emscripten_bind_tAnchorArray_pop_back_0=n.asm.Ix).apply(null,arguments)},Cj=n._emscripten_bind_tAnchorArray___destroy___0=function(){return(Cj=n._emscripten_bind_tAnchorArray___destroy___0=n.asm.Jx).apply(null,arguments)},Sj=n._emscripten_bind_Config_get_kVCF_0=function(){return(Sj=n._emscripten_bind_Config_get_kVCF_0=n.asm.Kx).apply(null,arguments)},jj=n._emscripten_bind_Config_set_kVCF_1=function(){return(jj=n._emscripten_bind_Config_set_kVCF_1=n.asm.Lx).apply(null,arguments)},vj=n._emscripten_bind_Config_get_kDP_0=function(){return(vj=n._emscripten_bind_Config_get_kDP_0=n.asm.Mx).apply(null,arguments)},Ij=n._emscripten_bind_Config_set_kDP_1=function(){return(Ij=n._emscripten_bind_Config_set_kDP_1=n.asm.Nx).apply(null,arguments)},Rj=n._emscripten_bind_Config_get_kDG_0=function(){return(Rj=n._emscripten_bind_Config_get_kDG_0=n.asm.Ox).apply(null,arguments)},Dj=n._emscripten_bind_Config_set_kDG_1=function(){return(Dj=n._emscripten_bind_Config_set_kDG_1=n.asm.Px).apply(null,arguments)},Pj=n._emscripten_bind_Config_get_kLF_0=function(){return(Pj=n._emscripten_bind_Config_get_kLF_0=n.asm.Qx).apply(null,arguments)},Tj=n._emscripten_bind_Config_set_kLF_1=function(){return(Tj=n._emscripten_bind_Config_set_kLF_1=n.asm.Rx).apply(null,arguments)},Oj=n._emscripten_bind_Config_get_kPR_0=function(){return(Oj=n._emscripten_bind_Config_get_kPR_0=n.asm.Sx).apply(null,arguments)},Wj=n._emscripten_bind_Config_set_kPR_1=function(){return(Wj=n._emscripten_bind_Config_set_kPR_1=n.asm.Tx).apply(null,arguments)},Aj=n._emscripten_bind_Config_get_kVC_0=function(){return(Aj=n._emscripten_bind_Config_get_kVC_0=n.asm.Ux).apply(null,arguments)},Mj=n._emscripten_bind_Config_set_kVC_1=function(){return(Mj=n._emscripten_bind_Config_set_kVC_1=n.asm.Vx).apply(null,arguments)},xj=n._emscripten_bind_Config_get_kDF_0=function(){return(xj=n._emscripten_bind_Config_get_kDF_0=n.asm.Wx).apply(null,arguments)},Fj=n._emscripten_bind_Config_set_kDF_1=function(){return(Fj=n._emscripten_bind_Config_set_kDF_1=n.asm.Xx).apply(null,arguments)},Lj=n._emscripten_bind_Config_get_kMT_0=function(){return(Lj=n._emscripten_bind_Config_get_kMT_0=n.asm.Yx).apply(null,arguments)},Gj=n._emscripten_bind_Config_set_kMT_1=function(){return(Gj=n._emscripten_bind_Config_set_kMT_1=n.asm.Zx).apply(null,arguments)},wj=n._emscripten_bind_Config_get_kCHR_0=function(){return(wj=n._emscripten_bind_Config_get_kCHR_0=n.asm._x).apply(null,arguments)},Hj=n._emscripten_bind_Config_set_kCHR_1=function(){return(Hj=n._emscripten_bind_Config_set_kCHR_1=n.asm.$x).apply(null,arguments)},Vj=n._emscripten_bind_Config_get_kKHR_0=function(){return(Vj=n._emscripten_bind_Config_get_kKHR_0=n.asm.ay).apply(null,arguments)},Ej=n._emscripten_bind_Config_set_kKHR_1=function(){return(Ej=n._emscripten_bind_Config_set_kKHR_1=n.asm.by).apply(null,arguments)},Nj=n._emscripten_bind_Config_get_kSHR_0=function(){return(Nj=n._emscripten_bind_Config_get_kSHR_0=n.asm.cy).apply(null,arguments)},Uj=n._emscripten_bind_Config_set_kSHR_1=function(){return(Uj=n._emscripten_bind_Config_set_kSHR_1=n.asm.dy).apply(null,arguments)},zj=n._emscripten_bind_Config_get_kAHR_0=function(){return(zj=n._emscripten_bind_Config_get_kAHR_0=n.asm.ey).apply(null,arguments)},qj=n._emscripten_bind_Config_set_kAHR_1=function(){return(qj=n._emscripten_bind_Config_set_kAHR_1=n.asm.fy).apply(null,arguments)},Kj=n._emscripten_bind_Config_get_kSRHR_CL_0=function(){return(Kj=n._emscripten_bind_Config_get_kSRHR_CL_0=n.asm.gy).apply(null,arguments)},Qj=n._emscripten_bind_Config_set_kSRHR_CL_1=function(){return(Qj=n._emscripten_bind_Config_set_kSRHR_CL_1=n.asm.hy).apply(null,arguments)},Xj=n._emscripten_bind_Config_get_kSKHR_CL_0=function(){return(Xj=n._emscripten_bind_Config_get_kSKHR_CL_0=n.asm.iy).apply(null,arguments)},Zj=n._emscripten_bind_Config_set_kSKHR_CL_1=function(){return(Zj=n._emscripten_bind_Config_set_kSKHR_CL_1=n.asm.jy).apply(null,arguments)},Yj=n._emscripten_bind_Config_get_kSSHR_CL_0=function(){return(Yj=n._emscripten_bind_Config_get_kSSHR_CL_0=n.asm.ky).apply(null,arguments)},Jj=n._emscripten_bind_Config_set_kSSHR_CL_1=function(){return(Jj=n._emscripten_bind_Config_set_kSSHR_CL_1=n.asm.ly).apply(null,arguments)},$j=n._emscripten_bind_Config_get_kSR_SPLT_CL_0=function(){return($j=n._emscripten_bind_Config_get_kSR_SPLT_CL_0=n.asm.my).apply(null,arguments)},tv=n._emscripten_bind_Config_set_kSR_SPLT_CL_1=function(){return(tv=n._emscripten_bind_Config_set_kSR_SPLT_CL_1=n.asm.ny).apply(null,arguments)},ev=n._emscripten_bind_Config_get_kSK_SPLT_CL_0=function(){return(ev=n._emscripten_bind_Config_get_kSK_SPLT_CL_0=n.asm.oy).apply(null,arguments)},nv=n._emscripten_bind_Config_set_kSK_SPLT_CL_1=function(){return(nv=n._emscripten_bind_Config_set_kSK_SPLT_CL_1=n.asm.py).apply(null,arguments)},ov=n._emscripten_bind_Config_get_kSS_SPLT_CL_0=function(){return(ov=n._emscripten_bind_Config_get_kSS_SPLT_CL_0=n.asm.qy).apply(null,arguments)},_v=n._emscripten_bind_Config_set_kSS_SPLT_CL_1=function(){return(_v=n._emscripten_bind_Config_set_kSS_SPLT_CL_1=n.asm.ry).apply(null,arguments)},iv=n._emscripten_bind_Config_get_maxvolume_0=function(){return(iv=n._emscripten_bind_Config_get_maxvolume_0=n.asm.sy).apply(null,arguments)},rv=n._emscripten_bind_Config_set_maxvolume_1=function(){return(rv=n._emscripten_bind_Config_set_maxvolume_1=n.asm.ty).apply(null,arguments)},pv=n._emscripten_bind_Config_get_timescale_0=function(){return(pv=n._emscripten_bind_Config_get_timescale_0=n.asm.uy).apply(null,arguments)},sv=n._emscripten_bind_Config_set_timescale_1=function(){return(sv=n._emscripten_bind_Config_set_timescale_1=n.asm.vy).apply(null,arguments)},cv=n._emscripten_bind_Config_get_viterations_0=function(){return(cv=n._emscripten_bind_Config_get_viterations_0=n.asm.wy).apply(null,arguments)},av=n._emscripten_bind_Config_set_viterations_1=function(){return(av=n._emscripten_bind_Config_set_viterations_1=n.asm.xy).apply(null,arguments)},lv=n._emscripten_bind_Config_get_piterations_0=function(){return(lv=n._emscripten_bind_Config_get_piterations_0=n.asm.yy).apply(null,arguments)},uv=n._emscripten_bind_Config_set_piterations_1=function(){return(uv=n._emscripten_bind_Config_set_piterations_1=n.asm.zy).apply(null,arguments)},bv=n._emscripten_bind_Config_get_diterations_0=function(){return(bv=n._emscripten_bind_Config_get_diterations_0=n.asm.Ay).apply(null,arguments)},mv=n._emscripten_bind_Config_set_diterations_1=function(){return(mv=n._emscripten_bind_Config_set_diterations_1=n.asm.By).apply(null,arguments)},yv=n._emscripten_bind_Config_get_citerations_0=function(){return(yv=n._emscripten_bind_Config_get_citerations_0=n.asm.Cy).apply(null,arguments)},dv=n._emscripten_bind_Config_set_citerations_1=function(){return(dv=n._emscripten_bind_Config_set_citerations_1=n.asm.Dy).apply(null,arguments)},fv=n._emscripten_bind_Config_get_collisions_0=function(){return(fv=n._emscripten_bind_Config_get_collisions_0=n.asm.Ey).apply(null,arguments)},hv=n._emscripten_bind_Config_set_collisions_1=function(){return(hv=n._emscripten_bind_Config_set_collisions_1=n.asm.Fy).apply(null,arguments)},Bv=n._emscripten_bind_Config___destroy___0=function(){return(Bv=n._emscripten_bind_Config___destroy___0=n.asm.Gy).apply(null,arguments)},gv=n._emscripten_bind_btSoftBody_btSoftBody_4=function(){return(gv=n._emscripten_bind_btSoftBody_btSoftBody_4=n.asm.Hy).apply(null,arguments)},kv=n._emscripten_bind_btSoftBody_checkLink_2=function(){return(kv=n._emscripten_bind_btSoftBody_checkLink_2=n.asm.Iy).apply(null,arguments)},Cv=n._emscripten_bind_btSoftBody_checkFace_3=function(){return(Cv=n._emscripten_bind_btSoftBody_checkFace_3=n.asm.Jy).apply(null,arguments)},Sv=n._emscripten_bind_btSoftBody_appendMaterial_0=function(){return(Sv=n._emscripten_bind_btSoftBody_appendMaterial_0=n.asm.Ky).apply(null,arguments)},jv=n._emscripten_bind_btSoftBody_appendNode_2=function(){return(jv=n._emscripten_bind_btSoftBody_appendNode_2=n.asm.Ly).apply(null,arguments)},vv=n._emscripten_bind_btSoftBody_appendLink_4=function(){return(vv=n._emscripten_bind_btSoftBody_appendLink_4=n.asm.My).apply(null,arguments)},Iv=n._emscripten_bind_btSoftBody_appendFace_4=function(){return(Iv=n._emscripten_bind_btSoftBody_appendFace_4=n.asm.Ny).apply(null,arguments)},Rv=n._emscripten_bind_btSoftBody_appendTetra_5=function(){return(Rv=n._emscripten_bind_btSoftBody_appendTetra_5=n.asm.Oy).apply(null,arguments)},Dv=n._emscripten_bind_btSoftBody_appendAnchor_4=function(){return(Dv=n._emscripten_bind_btSoftBody_appendAnchor_4=n.asm.Py).apply(null,arguments)},Pv=n._emscripten_bind_btSoftBody_addForce_1=function(){return(Pv=n._emscripten_bind_btSoftBody_addForce_1=n.asm.Qy).apply(null,arguments)},Tv=n._emscripten_bind_btSoftBody_addForce_2=function(){return(Tv=n._emscripten_bind_btSoftBody_addForce_2=n.asm.Ry).apply(null,arguments)},Ov=n._emscripten_bind_btSoftBody_addAeroForceToNode_2=function(){return(Ov=n._emscripten_bind_btSoftBody_addAeroForceToNode_2=n.asm.Sy).apply(null,arguments)},Wv=n._emscripten_bind_btSoftBody_getTotalMass_0=function(){return(Wv=n._emscripten_bind_btSoftBody_getTotalMass_0=n.asm.Ty).apply(null,arguments)},Av=n._emscripten_bind_btSoftBody_setTotalMass_2=function(){return(Av=n._emscripten_bind_btSoftBody_setTotalMass_2=n.asm.Uy).apply(null,arguments)},Mv=n._emscripten_bind_btSoftBody_setMass_2=function(){return(Mv=n._emscripten_bind_btSoftBody_setMass_2=n.asm.Vy).apply(null,arguments)},xv=n._emscripten_bind_btSoftBody_transform_1=function(){return(xv=n._emscripten_bind_btSoftBody_transform_1=n.asm.Wy).apply(null,arguments)},Fv=n._emscripten_bind_btSoftBody_translate_1=function(){return(Fv=n._emscripten_bind_btSoftBody_translate_1=n.asm.Xy).apply(null,arguments)},Lv=n._emscripten_bind_btSoftBody_rotate_1=function(){return(Lv=n._emscripten_bind_btSoftBody_rotate_1=n.asm.Yy).apply(null,arguments)},Gv=n._emscripten_bind_btSoftBody_scale_1=function(){return(Gv=n._emscripten_bind_btSoftBody_scale_1=n.asm.Zy).apply(null,arguments)},wv=n._emscripten_bind_btSoftBody_generateClusters_1=function(){return(wv=n._emscripten_bind_btSoftBody_generateClusters_1=n.asm._y).apply(null,arguments)},Hv=n._emscripten_bind_btSoftBody_generateClusters_2=function(){return(Hv=n._emscripten_bind_btSoftBody_generateClusters_2=n.asm.$y).apply(null,arguments)},Vv=n._emscripten_bind_btSoftBody_generateBendingConstraints_2=function(){return(Vv=n._emscripten_bind_btSoftBody_generateBendingConstraints_2=n.asm.az).apply(null,arguments)},Ev=n._emscripten_bind_btSoftBody_upcast_1=function(){return(Ev=n._emscripten_bind_btSoftBody_upcast_1=n.asm.bz).apply(null,arguments)},Nv=n._emscripten_bind_btSoftBody_getRestLengthScale_0=function(){return(Nv=n._emscripten_bind_btSoftBody_getRestLengthScale_0=n.asm.cz).apply(null,arguments)},Uv=n._emscripten_bind_btSoftBody_setRestLengthScale_1=function(){return(Uv=n._emscripten_bind_btSoftBody_setRestLengthScale_1=n.asm.dz).apply(null,arguments)},zv=n._emscripten_bind_btSoftBody_setAnisotropicFriction_2=function(){return(zv=n._emscripten_bind_btSoftBody_setAnisotropicFriction_2=n.asm.ez).apply(null,arguments)},qv=n._emscripten_bind_btSoftBody_getCollisionShape_0=function(){return(qv=n._emscripten_bind_btSoftBody_getCollisionShape_0=n.asm.fz).apply(null,arguments)},Kv=n._emscripten_bind_btSoftBody_setContactProcessingThreshold_1=function(){return(Kv=n._emscripten_bind_btSoftBody_setContactProcessingThreshold_1=n.asm.gz).apply(null,arguments)},Qv=n._emscripten_bind_btSoftBody_setActivationState_1=function(){return(Qv=n._emscripten_bind_btSoftBody_setActivationState_1=n.asm.hz).apply(null,arguments)},Xv=n._emscripten_bind_btSoftBody_forceActivationState_1=function(){return(Xv=n._emscripten_bind_btSoftBody_forceActivationState_1=n.asm.iz).apply(null,arguments)},Zv=n._emscripten_bind_btSoftBody_activate_0=function(){return(Zv=n._emscripten_bind_btSoftBody_activate_0=n.asm.jz).apply(null,arguments)},Yv=n._emscripten_bind_btSoftBody_activate_1=function(){return(Yv=n._emscripten_bind_btSoftBody_activate_1=n.asm.kz).apply(null,arguments)},Jv=n._emscripten_bind_btSoftBody_isActive_0=function(){return(Jv=n._emscripten_bind_btSoftBody_isActive_0=n.asm.lz).apply(null,arguments)},$v=n._emscripten_bind_btSoftBody_isKinematicObject_0=function(){return($v=n._emscripten_bind_btSoftBody_isKinematicObject_0=n.asm.mz).apply(null,arguments)},tI=n._emscripten_bind_btSoftBody_isStaticObject_0=function(){return(tI=n._emscripten_bind_btSoftBody_isStaticObject_0=n.asm.nz).apply(null,arguments)},eI=n._emscripten_bind_btSoftBody_isStaticOrKinematicObject_0=function(){return(eI=n._emscripten_bind_btSoftBody_isStaticOrKinematicObject_0=n.asm.oz).apply(null,arguments)},nI=n._emscripten_bind_btSoftBody_getRestitution_0=function(){return(nI=n._emscripten_bind_btSoftBody_getRestitution_0=n.asm.pz).apply(null,arguments)},oI=n._emscripten_bind_btSoftBody_getFriction_0=function(){return(oI=n._emscripten_bind_btSoftBody_getFriction_0=n.asm.qz).apply(null,arguments)},_I=n._emscripten_bind_btSoftBody_getRollingFriction_0=function(){return(_I=n._emscripten_bind_btSoftBody_getRollingFriction_0=n.asm.rz).apply(null,arguments)},iI=n._emscripten_bind_btSoftBody_setRestitution_1=function(){return(iI=n._emscripten_bind_btSoftBody_setRestitution_1=n.asm.sz).apply(null,arguments)},rI=n._emscripten_bind_btSoftBody_setFriction_1=function(){return(rI=n._emscripten_bind_btSoftBody_setFriction_1=n.asm.tz).apply(null,arguments)},pI=n._emscripten_bind_btSoftBody_setRollingFriction_1=function(){return(pI=n._emscripten_bind_btSoftBody_setRollingFriction_1=n.asm.uz).apply(null,arguments)},sI=n._emscripten_bind_btSoftBody_getWorldTransform_0=function(){return(sI=n._emscripten_bind_btSoftBody_getWorldTransform_0=n.asm.vz).apply(null,arguments)},cI=n._emscripten_bind_btSoftBody_getCollisionFlags_0=function(){return(cI=n._emscripten_bind_btSoftBody_getCollisionFlags_0=n.asm.wz).apply(null,arguments)},aI=n._emscripten_bind_btSoftBody_setCollisionFlags_1=function(){return(aI=n._emscripten_bind_btSoftBody_setCollisionFlags_1=n.asm.xz).apply(null,arguments)},lI=n._emscripten_bind_btSoftBody_setWorldTransform_1=function(){return(lI=n._emscripten_bind_btSoftBody_setWorldTransform_1=n.asm.yz).apply(null,arguments)},uI=n._emscripten_bind_btSoftBody_setCollisionShape_1=function(){return(uI=n._emscripten_bind_btSoftBody_setCollisionShape_1=n.asm.zz).apply(null,arguments)},bI=n._emscripten_bind_btSoftBody_setCcdMotionThreshold_1=function(){return(bI=n._emscripten_bind_btSoftBody_setCcdMotionThreshold_1=n.asm.Az).apply(null,arguments)},mI=n._emscripten_bind_btSoftBody_setCcdSweptSphereRadius_1=function(){return(mI=n._emscripten_bind_btSoftBody_setCcdSweptSphereRadius_1=n.asm.Bz).apply(null,arguments)},yI=n._emscripten_bind_btSoftBody_getUserIndex_0=function(){return(yI=n._emscripten_bind_btSoftBody_getUserIndex_0=n.asm.Cz).apply(null,arguments)},dI=n._emscripten_bind_btSoftBody_setUserIndex_1=function(){return(dI=n._emscripten_bind_btSoftBody_setUserIndex_1=n.asm.Dz).apply(null,arguments)},fI=n._emscripten_bind_btSoftBody_getUserPointer_0=function(){return(fI=n._emscripten_bind_btSoftBody_getUserPointer_0=n.asm.Ez).apply(null,arguments)},hI=n._emscripten_bind_btSoftBody_setUserPointer_1=function(){return(hI=n._emscripten_bind_btSoftBody_setUserPointer_1=n.asm.Fz).apply(null,arguments)},BI=n._emscripten_bind_btSoftBody_getBroadphaseHandle_0=function(){return(BI=n._emscripten_bind_btSoftBody_getBroadphaseHandle_0=n.asm.Gz).apply(null,arguments)},gI=n._emscripten_bind_btSoftBody_get_m_cfg_0=function(){return(gI=n._emscripten_bind_btSoftBody_get_m_cfg_0=n.asm.Hz).apply(null,arguments)},kI=n._emscripten_bind_btSoftBody_set_m_cfg_1=function(){return(kI=n._emscripten_bind_btSoftBody_set_m_cfg_1=n.asm.Iz).apply(null,arguments)},CI=n._emscripten_bind_btSoftBody_get_m_nodes_0=function(){return(CI=n._emscripten_bind_btSoftBody_get_m_nodes_0=n.asm.Jz).apply(null,arguments)},SI=n._emscripten_bind_btSoftBody_set_m_nodes_1=function(){return(SI=n._emscripten_bind_btSoftBody_set_m_nodes_1=n.asm.Kz).apply(null,arguments)},jI=n._emscripten_bind_btSoftBody_get_m_faces_0=function(){return(jI=n._emscripten_bind_btSoftBody_get_m_faces_0=n.asm.Lz).apply(null,arguments)},vI=n._emscripten_bind_btSoftBody_set_m_faces_1=function(){return(vI=n._emscripten_bind_btSoftBody_set_m_faces_1=n.asm.Mz).apply(null,arguments)},II=n._emscripten_bind_btSoftBody_get_m_materials_0=function(){return(II=n._emscripten_bind_btSoftBody_get_m_materials_0=n.asm.Nz).apply(null,arguments)},RI=n._emscripten_bind_btSoftBody_set_m_materials_1=function(){return(RI=n._emscripten_bind_btSoftBody_set_m_materials_1=n.asm.Oz).apply(null,arguments)},DI=n._emscripten_bind_btSoftBody_get_m_anchors_0=function(){return(DI=n._emscripten_bind_btSoftBody_get_m_anchors_0=n.asm.Pz).apply(null,arguments)},PI=n._emscripten_bind_btSoftBody_set_m_anchors_1=function(){return(PI=n._emscripten_bind_btSoftBody_set_m_anchors_1=n.asm.Qz).apply(null,arguments)},TI=n._emscripten_bind_btSoftBody___destroy___0=function(){return(TI=n._emscripten_bind_btSoftBody___destroy___0=n.asm.Rz).apply(null,arguments)},OI=n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_0=function(){return(OI=n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_0=n.asm.Sz).apply(null,arguments)},WI=n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_1=function(){return(WI=n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_1=n.asm.Tz).apply(null,arguments)},AI=n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration___destroy___0=function(){return(AI=n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration___destroy___0=n.asm.Uz).apply(null,arguments)},MI=n._emscripten_bind_btDefaultSoftBodySolver_btDefaultSoftBodySolver_0=function(){return(MI=n._emscripten_bind_btDefaultSoftBodySolver_btDefaultSoftBodySolver_0=n.asm.Vz).apply(null,arguments)},xI=n._emscripten_bind_btDefaultSoftBodySolver___destroy___0=function(){return(xI=n._emscripten_bind_btDefaultSoftBodySolver___destroy___0=n.asm.Wz).apply(null,arguments)},FI=n._emscripten_bind_btSoftBodyArray_size_0=function(){return(FI=n._emscripten_bind_btSoftBodyArray_size_0=n.asm.Xz).apply(null,arguments)},LI=n._emscripten_bind_btSoftBodyArray_at_1=function(){return(LI=n._emscripten_bind_btSoftBodyArray_at_1=n.asm.Yz).apply(null,arguments)},GI=n._emscripten_bind_btSoftBodyArray___destroy___0=function(){return(GI=n._emscripten_bind_btSoftBodyArray___destroy___0=n.asm.Zz).apply(null,arguments)},wI=n._emscripten_bind_btSoftRigidDynamicsWorld_btSoftRigidDynamicsWorld_5=function(){return(wI=n._emscripten_bind_btSoftRigidDynamicsWorld_btSoftRigidDynamicsWorld_5=n.asm._z).apply(null,arguments)},HI=n._emscripten_bind_btSoftRigidDynamicsWorld_addSoftBody_3=function(){return(HI=n._emscripten_bind_btSoftRigidDynamicsWorld_addSoftBody_3=n.asm.$z).apply(null,arguments)},VI=n._emscripten_bind_btSoftRigidDynamicsWorld_removeSoftBody_1=function(){return(VI=n._emscripten_bind_btSoftRigidDynamicsWorld_removeSoftBody_1=n.asm.aA).apply(null,arguments)},EI=n._emscripten_bind_btSoftRigidDynamicsWorld_removeCollisionObject_1=function(){return(EI=n._emscripten_bind_btSoftRigidDynamicsWorld_removeCollisionObject_1=n.asm.bA).apply(null,arguments)},NI=n._emscripten_bind_btSoftRigidDynamicsWorld_getWorldInfo_0=function(){return(NI=n._emscripten_bind_btSoftRigidDynamicsWorld_getWorldInfo_0=n.asm.cA).apply(null,arguments)},UI=n._emscripten_bind_btSoftRigidDynamicsWorld_getSoftBodyArray_0=function(){return(UI=n._emscripten_bind_btSoftRigidDynamicsWorld_getSoftBodyArray_0=n.asm.dA).apply(null,arguments)},zI=n._emscripten_bind_btSoftRigidDynamicsWorld_getDispatcher_0=function(){return(zI=n._emscripten_bind_btSoftRigidDynamicsWorld_getDispatcher_0=n.asm.eA).apply(null,arguments)},qI=n._emscripten_bind_btSoftRigidDynamicsWorld_rayTest_3=function(){return(qI=n._emscripten_bind_btSoftRigidDynamicsWorld_rayTest_3=n.asm.fA).apply(null,arguments)},KI=n._emscripten_bind_btSoftRigidDynamicsWorld_getPairCache_0=function(){return(KI=n._emscripten_bind_btSoftRigidDynamicsWorld_getPairCache_0=n.asm.gA).apply(null,arguments)},QI=n._emscripten_bind_btSoftRigidDynamicsWorld_getDispatchInfo_0=function(){return(QI=n._emscripten_bind_btSoftRigidDynamicsWorld_getDispatchInfo_0=n.asm.hA).apply(null,arguments)},XI=n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_1=function(){return(XI=n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_1=n.asm.iA).apply(null,arguments)},ZI=n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_2=function(){return(ZI=n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_2=n.asm.jA).apply(null,arguments)},YI=n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_3=function(){return(YI=n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_3=n.asm.kA).apply(null,arguments)},JI=n._emscripten_bind_btSoftRigidDynamicsWorld_getBroadphase_0=function(){return(JI=n._emscripten_bind_btSoftRigidDynamicsWorld_getBroadphase_0=n.asm.lA).apply(null,arguments)},$I=n._emscripten_bind_btSoftRigidDynamicsWorld_convexSweepTest_5=function(){return($I=n._emscripten_bind_btSoftRigidDynamicsWorld_convexSweepTest_5=n.asm.mA).apply(null,arguments)},tR=n._emscripten_bind_btSoftRigidDynamicsWorld_contactPairTest_3=function(){return(tR=n._emscripten_bind_btSoftRigidDynamicsWorld_contactPairTest_3=n.asm.nA).apply(null,arguments)},eR=n._emscripten_bind_btSoftRigidDynamicsWorld_contactTest_2=function(){return(eR=n._emscripten_bind_btSoftRigidDynamicsWorld_contactTest_2=n.asm.oA).apply(null,arguments)},nR=n._emscripten_bind_btSoftRigidDynamicsWorld_updateSingleAabb_1=function(){return(nR=n._emscripten_bind_btSoftRigidDynamicsWorld_updateSingleAabb_1=n.asm.pA).apply(null,arguments)},oR=n._emscripten_bind_btSoftRigidDynamicsWorld_setDebugDrawer_1=function(){return(oR=n._emscripten_bind_btSoftRigidDynamicsWorld_setDebugDrawer_1=n.asm.qA).apply(null,arguments)},_R=n._emscripten_bind_btSoftRigidDynamicsWorld_getDebugDrawer_0=function(){return(_R=n._emscripten_bind_btSoftRigidDynamicsWorld_getDebugDrawer_0=n.asm.rA).apply(null,arguments)},iR=n._emscripten_bind_btSoftRigidDynamicsWorld_debugDrawWorld_0=function(){return(iR=n._emscripten_bind_btSoftRigidDynamicsWorld_debugDrawWorld_0=n.asm.sA).apply(null,arguments)},rR=n._emscripten_bind_btSoftRigidDynamicsWorld_debugDrawObject_3=function(){return(rR=n._emscripten_bind_btSoftRigidDynamicsWorld_debugDrawObject_3=n.asm.tA).apply(null,arguments)},pR=n._emscripten_bind_btSoftRigidDynamicsWorld_setGravity_1=function(){return(pR=n._emscripten_bind_btSoftRigidDynamicsWorld_setGravity_1=n.asm.uA).apply(null,arguments)},sR=n._emscripten_bind_btSoftRigidDynamicsWorld_getGravity_0=function(){return(sR=n._emscripten_bind_btSoftRigidDynamicsWorld_getGravity_0=n.asm.vA).apply(null,arguments)},cR=n._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_1=function(){return(cR=n._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_1=n.asm.wA).apply(null,arguments)},aR=n._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_3=function(){return(aR=n._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_3=n.asm.xA).apply(null,arguments)},lR=n._emscripten_bind_btSoftRigidDynamicsWorld_removeRigidBody_1=function(){return(lR=n._emscripten_bind_btSoftRigidDynamicsWorld_removeRigidBody_1=n.asm.yA).apply(null,arguments)},uR=n._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_1=function(){return(uR=n._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_1=n.asm.zA).apply(null,arguments)},bR=n._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_2=function(){return(bR=n._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_2=n.asm.AA).apply(null,arguments)},mR=n._emscripten_bind_btSoftRigidDynamicsWorld_removeConstraint_1=function(){return(mR=n._emscripten_bind_btSoftRigidDynamicsWorld_removeConstraint_1=n.asm.BA).apply(null,arguments)},yR=n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_1=function(){return(yR=n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_1=n.asm.CA).apply(null,arguments)},dR=n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_2=function(){return(dR=n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_2=n.asm.DA).apply(null,arguments)},fR=n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_3=function(){return(fR=n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_3=n.asm.EA).apply(null,arguments)},hR=n._emscripten_bind_btSoftRigidDynamicsWorld_setContactAddedCallback_1=function(){return(hR=n._emscripten_bind_btSoftRigidDynamicsWorld_setContactAddedCallback_1=n.asm.FA).apply(null,arguments)},BR=n._emscripten_bind_btSoftRigidDynamicsWorld_setContactProcessedCallback_1=function(){return(BR=n._emscripten_bind_btSoftRigidDynamicsWorld_setContactProcessedCallback_1=n.asm.GA).apply(null,arguments)},gR=n._emscripten_bind_btSoftRigidDynamicsWorld_setContactDestroyedCallback_1=function(){return(gR=n._emscripten_bind_btSoftRigidDynamicsWorld_setContactDestroyedCallback_1=n.asm.HA).apply(null,arguments)},kR=n._emscripten_bind_btSoftRigidDynamicsWorld_addAction_1=function(){return(kR=n._emscripten_bind_btSoftRigidDynamicsWorld_addAction_1=n.asm.IA).apply(null,arguments)},CR=n._emscripten_bind_btSoftRigidDynamicsWorld_removeAction_1=function(){return(CR=n._emscripten_bind_btSoftRigidDynamicsWorld_removeAction_1=n.asm.JA).apply(null,arguments)},SR=n._emscripten_bind_btSoftRigidDynamicsWorld_getSolverInfo_0=function(){return(SR=n._emscripten_bind_btSoftRigidDynamicsWorld_getSolverInfo_0=n.asm.KA).apply(null,arguments)},jR=n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_1=function(){return(jR=n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_1=n.asm.LA).apply(null,arguments)},vR=n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_2=function(){return(vR=n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_2=n.asm.MA).apply(null,arguments)},IR=n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_3=function(){return(IR=n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_3=n.asm.NA).apply(null,arguments)},RR=n._emscripten_bind_btSoftRigidDynamicsWorld___destroy___0=function(){return(RR=n._emscripten_bind_btSoftRigidDynamicsWorld___destroy___0=n.asm.OA).apply(null,arguments)},DR=n._emscripten_bind_btSoftBodyHelpers_btSoftBodyHelpers_0=function(){return(DR=n._emscripten_bind_btSoftBodyHelpers_btSoftBodyHelpers_0=n.asm.PA).apply(null,arguments)},PR=n._emscripten_bind_btSoftBodyHelpers_CreateRope_5=function(){return(PR=n._emscripten_bind_btSoftBodyHelpers_CreateRope_5=n.asm.QA).apply(null,arguments)},TR=n._emscripten_bind_btSoftBodyHelpers_CreatePatch_9=function(){return(TR=n._emscripten_bind_btSoftBodyHelpers_CreatePatch_9=n.asm.RA).apply(null,arguments)},OR=n._emscripten_bind_btSoftBodyHelpers_CreatePatchUV_10=function(){return(OR=n._emscripten_bind_btSoftBodyHelpers_CreatePatchUV_10=n.asm.SA).apply(null,arguments)},WR=n._emscripten_bind_btSoftBodyHelpers_CreateEllipsoid_4=function(){return(WR=n._emscripten_bind_btSoftBodyHelpers_CreateEllipsoid_4=n.asm.TA).apply(null,arguments)},AR=n._emscripten_bind_btSoftBodyHelpers_CreateFromTriMesh_5=function(){return(AR=n._emscripten_bind_btSoftBodyHelpers_CreateFromTriMesh_5=n.asm.UA).apply(null,arguments)},MR=n._emscripten_bind_btSoftBodyHelpers_CreateFromConvexHull_4=function(){return(MR=n._emscripten_bind_btSoftBodyHelpers_CreateFromConvexHull_4=n.asm.VA).apply(null,arguments)},xR=n._emscripten_bind_btSoftBodyHelpers___destroy___0=function(){return(xR=n._emscripten_bind_btSoftBodyHelpers___destroy___0=n.asm.WA).apply(null,arguments)},FR=n._emscripten_enum_PHY_ScalarType_PHY_FLOAT=function(){return(FR=n._emscripten_enum_PHY_ScalarType_PHY_FLOAT=n.asm.XA).apply(null,arguments)},LR=n._emscripten_enum_PHY_ScalarType_PHY_DOUBLE=function(){return(LR=n._emscripten_enum_PHY_ScalarType_PHY_DOUBLE=n.asm.YA).apply(null,arguments)},GR=n._emscripten_enum_PHY_ScalarType_PHY_INTEGER=function(){return(GR=n._emscripten_enum_PHY_ScalarType_PHY_INTEGER=n.asm.ZA).apply(null,arguments)},wR=n._emscripten_enum_PHY_ScalarType_PHY_SHORT=function(){return(wR=n._emscripten_enum_PHY_ScalarType_PHY_SHORT=n.asm._A).apply(null,arguments)},HR=n._emscripten_enum_PHY_ScalarType_PHY_FIXEDPOINT88=function(){return(HR=n._emscripten_enum_PHY_ScalarType_PHY_FIXEDPOINT88=n.asm.$A).apply(null,arguments)},VR=n._emscripten_enum_PHY_ScalarType_PHY_UCHAR=function(){return(VR=n._emscripten_enum_PHY_ScalarType_PHY_UCHAR=n.asm.aB).apply(null,arguments)},ER=n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_COMPOUND_SHAPE=function(){return(ER=n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_COMPOUND_SHAPE=n.asm.bB).apply(null,arguments)},NR=n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_TRIMESH_SHAPE_PART=function(){return(NR=n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_TRIMESH_SHAPE_PART=n.asm.cB).apply(null,arguments)},UR=n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_TRIMESH_SHAPE=function(){return(UR=n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_TRIMESH_SHAPE=n.asm.dB).apply(null,arguments)},zR=n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_ERP=function(){return(zR=n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_ERP=n.asm.eB).apply(null,arguments)},qR=n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_ERP=function(){return(qR=n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_ERP=n.asm.fB).apply(null,arguments)},KR=n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_CFM=function(){return(KR=n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_CFM=n.asm.gB).apply(null,arguments)},QR=n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_CFM=function(){return(QR=n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_CFM=n.asm.hB).apply(null,arguments)};function XR(){function t(){if(!Q&&(Q=!0,n.calledRun=!0,!f)){if(P=!0,V(R),o(n),n.onRuntimeInitialized&&n.onRuntimeInitialized(),n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;){var t=n.postRun.shift();D.unshift(t)}V(D)}}if(!(0=U.length&&(U.length=_+1),U[_]=i=v.get(_)),(_=i)&&z.set(_,o)}}if(n=z.get(t)||0)return n;if(q.length)n=q.pop();else{try{v.grow(1)}catch(t){if(!(t instanceof RangeError))throw t;throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}n=v.length-1}try{o=n,v.set(o,t),U[o]=v.get(o)}catch(p){if(!(p instanceof TypeError))throw p;if("function"==typeof WebAssembly.Function){o=WebAssembly.Function,_={i:"i32",j:"i32",f:"f32",d:"f64",p:"i32"},i={parameters:[],results:"v"==e[0]?[]:[_[e[0]]]};for(var r=1;r(r=e.length)?o.push(r):o.push(r%128|128,r>>7),r=0;r(_=o.length)?e.push(_):e.push(_%128|128,_>>7),e.push.apply(e,o),e.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),e=new WebAssembly.Module(new Uint8Array(e)),e=new WebAssembly.Instance(e,{e:{f:t}}).exports.f}o=n,v.set(o,e),U[o]=v.get(o)}return z.set(t,n),n},M=function t(){Q||XR(),Q||(M=t)},n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);0=tD?(0>>=0,e.BYTES_PER_ELEMENT){case 2:n>>>=1;break;case 4:n>>>=2;break;case 8:n>>>=3}for(var o=0;o=o?e++:2047>=o?e+=2:55296<=o&&57343>=o?(e+=4,++n):e+=3}if(n=0,0<(o=(e=Array(e+1)).length)){o=n+o-1;for(var _=0;_=i)i=65536+((1023&i)<<10)|1023&t.charCodeAt(++_);if(127>=i){if(n>=o)break;e[n++]=i}else{if(2047>=i){if(n+1>=o)break;e[n++]=192|i>>6}else{if(65535>=i){if(n+2>=o)break;e[n++]=224|i>>12}else{if(n+3>=o)break;e[n++]=240|i>>18,e[n++]=128|i>>12&63}e[n++]=128|i>>6&63}e[n++]=128|63&i}}e[n]=0}return t=iD(e,g),rD(e,g,t),t}return t}function sD(t){if("object"==typeof t){var e=iD(t,S);return rD(t,S,e),e}return t}function cD(){throw"cannot construct a btCollisionShape, no constructor in IDL"}function aD(){throw"cannot construct a btCollisionWorld, no constructor in IDL"}function lD(){throw"cannot construct a btCollisionObject, no constructor in IDL"}function uD(){throw"cannot construct a btConcaveShape, no constructor in IDL"}function bD(){throw"cannot construct a btCollisionAlgorithm, no constructor in IDL"}function mD(){throw"cannot construct a btTypedConstraint, no constructor in IDL"}function yD(){throw"cannot construct a btDynamicsWorld, no constructor in IDL"}function dD(){throw"cannot construct a btIDebugDraw, no constructor in IDL"}function fD(t,e,n){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),this.kB=void 0===t?Le():void 0===e?_emscripten_bind_btVector3_btVector3_1(t):void 0===n?_emscripten_bind_btVector3_btVector3_2(t,e):Ge(t,e,n),YR(fD)[this.kB]=this}function hD(){throw"cannot construct a btQuadWord, no constructor in IDL"}function BD(){throw"cannot construct a btMotionState, no constructor in IDL"}function gD(){throw"cannot construct a RayResultCallback, no constructor in IDL"}function kD(){throw"cannot construct a ContactResultCallback, no constructor in IDL"}function CD(){throw"cannot construct a ConvexResultCallback, no constructor in IDL"}function SD(){throw"cannot construct a btConvexShape, no constructor in IDL"}function jD(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=Vn(t,e),YR(jD)[this.kB]=this}function vD(t){t&&"object"==typeof t&&(t=t.kB),this.kB=Yn(t),YR(vD)[this.kB]=this}function ID(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=_o(t,e),YR(ID)[this.kB]=this}function RD(){throw"cannot construct a btStridingMeshInterface, no constructor in IDL"}function DD(){throw"cannot construct a btTriangleMeshShape, no constructor in IDL"}function PD(){throw"cannot construct a btPrimitiveManagerBase, no constructor in IDL"}function TD(){throw"cannot construct a btGImpactShapeInterface, no constructor in IDL"}function OD(){throw"cannot construct a btActivatingCollisionAlgorithm, no constructor in IDL"}function WD(t){t&&"object"==typeof t&&(t=t.kB),this.kB=void 0===t?Vo():Eo(t),YR(WD)[this.kB]=this}function AD(){throw"cannot construct a btDispatcher, no constructor in IDL"}function MD(t,e,n,o,_){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),this.kB=void 0===o?Ko(t,e,n):void 0===_?_emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_4(t,e,n,o):Qo(t,e,n,o,_),YR(MD)[this.kB]=this}function xD(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=r_(t,e,n,o),YR(xD)[this.kB]=this}function FD(){throw"cannot construct a btVehicleRaycaster, no constructor in IDL"}function LD(){throw"cannot construct a btActionInterface, no constructor in IDL"}function GD(){this.kB=X_(),YR(GD)[this.kB]=this}function wD(){throw"cannot construct a btSoftBodySolver, no constructor in IDL"}function HD(){throw"cannot construct a VoidPtr, no constructor in IDL"}function VD(){this.kB=Ti(),YR(VD)[this.kB]=this}function ED(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=void 0===t?Gi():void 0===e?_emscripten_bind_btVector4_btVector4_1(t):void 0===n?_emscripten_bind_btVector4_btVector4_2(t,e):void 0===o?_emscripten_bind_btVector4_btVector4_3(t,e,n):wi(t,e,n,o),YR(ED)[this.kB]=this}function ND(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=nr(t,e,n,o),YR(ND)[this.kB]=this}function UD(){throw"cannot construct a btMatrix3x3, no constructor in IDL"}function zD(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=void 0===t?xr():void 0===e?_emscripten_bind_btTransform_btTransform_1(t):Fr(t,e),YR(zD)[this.kB]=this}function qD(){this.kB=Kr(),YR(qD)[this.kB]=this}function KD(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=void 0===t?Yr():void 0===e?Jr(t):$r(t,e),YR(KD)[this.kB]=this}function QD(){throw"cannot construct a btCollisionObjectWrapper, no constructor in IDL"}function XD(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=sp(t,e),YR(XD)[this.kB]=this}function ZD(){throw"cannot construct a btConstCollisionObjectArray, no constructor in IDL"}function YD(){throw"cannot construct a btScalarArray, no constructor in IDL"}function JD(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=xp(t,e),YR(JD)[this.kB]=this}function $D(){throw"cannot construct a btManifoldPoint, no constructor in IDL"}function tP(){this.kB=Ss(),YR(tP)[this.kB]=this}function eP(){throw"cannot construct a LocalShapeInfo, no constructor in IDL"}function nP(t,e,n,o,_){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),this.kB=Os(t,e,n,o,_),YR(nP)[this.kB]=this}function oP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=Ns(t,e),YR(oP)[this.kB]=this}function _P(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=void 0===e?sc(t):cc(t,e),YR(_P)[this.kB]=this}function iP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=dc(t),YR(iP)[this.kB]=this}function rP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=Sc(t,e),YR(rP)[this.kB]=this}function pP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=Ac(t,e),YR(pP)[this.kB]=this}function sP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=Nc(t),YR(sP)[this.kB]=this}function cP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=Zc(t),YR(cP)[this.kB]=this}function aP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=oa(t),YR(aP)[this.kB]=this}function lP(t,e,n){_D(),t&&"object"==typeof t&&(t=t.kB),"object"==typeof e&&(e=sD(e)),n&&"object"==typeof n&&(n=n.kB),this.kB=aa(t,e,n),YR(lP)[this.kB]=this}function uP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=ya(t,e),YR(uP)[this.kB]=this}function bP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=ga(t,e),YR(bP)[this.kB]=this}function mP(){throw"cannot construct a btIntArray, no constructor in IDL"}function yP(){throw"cannot construct a btFace, no constructor in IDL"}function dP(){throw"cannot construct a btVector3Array, no constructor in IDL"}function fP(){throw"cannot construct a btFaceArray, no constructor in IDL"}function hP(){throw"cannot construct a btConvexPolyhedron, no constructor in IDL"}function BP(t,e){_D(),"object"==typeof t&&(t=sD(t)),e&&"object"==typeof e&&(e=e.kB),this.kB=void 0===t?Ua():void 0===e?za(t):qa(t,e),YR(BP)[this.kB]=this}function gP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=il(t),YR(gP)[this.kB]=this}function kP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=void 0===t?al():ll(t),YR(kP)[this.kB]=this}function CP(){throw"cannot construct a btIndexedMesh, no constructor in IDL"}function SP(){throw"cannot construct a btIndexedMeshArray, no constructor in IDL"}function jP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=void 0===t?Ol():void 0===e?Wl(t):Al(t,e),YR(jP)[this.kB]=this}function vP(){this.kB=Vl(),YR(vP)[this.kB]=this}function IP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=ql(t,e),YR(IP)[this.kB]=this}function RP(t,e,n){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),this.kB=void 0===n?Yl(t,e):Jl(t,e,n),YR(RP)[this.kB]=this}function DP(t,e,n,o,_,i,r,p,s){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),i&&"object"==typeof i&&(i=i.kB),r&&"object"==typeof r&&(r=r.kB),p&&"object"==typeof p&&(p=p.kB),s&&"object"==typeof s&&(s=s.kB),this.kB=ou(t,e,n,o,_,i,r,p,s),YR(DP)[this.kB]=this}function PP(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=au(t,e,n,o),YR(PP)[this.kB]=this}function TP(){this.kB=yu(),YR(TP)[this.kB]=this}function OP(t,e,n){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),this.kB=fu(t,e,n),YR(OP)[this.kB]=this}function WP(){this.kB=Cu(),YR(WP)[this.kB]=this}function AP(){throw"cannot construct a CompoundPrimitiveManager, no constructor in IDL"}function MP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=void 0===t?Wu():Au(t),YR(MP)[this.kB]=this}function xP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=void 0===t?nb():ob(t),YR(xP)[this.kB]=this}function FP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=Wb(t,e),YR(FP)[this.kB]=this}function LP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=Kb(t),YR(LP)[this.kB]=this}function GP(t,e){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),this.kB=void 0===t?sm():void 0===e?_emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_1(t):cm(t,e),YR(GP)[this.kB]=this}function wP(t,e,n){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),this.kB=ym(t,e,n),YR(wP)[this.kB]=this}function HP(){this.kB=hm(),YR(HP)[this.kB]=this}function VP(){this.kB=gm(),YR(VP)[this.kB]=this}function EP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=Im(t),YR(EP)[this.kB]=this}function NP(){throw"cannot construct a btOverlappingPairCallback, no constructor in IDL"}function UP(){throw"cannot construct a btOverlappingPairCache, no constructor in IDL"}function zP(t,e,n,o,_){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),this.kB=void 0===n?Mm(t,e):void 0===o?xm(t,e,n):void 0===_?Fm(t,e,n,o):Lm(t,e,n,o,_),YR(zP)[this.kB]=this}function qP(){throw"cannot construct a btBroadphaseInterface, no constructor in IDL"}function KP(){throw"cannot construct a btCollisionConfiguration, no constructor in IDL"}function QP(){this.kB=Em(),YR(QP)[this.kB]=this}function XP(){throw"cannot construct a btBroadphaseProxy, no constructor in IDL"}function ZP(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=void 0===o?Xm(t,e,n):Zm(t,e,n,o),YR(ZP)[this.kB]=this}function YP(t){t&&"object"==typeof t&&(t=t.kB),this.kB=Cy(t),YR(YP)[this.kB]=this}function JP(){this.kB=Md(),YR(JP)[this.kB]=this}function $P(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=void 0===n?Ed(t,e):void 0===o?_emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_3(t,e,n):Nd(t,e,n,o),YR($P)[this.kB]=this}function tT(t,e,n,o,_){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),this.kB=void 0===o?nf(t,e,n):void 0===_?_emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_4(t,e,n,o):of(t,e,n,o,_),YR(tT)[this.kB]=this}function eT(){this.kB=Cf(),YR(eT)[this.kB]=this}function nT(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=void 0===n?jf(t,e):void 0===o?_emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_3(t,e,n):vf(t,e,n,o),YR(nT)[this.kB]=this}function oT(t,e,n,o,_,i,r){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),i&&"object"==typeof i&&(i=i.kB),r&&"object"==typeof r&&(r=r.kB),this.kB=void 0===n?Hf(t,e):void 0===o?Vf(t,e,n):void 0===_?Ef(t,e,n,o):void 0===i?Nf(t,e,n,o,_):void 0===r?Uf(t,e,n,o,_,i):zf(t,e,n,o,_,i,r),YR(oT)[this.kB]=this}function _T(t,e,n,o,_){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),this.kB=void 0===o?rh(t,e,n):void 0===_?_emscripten_bind_btSliderConstraint_btSliderConstraint_4(t,e,n,o):ph(t,e,n,o,_),YR(_T)[this.kB]=this}function iT(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=Sh(t,e,n,o),YR(iT)[this.kB]=this}function rT(){throw"cannot construct a btConstraintSolver, no constructor in IDL"}function pT(){throw"cannot construct a btDispatcherInfo, no constructor in IDL"}function sT(){throw"cannot construct a btContactSolverInfo, no constructor in IDL"}function cT(){this.kB=pB(),YR(cT)[this.kB]=this}function aT(){throw"cannot construct a btVehicleRaycasterResult, no constructor in IDL"}function lT(t){t&&"object"==typeof t&&(t=t.kB),this.kB=RB(t),YR(lT)[this.kB]=this}function uT(){throw"cannot construct a RaycastInfo, no constructor in IDL"}function bT(){throw"cannot construct a btWheelInfoConstructionInfo, no constructor in IDL"}function mT(t){t&&"object"==typeof t&&(t=t.kB),this.kB=hg(t),YR(mT)[this.kB]=this}function yT(t,e,n,o){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),this.kB=void 0===o?dk(t,e,n):fk(t,e,n,o),YR(yT)[this.kB]=this}function dT(t,e,n){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),this.kB=wk(t,e,n),YR(dT)[this.kB]=this}function fT(){this.kB=fC(),YR(fT)[this.kB]=this}function hT(){this.kB=ZC(),YR(hT)[this.kB]=this}function BT(){this.kB=JC(),YR(BT)[this.kB]=this}function gT(){throw"cannot construct a Face, no constructor in IDL"}function kT(){throw"cannot construct a tFaceArray, no constructor in IDL"}function CT(){throw"cannot construct a Node, no constructor in IDL"}function ST(){throw"cannot construct a tNodeArray, no constructor in IDL"}function jT(){throw"cannot construct a Material, no constructor in IDL"}function vT(){throw"cannot construct a tMaterialArray, no constructor in IDL"}function IT(){throw"cannot construct a Anchor, no constructor in IDL"}function RT(){throw"cannot construct a tAnchorArray, no constructor in IDL"}function DT(){throw"cannot construct a Config, no constructor in IDL"}function PT(t,e,n,o){_D(),t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),"object"==typeof o&&(o=sD(o)),this.kB=gv(t,e,n,o),YR(PT)[this.kB]=this}function TT(t){t&&"object"==typeof t&&(t=t.kB),this.kB=void 0===t?OI():WI(t),YR(TT)[this.kB]=this}function OT(){this.kB=MI(),YR(OT)[this.kB]=this}function WT(){throw"cannot construct a btSoftBodyArray, no constructor in IDL"}function AT(t,e,n,o,_){t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),this.kB=wI(t,e,n,o,_),YR(AT)[this.kB]=this}function MT(){this.kB=DR(),YR(MT)[this.kB]=this}return cD.prototype=Object.create(ZR.prototype),cD.prototype.constructor=cD,cD.prototype.lB=cD,cD.mB={},n.btCollisionShape=cD,cD.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),X(e,t)},cD.prototype.getLocalScaling=function(){return JR(Z(this.kB),fD)},cD.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Y(n,t,e)},cD.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),J(e,t)},cD.prototype.getMargin=function(){return $(this.kB)},cD.prototype.__destroy__=function(){tt(this.kB)},aD.prototype=Object.create(ZR.prototype),aD.prototype.constructor=aD,aD.prototype.lB=aD,aD.mB={},n.btCollisionWorld=aD,aD.prototype.getDispatcher=function(){return JR(et(this.kB),AD)},aD.prototype.rayTest=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),nt(o,t,e,n)},aD.prototype.getPairCache=function(){return JR(ot(this.kB),UP)},aD.prototype.getDispatchInfo=function(){return JR(_t(this.kB),pT)},aD.prototype.addCollisionObject=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?it(o,t):void 0===n?rt(o,t,e):pt(o,t,e,n)},aD.prototype.removeCollisionObject=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),st(e,t)},aD.prototype.getBroadphase=function(){return JR(ct(this.kB),qP)},aD.prototype.convexSweepTest=function(t,e,n,o,_){var i=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),at(i,t,e,n,o,_)},aD.prototype.contactPairTest=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),lt(o,t,e,n)},aD.prototype.contactTest=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ut(n,t,e)},aD.prototype.updateSingleAabb=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bt(e,t)},aD.prototype.setDebugDrawer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mt(e,t)},aD.prototype.getDebugDrawer=function(){return JR(yt(this.kB),dD)},aD.prototype.debugDrawWorld=function(){dt(this.kB)},aD.prototype.debugDrawObject=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),ft(o,t,e,n)},aD.prototype.__destroy__=function(){ht(this.kB)},lD.prototype=Object.create(ZR.prototype),lD.prototype.constructor=lD,lD.prototype.lB=lD,lD.mB={},n.btCollisionObject=lD,lD.prototype.setAnisotropicFriction=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Bt(n,t,e)},lD.prototype.getCollisionShape=function(){return JR(gt(this.kB),cD)},lD.prototype.setContactProcessingThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kt(e,t)},lD.prototype.setActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ct(e,t)},lD.prototype.forceActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),St(e,t)},lD.prototype.activate=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),void 0===t?jt(e):vt(e,t)},lD.prototype.isActive=function(){return!!It(this.kB)},lD.prototype.isKinematicObject=function(){return!!Rt(this.kB)},lD.prototype.isStaticObject=function(){return!!Dt(this.kB)},lD.prototype.isStaticOrKinematicObject=function(){return!!Pt(this.kB)},lD.prototype.getRestitution=function(){return Tt(this.kB)},lD.prototype.getFriction=function(){return Ot(this.kB)},lD.prototype.getRollingFriction=function(){return Wt(this.kB)},lD.prototype.setRestitution=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),At(e,t)},lD.prototype.setFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Mt(e,t)},lD.prototype.setRollingFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),xt(e,t)},lD.prototype.getWorldTransform=function(){return JR(Ft(this.kB),zD)},lD.prototype.getCollisionFlags=function(){return Lt(this.kB)},lD.prototype.setCollisionFlags=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gt(e,t)},lD.prototype.setWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),wt(e,t)},lD.prototype.setCollisionShape=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ht(e,t)},lD.prototype.setCcdMotionThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Vt(e,t)},lD.prototype.setCcdSweptSphereRadius=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Et(e,t)},lD.prototype.getUserIndex=function(){return Nt(this.kB)},lD.prototype.setUserIndex=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ut(e,t)},lD.prototype.getUserPointer=function(){return JR(zt(this.kB),HD)},lD.prototype.setUserPointer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qt(e,t)},lD.prototype.getBroadphaseHandle=function(){return JR(Kt(this.kB),XP)},lD.prototype.__destroy__=function(){Qt(this.kB)},uD.prototype=Object.create(cD.prototype),uD.prototype.constructor=uD,uD.prototype.lB=uD,uD.mB={},n.btConcaveShape=uD,uD.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Xt(e,t)},uD.prototype.getLocalScaling=function(){return JR(Zt(this.kB),fD)},uD.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Yt(n,t,e)},uD.prototype.__destroy__=function(){Jt(this.kB)},bD.prototype=Object.create(ZR.prototype),bD.prototype.constructor=bD,bD.prototype.lB=bD,bD.mB={},n.btCollisionAlgorithm=bD,bD.prototype.__destroy__=function(){$t(this.kB)},mD.prototype=Object.create(ZR.prototype),mD.prototype.constructor=mD,mD.prototype.lB=mD,mD.mB={},n.btTypedConstraint=mD,mD.prototype.enableFeedback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),te(e,t)},mD.prototype.getBreakingImpulseThreshold=function(){return ee(this.kB)},mD.prototype.setBreakingImpulseThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ne(e,t)},mD.prototype.getParam=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),oe(n,t,e)},mD.prototype.setParam=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),_e(o,t,e,n)},mD.prototype.__destroy__=function(){ie(this.kB)},yD.prototype=Object.create(aD.prototype),yD.prototype.constructor=yD,yD.prototype.lB=yD,yD.mB={},n.btDynamicsWorld=yD,yD.prototype.addAction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),re(e,t)},yD.prototype.removeAction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),pe(e,t)},yD.prototype.getSolverInfo=function(){return JR(se(this.kB),sT)},yD.prototype.setInternalTickCallback=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?ce(o,t):void 0===n?ae(o,t,e):le(o,t,e,n)},yD.prototype.getDispatcher=function(){return JR(ue(this.kB),AD)},yD.prototype.rayTest=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),be(o,t,e,n)},yD.prototype.getPairCache=function(){return JR(me(this.kB),UP)},yD.prototype.getDispatchInfo=function(){return JR(ye(this.kB),pT)},yD.prototype.addCollisionObject=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?de(o,t):void 0===n?fe(o,t,e):he(o,t,e,n)},yD.prototype.removeCollisionObject=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Be(e,t)},yD.prototype.getBroadphase=function(){return JR(ge(this.kB),qP)},yD.prototype.convexSweepTest=function(t,e,n,o,_){var i=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),ke(i,t,e,n,o,_)},yD.prototype.contactPairTest=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Ce(o,t,e,n)},yD.prototype.contactTest=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Se(n,t,e)},yD.prototype.updateSingleAabb=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),je(e,t)},yD.prototype.setDebugDrawer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ve(e,t)},yD.prototype.getDebugDrawer=function(){return JR(Ie(this.kB),dD)},yD.prototype.debugDrawWorld=function(){Re(this.kB)},yD.prototype.debugDrawObject=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),De(o,t,e,n)},yD.prototype.__destroy__=function(){Pe(this.kB)},dD.prototype=Object.create(ZR.prototype),dD.prototype.constructor=dD,dD.prototype.lB=dD,dD.mB={},n.btIDebugDraw=dD,dD.prototype.drawLine=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Te(o,t,e,n)},dD.prototype.drawContactPoint=function(t,e,n,o,_){var i=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),Oe(i,t,e,n,o,_)},dD.prototype.reportErrorWarning=function(t){var e=this.kB;_D(),t=t&&"object"==typeof t?t.kB:pD(t),We(e,t)},dD.prototype.draw3dText=function(t,e){var n=this.kB;_D(),t&&"object"==typeof t&&(t=t.kB),e=e&&"object"==typeof e?e.kB:pD(e),Ae(n,t,e)},dD.prototype.setDebugMode=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Me(e,t)},dD.prototype.getDebugMode=function(){return xe(this.kB)},dD.prototype.__destroy__=function(){Fe(this.kB)},fD.prototype=Object.create(ZR.prototype),fD.prototype.constructor=fD,fD.prototype.lB=fD,fD.mB={},n.btVector3=fD,fD.prototype.length=fD.prototype.length=function(){return we(this.kB)},fD.prototype.x=fD.prototype.x=function(){return He(this.kB)},fD.prototype.y=fD.prototype.y=function(){return Ve(this.kB)},fD.prototype.z=fD.prototype.z=function(){return Ee(this.kB)},fD.prototype.setX=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ne(e,t)},fD.prototype.setY=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ue(e,t)},fD.prototype.setZ=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ze(e,t)},fD.prototype.setValue=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),qe(o,t,e,n)},fD.prototype.normalize=fD.prototype.normalize=function(){Ke(this.kB)},fD.prototype.rotate=fD.prototype.rotate=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),JR(Qe(n,t,e),fD)},fD.prototype.dot=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),Xe(e,t)},fD.prototype.op_mul=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Ze(e,t),fD)},fD.prototype.op_add=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Ye(e,t),fD)},fD.prototype.op_sub=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Je(e,t),fD)},fD.prototype.__destroy__=function(){$e(this.kB)},hD.prototype=Object.create(ZR.prototype),hD.prototype.constructor=hD,hD.prototype.lB=hD,hD.mB={},n.btQuadWord=hD,hD.prototype.x=hD.prototype.x=function(){return tn(this.kB)},hD.prototype.y=hD.prototype.y=function(){return en(this.kB)},hD.prototype.z=hD.prototype.z=function(){return nn(this.kB)},hD.prototype.w=hD.prototype.w=function(){return on(this.kB)},hD.prototype.setX=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_n(e,t)},hD.prototype.setY=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rn(e,t)},hD.prototype.setZ=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),pn(e,t)},hD.prototype.setW=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),sn(e,t)},hD.prototype.__destroy__=function(){cn(this.kB)},BD.prototype=Object.create(ZR.prototype),BD.prototype.constructor=BD,BD.prototype.lB=BD,BD.mB={},n.btMotionState=BD,BD.prototype.getWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),an(e,t)},BD.prototype.setWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ln(e,t)},BD.prototype.__destroy__=function(){un(this.kB)},gD.prototype=Object.create(ZR.prototype),gD.prototype.constructor=gD,gD.prototype.lB=gD,gD.mB={},n.RayResultCallback=gD,gD.prototype.hasHit=function(){return!!bn(this.kB)},gD.prototype.get_m_collisionFilterGroup=gD.prototype.nB=function(){return mn(this.kB)},gD.prototype.set_m_collisionFilterGroup=gD.prototype.pB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),yn(e,t)},Object.defineProperty(gD.prototype,"m_collisionFilterGroup",{get:gD.prototype.nB,set:gD.prototype.pB}),gD.prototype.get_m_collisionFilterMask=gD.prototype.oB=function(){return dn(this.kB)},gD.prototype.set_m_collisionFilterMask=gD.prototype.qB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),fn(e,t)},Object.defineProperty(gD.prototype,"m_collisionFilterMask",{get:gD.prototype.oB,set:gD.prototype.qB}),gD.prototype.get_m_closestHitFraction=gD.prototype.rB=function(){return hn(this.kB)},gD.prototype.set_m_closestHitFraction=gD.prototype.sB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bn(e,t)},Object.defineProperty(gD.prototype,"m_closestHitFraction",{get:gD.prototype.rB,set:gD.prototype.sB}),gD.prototype.get_m_collisionObject=gD.prototype.vB=function(){return JR(gn(this.kB),lD)},gD.prototype.set_m_collisionObject=gD.prototype.CB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kn(e,t)},Object.defineProperty(gD.prototype,"m_collisionObject",{get:gD.prototype.vB,set:gD.prototype.CB}),gD.prototype.get_m_flags=gD.prototype.tB=function(){return Cn(this.kB)},gD.prototype.set_m_flags=gD.prototype.uB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Sn(e,t)},Object.defineProperty(gD.prototype,"m_flags",{get:gD.prototype.tB,set:gD.prototype.uB}),gD.prototype.__destroy__=function(){jn(this.kB)},kD.prototype=Object.create(ZR.prototype),kD.prototype.constructor=kD,kD.prototype.lB=kD,kD.mB={},n.ContactResultCallback=kD,kD.prototype.addSingleResult=function(t,e,n,o,_,i,r){var p=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),i&&"object"==typeof i&&(i=i.kB),r&&"object"==typeof r&&(r=r.kB),vn(p,t,e,n,o,_,i,r)},kD.prototype.__destroy__=function(){In(this.kB)},CD.prototype=Object.create(ZR.prototype),CD.prototype.constructor=CD,CD.prototype.lB=CD,CD.mB={},n.ConvexResultCallback=CD,CD.prototype.hasHit=function(){return!!Rn(this.kB)},CD.prototype.get_m_collisionFilterGroup=CD.prototype.nB=function(){return Dn(this.kB)},CD.prototype.set_m_collisionFilterGroup=CD.prototype.pB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Pn(e,t)},Object.defineProperty(CD.prototype,"m_collisionFilterGroup",{get:CD.prototype.nB,set:CD.prototype.pB}),CD.prototype.get_m_collisionFilterMask=CD.prototype.oB=function(){return Tn(this.kB)},CD.prototype.set_m_collisionFilterMask=CD.prototype.qB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),On(e,t)},Object.defineProperty(CD.prototype,"m_collisionFilterMask",{get:CD.prototype.oB,set:CD.prototype.qB}),CD.prototype.get_m_closestHitFraction=CD.prototype.rB=function(){return Wn(this.kB)},CD.prototype.set_m_closestHitFraction=CD.prototype.sB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),An(e,t)},Object.defineProperty(CD.prototype,"m_closestHitFraction",{get:CD.prototype.rB,set:CD.prototype.sB}),CD.prototype.__destroy__=function(){Mn(this.kB)},SD.prototype=Object.create(cD.prototype),SD.prototype.constructor=SD,SD.prototype.lB=SD,SD.mB={},n.btConvexShape=SD,SD.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),xn(e,t)},SD.prototype.getLocalScaling=function(){return JR(Fn(this.kB),fD)},SD.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Ln(n,t,e)},SD.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gn(e,t)},SD.prototype.getMargin=function(){return wn(this.kB)},SD.prototype.__destroy__=function(){Hn(this.kB)},jD.prototype=Object.create(cD.prototype),jD.prototype.constructor=jD,jD.prototype.lB=jD,jD.mB={},n.btCapsuleShape=jD,jD.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),En(e,t)},jD.prototype.getMargin=function(){return Nn(this.kB)},jD.prototype.getUpAxis=function(){return Un(this.kB)},jD.prototype.getRadius=function(){return zn(this.kB)},jD.prototype.getHalfHeight=function(){return qn(this.kB)},jD.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Kn(e,t)},jD.prototype.getLocalScaling=function(){return JR(Qn(this.kB),fD)},jD.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Xn(n,t,e)},jD.prototype.__destroy__=function(){Zn(this.kB)},vD.prototype=Object.create(cD.prototype),vD.prototype.constructor=vD,vD.prototype.lB=vD,vD.mB={},n.btCylinderShape=vD,vD.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jn(e,t)},vD.prototype.getMargin=function(){return $n(this.kB)},vD.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),to(e,t)},vD.prototype.getLocalScaling=function(){return JR(eo(this.kB),fD)},vD.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),no(n,t,e)},vD.prototype.__destroy__=function(){oo(this.kB)},ID.prototype=Object.create(cD.prototype),ID.prototype.constructor=ID,ID.prototype.lB=ID,ID.mB={},n.btConeShape=ID,ID.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),io(e,t)},ID.prototype.getLocalScaling=function(){return JR(ro(this.kB),fD)},ID.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),po(n,t,e)},ID.prototype.__destroy__=function(){so(this.kB)},RD.prototype=Object.create(ZR.prototype),RD.prototype.constructor=RD,RD.prototype.lB=RD,RD.mB={},n.btStridingMeshInterface=RD,RD.prototype.setScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),co(e,t)},RD.prototype.__destroy__=function(){ao(this.kB)},DD.prototype=Object.create(uD.prototype),DD.prototype.constructor=DD,DD.prototype.lB=DD,DD.mB={},n.btTriangleMeshShape=DD,DD.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lo(e,t)},DD.prototype.getLocalScaling=function(){return JR(uo(this.kB),fD)},DD.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),bo(n,t,e)},DD.prototype.__destroy__=function(){mo(this.kB)},PD.prototype=Object.create(ZR.prototype),PD.prototype.constructor=PD,PD.prototype.lB=PD,PD.mB={},n.btPrimitiveManagerBase=PD,PD.prototype.is_trimesh=function(){return!!yo(this.kB)},PD.prototype.get_primitive_count=function(){return fo(this.kB)},PD.prototype.get_primitive_box=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ho(n,t,e)},PD.prototype.get_primitive_triangle=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Bo(n,t,e)},PD.prototype.__destroy__=function(){go(this.kB)},TD.prototype=Object.create(uD.prototype),TD.prototype.constructor=TD,TD.prototype.lB=TD,TD.mB={},n.btGImpactShapeInterface=TD,TD.prototype.updateBound=function(){ko(this.kB)},TD.prototype.postUpdate=function(){Co(this.kB)},TD.prototype.getShapeType=function(){return So(this.kB)},TD.prototype.getName=function(){return B(jo(this.kB))},TD.prototype.getGImpactShapeType=function(){return vo(this.kB)},TD.prototype.getPrimitiveManager=function(){return JR(Io(this.kB),PD)},TD.prototype.getNumChildShapes=function(){return Ro(this.kB)},TD.prototype.childrenHasTransform=function(){return!!Do(this.kB)},TD.prototype.needsRetrieveTriangles=function(){return!!Po(this.kB)},TD.prototype.needsRetrieveTetrahedrons=function(){return!!To(this.kB)},TD.prototype.getBulletTriangle=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Oo(n,t,e)},TD.prototype.getBulletTetrahedron=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Wo(n,t,e)},TD.prototype.getChildShape=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Ao(e,t),cD)},TD.prototype.getChildTransform=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Mo(e,t),zD)},TD.prototype.setChildTransform=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),xo(n,t,e)},TD.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Fo(e,t)},TD.prototype.getLocalScaling=function(){return JR(Lo(this.kB),fD)},TD.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Go(n,t,e)},TD.prototype.__destroy__=function(){wo(this.kB)},OD.prototype=Object.create(bD.prototype),OD.prototype.constructor=OD,OD.prototype.lB=OD,OD.mB={},n.btActivatingCollisionAlgorithm=OD,OD.prototype.__destroy__=function(){Ho(this.kB)},WD.prototype=Object.create(ZR.prototype),WD.prototype.constructor=WD,WD.prototype.lB=WD,WD.mB={},n.btDefaultCollisionConfiguration=WD,WD.prototype.__destroy__=function(){No(this.kB)},AD.prototype=Object.create(ZR.prototype),AD.prototype.constructor=AD,AD.prototype.lB=AD,AD.mB={},n.btDispatcher=AD,AD.prototype.getNumManifolds=function(){return Uo(this.kB)},AD.prototype.getManifoldByIndexInternal=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(zo(e,t),VP)},AD.prototype.__destroy__=function(){qo(this.kB)},MD.prototype=Object.create(mD.prototype),MD.prototype.constructor=MD,MD.prototype.lB=MD,MD.mB={},n.btGeneric6DofConstraint=MD,MD.prototype.setLinearLowerLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Xo(e,t)},MD.prototype.setLinearUpperLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Zo(e,t)},MD.prototype.setAngularLowerLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Yo(e,t)},MD.prototype.setAngularUpperLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jo(e,t)},MD.prototype.getFrameOffsetA=function(){return JR($o(this.kB),zD)},MD.prototype.enableFeedback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),t_(e,t)},MD.prototype.getBreakingImpulseThreshold=function(){return e_(this.kB)},MD.prototype.setBreakingImpulseThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),n_(e,t)},MD.prototype.getParam=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),o_(n,t,e)},MD.prototype.setParam=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),__(o,t,e,n)},MD.prototype.__destroy__=function(){i_(this.kB)},xD.prototype=Object.create(yD.prototype),xD.prototype.constructor=xD,xD.prototype.lB=xD,xD.mB={},n.btDiscreteDynamicsWorld=xD,xD.prototype.setGravity=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),p_(e,t)},xD.prototype.getGravity=function(){return JR(s_(this.kB),fD)},xD.prototype.addRigidBody=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?c_(o,t):void 0===n?_emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_2(o,t,e):a_(o,t,e,n)},xD.prototype.removeRigidBody=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),l_(e,t)},xD.prototype.addConstraint=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),void 0===e?u_(n,t):b_(n,t,e)},xD.prototype.removeConstraint=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),m_(e,t)},xD.prototype.stepSimulation=function(t,e,n){var o=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?y_(o,t):void 0===n?d_(o,t,e):f_(o,t,e,n)},xD.prototype.setContactAddedCallback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),h_(e,t)},xD.prototype.setContactProcessedCallback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),B_(e,t)},xD.prototype.setContactDestroyedCallback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),g_(e,t)},xD.prototype.getDispatcher=function(){return JR(k_(this.kB),AD)},xD.prototype.rayTest=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),C_(o,t,e,n)},xD.prototype.getPairCache=function(){return JR(S_(this.kB),UP)},xD.prototype.getDispatchInfo=function(){return JR(j_(this.kB),pT)},xD.prototype.addCollisionObject=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?v_(o,t):void 0===n?I_(o,t,e):R_(o,t,e,n)},xD.prototype.removeCollisionObject=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),D_(e,t)},xD.prototype.getBroadphase=function(){return JR(P_(this.kB),qP)},xD.prototype.convexSweepTest=function(t,e,n,o,_){var i=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),T_(i,t,e,n,o,_)},xD.prototype.contactPairTest=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),O_(o,t,e,n)},xD.prototype.contactTest=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),W_(n,t,e)},xD.prototype.updateSingleAabb=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),A_(e,t)},xD.prototype.setDebugDrawer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),M_(e,t)},xD.prototype.getDebugDrawer=function(){return JR(x_(this.kB),dD)},xD.prototype.debugDrawWorld=function(){F_(this.kB)},xD.prototype.debugDrawObject=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),L_(o,t,e,n)},xD.prototype.addAction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),G_(e,t)},xD.prototype.removeAction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),w_(e,t)},xD.prototype.getSolverInfo=function(){return JR(H_(this.kB),sT)},xD.prototype.setInternalTickCallback=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?V_(o,t):void 0===n?E_(o,t,e):N_(o,t,e,n)},xD.prototype.__destroy__=function(){U_(this.kB)},FD.prototype=Object.create(ZR.prototype),FD.prototype.constructor=FD,FD.prototype.lB=FD,FD.mB={},n.btVehicleRaycaster=FD,FD.prototype.castRay=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),z_(o,t,e,n)},FD.prototype.__destroy__=function(){q_(this.kB)},LD.prototype=Object.create(ZR.prototype),LD.prototype.constructor=LD,LD.prototype.lB=LD,LD.mB={},n.btActionInterface=LD,LD.prototype.updateAction=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),K_(n,t,e)},LD.prototype.__destroy__=function(){Q_(this.kB)},GD.prototype=Object.create(lD.prototype),GD.prototype.constructor=GD,GD.prototype.lB=GD,GD.mB={},n.btGhostObject=GD,GD.prototype.getNumOverlappingObjects=function(){return Z_(this.kB)},GD.prototype.getOverlappingObject=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Y_(e,t),lD)},GD.prototype.setAnisotropicFriction=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),J_(n,t,e)},GD.prototype.getCollisionShape=function(){return JR($_(this.kB),cD)},GD.prototype.setContactProcessingThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ti(e,t)},GD.prototype.setActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ei(e,t)},GD.prototype.forceActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ni(e,t)},GD.prototype.activate=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),void 0===t?oi(e):_i(e,t)},GD.prototype.isActive=function(){return!!ii(this.kB)},GD.prototype.isKinematicObject=function(){return!!ri(this.kB)},GD.prototype.isStaticObject=function(){return!!pi(this.kB)},GD.prototype.isStaticOrKinematicObject=function(){return!!si(this.kB)},GD.prototype.getRestitution=function(){return ci(this.kB)},GD.prototype.getFriction=function(){return ai(this.kB)},GD.prototype.getRollingFriction=function(){return li(this.kB)},GD.prototype.setRestitution=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ui(e,t)},GD.prototype.setFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bi(e,t)},GD.prototype.setRollingFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mi(e,t)},GD.prototype.getWorldTransform=function(){return JR(yi(this.kB),zD)},GD.prototype.getCollisionFlags=function(){return di(this.kB)},GD.prototype.setCollisionFlags=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),fi(e,t)},GD.prototype.setWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hi(e,t)},GD.prototype.setCollisionShape=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bi(e,t)},GD.prototype.setCcdMotionThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),gi(e,t)},GD.prototype.setCcdSweptSphereRadius=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ki(e,t)},GD.prototype.getUserIndex=function(){return Ci(this.kB)},GD.prototype.setUserIndex=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Si(e,t)},GD.prototype.getUserPointer=function(){return JR(ji(this.kB),HD)},GD.prototype.setUserPointer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),vi(e,t)},GD.prototype.getBroadphaseHandle=function(){return JR(Ii(this.kB),XP)},GD.prototype.__destroy__=function(){Ri(this.kB)},wD.prototype=Object.create(ZR.prototype),wD.prototype.constructor=wD,wD.prototype.lB=wD,wD.mB={},n.btSoftBodySolver=wD,wD.prototype.__destroy__=function(){Di(this.kB)},HD.prototype=Object.create(ZR.prototype),HD.prototype.constructor=HD,HD.prototype.lB=HD,HD.mB={},n.VoidPtr=HD,HD.prototype.__destroy__=function(){Pi(this.kB)},VD.prototype=Object.create(dD.prototype),VD.prototype.constructor=VD,VD.prototype.lB=VD,VD.mB={},n.DebugDrawer=VD,VD.prototype.drawLine=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Oi(o,t,e,n)},VD.prototype.drawContactPoint=function(t,e,n,o,_){var i=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),Wi(i,t,e,n,o,_)},VD.prototype.reportErrorWarning=function(t){var e=this.kB;_D(),t=t&&"object"==typeof t?t.kB:pD(t),Ai(e,t)},VD.prototype.draw3dText=function(t,e){var n=this.kB;_D(),t&&"object"==typeof t&&(t=t.kB),e=e&&"object"==typeof e?e.kB:pD(e),Mi(n,t,e)},VD.prototype.setDebugMode=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),xi(e,t)},VD.prototype.getDebugMode=function(){return Fi(this.kB)},VD.prototype.__destroy__=function(){Li(this.kB)},ED.prototype=Object.create(fD.prototype),ED.prototype.constructor=ED,ED.prototype.lB=ED,ED.mB={},n.btVector4=ED,ED.prototype.w=ED.prototype.w=function(){return Hi(this.kB)},ED.prototype.setValue=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),Vi(_,t,e,n,o)},ED.prototype.length=ED.prototype.length=function(){return Ei(this.kB)},ED.prototype.x=ED.prototype.x=function(){return Ni(this.kB)},ED.prototype.y=ED.prototype.y=function(){return Ui(this.kB)},ED.prototype.z=ED.prototype.z=function(){return zi(this.kB)},ED.prototype.setX=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qi(e,t)},ED.prototype.setY=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ki(e,t)},ED.prototype.setZ=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qi(e,t)},ED.prototype.normalize=ED.prototype.normalize=function(){Xi(this.kB)},ED.prototype.rotate=ED.prototype.rotate=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),JR(Zi(n,t,e),fD)},ED.prototype.dot=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),Yi(e,t)},ED.prototype.op_mul=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Ji(e,t),fD)},ED.prototype.op_add=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR($i(e,t),fD)},ED.prototype.op_sub=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(tr(e,t),fD)},ED.prototype.__destroy__=function(){er(this.kB)},ND.prototype=Object.create(hD.prototype),ND.prototype.constructor=ND,ND.prototype.lB=ND,ND.mB={},n.btQuaternion=ND,ND.prototype.setValue=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),or(_,t,e,n,o)},ND.prototype.setEulerZYX=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),_r(o,t,e,n)},ND.prototype.setRotation=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ir(n,t,e)},ND.prototype.normalize=ND.prototype.normalize=function(){rr(this.kB)},ND.prototype.length2=function(){return pr(this.kB)},ND.prototype.length=ND.prototype.length=function(){return sr(this.kB)},ND.prototype.dot=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),cr(e,t)},ND.prototype.normalized=function(){return JR(ar(this.kB),ND)},ND.prototype.getAxis=function(){return JR(lr(this.kB),fD)},ND.prototype.inverse=ND.prototype.inverse=function(){return JR(ur(this.kB),ND)},ND.prototype.getAngle=function(){return br(this.kB)},ND.prototype.getAngleShortestPath=function(){return mr(this.kB)},ND.prototype.angle=ND.prototype.angle=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),yr(e,t)},ND.prototype.angleShortestPath=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),dr(e,t)},ND.prototype.op_add=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(fr(e,t),ND)},ND.prototype.op_sub=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(hr(e,t),ND)},ND.prototype.op_mul=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Br(e,t),ND)},ND.prototype.op_mulq=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(gr(e,t),ND)},ND.prototype.op_div=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(kr(e,t),ND)},ND.prototype.x=ND.prototype.x=function(){return Cr(this.kB)},ND.prototype.y=ND.prototype.y=function(){return Sr(this.kB)},ND.prototype.z=ND.prototype.z=function(){return jr(this.kB)},ND.prototype.w=ND.prototype.w=function(){return vr(this.kB)},ND.prototype.setX=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ir(e,t)},ND.prototype.setY=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Rr(e,t)},ND.prototype.setZ=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Dr(e,t)},ND.prototype.setW=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Pr(e,t)},ND.prototype.__destroy__=function(){Tr(this.kB)},UD.prototype=Object.create(ZR.prototype),UD.prototype.constructor=UD,UD.prototype.lB=UD,UD.mB={},n.btMatrix3x3=UD,UD.prototype.setEulerZYX=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Or(o,t,e,n)},UD.prototype.getRotation=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Wr(e,t)},UD.prototype.getRow=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Ar(e,t),fD)},UD.prototype.__destroy__=function(){Mr(this.kB)},zD.prototype=Object.create(ZR.prototype),zD.prototype.constructor=zD,zD.prototype.lB=zD,zD.mB={},n.btTransform=zD,zD.prototype.setIdentity=function(){Lr(this.kB)},zD.prototype.setOrigin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gr(e,t)},zD.prototype.setRotation=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),wr(e,t)},zD.prototype.getOrigin=function(){return JR(Hr(this.kB),fD)},zD.prototype.getRotation=function(){return JR(Vr(this.kB),ND)},zD.prototype.getBasis=function(){return JR(Er(this.kB),UD)},zD.prototype.setFromOpenGLMatrix=function(t){var e=this.kB;_D(),"object"==typeof t&&(t=sD(t)),Nr(e,t)},zD.prototype.inverse=zD.prototype.inverse=function(){return JR(Ur(this.kB),zD)},zD.prototype.op_mul=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(zr(e,t),zD)},zD.prototype.__destroy__=function(){qr(this.kB)},qD.prototype=Object.create(BD.prototype),qD.prototype.constructor=qD,qD.prototype.lB=qD,qD.mB={},n.MotionState=qD,qD.prototype.getWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qr(e,t)},qD.prototype.setWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Xr(e,t)},qD.prototype.__destroy__=function(){Zr(this.kB)},KD.prototype=Object.create(BD.prototype),KD.prototype.constructor=KD,KD.prototype.lB=KD,KD.mB={},n.btDefaultMotionState=KD,KD.prototype.getWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),tp(e,t)},KD.prototype.setWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ep(e,t)},KD.prototype.get_m_graphicsWorldTrans=KD.prototype.lD=function(){return JR(np(this.kB),zD)},KD.prototype.set_m_graphicsWorldTrans=KD.prototype.cG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),op(e,t)},Object.defineProperty(KD.prototype,"m_graphicsWorldTrans",{get:KD.prototype.lD,set:KD.prototype.cG}),KD.prototype.__destroy__=function(){_p(this.kB)},QD.prototype=Object.create(ZR.prototype),QD.prototype.constructor=QD,QD.prototype.lB=QD,QD.mB={},n.btCollisionObjectWrapper=QD,QD.prototype.getWorldTransform=function(){return JR(ip(this.kB),zD)},QD.prototype.getCollisionObject=function(){return JR(rp(this.kB),lD)},QD.prototype.getCollisionShape=function(){return JR(pp(this.kB),cD)},XD.prototype=Object.create(gD.prototype),XD.prototype.constructor=XD,XD.prototype.lB=XD,XD.mB={},n.ClosestRayResultCallback=XD,XD.prototype.hasHit=function(){return!!cp(this.kB)},XD.prototype.get_m_rayFromWorld=XD.prototype.NB=function(){return JR(ap(this.kB),fD)},XD.prototype.set_m_rayFromWorld=XD.prototype.XB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lp(e,t)},Object.defineProperty(XD.prototype,"m_rayFromWorld",{get:XD.prototype.NB,set:XD.prototype.XB}),XD.prototype.get_m_rayToWorld=XD.prototype.OB=function(){return JR(up(this.kB),fD)},XD.prototype.set_m_rayToWorld=XD.prototype.YB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bp(e,t)},Object.defineProperty(XD.prototype,"m_rayToWorld",{get:XD.prototype.OB,set:XD.prototype.YB}),XD.prototype.get_m_hitNormalWorld=XD.prototype.xB=function(){return JR(mp(this.kB),fD)},XD.prototype.set_m_hitNormalWorld=XD.prototype.EB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),yp(e,t)},Object.defineProperty(XD.prototype,"m_hitNormalWorld",{get:XD.prototype.xB,set:XD.prototype.EB}),XD.prototype.get_m_hitPointWorld=XD.prototype.yB=function(){return JR(dp(this.kB),fD)},XD.prototype.set_m_hitPointWorld=XD.prototype.FB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),fp(e,t)},Object.defineProperty(XD.prototype,"m_hitPointWorld",{get:XD.prototype.yB,set:XD.prototype.FB}),XD.prototype.get_m_collisionFilterGroup=XD.prototype.nB=function(){return hp(this.kB)},XD.prototype.set_m_collisionFilterGroup=XD.prototype.pB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bp(e,t)},Object.defineProperty(XD.prototype,"m_collisionFilterGroup",{get:XD.prototype.nB,set:XD.prototype.pB}),XD.prototype.get_m_collisionFilterMask=XD.prototype.oB=function(){return gp(this.kB)},XD.prototype.set_m_collisionFilterMask=XD.prototype.qB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kp(e,t)},Object.defineProperty(XD.prototype,"m_collisionFilterMask",{get:XD.prototype.oB,set:XD.prototype.qB}),XD.prototype.get_m_closestHitFraction=XD.prototype.rB=function(){return Cp(this.kB)},XD.prototype.set_m_closestHitFraction=XD.prototype.sB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Sp(e,t)},Object.defineProperty(XD.prototype,"m_closestHitFraction",{get:XD.prototype.rB,set:XD.prototype.sB}),XD.prototype.get_m_collisionObject=XD.prototype.vB=function(){return JR(jp(this.kB),lD)},XD.prototype.set_m_collisionObject=XD.prototype.CB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),vp(e,t)},Object.defineProperty(XD.prototype,"m_collisionObject",{get:XD.prototype.vB,set:XD.prototype.CB}),XD.prototype.get_m_flags=XD.prototype.tB=function(){return Ip(this.kB)},XD.prototype.set_m_flags=XD.prototype.uB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Rp(e,t)},Object.defineProperty(XD.prototype,"m_flags",{get:XD.prototype.tB,set:XD.prototype.uB}),XD.prototype.__destroy__=function(){Dp(this.kB)},ZD.prototype=Object.create(ZR.prototype),ZD.prototype.constructor=ZD,ZD.prototype.lB=ZD,ZD.mB={},n.btConstCollisionObjectArray=ZD,ZD.prototype.size=ZD.prototype.size=function(){return Pp(this.kB)},ZD.prototype.at=ZD.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Tp(e,t),lD)},ZD.prototype.__destroy__=function(){Op(this.kB)},YD.prototype=Object.create(ZR.prototype),YD.prototype.constructor=YD,YD.prototype.lB=YD,YD.mB={},n.btScalarArray=YD,YD.prototype.size=YD.prototype.size=function(){return Wp(this.kB)},YD.prototype.at=YD.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),Ap(e,t)},YD.prototype.__destroy__=function(){Mp(this.kB)},JD.prototype=Object.create(gD.prototype),JD.prototype.constructor=JD,JD.prototype.lB=JD,JD.mB={},n.AllHitsRayResultCallback=JD,JD.prototype.hasHit=function(){return!!Fp(this.kB)},JD.prototype.get_m_collisionObjects=JD.prototype.UC=function(){return JR(Lp(this.kB),ZD)},JD.prototype.set_m_collisionObjects=JD.prototype.LF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gp(e,t)},Object.defineProperty(JD.prototype,"m_collisionObjects",{get:JD.prototype.UC,set:JD.prototype.LF}),JD.prototype.get_m_rayFromWorld=JD.prototype.NB=function(){return JR(wp(this.kB),fD)},JD.prototype.set_m_rayFromWorld=JD.prototype.XB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Hp(e,t)},Object.defineProperty(JD.prototype,"m_rayFromWorld",{get:JD.prototype.NB,set:JD.prototype.XB}),JD.prototype.get_m_rayToWorld=JD.prototype.OB=function(){return JR(Vp(this.kB),fD)},JD.prototype.set_m_rayToWorld=JD.prototype.YB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ep(e,t)},Object.defineProperty(JD.prototype,"m_rayToWorld",{get:JD.prototype.OB,set:JD.prototype.YB}),JD.prototype.get_m_hitNormalWorld=JD.prototype.xB=function(){return JR(Np(this.kB),dP)},JD.prototype.set_m_hitNormalWorld=JD.prototype.EB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Up(e,t)},Object.defineProperty(JD.prototype,"m_hitNormalWorld",{get:JD.prototype.xB,set:JD.prototype.EB}),JD.prototype.get_m_hitPointWorld=JD.prototype.yB=function(){return JR(zp(this.kB),dP)},JD.prototype.set_m_hitPointWorld=JD.prototype.FB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qp(e,t)},Object.defineProperty(JD.prototype,"m_hitPointWorld",{get:JD.prototype.yB,set:JD.prototype.FB}),JD.prototype.get_m_hitFractions=JD.prototype.qD=function(){return JR(Kp(this.kB),YD)},JD.prototype.set_m_hitFractions=JD.prototype.hG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qp(e,t)},Object.defineProperty(JD.prototype,"m_hitFractions",{get:JD.prototype.qD,set:JD.prototype.hG}),JD.prototype.get_m_collisionFilterGroup=JD.prototype.nB=function(){return Xp(this.kB)},JD.prototype.set_m_collisionFilterGroup=JD.prototype.pB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Zp(e,t)},Object.defineProperty(JD.prototype,"m_collisionFilterGroup",{get:JD.prototype.nB,set:JD.prototype.pB}),JD.prototype.get_m_collisionFilterMask=JD.prototype.oB=function(){return Yp(this.kB)},JD.prototype.set_m_collisionFilterMask=JD.prototype.qB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jp(e,t)},Object.defineProperty(JD.prototype,"m_collisionFilterMask",{get:JD.prototype.oB,set:JD.prototype.qB}),JD.prototype.get_m_closestHitFraction=JD.prototype.rB=function(){return $p(this.kB)},JD.prototype.set_m_closestHitFraction=JD.prototype.sB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ts(e,t)},Object.defineProperty(JD.prototype,"m_closestHitFraction",{get:JD.prototype.rB,set:JD.prototype.sB}),JD.prototype.get_m_collisionObject=JD.prototype.vB=function(){return JR(es(this.kB),lD)},JD.prototype.set_m_collisionObject=JD.prototype.CB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ns(e,t)},Object.defineProperty(JD.prototype,"m_collisionObject",{get:JD.prototype.vB,set:JD.prototype.CB}),JD.prototype.get_m_flags=JD.prototype.tB=function(){return os(this.kB)},JD.prototype.set_m_flags=JD.prototype.uB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_s(e,t)},Object.defineProperty(JD.prototype,"m_flags",{get:JD.prototype.tB,set:JD.prototype.uB}),JD.prototype.__destroy__=function(){is(this.kB)},$D.prototype=Object.create(ZR.prototype),$D.prototype.constructor=$D,$D.prototype.lB=$D,$D.mB={},n.btManifoldPoint=$D,$D.prototype.getPositionWorldOnA=function(){return JR(rs(this.kB),fD)},$D.prototype.getPositionWorldOnB=function(){return JR(ps(this.kB),fD)},$D.prototype.getAppliedImpulse=function(){return ss(this.kB)},$D.prototype.getDistance=function(){return cs(this.kB)},$D.prototype.get_m_localPointA=$D.prototype.GD=function(){return JR(as(this.kB),fD)},$D.prototype.set_m_localPointA=$D.prototype.xG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ls(e,t)},Object.defineProperty($D.prototype,"m_localPointA",{get:$D.prototype.GD,set:$D.prototype.xG}),$D.prototype.get_m_localPointB=$D.prototype.HD=function(){return JR(us(this.kB),fD)},$D.prototype.set_m_localPointB=$D.prototype.yG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bs(e,t)},Object.defineProperty($D.prototype,"m_localPointB",{get:$D.prototype.HD,set:$D.prototype.yG}),$D.prototype.get_m_positionWorldOnB=$D.prototype.YD=function(){return JR(ms(this.kB),fD)},$D.prototype.set_m_positionWorldOnB=$D.prototype.PG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ys(e,t)},Object.defineProperty($D.prototype,"m_positionWorldOnB",{get:$D.prototype.YD,set:$D.prototype.PG}),$D.prototype.get_m_positionWorldOnA=$D.prototype.XD=function(){return JR(ds(this.kB),fD)},$D.prototype.set_m_positionWorldOnA=$D.prototype.OG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),fs(e,t)},Object.defineProperty($D.prototype,"m_positionWorldOnA",{get:$D.prototype.XD,set:$D.prototype.OG}),$D.prototype.get_m_normalWorldOnB=$D.prototype.SD=function(){return JR(hs(this.kB),fD)},$D.prototype.set_m_normalWorldOnB=$D.prototype.JG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bs(e,t)},Object.defineProperty($D.prototype,"m_normalWorldOnB",{get:$D.prototype.SD,set:$D.prototype.JG}),$D.prototype.get_m_userPersistentData=$D.prototype.zE=function(){return gs(this.kB)},$D.prototype.set_m_userPersistentData=$D.prototype.rH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ks(e,t)},Object.defineProperty($D.prototype,"m_userPersistentData",{get:$D.prototype.zE,set:$D.prototype.rH}),$D.prototype.__destroy__=function(){Cs(this.kB)},tP.prototype=Object.create(kD.prototype),tP.prototype.constructor=tP,tP.prototype.lB=tP,tP.mB={},n.ConcreteContactResultCallback=tP,tP.prototype.addSingleResult=function(t,e,n,o,_,i,r){var p=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),i&&"object"==typeof i&&(i=i.kB),r&&"object"==typeof r&&(r=r.kB),js(p,t,e,n,o,_,i,r)},tP.prototype.__destroy__=function(){vs(this.kB)},eP.prototype=Object.create(ZR.prototype),eP.prototype.constructor=eP,eP.prototype.lB=eP,eP.mB={},n.LocalShapeInfo=eP,eP.prototype.get_m_shapePart=eP.prototype.gE=function(){return Is(this.kB)},eP.prototype.set_m_shapePart=eP.prototype.ZG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Rs(e,t)},Object.defineProperty(eP.prototype,"m_shapePart",{get:eP.prototype.gE,set:eP.prototype.ZG}),eP.prototype.get_m_triangleIndex=eP.prototype.vE=function(){return Ds(this.kB)},eP.prototype.set_m_triangleIndex=eP.prototype.nH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ps(e,t)},Object.defineProperty(eP.prototype,"m_triangleIndex",{get:eP.prototype.vE,set:eP.prototype.nH}),eP.prototype.__destroy__=function(){Ts(this.kB)},nP.prototype=Object.create(ZR.prototype),nP.prototype.constructor=nP,nP.prototype.lB=nP,nP.mB={},n.LocalConvexResult=nP,nP.prototype.get_m_hitCollisionObject=nP.prototype.LB=function(){return JR(Ws(this.kB),lD)},nP.prototype.set_m_hitCollisionObject=nP.prototype.VB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),As(e,t)},Object.defineProperty(nP.prototype,"m_hitCollisionObject",{get:nP.prototype.LB,set:nP.prototype.VB}),nP.prototype.get_m_localShapeInfo=nP.prototype.ID=function(){return JR(Ms(this.kB),eP)},nP.prototype.set_m_localShapeInfo=nP.prototype.zG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),xs(e,t)},Object.defineProperty(nP.prototype,"m_localShapeInfo",{get:nP.prototype.ID,set:nP.prototype.zG}),nP.prototype.get_m_hitNormalLocal=nP.prototype.sD=function(){return JR(Fs(this.kB),fD)},nP.prototype.set_m_hitNormalLocal=nP.prototype.jG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ls(e,t)},Object.defineProperty(nP.prototype,"m_hitNormalLocal",{get:nP.prototype.sD,set:nP.prototype.jG}),nP.prototype.get_m_hitPointLocal=nP.prototype.uD=function(){return JR(Gs(this.kB),fD)},nP.prototype.set_m_hitPointLocal=nP.prototype.lG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ws(e,t)},Object.defineProperty(nP.prototype,"m_hitPointLocal",{get:nP.prototype.uD,set:nP.prototype.lG}),nP.prototype.get_m_hitFraction=nP.prototype.pD=function(){return Hs(this.kB)},nP.prototype.set_m_hitFraction=nP.prototype.gG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Vs(e,t)},Object.defineProperty(nP.prototype,"m_hitFraction",{get:nP.prototype.pD,set:nP.prototype.gG}),nP.prototype.__destroy__=function(){Es(this.kB)},oP.prototype=Object.create(CD.prototype),oP.prototype.constructor=oP,oP.prototype.lB=oP,oP.mB={},n.ClosestConvexResultCallback=oP,oP.prototype.hasHit=function(){return!!Us(this.kB)},oP.prototype.get_m_hitCollisionObject=oP.prototype.LB=function(){return JR(zs(this.kB),lD)},oP.prototype.set_m_hitCollisionObject=oP.prototype.VB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qs(e,t)},Object.defineProperty(oP.prototype,"m_hitCollisionObject",{get:oP.prototype.LB,set:oP.prototype.VB}),oP.prototype.get_m_convexFromWorld=oP.prototype.ZC=function(){return JR(Ks(this.kB),fD)},oP.prototype.set_m_convexFromWorld=oP.prototype.QF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qs(e,t)},Object.defineProperty(oP.prototype,"m_convexFromWorld",{get:oP.prototype.ZC,set:oP.prototype.QF}),oP.prototype.get_m_convexToWorld=oP.prototype.$C=function(){return JR(Xs(this.kB),fD)},oP.prototype.set_m_convexToWorld=oP.prototype.RF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Zs(e,t)},Object.defineProperty(oP.prototype,"m_convexToWorld",{get:oP.prototype.$C,set:oP.prototype.RF}),oP.prototype.get_m_hitNormalWorld=oP.prototype.xB=function(){return JR(Ys(this.kB),fD)},oP.prototype.set_m_hitNormalWorld=oP.prototype.EB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Js(e,t)},Object.defineProperty(oP.prototype,"m_hitNormalWorld",{get:oP.prototype.xB,set:oP.prototype.EB}),oP.prototype.get_m_hitPointWorld=oP.prototype.yB=function(){return JR($s(this.kB),fD)},oP.prototype.set_m_hitPointWorld=oP.prototype.FB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),tc(e,t)},Object.defineProperty(oP.prototype,"m_hitPointWorld",{get:oP.prototype.yB,set:oP.prototype.FB}),oP.prototype.get_m_collisionFilterGroup=oP.prototype.nB=function(){return ec(this.kB)},oP.prototype.set_m_collisionFilterGroup=oP.prototype.pB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),nc(e,t)},Object.defineProperty(oP.prototype,"m_collisionFilterGroup",{get:oP.prototype.nB,set:oP.prototype.pB}),oP.prototype.get_m_collisionFilterMask=oP.prototype.oB=function(){return oc(this.kB)},oP.prototype.set_m_collisionFilterMask=oP.prototype.qB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_c(e,t)},Object.defineProperty(oP.prototype,"m_collisionFilterMask",{get:oP.prototype.oB,set:oP.prototype.qB}),oP.prototype.get_m_closestHitFraction=oP.prototype.rB=function(){return ic(this.kB)},oP.prototype.set_m_closestHitFraction=oP.prototype.sB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rc(e,t)},Object.defineProperty(oP.prototype,"m_closestHitFraction",{get:oP.prototype.rB,set:oP.prototype.sB}),oP.prototype.__destroy__=function(){pc(this.kB)},_P.prototype=Object.create(SD.prototype),_P.prototype.constructor=_P,_P.prototype.lB=_P,_P.mB={},n.btConvexTriangleMeshShape=_P,_P.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ac(e,t)},_P.prototype.getLocalScaling=function(){return JR(lc(this.kB),fD)},_P.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),uc(n,t,e)},_P.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bc(e,t)},_P.prototype.getMargin=function(){return mc(this.kB)},_P.prototype.__destroy__=function(){yc(this.kB)},iP.prototype=Object.create(cD.prototype),iP.prototype.constructor=iP,iP.prototype.lB=iP,iP.mB={},n.btBoxShape=iP,iP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),fc(e,t)},iP.prototype.getMargin=function(){return hc(this.kB)},iP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bc(e,t)},iP.prototype.getLocalScaling=function(){return JR(gc(this.kB),fD)},iP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),kc(n,t,e)},iP.prototype.__destroy__=function(){Cc(this.kB)},rP.prototype=Object.create(jD.prototype),rP.prototype.constructor=rP,rP.prototype.lB=rP,rP.mB={},n.btCapsuleShapeX=rP,rP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),jc(e,t)},rP.prototype.getMargin=function(){return vc(this.kB)},rP.prototype.getUpAxis=function(){return Ic(this.kB)},rP.prototype.getRadius=function(){return Rc(this.kB)},rP.prototype.getHalfHeight=function(){return Dc(this.kB)},rP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Pc(e,t)},rP.prototype.getLocalScaling=function(){return JR(Tc(this.kB),fD)},rP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Oc(n,t,e)},rP.prototype.__destroy__=function(){Wc(this.kB)},pP.prototype=Object.create(jD.prototype),pP.prototype.constructor=pP,pP.prototype.lB=pP,pP.mB={},n.btCapsuleShapeZ=pP,pP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Mc(e,t)},pP.prototype.getMargin=function(){return xc(this.kB)},pP.prototype.getUpAxis=function(){return Fc(this.kB)},pP.prototype.getRadius=function(){return Lc(this.kB)},pP.prototype.getHalfHeight=function(){return Gc(this.kB)},pP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),wc(e,t)},pP.prototype.getLocalScaling=function(){return JR(Hc(this.kB),fD)},pP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Vc(n,t,e)},pP.prototype.__destroy__=function(){Ec(this.kB)},sP.prototype=Object.create(vD.prototype),sP.prototype.constructor=sP,sP.prototype.lB=sP,sP.mB={},n.btCylinderShapeX=sP,sP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Uc(e,t)},sP.prototype.getMargin=function(){return zc(this.kB)},sP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qc(e,t)},sP.prototype.getLocalScaling=function(){return JR(Kc(this.kB),fD)},sP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Qc(n,t,e)},sP.prototype.__destroy__=function(){Xc(this.kB)},cP.prototype=Object.create(vD.prototype),cP.prototype.constructor=cP,cP.prototype.lB=cP,cP.mB={},n.btCylinderShapeZ=cP,cP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Yc(e,t)},cP.prototype.getMargin=function(){return Jc(this.kB)},cP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),$c(e,t)},cP.prototype.getLocalScaling=function(){return JR(ta(this.kB),fD)},cP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ea(n,t,e)},cP.prototype.__destroy__=function(){na(this.kB)},aP.prototype=Object.create(cD.prototype),aP.prototype.constructor=aP,aP.prototype.lB=aP,aP.mB={},n.btSphereShape=aP,aP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_a(e,t)},aP.prototype.getMargin=function(){return ia(this.kB)},aP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ra(e,t)},aP.prototype.getLocalScaling=function(){return JR(pa(this.kB),fD)},aP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),sa(n,t,e)},aP.prototype.__destroy__=function(){ca(this.kB)},lP.prototype=Object.create(cD.prototype),lP.prototype.constructor=lP,lP.prototype.lB=lP,lP.mB={},n.btMultiSphereShape=lP,lP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),la(e,t)},lP.prototype.getLocalScaling=function(){return JR(ua(this.kB),fD)},lP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ba(n,t,e)},lP.prototype.__destroy__=function(){ma(this.kB)},uP.prototype=Object.create(ID.prototype),uP.prototype.constructor=uP,uP.prototype.lB=uP,uP.mB={},n.btConeShapeX=uP,uP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),da(e,t)},uP.prototype.getLocalScaling=function(){return JR(fa(this.kB),fD)},uP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ha(n,t,e)},uP.prototype.__destroy__=function(){Ba(this.kB)},bP.prototype=Object.create(ID.prototype),bP.prototype.constructor=bP,bP.prototype.lB=bP,bP.mB={},n.btConeShapeZ=bP,bP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ka(e,t)},bP.prototype.getLocalScaling=function(){return JR(Ca(this.kB),fD)},bP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Sa(n,t,e)},bP.prototype.__destroy__=function(){ja(this.kB)},mP.prototype=Object.create(ZR.prototype),mP.prototype.constructor=mP,mP.prototype.lB=mP,mP.mB={},n.btIntArray=mP,mP.prototype.size=mP.prototype.size=function(){return va(this.kB)},mP.prototype.at=mP.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),Ia(e,t)},mP.prototype.__destroy__=function(){Ra(this.kB)},yP.prototype=Object.create(ZR.prototype),yP.prototype.constructor=yP,yP.prototype.lB=yP,yP.mB={},n.btFace=yP,yP.prototype.get_m_indices=yP.prototype.xD=function(){return JR(Da(this.kB),mP)},yP.prototype.set_m_indices=yP.prototype.oG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Pa(e,t)},Object.defineProperty(yP.prototype,"m_indices",{get:yP.prototype.xD,set:yP.prototype.oG}),yP.prototype.get_m_plane=yP.prototype.WD=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),Ta(e,t)},yP.prototype.set_m_plane=yP.prototype.NG=function(t,e){var n=this.kB;_D(),t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Oa(n,t,e)},Object.defineProperty(yP.prototype,"m_plane",{get:yP.prototype.WD,set:yP.prototype.NG}),yP.prototype.__destroy__=function(){Wa(this.kB)},dP.prototype=Object.create(ZR.prototype),dP.prototype.constructor=dP,dP.prototype.lB=dP,dP.mB={},n.btVector3Array=dP,dP.prototype.size=dP.prototype.size=function(){return Aa(this.kB)},dP.prototype.at=dP.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Ma(e,t),fD)},dP.prototype.__destroy__=function(){xa(this.kB)},fP.prototype=Object.create(ZR.prototype),fP.prototype.constructor=fP,fP.prototype.lB=fP,fP.mB={},n.btFaceArray=fP,fP.prototype.size=fP.prototype.size=function(){return Fa(this.kB)},fP.prototype.at=fP.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(La(e,t),yP)},fP.prototype.__destroy__=function(){Ga(this.kB)},hP.prototype=Object.create(ZR.prototype),hP.prototype.constructor=hP,hP.prototype.lB=hP,hP.mB={},n.btConvexPolyhedron=hP,hP.prototype.get_m_vertices=hP.prototype.BE=function(){return JR(wa(this.kB),dP)},hP.prototype.set_m_vertices=hP.prototype.tH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ha(e,t)},Object.defineProperty(hP.prototype,"m_vertices",{get:hP.prototype.BE,set:hP.prototype.tH}),hP.prototype.get_m_faces=hP.prototype.KB=function(){return JR(Va(this.kB),fP)},hP.prototype.set_m_faces=hP.prototype.UB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ea(e,t)},Object.defineProperty(hP.prototype,"m_faces",{get:hP.prototype.KB,set:hP.prototype.UB}),hP.prototype.__destroy__=function(){Na(this.kB)},BP.prototype=Object.create(cD.prototype),BP.prototype.constructor=BP,BP.prototype.lB=BP,BP.mB={},n.btConvexHullShape=BP,BP.prototype.addPoint=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),void 0===e?Ka(n,t):Qa(n,t,e)},BP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Xa(e,t)},BP.prototype.getMargin=function(){return Za(this.kB)},BP.prototype.getNumVertices=function(){return Ya(this.kB)},BP.prototype.initializePolyhedralFeatures=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),!!Ja(e,t)},BP.prototype.recalcLocalAabb=function(){$a(this.kB)},BP.prototype.getConvexPolyhedron=function(){return JR(tl(this.kB),hP)},BP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),el(e,t)},BP.prototype.getLocalScaling=function(){return JR(nl(this.kB),fD)},BP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ol(n,t,e)},BP.prototype.__destroy__=function(){_l(this.kB)},gP.prototype=Object.create(ZR.prototype),gP.prototype.constructor=gP,gP.prototype.lB=gP,gP.mB={},n.btShapeHull=gP,gP.prototype.buildHull=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),!!rl(e,t)},gP.prototype.numVertices=function(){return pl(this.kB)},gP.prototype.getVertexPointer=function(){return JR(sl(this.kB),fD)},gP.prototype.__destroy__=function(){cl(this.kB)},kP.prototype=Object.create(cD.prototype),kP.prototype.constructor=kP,kP.prototype.lB=kP,kP.mB={},n.btCompoundShape=kP,kP.prototype.addChildShape=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ul(n,t,e)},kP.prototype.removeChildShape=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bl(e,t)},kP.prototype.removeChildShapeByIndex=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ml(e,t)},kP.prototype.getNumChildShapes=function(){return yl(this.kB)},kP.prototype.getChildShape=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(dl(e,t),cD)},kP.prototype.updateChildTransform=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===n?fl(o,t,e):hl(o,t,e,n)},kP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bl(e,t)},kP.prototype.getMargin=function(){return gl(this.kB)},kP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kl(e,t)},kP.prototype.getLocalScaling=function(){return JR(Cl(this.kB),fD)},kP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Sl(n,t,e)},kP.prototype.__destroy__=function(){jl(this.kB)},CP.prototype=Object.create(ZR.prototype),CP.prototype.constructor=CP,CP.prototype.lB=CP,CP.mB={},n.btIndexedMesh=CP,CP.prototype.get_m_numTriangles=CP.prototype.UD=function(){return vl(this.kB)},CP.prototype.set_m_numTriangles=CP.prototype.LG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Il(e,t)},Object.defineProperty(CP.prototype,"m_numTriangles",{get:CP.prototype.UD,set:CP.prototype.LG}),CP.prototype.__destroy__=function(){Rl(this.kB)},SP.prototype=Object.create(ZR.prototype),SP.prototype.constructor=SP,SP.prototype.lB=SP,SP.mB={},n.btIndexedMeshArray=SP,SP.prototype.size=SP.prototype.size=function(){return Dl(this.kB)},SP.prototype.at=SP.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Pl(e,t),CP)},SP.prototype.__destroy__=function(){Tl(this.kB)},jP.prototype=Object.create(RD.prototype),jP.prototype.constructor=jP,jP.prototype.lB=jP,jP.mB={},n.btTriangleMesh=jP,jP.prototype.addTriangle=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),void 0===o?Ml(_,t,e,n):xl(_,t,e,n,o)},jP.prototype.findOrAddVertex=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Fl(n,t,e)},jP.prototype.addIndex=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ll(e,t)},jP.prototype.getIndexedMeshArray=function(){return JR(Gl(this.kB),SP)},jP.prototype.setScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),wl(e,t)},jP.prototype.__destroy__=function(){Hl(this.kB)},vP.prototype=Object.create(uD.prototype),vP.prototype.constructor=vP,vP.prototype.lB=vP,vP.mB={},n.btEmptyShape=vP,vP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),El(e,t)},vP.prototype.getLocalScaling=function(){return JR(Nl(this.kB),fD)},vP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Ul(n,t,e)},vP.prototype.__destroy__=function(){zl(this.kB)},IP.prototype=Object.create(uD.prototype),IP.prototype.constructor=IP,IP.prototype.lB=IP,IP.mB={},n.btStaticPlaneShape=IP,IP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Kl(e,t)},IP.prototype.getLocalScaling=function(){return JR(Ql(this.kB),fD)},IP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Xl(n,t,e)},IP.prototype.__destroy__=function(){Zl(this.kB)},RP.prototype=Object.create(DD.prototype),RP.prototype.constructor=RP,RP.prototype.lB=RP,RP.mB={},n.btBvhTriangleMeshShape=RP,RP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),$l(e,t)},RP.prototype.getLocalScaling=function(){return JR(tu(this.kB),fD)},RP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),eu(n,t,e)},RP.prototype.__destroy__=function(){nu(this.kB)},DP.prototype=Object.create(uD.prototype),DP.prototype.constructor=DP,DP.prototype.lB=DP,DP.mB={},n.btHeightfieldTerrainShape=DP,DP.prototype.setMargin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_u(e,t)},DP.prototype.getMargin=function(){return iu(this.kB)},DP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ru(e,t)},DP.prototype.getLocalScaling=function(){return JR(pu(this.kB),fD)},DP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),su(n,t,e)},DP.prototype.__destroy__=function(){cu(this.kB)},PP.prototype=Object.create(ZR.prototype),PP.prototype.constructor=PP,PP.prototype.lB=PP,PP.mB={},n.btAABB=PP,PP.prototype.invalidate=function(){lu(this.kB)},PP.prototype.increment_margin=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uu(e,t)},PP.prototype.copy_with_margin=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),bu(n,t,e)},PP.prototype.__destroy__=function(){mu(this.kB)},TP.prototype=Object.create(ZR.prototype),TP.prototype.constructor=TP,TP.prototype.lB=TP,TP.mB={},n.btPrimitiveTriangle=TP,TP.prototype.__destroy__=function(){du(this.kB)},OP.prototype=Object.create(ZR.prototype),OP.prototype.constructor=OP,OP.prototype.lB=OP,OP.mB={},n.btTriangleShapeEx=OP,OP.prototype.getAabb=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),hu(o,t,e,n)},OP.prototype.applyTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bu(e,t)},OP.prototype.buildTriPlane=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),gu(e,t)},OP.prototype.__destroy__=function(){ku(this.kB)},WP.prototype=Object.create(ZR.prototype),WP.prototype.constructor=WP,WP.prototype.lB=WP,WP.mB={},n.btTetrahedronShapeEx=WP,WP.prototype.setVertices=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),Su(_,t,e,n,o)},WP.prototype.__destroy__=function(){ju(this.kB)},AP.prototype=Object.create(PD.prototype),AP.prototype.constructor=AP,AP.prototype.lB=AP,AP.mB={},n.CompoundPrimitiveManager=AP,AP.prototype.get_primitive_count=function(){return vu(this.kB)},AP.prototype.get_primitive_box=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Iu(n,t,e)},AP.prototype.get_primitive_triangle=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Ru(n,t,e)},AP.prototype.is_trimesh=function(){return!!Du(this.kB)},AP.prototype.get_m_compoundShape=AP.prototype.VC=function(){return JR(Pu(this.kB),MP)},AP.prototype.set_m_compoundShape=AP.prototype.MF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Tu(e,t)},Object.defineProperty(AP.prototype,"m_compoundShape",{get:AP.prototype.VC,set:AP.prototype.MF}),AP.prototype.__destroy__=function(){Ou(this.kB)},MP.prototype=Object.create(TD.prototype),MP.prototype.constructor=MP,MP.prototype.lB=MP,MP.mB={},n.btGImpactCompoundShape=MP,MP.prototype.childrenHasTransform=function(){return!!Mu(this.kB)},MP.prototype.getPrimitiveManager=function(){return JR(xu(this.kB),PD)},MP.prototype.getCompoundPrimitiveManager=function(){return JR(Fu(this.kB),AP)},MP.prototype.getNumChildShapes=function(){return Lu(this.kB)},MP.prototype.addChildShape=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Gu(n,t,e)},MP.prototype.getChildShape=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(wu(e,t),cD)},MP.prototype.getChildAabb=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),Hu(_,t,e,n,o)},MP.prototype.getChildTransform=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Vu(e,t),zD)},MP.prototype.setChildTransform=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Eu(n,t,e)},MP.prototype.calculateLocalInertia=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Nu(n,t,e)},MP.prototype.getName=function(){return B(Uu(this.kB))},MP.prototype.getGImpactShapeType=function(){return zu(this.kB)},MP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qu(e,t)},MP.prototype.getLocalScaling=function(){return JR(Ku(this.kB),fD)},MP.prototype.updateBound=function(){Qu(this.kB)},MP.prototype.postUpdate=function(){Xu(this.kB)},MP.prototype.getShapeType=function(){return Zu(this.kB)},MP.prototype.needsRetrieveTriangles=function(){return!!Yu(this.kB)},MP.prototype.needsRetrieveTetrahedrons=function(){return!!Ju(this.kB)},MP.prototype.getBulletTriangle=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),$u(n,t,e)},MP.prototype.getBulletTetrahedron=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),tb(n,t,e)},MP.prototype.__destroy__=function(){eb(this.kB)},xP.prototype=Object.create(PD.prototype),xP.prototype.constructor=xP,xP.prototype.lB=xP,xP.mB={},n.TrimeshPrimitiveManager=xP,xP.prototype.lock=xP.prototype.lock=function(){_b(this.kB)},xP.prototype.unlock=xP.prototype.unlock=function(){ib(this.kB)},xP.prototype.is_trimesh=function(){return!!rb(this.kB)},xP.prototype.get_vertex_count=function(){return pb(this.kB)},xP.prototype.get_indices=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),sb(_,t,e,n,o)},xP.prototype.get_vertex=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),cb(n,t,e)},xP.prototype.get_bullet_triangle=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),ab(n,t,e)},xP.prototype.get_m_margin=xP.prototype.LD=function(){return lb(this.kB)},xP.prototype.set_m_margin=xP.prototype.CG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ub(e,t)},Object.defineProperty(xP.prototype,"m_margin",{get:xP.prototype.LD,set:xP.prototype.CG}),xP.prototype.get_m_meshInterface=xP.prototype.OD=function(){return JR(bb(this.kB),RD)},xP.prototype.set_m_meshInterface=xP.prototype.FG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mb(e,t)},Object.defineProperty(xP.prototype,"m_meshInterface",{get:xP.prototype.OD,set:xP.prototype.FG}),xP.prototype.get_m_part=xP.prototype.VD=function(){return yb(this.kB)},xP.prototype.set_m_part=xP.prototype.MG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),db(e,t)},Object.defineProperty(xP.prototype,"m_part",{get:xP.prototype.VD,set:xP.prototype.MG}),xP.prototype.get_m_lock_count=xP.prototype.JD=function(){return fb(this.kB)},xP.prototype.set_m_lock_count=xP.prototype.AG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hb(e,t)},Object.defineProperty(xP.prototype,"m_lock_count",{get:xP.prototype.JD,set:xP.prototype.AG}),xP.prototype.get_numverts=xP.prototype.LE=function(){return Bb(this.kB)},xP.prototype.set_numverts=xP.prototype.DH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),gb(e,t)},Object.defineProperty(xP.prototype,"numverts",{get:xP.prototype.LE,set:xP.prototype.DH}),xP.prototype.get_type=xP.prototype.PE=function(){return kb(this.kB)},xP.prototype.set_type=xP.prototype.HH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Cb(e,t)},Object.defineProperty(xP.prototype,"type",{get:xP.prototype.PE,set:xP.prototype.HH}),xP.prototype.get_stride=xP.prototype.NE=function(){return Sb(this.kB)},xP.prototype.set_stride=xP.prototype.FH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),jb(e,t)},Object.defineProperty(xP.prototype,"stride",{get:xP.prototype.NE,set:xP.prototype.FH}),xP.prototype.get_indexstride=xP.prototype.gC=function(){return vb(this.kB)},xP.prototype.set_indexstride=xP.prototype.YE=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ib(e,t)},Object.defineProperty(xP.prototype,"indexstride",{get:xP.prototype.gC,set:xP.prototype.YE}),xP.prototype.get_numfaces=xP.prototype.KE=function(){return Rb(this.kB)},xP.prototype.set_numfaces=xP.prototype.CH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Db(e,t)},Object.defineProperty(xP.prototype,"numfaces",{get:xP.prototype.KE,set:xP.prototype.CH}),xP.prototype.get_indicestype=xP.prototype.hC=function(){return Pb(this.kB)},xP.prototype.set_indicestype=xP.prototype.ZE=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Tb(e,t)},Object.defineProperty(xP.prototype,"indicestype",{get:xP.prototype.hC,set:xP.prototype.ZE}),xP.prototype.__destroy__=function(){Ob(this.kB)},FP.prototype=Object.create(TD.prototype),FP.prototype.constructor=FP,FP.prototype.lB=FP,FP.mB={},n.btGImpactMeshShapePart=FP,FP.prototype.getTrimeshPrimitiveManager=function(){return JR(Ab(this.kB),xP)},FP.prototype.getVertexCount=function(){return Mb(this.kB)},FP.prototype.getVertex=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),xb(n,t,e)},FP.prototype.getPart=function(){return Fb(this.kB)},FP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Lb(e,t)},FP.prototype.getLocalScaling=function(){return JR(Gb(this.kB),fD)},FP.prototype.updateBound=function(){wb(this.kB)},FP.prototype.postUpdate=function(){Hb(this.kB)},FP.prototype.getShapeType=function(){return Vb(this.kB)},FP.prototype.needsRetrieveTriangles=function(){return!!Eb(this.kB)},FP.prototype.needsRetrieveTetrahedrons=function(){return!!Nb(this.kB)},FP.prototype.getBulletTriangle=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Ub(n,t,e)},FP.prototype.getBulletTetrahedron=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),zb(n,t,e)},FP.prototype.__destroy__=function(){qb(this.kB)},LP.prototype=Object.create(TD.prototype),LP.prototype.constructor=LP,LP.prototype.lB=LP,LP.mB={},n.btGImpactMeshShape=LP,LP.prototype.getMeshInterface=function(){return JR(Qb(this.kB),RD)},LP.prototype.getMeshPartCount=function(){return Xb(this.kB)},LP.prototype.getMeshPart=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Zb(e,t),FP)},LP.prototype.calculateSerializeBufferSize=function(){return Yb(this.kB)},LP.prototype.setLocalScaling=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jb(e,t)},LP.prototype.getLocalScaling=function(){return JR($b(this.kB),fD)},LP.prototype.updateBound=function(){tm(this.kB)},LP.prototype.postUpdate=function(){em(this.kB)},LP.prototype.getShapeType=function(){return nm(this.kB)},LP.prototype.needsRetrieveTriangles=function(){return!!om(this.kB)},LP.prototype.needsRetrieveTetrahedrons=function(){return!!_m(this.kB)},LP.prototype.getBulletTriangle=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),im(n,t,e)},LP.prototype.getBulletTetrahedron=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),rm(n,t,e)},LP.prototype.__destroy__=function(){pm(this.kB)},GP.prototype=Object.create(ZR.prototype),GP.prototype.constructor=GP,GP.prototype.lB=GP,GP.mB={},n.btCollisionAlgorithmConstructionInfo=GP,GP.prototype.get_m_dispatcher1=GP.prototype.eD=function(){return JR(am(this.kB),AD)},GP.prototype.set_m_dispatcher1=GP.prototype.WF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lm(e,t)},Object.defineProperty(GP.prototype,"m_dispatcher1",{get:GP.prototype.eD,set:GP.prototype.WF}),GP.prototype.get_m_manifold=GP.prototype.KD=function(){return JR(um(this.kB),VP)},GP.prototype.set_m_manifold=GP.prototype.BG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bm(e,t)},Object.defineProperty(GP.prototype,"m_manifold",{get:GP.prototype.KD,set:GP.prototype.BG}),GP.prototype.__destroy__=function(){mm(this.kB)},wP.prototype=Object.create(OD.prototype),wP.prototype.constructor=wP,wP.prototype.lB=wP,wP.mB={},n.btGImpactCollisionAlgorithm=wP,wP.prototype.registerAlgorithm=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),dm(e,t)},wP.prototype.__destroy__=function(){fm(this.kB)},HP.prototype=Object.create(ZR.prototype),HP.prototype.constructor=HP,HP.prototype.lB=HP,HP.mB={},n.btDefaultCollisionConstructionInfo=HP,HP.prototype.__destroy__=function(){Bm(this.kB)},VP.prototype=Object.create(ZR.prototype),VP.prototype.constructor=VP,VP.prototype.lB=VP,VP.mB={},n.btPersistentManifold=VP,VP.prototype.getBody0=function(){return JR(km(this.kB),lD)},VP.prototype.getBody1=function(){return JR(Cm(this.kB),lD)},VP.prototype.getNumContacts=function(){return Sm(this.kB)},VP.prototype.getContactPoint=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(jm(e,t),$D)},VP.prototype.__destroy__=function(){vm(this.kB)},EP.prototype=Object.create(AD.prototype),EP.prototype.constructor=EP,EP.prototype.lB=EP,EP.mB={},n.btCollisionDispatcher=EP,EP.prototype.getNumManifolds=function(){return Rm(this.kB)},EP.prototype.getManifoldByIndexInternal=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Dm(e,t),VP)},EP.prototype.__destroy__=function(){Pm(this.kB)},NP.prototype=Object.create(ZR.prototype),NP.prototype.constructor=NP,NP.prototype.lB=NP,NP.mB={},n.btOverlappingPairCallback=NP,NP.prototype.__destroy__=function(){Tm(this.kB)},UP.prototype=Object.create(ZR.prototype),UP.prototype.constructor=UP,UP.prototype.lB=UP,UP.mB={},n.btOverlappingPairCache=UP,UP.prototype.setInternalGhostPairCallback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Om(e,t)},UP.prototype.getNumOverlappingPairs=function(){return Wm(this.kB)},UP.prototype.__destroy__=function(){Am(this.kB)},zP.prototype=Object.create(ZR.prototype),zP.prototype.constructor=zP,zP.prototype.lB=zP,zP.mB={},n.btAxisSweep3=zP,zP.prototype.__destroy__=function(){Gm(this.kB)},qP.prototype=Object.create(ZR.prototype),qP.prototype.constructor=qP,qP.prototype.lB=qP,qP.mB={},n.btBroadphaseInterface=qP,qP.prototype.getOverlappingPairCache=function(){return JR(wm(this.kB),UP)},qP.prototype.__destroy__=function(){Hm(this.kB)},KP.prototype=Object.create(ZR.prototype),KP.prototype.constructor=KP,KP.prototype.lB=KP,KP.mB={},n.btCollisionConfiguration=KP,KP.prototype.__destroy__=function(){Vm(this.kB)},QP.prototype=Object.create(ZR.prototype),QP.prototype.constructor=QP,QP.prototype.lB=QP,QP.mB={},n.btDbvtBroadphase=QP,QP.prototype.__destroy__=function(){Nm(this.kB)},XP.prototype=Object.create(ZR.prototype),XP.prototype.constructor=XP,XP.prototype.lB=XP,XP.mB={},n.btBroadphaseProxy=XP,XP.prototype.get_m_collisionFilterGroup=XP.prototype.nB=function(){return Um(this.kB)},XP.prototype.set_m_collisionFilterGroup=XP.prototype.pB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),zm(e,t)},Object.defineProperty(XP.prototype,"m_collisionFilterGroup",{get:XP.prototype.nB,set:XP.prototype.pB}),XP.prototype.get_m_collisionFilterMask=XP.prototype.oB=function(){return qm(this.kB)},XP.prototype.set_m_collisionFilterMask=XP.prototype.qB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Km(e,t)},Object.defineProperty(XP.prototype,"m_collisionFilterMask",{get:XP.prototype.oB,set:XP.prototype.qB}),XP.prototype.__destroy__=function(){Qm(this.kB)},ZP.prototype=Object.create(ZR.prototype),ZP.prototype.constructor=ZP,ZP.prototype.lB=ZP,ZP.mB={},n.btRigidBodyConstructionInfo=ZP,ZP.prototype.get_m_linearDamping=ZP.prototype.DD=function(){return Ym(this.kB)},ZP.prototype.set_m_linearDamping=ZP.prototype.uG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jm(e,t)},Object.defineProperty(ZP.prototype,"m_linearDamping",{get:ZP.prototype.DD,set:ZP.prototype.uG}),ZP.prototype.get_m_angularDamping=ZP.prototype.HC=function(){return $m(this.kB)},ZP.prototype.set_m_angularDamping=ZP.prototype.yF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ty(e,t)},Object.defineProperty(ZP.prototype,"m_angularDamping",{get:ZP.prototype.HC,set:ZP.prototype.yF}),ZP.prototype.get_m_friction=ZP.prototype.kD=function(){return ey(this.kB)},ZP.prototype.set_m_friction=ZP.prototype.bG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ny(e,t)},Object.defineProperty(ZP.prototype,"m_friction",{get:ZP.prototype.kD,set:ZP.prototype.bG}),ZP.prototype.get_m_rollingFriction=ZP.prototype.dE=function(){return oy(this.kB)},ZP.prototype.set_m_rollingFriction=ZP.prototype.WG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_y(e,t)},Object.defineProperty(ZP.prototype,"m_rollingFriction",{get:ZP.prototype.dE,set:ZP.prototype.WG}),ZP.prototype.get_m_restitution=ZP.prototype.bE=function(){return iy(this.kB)},ZP.prototype.set_m_restitution=ZP.prototype.UG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ry(e,t)},Object.defineProperty(ZP.prototype,"m_restitution",{get:ZP.prototype.bE,set:ZP.prototype.UG}),ZP.prototype.get_m_linearSleepingThreshold=ZP.prototype.ED=function(){return py(this.kB)},ZP.prototype.set_m_linearSleepingThreshold=ZP.prototype.vG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),sy(e,t)},Object.defineProperty(ZP.prototype,"m_linearSleepingThreshold",{get:ZP.prototype.ED,set:ZP.prototype.vG}),ZP.prototype.get_m_angularSleepingThreshold=ZP.prototype.IC=function(){return cy(this.kB)},ZP.prototype.set_m_angularSleepingThreshold=ZP.prototype.zF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ay(e,t)},Object.defineProperty(ZP.prototype,"m_angularSleepingThreshold",{get:ZP.prototype.IC,set:ZP.prototype.zF}),ZP.prototype.get_m_additionalDamping=ZP.prototype.CC=function(){return!!ly(this.kB)},ZP.prototype.set_m_additionalDamping=ZP.prototype.tF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uy(e,t)},Object.defineProperty(ZP.prototype,"m_additionalDamping",{get:ZP.prototype.CC,set:ZP.prototype.tF}),ZP.prototype.get_m_additionalDampingFactor=ZP.prototype.DC=function(){return by(this.kB)},ZP.prototype.set_m_additionalDampingFactor=ZP.prototype.uF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),my(e,t)},Object.defineProperty(ZP.prototype,"m_additionalDampingFactor",{get:ZP.prototype.DC,set:ZP.prototype.uF}),ZP.prototype.get_m_additionalLinearDampingThresholdSqr=ZP.prototype.EC=function(){return yy(this.kB)},ZP.prototype.set_m_additionalLinearDampingThresholdSqr=ZP.prototype.vF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),dy(e,t)},Object.defineProperty(ZP.prototype,"m_additionalLinearDampingThresholdSqr",{get:ZP.prototype.EC,set:ZP.prototype.vF}),ZP.prototype.get_m_additionalAngularDampingThresholdSqr=ZP.prototype.BC=function(){return fy(this.kB)},ZP.prototype.set_m_additionalAngularDampingThresholdSqr=ZP.prototype.sF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hy(e,t)},Object.defineProperty(ZP.prototype,"m_additionalAngularDampingThresholdSqr",{get:ZP.prototype.BC,set:ZP.prototype.sF}),ZP.prototype.get_m_additionalAngularDampingFactor=ZP.prototype.AC=function(){return By(this.kB)},ZP.prototype.set_m_additionalAngularDampingFactor=ZP.prototype.rF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),gy(e,t)},Object.defineProperty(ZP.prototype,"m_additionalAngularDampingFactor",{get:ZP.prototype.AC,set:ZP.prototype.rF}),ZP.prototype.__destroy__=function(){ky(this.kB)},YP.prototype=Object.create(lD.prototype),YP.prototype.constructor=YP,YP.prototype.lB=YP,YP.mB={},n.btRigidBody=YP,YP.prototype.getCenterOfMassTransform=function(){return JR(Sy(this.kB),zD)},YP.prototype.setCenterOfMassTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),jy(e,t)},YP.prototype.setSleepingThresholds=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),vy(n,t,e)},YP.prototype.getLinearDamping=function(){return Iy(this.kB)},YP.prototype.getAngularDamping=function(){return Ry(this.kB)},YP.prototype.setDamping=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Dy(n,t,e)},YP.prototype.setMassProps=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Py(n,t,e)},YP.prototype.getLinearFactor=function(){return JR(Ty(this.kB),fD)},YP.prototype.setLinearFactor=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Oy(e,t)},YP.prototype.applyTorque=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Wy(e,t)},YP.prototype.applyLocalTorque=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ay(e,t)},YP.prototype.applyForce=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),My(n,t,e)},YP.prototype.applyCentralForce=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),xy(e,t)},YP.prototype.applyCentralLocalForce=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Fy(e,t)},YP.prototype.applyTorqueImpulse=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ly(e,t)},YP.prototype.applyImpulse=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Gy(n,t,e)},YP.prototype.applyCentralImpulse=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),wy(e,t)},YP.prototype.updateInertiaTensor=function(){Hy(this.kB)},YP.prototype.getLinearVelocity=function(){return JR(Vy(this.kB),fD)},YP.prototype.getAngularVelocity=function(){return JR(Ey(this.kB),fD)},YP.prototype.setLinearVelocity=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ny(e,t)},YP.prototype.setAngularVelocity=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Uy(e,t)},YP.prototype.getMotionState=function(){return JR(zy(this.kB),BD)},YP.prototype.setMotionState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qy(e,t)},YP.prototype.getAngularFactor=function(){return JR(Ky(this.kB),fD)},YP.prototype.setAngularFactor=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qy(e,t)},YP.prototype.upcast=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Xy(e,t),YP)},YP.prototype.getAabb=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Zy(n,t,e)},YP.prototype.applyGravity=function(){Yy(this.kB)},YP.prototype.getGravity=function(){return JR(Jy(this.kB),fD)},YP.prototype.setGravity=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),$y(e,t)},YP.prototype.getBroadphaseProxy=function(){return JR(td(this.kB),XP)},YP.prototype.clearForces=function(){ed(this.kB)},YP.prototype.setFlags=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),nd(e,t)},YP.prototype.getFlags=function(){return od(this.kB)},YP.prototype.setAnisotropicFriction=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),_d(n,t,e)},YP.prototype.getCollisionShape=function(){return JR(id(this.kB),cD)},YP.prototype.setContactProcessingThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rd(e,t)},YP.prototype.setActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),pd(e,t)},YP.prototype.forceActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),sd(e,t)},YP.prototype.activate=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),void 0===t?cd(e):ad(e,t)},YP.prototype.isActive=function(){return!!ld(this.kB)},YP.prototype.isKinematicObject=function(){return!!ud(this.kB)},YP.prototype.isStaticObject=function(){return!!bd(this.kB)},YP.prototype.isStaticOrKinematicObject=function(){return!!md(this.kB)},YP.prototype.getRestitution=function(){return yd(this.kB)},YP.prototype.getFriction=function(){return dd(this.kB)},YP.prototype.getRollingFriction=function(){return fd(this.kB)},YP.prototype.setRestitution=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hd(e,t)},YP.prototype.setFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bd(e,t)},YP.prototype.setRollingFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),gd(e,t)},YP.prototype.getWorldTransform=function(){return JR(kd(this.kB),zD)},YP.prototype.getCollisionFlags=function(){return Cd(this.kB)},YP.prototype.setCollisionFlags=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Sd(e,t)},YP.prototype.setWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),jd(e,t)},YP.prototype.setCollisionShape=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),vd(e,t)},YP.prototype.setCcdMotionThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Id(e,t)},YP.prototype.setCcdSweptSphereRadius=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Rd(e,t)},YP.prototype.getUserIndex=function(){return Dd(this.kB)},YP.prototype.setUserIndex=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Pd(e,t)},YP.prototype.getUserPointer=function(){return JR(Td(this.kB),HD)},YP.prototype.setUserPointer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Od(e,t)},YP.prototype.getBroadphaseHandle=function(){return JR(Wd(this.kB),XP)},YP.prototype.__destroy__=function(){Ad(this.kB)},JP.prototype=Object.create(ZR.prototype),JP.prototype.constructor=JP,JP.prototype.lB=JP,JP.mB={},n.btConstraintSetting=JP,JP.prototype.get_m_tau=JP.prototype.sE=function(){return xd(this.kB)},JP.prototype.set_m_tau=JP.prototype.kH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Fd(e,t)},Object.defineProperty(JP.prototype,"m_tau",{get:JP.prototype.sE,set:JP.prototype.kH}),JP.prototype.get_m_damping=JP.prototype.aD=function(){return Ld(this.kB)},JP.prototype.set_m_damping=JP.prototype.SF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gd(e,t)},Object.defineProperty(JP.prototype,"m_damping",{get:JP.prototype.aD,set:JP.prototype.SF}),JP.prototype.get_m_impulseClamp=JP.prototype.wD=function(){return wd(this.kB)},JP.prototype.set_m_impulseClamp=JP.prototype.nG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Hd(e,t)},Object.defineProperty(JP.prototype,"m_impulseClamp",{get:JP.prototype.wD,set:JP.prototype.nG}),JP.prototype.__destroy__=function(){Vd(this.kB)},$P.prototype=Object.create(mD.prototype),$P.prototype.constructor=$P,$P.prototype.lB=$P,$P.mB={},n.btPoint2PointConstraint=$P,$P.prototype.setPivotA=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ud(e,t)},$P.prototype.setPivotB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),zd(e,t)},$P.prototype.getPivotInA=function(){return JR(qd(this.kB),fD)},$P.prototype.getPivotInB=function(){return JR(Kd(this.kB),fD)},$P.prototype.enableFeedback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qd(e,t)},$P.prototype.getBreakingImpulseThreshold=function(){return Xd(this.kB)},$P.prototype.setBreakingImpulseThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Zd(e,t)},$P.prototype.getParam=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Yd(n,t,e)},$P.prototype.setParam=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Jd(o,t,e,n)},$P.prototype.get_m_setting=$P.prototype.fE=function(){return JR($d(this.kB),JP)},$P.prototype.set_m_setting=$P.prototype.YG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),tf(e,t)},Object.defineProperty($P.prototype,"m_setting",{get:$P.prototype.fE,set:$P.prototype.YG}),$P.prototype.__destroy__=function(){ef(this.kB)},tT.prototype=Object.create(MD.prototype),tT.prototype.constructor=tT,tT.prototype.lB=tT,tT.mB={},n.btGeneric6DofSpringConstraint=tT,tT.prototype.enableSpring=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),_f(n,t,e)},tT.prototype.setStiffness=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),rf(n,t,e)},tT.prototype.setDamping=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),pf(n,t,e)},tT.prototype.setEquilibriumPoint=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),void 0===t?sf(n):void 0===e?cf(n,t):af(n,t,e)},tT.prototype.setLinearLowerLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lf(e,t)},tT.prototype.setLinearUpperLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uf(e,t)},tT.prototype.setAngularLowerLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bf(e,t)},tT.prototype.setAngularUpperLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mf(e,t)},tT.prototype.getFrameOffsetA=function(){return JR(yf(this.kB),zD)},tT.prototype.enableFeedback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),df(e,t)},tT.prototype.getBreakingImpulseThreshold=function(){return ff(this.kB)},tT.prototype.setBreakingImpulseThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hf(e,t)},tT.prototype.getParam=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Bf(n,t,e)},tT.prototype.setParam=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),gf(o,t,e,n)},tT.prototype.__destroy__=function(){kf(this.kB)},eT.prototype=Object.create(ZR.prototype),eT.prototype.constructor=eT,eT.prototype.lB=eT,eT.mB={},n.btSequentialImpulseConstraintSolver=eT,eT.prototype.__destroy__=function(){Sf(this.kB)},nT.prototype=Object.create(mD.prototype),nT.prototype.constructor=nT,nT.prototype.lB=nT,nT.mB={},n.btConeTwistConstraint=nT,nT.prototype.setLimit=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),If(n,t,e)},nT.prototype.setAngularOnly=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Rf(e,t)},nT.prototype.setDamping=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Df(e,t)},nT.prototype.enableMotor=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Pf(e,t)},nT.prototype.setMaxMotorImpulse=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Tf(e,t)},nT.prototype.setMaxMotorImpulseNormalized=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Of(e,t)},nT.prototype.setMotorTarget=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Wf(e,t)},nT.prototype.setMotorTargetInConstraintSpace=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Af(e,t)},nT.prototype.enableFeedback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Mf(e,t)},nT.prototype.getBreakingImpulseThreshold=function(){return xf(this.kB)},nT.prototype.setBreakingImpulseThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ff(e,t)},nT.prototype.getParam=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Lf(n,t,e)},nT.prototype.setParam=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Gf(o,t,e,n)},nT.prototype.__destroy__=function(){wf(this.kB)},oT.prototype=Object.create(mD.prototype),oT.prototype.constructor=oT,oT.prototype.lB=oT,oT.mB={},n.btHingeConstraint=oT,oT.prototype.getHingeAngle=function(){return qf(this.kB)},oT.prototype.setLimit=function(t,e,n,o,_){var i=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),void 0===_?Kf(i,t,e,n,o):Qf(i,t,e,n,o,_)},oT.prototype.enableAngularMotor=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Xf(o,t,e,n)},oT.prototype.setAngularOnly=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Zf(e,t)},oT.prototype.enableMotor=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Yf(e,t)},oT.prototype.setMaxMotorImpulse=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jf(e,t)},oT.prototype.setMotorTarget=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),$f(n,t,e)},oT.prototype.enableFeedback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),th(e,t)},oT.prototype.getBreakingImpulseThreshold=function(){return eh(this.kB)},oT.prototype.setBreakingImpulseThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),nh(e,t)},oT.prototype.getParam=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),oh(n,t,e)},oT.prototype.setParam=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),_h(o,t,e,n)},oT.prototype.__destroy__=function(){ih(this.kB)},_T.prototype=Object.create(mD.prototype),_T.prototype.constructor=_T,_T.prototype.lB=_T,_T.mB={},n.btSliderConstraint=_T,_T.prototype.getLinearPos=function(){return sh(this.kB)},_T.prototype.getAngularPos=function(){return ch(this.kB)},_T.prototype.setLowerLinLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ah(e,t)},_T.prototype.setUpperLinLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lh(e,t)},_T.prototype.setLowerAngLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uh(e,t)},_T.prototype.setUpperAngLimit=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bh(e,t)},_T.prototype.setPoweredLinMotor=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mh(e,t)},_T.prototype.setMaxLinMotorForce=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),yh(e,t)},_T.prototype.setTargetLinMotorVelocity=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),dh(e,t)},_T.prototype.enableFeedback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),fh(e,t)},_T.prototype.getBreakingImpulseThreshold=function(){return hh(this.kB)},_T.prototype.setBreakingImpulseThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bh(e,t)},_T.prototype.getParam=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),gh(n,t,e)},_T.prototype.setParam=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),kh(o,t,e,n)},_T.prototype.__destroy__=function(){Ch(this.kB)},iT.prototype=Object.create(mD.prototype),iT.prototype.constructor=iT,iT.prototype.lB=iT,iT.mB={},n.btFixedConstraint=iT,iT.prototype.enableFeedback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),jh(e,t)},iT.prototype.getBreakingImpulseThreshold=function(){return vh(this.kB)},iT.prototype.setBreakingImpulseThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ih(e,t)},iT.prototype.getParam=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Rh(n,t,e)},iT.prototype.setParam=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Dh(o,t,e,n)},iT.prototype.__destroy__=function(){Ph(this.kB)},rT.prototype=Object.create(ZR.prototype),rT.prototype.constructor=rT,rT.prototype.lB=rT,rT.mB={},n.btConstraintSolver=rT,rT.prototype.__destroy__=function(){Th(this.kB)},pT.prototype=Object.create(ZR.prototype),pT.prototype.constructor=pT,pT.prototype.lB=pT,pT.mB={},n.btDispatcherInfo=pT,pT.prototype.get_m_timeStep=pT.prototype.uE=function(){return Oh(this.kB)},pT.prototype.set_m_timeStep=pT.prototype.mH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Wh(e,t)},Object.defineProperty(pT.prototype,"m_timeStep",{get:pT.prototype.uE,set:pT.prototype.mH}),pT.prototype.get_m_stepCount=pT.prototype.lE=function(){return Ah(this.kB)},pT.prototype.set_m_stepCount=pT.prototype.dH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Mh(e,t)},Object.defineProperty(pT.prototype,"m_stepCount",{get:pT.prototype.lE,set:pT.prototype.dH}),pT.prototype.get_m_dispatchFunc=pT.prototype.cD=function(){return xh(this.kB)},pT.prototype.set_m_dispatchFunc=pT.prototype.UF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Fh(e,t)},Object.defineProperty(pT.prototype,"m_dispatchFunc",{get:pT.prototype.cD,set:pT.prototype.UF}),pT.prototype.get_m_timeOfImpact=pT.prototype.tE=function(){return Lh(this.kB)},pT.prototype.set_m_timeOfImpact=pT.prototype.lH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gh(e,t)},Object.defineProperty(pT.prototype,"m_timeOfImpact",{get:pT.prototype.tE,set:pT.prototype.lH}),pT.prototype.get_m_useContinuous=pT.prototype.wE=function(){return!!wh(this.kB)},pT.prototype.set_m_useContinuous=pT.prototype.oH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Hh(e,t)},Object.defineProperty(pT.prototype,"m_useContinuous",{get:pT.prototype.wE,set:pT.prototype.oH}),pT.prototype.get_m_enableSatConvex=pT.prototype.hD=function(){return!!Vh(this.kB)},pT.prototype.set_m_enableSatConvex=pT.prototype.ZF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Eh(e,t)},Object.defineProperty(pT.prototype,"m_enableSatConvex",{get:pT.prototype.hD,set:pT.prototype.ZF}),pT.prototype.get_m_enableSPU=pT.prototype.gD=function(){return!!Nh(this.kB)},pT.prototype.set_m_enableSPU=pT.prototype.YF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Uh(e,t)},Object.defineProperty(pT.prototype,"m_enableSPU",{get:pT.prototype.gD,set:pT.prototype.YF}),pT.prototype.get_m_useEpa=pT.prototype.yE=function(){return!!zh(this.kB)},pT.prototype.set_m_useEpa=pT.prototype.qH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qh(e,t)},Object.defineProperty(pT.prototype,"m_useEpa",{get:pT.prototype.yE,set:pT.prototype.qH}),pT.prototype.get_m_allowedCcdPenetration=pT.prototype.FC=function(){return Kh(this.kB)},pT.prototype.set_m_allowedCcdPenetration=pT.prototype.wF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qh(e,t)},Object.defineProperty(pT.prototype,"m_allowedCcdPenetration",{get:pT.prototype.FC,set:pT.prototype.wF}),pT.prototype.get_m_useConvexConservativeDistanceUtil=pT.prototype.xE=function(){return!!Xh(this.kB)},pT.prototype.set_m_useConvexConservativeDistanceUtil=pT.prototype.pH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Zh(e,t)},Object.defineProperty(pT.prototype,"m_useConvexConservativeDistanceUtil",{get:pT.prototype.xE,set:pT.prototype.pH}),pT.prototype.get_m_convexConservativeDistanceThreshold=pT.prototype.YC=function(){return Yh(this.kB)},pT.prototype.set_m_convexConservativeDistanceThreshold=pT.prototype.PF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jh(e,t)},Object.defineProperty(pT.prototype,"m_convexConservativeDistanceThreshold",{get:pT.prototype.YC,set:pT.prototype.PF}),pT.prototype.__destroy__=function(){$h(this.kB)},sT.prototype=Object.create(ZR.prototype),sT.prototype.constructor=sT,sT.prototype.lB=sT,sT.mB={},n.btContactSolverInfo=sT,sT.prototype.get_m_splitImpulse=sT.prototype.iE=function(){return!!tB(this.kB)},sT.prototype.set_m_splitImpulse=sT.prototype.aH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),eB(e,t)},Object.defineProperty(sT.prototype,"m_splitImpulse",{get:sT.prototype.iE,set:sT.prototype.aH}),sT.prototype.get_m_splitImpulsePenetrationThreshold=sT.prototype.jE=function(){return nB(this.kB)},sT.prototype.set_m_splitImpulsePenetrationThreshold=sT.prototype.bH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),oB(e,t)},Object.defineProperty(sT.prototype,"m_splitImpulsePenetrationThreshold",{get:sT.prototype.jE,set:sT.prototype.bH}),sT.prototype.get_m_numIterations=sT.prototype.TD=function(){return _B(this.kB)},sT.prototype.set_m_numIterations=sT.prototype.KG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),iB(e,t)},Object.defineProperty(sT.prototype,"m_numIterations",{get:sT.prototype.TD,set:sT.prototype.KG}),sT.prototype.__destroy__=function(){rB(this.kB)},cT.prototype=Object.create(ZR.prototype),cT.prototype.constructor=cT,cT.prototype.lB=cT,cT.mB={},n.btVehicleTuning=cT,cT.prototype.get_m_suspensionStiffness=cT.prototype.BB=function(){return sB(this.kB)},cT.prototype.set_m_suspensionStiffness=cT.prototype.IB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),cB(e,t)},Object.defineProperty(cT.prototype,"m_suspensionStiffness",{get:cT.prototype.BB,set:cT.prototype.IB}),cT.prototype.get_m_suspensionCompression=cT.prototype.mE=function(){return aB(this.kB)},cT.prototype.set_m_suspensionCompression=cT.prototype.eH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lB(e,t)},Object.defineProperty(cT.prototype,"m_suspensionCompression",{get:cT.prototype.mE,set:cT.prototype.eH}),cT.prototype.get_m_suspensionDamping=cT.prototype.nE=function(){return uB(this.kB)},cT.prototype.set_m_suspensionDamping=cT.prototype.fH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bB(e,t)},Object.defineProperty(cT.prototype,"m_suspensionDamping",{get:cT.prototype.nE,set:cT.prototype.fH}),cT.prototype.get_m_maxSuspensionTravelCm=cT.prototype.AB=function(){return mB(this.kB)},cT.prototype.set_m_maxSuspensionTravelCm=cT.prototype.HB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),yB(e,t)},Object.defineProperty(cT.prototype,"m_maxSuspensionTravelCm",{get:cT.prototype.AB,set:cT.prototype.HB}),cT.prototype.get_m_frictionSlip=cT.prototype.wB=function(){return dB(this.kB)},cT.prototype.set_m_frictionSlip=cT.prototype.DB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),fB(e,t)},Object.defineProperty(cT.prototype,"m_frictionSlip",{get:cT.prototype.wB,set:cT.prototype.DB}),cT.prototype.get_m_maxSuspensionForce=cT.prototype.zB=function(){return hB(this.kB)},cT.prototype.set_m_maxSuspensionForce=cT.prototype.GB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),BB(e,t)},Object.defineProperty(cT.prototype,"m_maxSuspensionForce",{get:cT.prototype.zB,set:cT.prototype.GB}),aT.prototype=Object.create(ZR.prototype),aT.prototype.constructor=aT,aT.prototype.lB=aT,aT.mB={},n.btVehicleRaycasterResult=aT,aT.prototype.get_m_hitPointInWorld=aT.prototype.tD=function(){return JR(gB(this.kB),fD)},aT.prototype.set_m_hitPointInWorld=aT.prototype.kG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kB(e,t)},Object.defineProperty(aT.prototype,"m_hitPointInWorld",{get:aT.prototype.tD,set:aT.prototype.kG}),aT.prototype.get_m_hitNormalInWorld=aT.prototype.rD=function(){return JR(CB(this.kB),fD)},aT.prototype.set_m_hitNormalInWorld=aT.prototype.iG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),SB(e,t)},Object.defineProperty(aT.prototype,"m_hitNormalInWorld",{get:aT.prototype.rD,set:aT.prototype.iG}),aT.prototype.get_m_distFraction=aT.prototype.fD=function(){return jB(this.kB)},aT.prototype.set_m_distFraction=aT.prototype.XF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),vB(e,t)},Object.defineProperty(aT.prototype,"m_distFraction",{get:aT.prototype.fD,set:aT.prototype.XF}),aT.prototype.__destroy__=function(){IB(this.kB)},lT.prototype=Object.create(FD.prototype),lT.prototype.constructor=lT,lT.prototype.lB=lT,lT.mB={},n.btDefaultVehicleRaycaster=lT,lT.prototype.castRay=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),DB(o,t,e,n)},lT.prototype.__destroy__=function(){PB(this.kB)},uT.prototype=Object.create(ZR.prototype),uT.prototype.constructor=uT,uT.prototype.lB=uT,uT.mB={},n.RaycastInfo=uT,uT.prototype.get_m_contactNormalWS=uT.prototype.WC=function(){return JR(TB(this.kB),fD)},uT.prototype.set_m_contactNormalWS=uT.prototype.NF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),OB(e,t)},Object.defineProperty(uT.prototype,"m_contactNormalWS",{get:uT.prototype.WC,set:uT.prototype.NF}),uT.prototype.get_m_contactPointWS=uT.prototype.XC=function(){return JR(WB(this.kB),fD)},uT.prototype.set_m_contactPointWS=uT.prototype.OF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),AB(e,t)},Object.defineProperty(uT.prototype,"m_contactPointWS",{get:uT.prototype.XC,set:uT.prototype.OF}),uT.prototype.get_m_suspensionLength=uT.prototype.oE=function(){return MB(this.kB)},uT.prototype.set_m_suspensionLength=uT.prototype.gH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),xB(e,t)},Object.defineProperty(uT.prototype,"m_suspensionLength",{get:uT.prototype.oE,set:uT.prototype.gH}),uT.prototype.get_m_hardPointWS=uT.prototype.oD=function(){return JR(FB(this.kB),fD)},uT.prototype.set_m_hardPointWS=uT.prototype.fG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),LB(e,t)},Object.defineProperty(uT.prototype,"m_hardPointWS",{get:uT.prototype.oD,set:uT.prototype.fG}),uT.prototype.get_m_wheelDirectionWS=uT.prototype.DE=function(){return JR(GB(this.kB),fD)},uT.prototype.set_m_wheelDirectionWS=uT.prototype.vH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),wB(e,t)},Object.defineProperty(uT.prototype,"m_wheelDirectionWS",{get:uT.prototype.DE,set:uT.prototype.vH}),uT.prototype.get_m_wheelAxleWS=uT.prototype.CE=function(){return JR(HB(this.kB),fD)},uT.prototype.set_m_wheelAxleWS=uT.prototype.uH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),VB(e,t)},Object.defineProperty(uT.prototype,"m_wheelAxleWS",{get:uT.prototype.CE,set:uT.prototype.uH}),uT.prototype.get_m_isInContact=uT.prototype.zD=function(){return!!EB(this.kB)},uT.prototype.set_m_isInContact=uT.prototype.qG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),NB(e,t)},Object.defineProperty(uT.prototype,"m_isInContact",{get:uT.prototype.zD,set:uT.prototype.qG}),uT.prototype.get_m_groundObject=uT.prototype.nD=function(){return UB(this.kB)},uT.prototype.set_m_groundObject=uT.prototype.eG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),zB(e,t)},Object.defineProperty(uT.prototype,"m_groundObject",{get:uT.prototype.nD,set:uT.prototype.eG}),uT.prototype.__destroy__=function(){qB(this.kB)},bT.prototype=Object.create(ZR.prototype),bT.prototype.constructor=bT,bT.prototype.lB=bT,bT.mB={},n.btWheelInfoConstructionInfo=bT,bT.prototype.get_m_chassisConnectionCS=bT.prototype.RC=function(){return JR(KB(this.kB),fD)},bT.prototype.set_m_chassisConnectionCS=bT.prototype.IF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),QB(e,t)},Object.defineProperty(bT.prototype,"m_chassisConnectionCS",{get:bT.prototype.RC,set:bT.prototype.IF}),bT.prototype.get_m_wheelDirectionCS=bT.prototype.QB=function(){return JR(XB(this.kB),fD)},bT.prototype.set_m_wheelDirectionCS=bT.prototype.$B=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ZB(e,t)},Object.defineProperty(bT.prototype,"m_wheelDirectionCS",{get:bT.prototype.QB,set:bT.prototype.$B}),bT.prototype.get_m_wheelAxleCS=bT.prototype.PB=function(){return JR(YB(this.kB),fD)},bT.prototype.set_m_wheelAxleCS=bT.prototype.ZB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),JB(e,t)},Object.defineProperty(bT.prototype,"m_wheelAxleCS",{get:bT.prototype.PB,set:bT.prototype.ZB}),bT.prototype.get_m_suspensionRestLength=bT.prototype.qE=function(){return $B(this.kB)},bT.prototype.set_m_suspensionRestLength=bT.prototype.iH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),tg(e,t)},Object.defineProperty(bT.prototype,"m_suspensionRestLength",{get:bT.prototype.qE,set:bT.prototype.iH}),bT.prototype.get_m_maxSuspensionTravelCm=bT.prototype.AB=function(){return eg(this.kB)},bT.prototype.set_m_maxSuspensionTravelCm=bT.prototype.HB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ng(e,t)},Object.defineProperty(bT.prototype,"m_maxSuspensionTravelCm",{get:bT.prototype.AB,set:bT.prototype.HB}),bT.prototype.get_m_wheelRadius=bT.prototype.EE=function(){return og(this.kB)},bT.prototype.set_m_wheelRadius=bT.prototype.wH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_g(e,t)},Object.defineProperty(bT.prototype,"m_wheelRadius",{get:bT.prototype.EE,set:bT.prototype.wH}),bT.prototype.get_m_suspensionStiffness=bT.prototype.BB=function(){return ig(this.kB)},bT.prototype.set_m_suspensionStiffness=bT.prototype.IB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rg(e,t)},Object.defineProperty(bT.prototype,"m_suspensionStiffness",{get:bT.prototype.BB,set:bT.prototype.IB}),bT.prototype.get_m_wheelsDampingCompression=bT.prototype.RB=function(){return pg(this.kB)},bT.prototype.set_m_wheelsDampingCompression=bT.prototype.aC=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),sg(e,t)},Object.defineProperty(bT.prototype,"m_wheelsDampingCompression",{get:bT.prototype.RB,set:bT.prototype.aC}),bT.prototype.get_m_wheelsDampingRelaxation=bT.prototype.SB=function(){return cg(this.kB)},bT.prototype.set_m_wheelsDampingRelaxation=bT.prototype.bC=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ag(e,t)},Object.defineProperty(bT.prototype,"m_wheelsDampingRelaxation",{get:bT.prototype.SB,set:bT.prototype.bC}),bT.prototype.get_m_frictionSlip=bT.prototype.wB=function(){return lg(this.kB)},bT.prototype.set_m_frictionSlip=bT.prototype.DB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ug(e,t)},Object.defineProperty(bT.prototype,"m_frictionSlip",{get:bT.prototype.wB,set:bT.prototype.DB}),bT.prototype.get_m_maxSuspensionForce=bT.prototype.zB=function(){return bg(this.kB)},bT.prototype.set_m_maxSuspensionForce=bT.prototype.GB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mg(e,t)},Object.defineProperty(bT.prototype,"m_maxSuspensionForce",{get:bT.prototype.zB,set:bT.prototype.GB}),bT.prototype.get_m_bIsFrontWheel=bT.prototype.JB=function(){return!!yg(this.kB)},bT.prototype.set_m_bIsFrontWheel=bT.prototype.TB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),dg(e,t)},Object.defineProperty(bT.prototype,"m_bIsFrontWheel",{get:bT.prototype.JB,set:bT.prototype.TB}),bT.prototype.__destroy__=function(){fg(this.kB)},mT.prototype=Object.create(ZR.prototype),mT.prototype.constructor=mT,mT.prototype.lB=mT,mT.mB={},n.btWheelInfo=mT,mT.prototype.getSuspensionRestLength=function(){return Bg(this.kB)},mT.prototype.updateWheel=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),gg(n,t,e)},mT.prototype.get_m_suspensionStiffness=mT.prototype.BB=function(){return kg(this.kB)},mT.prototype.set_m_suspensionStiffness=mT.prototype.IB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Cg(e,t)},Object.defineProperty(mT.prototype,"m_suspensionStiffness",{get:mT.prototype.BB,set:mT.prototype.IB}),mT.prototype.get_m_frictionSlip=mT.prototype.wB=function(){return Sg(this.kB)},mT.prototype.set_m_frictionSlip=mT.prototype.DB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),jg(e,t)},Object.defineProperty(mT.prototype,"m_frictionSlip",{get:mT.prototype.wB,set:mT.prototype.DB}),mT.prototype.get_m_engineForce=mT.prototype.iD=function(){return vg(this.kB)},mT.prototype.set_m_engineForce=mT.prototype.$F=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ig(e,t)},Object.defineProperty(mT.prototype,"m_engineForce",{get:mT.prototype.iD,set:mT.prototype.$F}),mT.prototype.get_m_rollInfluence=mT.prototype.cE=function(){return Rg(this.kB)},mT.prototype.set_m_rollInfluence=mT.prototype.VG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Dg(e,t)},Object.defineProperty(mT.prototype,"m_rollInfluence",{get:mT.prototype.cE,set:mT.prototype.VG}),mT.prototype.get_m_suspensionRestLength1=mT.prototype.rE=function(){return Pg(this.kB)},mT.prototype.set_m_suspensionRestLength1=mT.prototype.jH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Tg(e,t)},Object.defineProperty(mT.prototype,"m_suspensionRestLength1",{get:mT.prototype.rE,set:mT.prototype.jH}),mT.prototype.get_m_wheelsRadius=mT.prototype.FE=function(){return Og(this.kB)},mT.prototype.set_m_wheelsRadius=mT.prototype.xH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Wg(e,t)},Object.defineProperty(mT.prototype,"m_wheelsRadius",{get:mT.prototype.FE,set:mT.prototype.xH}),mT.prototype.get_m_wheelsDampingCompression=mT.prototype.RB=function(){return Ag(this.kB)},mT.prototype.set_m_wheelsDampingCompression=mT.prototype.aC=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Mg(e,t)},Object.defineProperty(mT.prototype,"m_wheelsDampingCompression",{get:mT.prototype.RB,set:mT.prototype.aC}),mT.prototype.get_m_wheelsDampingRelaxation=mT.prototype.SB=function(){return xg(this.kB)},mT.prototype.set_m_wheelsDampingRelaxation=mT.prototype.bC=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Fg(e,t)},Object.defineProperty(mT.prototype,"m_wheelsDampingRelaxation",{get:mT.prototype.SB,set:mT.prototype.bC}),mT.prototype.get_m_steering=mT.prototype.kE=function(){return Lg(this.kB)},mT.prototype.set_m_steering=mT.prototype.cH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gg(e,t)},Object.defineProperty(mT.prototype,"m_steering",{get:mT.prototype.kE,set:mT.prototype.cH}),mT.prototype.get_m_maxSuspensionForce=mT.prototype.zB=function(){return wg(this.kB)},mT.prototype.set_m_maxSuspensionForce=mT.prototype.GB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Hg(e,t)},Object.defineProperty(mT.prototype,"m_maxSuspensionForce",{get:mT.prototype.zB,set:mT.prototype.GB}),mT.prototype.get_m_maxSuspensionTravelCm=mT.prototype.AB=function(){return Vg(this.kB)},mT.prototype.set_m_maxSuspensionTravelCm=mT.prototype.HB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Eg(e,t)},Object.defineProperty(mT.prototype,"m_maxSuspensionTravelCm",{get:mT.prototype.AB,set:mT.prototype.HB}),mT.prototype.get_m_wheelsSuspensionForce=mT.prototype.GE=function(){return Ng(this.kB)},mT.prototype.set_m_wheelsSuspensionForce=mT.prototype.yH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ug(e,t)},Object.defineProperty(mT.prototype,"m_wheelsSuspensionForce",{get:mT.prototype.GE,set:mT.prototype.yH}),mT.prototype.get_m_bIsFrontWheel=mT.prototype.JB=function(){return!!zg(this.kB)},mT.prototype.set_m_bIsFrontWheel=mT.prototype.TB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qg(e,t)},Object.defineProperty(mT.prototype,"m_bIsFrontWheel",{get:mT.prototype.JB,set:mT.prototype.TB}),mT.prototype.get_m_raycastInfo=mT.prototype.aE=function(){return JR(Kg(this.kB),uT)},mT.prototype.set_m_raycastInfo=mT.prototype.TG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qg(e,t)},Object.defineProperty(mT.prototype,"m_raycastInfo",{get:mT.prototype.aE,set:mT.prototype.TG}),mT.prototype.get_m_chassisConnectionPointCS=mT.prototype.SC=function(){return JR(Xg(this.kB),fD)},mT.prototype.set_m_chassisConnectionPointCS=mT.prototype.JF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Zg(e,t)},Object.defineProperty(mT.prototype,"m_chassisConnectionPointCS",{get:mT.prototype.SC,set:mT.prototype.JF}),mT.prototype.get_m_worldTransform=mT.prototype.HE=function(){return JR(Yg(this.kB),zD)},mT.prototype.set_m_worldTransform=mT.prototype.zH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jg(e,t)},Object.defineProperty(mT.prototype,"m_worldTransform",{get:mT.prototype.HE,set:mT.prototype.zH}),mT.prototype.get_m_wheelDirectionCS=mT.prototype.QB=function(){return JR($g(this.kB),fD)},mT.prototype.set_m_wheelDirectionCS=mT.prototype.$B=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),tk(e,t)},Object.defineProperty(mT.prototype,"m_wheelDirectionCS",{get:mT.prototype.QB,set:mT.prototype.$B}),mT.prototype.get_m_wheelAxleCS=mT.prototype.PB=function(){return JR(ek(this.kB),fD)},mT.prototype.set_m_wheelAxleCS=mT.prototype.ZB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),nk(e,t)},Object.defineProperty(mT.prototype,"m_wheelAxleCS",{get:mT.prototype.PB,set:mT.prototype.ZB}),mT.prototype.get_m_rotation=mT.prototype.eE=function(){return ok(this.kB)},mT.prototype.set_m_rotation=mT.prototype.XG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_k(e,t)},Object.defineProperty(mT.prototype,"m_rotation",{get:mT.prototype.eE,set:mT.prototype.XG}),mT.prototype.get_m_deltaRotation=mT.prototype.bD=function(){return ik(this.kB)},mT.prototype.set_m_deltaRotation=mT.prototype.TF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rk(e,t)},Object.defineProperty(mT.prototype,"m_deltaRotation",{get:mT.prototype.bD,set:mT.prototype.TF}),mT.prototype.get_m_brake=mT.prototype.LC=function(){return pk(this.kB)},mT.prototype.set_m_brake=mT.prototype.CF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),sk(e,t)},Object.defineProperty(mT.prototype,"m_brake",{get:mT.prototype.LC,set:mT.prototype.CF}),mT.prototype.get_m_clippedInvContactDotSuspension=mT.prototype.TC=function(){return ck(this.kB)},mT.prototype.set_m_clippedInvContactDotSuspension=mT.prototype.KF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ak(e,t)},Object.defineProperty(mT.prototype,"m_clippedInvContactDotSuspension",{get:mT.prototype.TC,set:mT.prototype.KF}),mT.prototype.get_m_suspensionRelativeVelocity=mT.prototype.pE=function(){return lk(this.kB)},mT.prototype.set_m_suspensionRelativeVelocity=mT.prototype.hH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uk(e,t)},Object.defineProperty(mT.prototype,"m_suspensionRelativeVelocity",{get:mT.prototype.pE,set:mT.prototype.hH}),mT.prototype.get_m_skidInfo=mT.prototype.hE=function(){return bk(this.kB)},mT.prototype.set_m_skidInfo=mT.prototype.$G=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mk(e,t)},Object.defineProperty(mT.prototype,"m_skidInfo",{get:mT.prototype.hE,set:mT.prototype.$G}),mT.prototype.__destroy__=function(){yk(this.kB)},yT.prototype=Object.create(LD.prototype),yT.prototype.constructor=yT,yT.prototype.lB=yT,yT.mB={},n.btKinematicCharacterController=yT,yT.prototype.setUpAxis=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hk(e,t)},yT.prototype.setWalkDirection=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Bk(e,t)},yT.prototype.setVelocityForTimeInterval=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),gk(n,t,e)},yT.prototype.warp=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kk(e,t)},yT.prototype.preStep=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ck(e,t)},yT.prototype.playerStep=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Sk(n,t,e)},yT.prototype.setFallSpeed=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),jk(e,t)},yT.prototype.setJumpSpeed=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),vk(e,t)},yT.prototype.setMaxJumpHeight=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ik(e,t)},yT.prototype.canJump=function(){return!!Rk(this.kB)},yT.prototype.jump=function(){Dk(this.kB)},yT.prototype.setGravity=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Pk(e,t)},yT.prototype.getGravity=function(){return Tk(this.kB)},yT.prototype.setMaxSlope=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ok(e,t)},yT.prototype.getMaxSlope=function(){return Wk(this.kB)},yT.prototype.getGhostObject=function(){return JR(Ak(this.kB),fT)},yT.prototype.setUseGhostSweepTest=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Mk(e,t)},yT.prototype.onGround=function(){return!!xk(this.kB)},yT.prototype.setUpInterpolate=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Fk(e,t)},yT.prototype.updateAction=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Lk(n,t,e)},yT.prototype.__destroy__=function(){Gk(this.kB)},dT.prototype=Object.create(LD.prototype),dT.prototype.constructor=dT,dT.prototype.lB=dT,dT.mB={},n.btRaycastVehicle=dT,dT.prototype.applyEngineForce=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Hk(n,t,e)},dT.prototype.setSteeringValue=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Vk(n,t,e)},dT.prototype.getWheelTransformWS=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Ek(e,t),zD)},dT.prototype.updateWheelTransform=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Nk(n,t,e)},dT.prototype.addWheel=function(t,e,n,o,_,i,r){var p=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),i&&"object"==typeof i&&(i=i.kB),r&&"object"==typeof r&&(r=r.kB),JR(Uk(p,t,e,n,o,_,i,r),mT)},dT.prototype.getNumWheels=function(){return zk(this.kB)},dT.prototype.getRigidBody=function(){return JR(qk(this.kB),YP)},dT.prototype.getWheelInfo=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Kk(e,t),mT)},dT.prototype.setBrake=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Qk(n,t,e)},dT.prototype.setCoordinateSystem=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),Xk(o,t,e,n)},dT.prototype.getCurrentSpeedKmHour=function(){return Zk(this.kB)},dT.prototype.getChassisWorldTransform=function(){return JR(Yk(this.kB),zD)},dT.prototype.rayCast=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),Jk(e,t)},dT.prototype.updateVehicle=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),$k(e,t)},dT.prototype.resetSuspension=function(){tC(this.kB)},dT.prototype.getSteeringValue=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),eC(e,t)},dT.prototype.updateWheelTransformsWS=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),void 0===e?nC(n,t):oC(n,t,e)},dT.prototype.setPitchControl=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_C(e,t)},dT.prototype.updateSuspension=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),iC(e,t)},dT.prototype.updateFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rC(e,t)},dT.prototype.getRightAxis=function(){return pC(this.kB)},dT.prototype.getUpAxis=function(){return sC(this.kB)},dT.prototype.getForwardAxis=function(){return cC(this.kB)},dT.prototype.getForwardVector=function(){return JR(aC(this.kB),fD)},dT.prototype.getUserConstraintType=function(){return lC(this.kB)},dT.prototype.setUserConstraintType=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uC(e,t)},dT.prototype.setUserConstraintId=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bC(e,t)},dT.prototype.getUserConstraintId=function(){return mC(this.kB)},dT.prototype.updateAction=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),yC(n,t,e)},dT.prototype.__destroy__=function(){dC(this.kB)},fT.prototype=Object.create(GD.prototype),fT.prototype.constructor=fT,fT.prototype.lB=fT,fT.mB={},n.btPairCachingGhostObject=fT,fT.prototype.setAnisotropicFriction=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),hC(n,t,e)},fT.prototype.getCollisionShape=function(){return JR(BC(this.kB),cD)},fT.prototype.setContactProcessingThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),gC(e,t)},fT.prototype.setActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kC(e,t)},fT.prototype.forceActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),CC(e,t)},fT.prototype.activate=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),void 0===t?SC(e):jC(e,t)},fT.prototype.isActive=function(){return!!vC(this.kB)},fT.prototype.isKinematicObject=function(){return!!IC(this.kB)},fT.prototype.isStaticObject=function(){return!!RC(this.kB)},fT.prototype.isStaticOrKinematicObject=function(){return!!DC(this.kB)},fT.prototype.getRestitution=function(){return PC(this.kB)},fT.prototype.getFriction=function(){return TC(this.kB)},fT.prototype.getRollingFriction=function(){return OC(this.kB)},fT.prototype.setRestitution=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),WC(e,t)},fT.prototype.setFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),AC(e,t)},fT.prototype.setRollingFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),MC(e,t)},fT.prototype.getWorldTransform=function(){return JR(xC(this.kB),zD)},fT.prototype.getCollisionFlags=function(){return FC(this.kB)},fT.prototype.setCollisionFlags=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),LC(e,t)},fT.prototype.setWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),GC(e,t)},fT.prototype.setCollisionShape=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),wC(e,t)},fT.prototype.setCcdMotionThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),HC(e,t)},fT.prototype.setCcdSweptSphereRadius=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),VC(e,t)},fT.prototype.getUserIndex=function(){return EC(this.kB)},fT.prototype.setUserIndex=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),NC(e,t)},fT.prototype.getUserPointer=function(){return JR(UC(this.kB),HD)},fT.prototype.setUserPointer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),zC(e,t)},fT.prototype.getBroadphaseHandle=function(){return JR(qC(this.kB),XP)},fT.prototype.getNumOverlappingObjects=function(){return KC(this.kB)},fT.prototype.getOverlappingObject=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(QC(e,t),lD)},fT.prototype.__destroy__=function(){XC(this.kB)},hT.prototype=Object.create(ZR.prototype),hT.prototype.constructor=hT,hT.prototype.lB=hT,hT.mB={},n.btGhostPairCallback=hT,hT.prototype.__destroy__=function(){YC(this.kB)},BT.prototype=Object.create(ZR.prototype),BT.prototype.constructor=BT,BT.prototype.lB=BT,BT.mB={},n.btSoftBodyWorldInfo=BT,BT.prototype.get_air_density=BT.prototype.cC=function(){return $C(this.kB)},BT.prototype.set_air_density=BT.prototype.UE=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),tS(e,t)},Object.defineProperty(BT.prototype,"air_density",{get:BT.prototype.cC,set:BT.prototype.UE}),BT.prototype.get_water_density=BT.prototype.RE=function(){return eS(this.kB)},BT.prototype.set_water_density=BT.prototype.JH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),nS(e,t)},Object.defineProperty(BT.prototype,"water_density",{get:BT.prototype.RE,set:BT.prototype.JH}),BT.prototype.get_water_offset=BT.prototype.TE=function(){return oS(this.kB)},BT.prototype.set_water_offset=BT.prototype.LH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_S(e,t)},Object.defineProperty(BT.prototype,"water_offset",{get:BT.prototype.TE,set:BT.prototype.LH}),BT.prototype.get_m_maxDisplacement=BT.prototype.ND=function(){return iS(this.kB)},BT.prototype.set_m_maxDisplacement=BT.prototype.EG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rS(e,t)},Object.defineProperty(BT.prototype,"m_maxDisplacement",{get:BT.prototype.ND,set:BT.prototype.EG}),BT.prototype.get_water_normal=BT.prototype.SE=function(){return JR(pS(this.kB),fD)},BT.prototype.set_water_normal=BT.prototype.KH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),sS(e,t)},Object.defineProperty(BT.prototype,"water_normal",{get:BT.prototype.SE,set:BT.prototype.KH}),BT.prototype.get_m_broadphase=BT.prototype.MC=function(){return JR(cS(this.kB),qP)},BT.prototype.set_m_broadphase=BT.prototype.DF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),aS(e,t)},Object.defineProperty(BT.prototype,"m_broadphase",{get:BT.prototype.MC,set:BT.prototype.DF}),BT.prototype.get_m_dispatcher=BT.prototype.dD=function(){return JR(lS(this.kB),AD)},BT.prototype.set_m_dispatcher=BT.prototype.VF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uS(e,t)},Object.defineProperty(BT.prototype,"m_dispatcher",{get:BT.prototype.dD,set:BT.prototype.VF}),BT.prototype.get_m_gravity=BT.prototype.mD=function(){return JR(bS(this.kB),fD)},BT.prototype.set_m_gravity=BT.prototype.dG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mS(e,t)},Object.defineProperty(BT.prototype,"m_gravity",{get:BT.prototype.mD,set:BT.prototype.dG}),BT.prototype.__destroy__=function(){yS(this.kB)},gT.prototype=Object.create(ZR.prototype),gT.prototype.constructor=gT,gT.prototype.lB=gT,gT.mB={},n.Face=gT,gT.prototype.get_m_n=gT.prototype.MB=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(dS(e,t),CT)},gT.prototype.set_m_n=gT.prototype.WB=function(t,e){var n=this.kB;_D(),t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),fS(n,t,e)},Object.defineProperty(gT.prototype,"m_n",{get:gT.prototype.MB,set:gT.prototype.WB}),gT.prototype.get_m_normal=gT.prototype.RD=function(){return JR(hS(this.kB),fD)},gT.prototype.set_m_normal=gT.prototype.IG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),BS(e,t)},Object.defineProperty(gT.prototype,"m_normal",{get:gT.prototype.RD,set:gT.prototype.IG}),gT.prototype.get_m_ra=gT.prototype.$D=function(){return gS(this.kB)},gT.prototype.set_m_ra=gT.prototype.SG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kS(e,t)},Object.defineProperty(gT.prototype,"m_ra",{get:gT.prototype.$D,set:gT.prototype.SG}),gT.prototype.__destroy__=function(){CS(this.kB)},kT.prototype=Object.create(ZR.prototype),kT.prototype.constructor=kT,kT.prototype.lB=kT,kT.mB={},n.tFaceArray=kT,kT.prototype.size=kT.prototype.size=function(){return SS(this.kB)},kT.prototype.at=kT.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(jS(e,t),gT)},kT.prototype.__destroy__=function(){vS(this.kB)},CT.prototype=Object.create(ZR.prototype),CT.prototype.constructor=CT,CT.prototype.lB=CT,CT.mB={},n.Node=CT,CT.prototype.get_m_x=CT.prototype.IE=function(){return JR(IS(this.kB),fD)},CT.prototype.set_m_x=CT.prototype.AH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),RS(e,t)},Object.defineProperty(CT.prototype,"m_x",{get:CT.prototype.IE,set:CT.prototype.AH}),CT.prototype.get_m_q=CT.prototype.ZD=function(){return JR(DS(this.kB),fD)},CT.prototype.set_m_q=CT.prototype.QG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),PS(e,t)},Object.defineProperty(CT.prototype,"m_q",{get:CT.prototype.ZD,set:CT.prototype.QG}),CT.prototype.get_m_v=CT.prototype.AE=function(){return JR(TS(this.kB),fD)},CT.prototype.set_m_v=CT.prototype.sH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),OS(e,t)},Object.defineProperty(CT.prototype,"m_v",{get:CT.prototype.AE,set:CT.prototype.sH}),CT.prototype.get_m_f=CT.prototype.jD=function(){return JR(WS(this.kB),fD)},CT.prototype.set_m_f=CT.prototype.aG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),AS(e,t)},Object.defineProperty(CT.prototype,"m_f",{get:CT.prototype.jD,set:CT.prototype.aG}),CT.prototype.get_m_n=CT.prototype.MB=function(){return JR(MS(this.kB),fD)},CT.prototype.set_m_n=CT.prototype.WB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),xS(e,t)},Object.defineProperty(CT.prototype,"m_n",{get:CT.prototype.MB,set:CT.prototype.WB}),CT.prototype.get_m_im=CT.prototype.vD=function(){return FS(this.kB)},CT.prototype.set_m_im=CT.prototype.mG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),LS(e,t)},Object.defineProperty(CT.prototype,"m_im",{get:CT.prototype.vD,set:CT.prototype.mG}),CT.prototype.get_m_area=CT.prototype.JC=function(){return GS(this.kB)},CT.prototype.set_m_area=CT.prototype.AF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),wS(e,t)},Object.defineProperty(CT.prototype,"m_area",{get:CT.prototype.JC,set:CT.prototype.AF}),CT.prototype.__destroy__=function(){HS(this.kB)},ST.prototype=Object.create(ZR.prototype),ST.prototype.constructor=ST,ST.prototype.lB=ST,ST.mB={},n.tNodeArray=ST,ST.prototype.size=ST.prototype.size=function(){return VS(this.kB)},ST.prototype.at=ST.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(ES(e,t),CT)},ST.prototype.__destroy__=function(){NS(this.kB)},jT.prototype=Object.create(ZR.prototype),jT.prototype.constructor=jT,jT.prototype.lB=jT,jT.mB={},n.Material=jT,jT.prototype.get_m_kLST=jT.prototype.BD=function(){return US(this.kB)},jT.prototype.set_m_kLST=jT.prototype.sG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),zS(e,t)},Object.defineProperty(jT.prototype,"m_kLST",{get:jT.prototype.BD,set:jT.prototype.sG}),jT.prototype.get_m_kAST=jT.prototype.AD=function(){return qS(this.kB)},jT.prototype.set_m_kAST=jT.prototype.rG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),KS(e,t)},Object.defineProperty(jT.prototype,"m_kAST",{get:jT.prototype.AD,set:jT.prototype.rG}),jT.prototype.get_m_kVST=jT.prototype.CD=function(){return QS(this.kB)},jT.prototype.set_m_kVST=jT.prototype.tG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),XS(e,t)},Object.defineProperty(jT.prototype,"m_kVST",{get:jT.prototype.CD,set:jT.prototype.tG}),jT.prototype.get_m_flags=jT.prototype.tB=function(){return ZS(this.kB)},jT.prototype.set_m_flags=jT.prototype.uB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),YS(e,t)},Object.defineProperty(jT.prototype,"m_flags",{get:jT.prototype.tB,set:jT.prototype.uB}),jT.prototype.__destroy__=function(){JS(this.kB)},vT.prototype=Object.create(ZR.prototype),vT.prototype.constructor=vT,vT.prototype.lB=vT,vT.mB={},n.tMaterialArray=vT,vT.prototype.size=vT.prototype.size=function(){return $S(this.kB)},vT.prototype.at=vT.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(tj(e,t),jT)},vT.prototype.__destroy__=function(){ej(this.kB)},IT.prototype=Object.create(ZR.prototype),IT.prototype.constructor=IT,IT.prototype.lB=IT,IT.mB={},n.Anchor=IT,IT.prototype.get_m_node=IT.prototype.PD=function(){return JR(nj(this.kB),CT)},IT.prototype.set_m_node=IT.prototype.GG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),oj(e,t)},Object.defineProperty(IT.prototype,"m_node",{get:IT.prototype.PD,set:IT.prototype.GG}),IT.prototype.get_m_local=IT.prototype.FD=function(){return JR(_j(this.kB),fD)},IT.prototype.set_m_local=IT.prototype.wG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),ij(e,t)},Object.defineProperty(IT.prototype,"m_local",{get:IT.prototype.FD,set:IT.prototype.wG}),IT.prototype.get_m_body=IT.prototype.KC=function(){return JR(rj(this.kB),YP)},IT.prototype.set_m_body=IT.prototype.BF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),pj(e,t)},Object.defineProperty(IT.prototype,"m_body",{get:IT.prototype.KC,set:IT.prototype.BF}),IT.prototype.get_m_influence=IT.prototype.yD=function(){return sj(this.kB)},IT.prototype.set_m_influence=IT.prototype.pG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),cj(e,t)},Object.defineProperty(IT.prototype,"m_influence",{get:IT.prototype.yD,set:IT.prototype.pG}),IT.prototype.get_m_c0=IT.prototype.NC=function(){return JR(aj(this.kB),UD)},IT.prototype.set_m_c0=IT.prototype.EF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lj(e,t)},Object.defineProperty(IT.prototype,"m_c0",{get:IT.prototype.NC,set:IT.prototype.EF}),IT.prototype.get_m_c1=IT.prototype.OC=function(){return JR(uj(this.kB),fD)},IT.prototype.set_m_c1=IT.prototype.FF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bj(e,t)},Object.defineProperty(IT.prototype,"m_c1",{get:IT.prototype.OC,set:IT.prototype.FF}),IT.prototype.get_m_c2=IT.prototype.PC=function(){return mj(this.kB)},IT.prototype.set_m_c2=IT.prototype.GF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),yj(e,t)},Object.defineProperty(IT.prototype,"m_c2",{get:IT.prototype.PC,set:IT.prototype.GF}),IT.prototype.__destroy__=function(){dj(this.kB)},RT.prototype=Object.create(ZR.prototype),RT.prototype.constructor=RT,RT.prototype.lB=RT,RT.mB={},n.tAnchorArray=RT,RT.prototype.size=RT.prototype.size=function(){return fj(this.kB)},RT.prototype.at=RT.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(hj(e,t),IT)},RT.prototype.clear=RT.prototype.clear=function(){Bj(this.kB)},RT.prototype.push_back=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),gj(e,t)},RT.prototype.pop_back=function(){kj(this.kB)},RT.prototype.__destroy__=function(){Cj(this.kB)},DT.prototype=Object.create(ZR.prototype),DT.prototype.constructor=DT,DT.prototype.lB=DT,DT.mB={},n.Config=DT,DT.prototype.get_kVCF=DT.prototype.zC=function(){return Sj(this.kB)},DT.prototype.set_kVCF=DT.prototype.qF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),jj(e,t)},Object.defineProperty(DT.prototype,"kVCF",{get:DT.prototype.zC,set:DT.prototype.qF}),DT.prototype.get_kDP=DT.prototype.mC=function(){return vj(this.kB)},DT.prototype.set_kDP=DT.prototype.dF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ij(e,t)},Object.defineProperty(DT.prototype,"kDP",{get:DT.prototype.mC,set:DT.prototype.dF}),DT.prototype.get_kDG=DT.prototype.lC=function(){return Rj(this.kB)},DT.prototype.set_kDG=DT.prototype.cF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Dj(e,t)},Object.defineProperty(DT.prototype,"kDG",{get:DT.prototype.lC,set:DT.prototype.cF}),DT.prototype.get_kLF=DT.prototype.oC=function(){return Pj(this.kB)},DT.prototype.set_kLF=DT.prototype.fF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Tj(e,t)},Object.defineProperty(DT.prototype,"kLF",{get:DT.prototype.oC,set:DT.prototype.fF}),DT.prototype.get_kPR=DT.prototype.qC=function(){return Oj(this.kB)},DT.prototype.set_kPR=DT.prototype.hF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Wj(e,t)},Object.defineProperty(DT.prototype,"kPR",{get:DT.prototype.qC,set:DT.prototype.hF}),DT.prototype.get_kVC=DT.prototype.yC=function(){return Aj(this.kB)},DT.prototype.set_kVC=DT.prototype.pF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Mj(e,t)},Object.defineProperty(DT.prototype,"kVC",{get:DT.prototype.yC,set:DT.prototype.pF}),DT.prototype.get_kDF=DT.prototype.kC=function(){return xj(this.kB)},DT.prototype.set_kDF=DT.prototype.bF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Fj(e,t)},Object.defineProperty(DT.prototype,"kDF",{get:DT.prototype.kC,set:DT.prototype.bF}),DT.prototype.get_kMT=DT.prototype.pC=function(){return Lj(this.kB)},DT.prototype.set_kMT=DT.prototype.gF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gj(e,t)},Object.defineProperty(DT.prototype,"kMT",{get:DT.prototype.pC,set:DT.prototype.gF}),DT.prototype.get_kCHR=DT.prototype.jC=function(){return wj(this.kB)},DT.prototype.set_kCHR=DT.prototype.aF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Hj(e,t)},Object.defineProperty(DT.prototype,"kCHR",{get:DT.prototype.jC,set:DT.prototype.aF}),DT.prototype.get_kKHR=DT.prototype.nC=function(){return Vj(this.kB)},DT.prototype.set_kKHR=DT.prototype.eF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Ej(e,t)},Object.defineProperty(DT.prototype,"kKHR",{get:DT.prototype.nC,set:DT.prototype.eF}),DT.prototype.get_kSHR=DT.prototype.rC=function(){return Nj(this.kB)},DT.prototype.set_kSHR=DT.prototype.iF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Uj(e,t)},Object.defineProperty(DT.prototype,"kSHR",{get:DT.prototype.rC,set:DT.prototype.iF}),DT.prototype.get_kAHR=DT.prototype.iC=function(){return zj(this.kB)},DT.prototype.set_kAHR=DT.prototype.$E=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),qj(e,t)},Object.defineProperty(DT.prototype,"kAHR",{get:DT.prototype.iC,set:DT.prototype.$E}),DT.prototype.get_kSRHR_CL=DT.prototype.uC=function(){return Kj(this.kB)},DT.prototype.set_kSRHR_CL=DT.prototype.lF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qj(e,t)},Object.defineProperty(DT.prototype,"kSRHR_CL",{get:DT.prototype.uC,set:DT.prototype.lF}),DT.prototype.get_kSKHR_CL=DT.prototype.sC=function(){return Xj(this.kB)},DT.prototype.set_kSKHR_CL=DT.prototype.jF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Zj(e,t)},Object.defineProperty(DT.prototype,"kSKHR_CL",{get:DT.prototype.sC,set:DT.prototype.jF}),DT.prototype.get_kSSHR_CL=DT.prototype.wC=function(){return Yj(this.kB)},DT.prototype.set_kSSHR_CL=DT.prototype.nF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Jj(e,t)},Object.defineProperty(DT.prototype,"kSSHR_CL",{get:DT.prototype.wC,set:DT.prototype.nF}),DT.prototype.get_kSR_SPLT_CL=DT.prototype.vC=function(){return $j(this.kB)},DT.prototype.set_kSR_SPLT_CL=DT.prototype.mF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),tv(e,t)},Object.defineProperty(DT.prototype,"kSR_SPLT_CL",{get:DT.prototype.vC,set:DT.prototype.mF}),DT.prototype.get_kSK_SPLT_CL=DT.prototype.tC=function(){return ev(this.kB)},DT.prototype.set_kSK_SPLT_CL=DT.prototype.kF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),nv(e,t)},Object.defineProperty(DT.prototype,"kSK_SPLT_CL",{get:DT.prototype.tC,set:DT.prototype.kF}),DT.prototype.get_kSS_SPLT_CL=DT.prototype.xC=function(){return ov(this.kB)},DT.prototype.set_kSS_SPLT_CL=DT.prototype.oF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),_v(e,t)},Object.defineProperty(DT.prototype,"kSS_SPLT_CL",{get:DT.prototype.xC,set:DT.prototype.oF}),DT.prototype.get_maxvolume=DT.prototype.JE=function(){return iv(this.kB)},DT.prototype.set_maxvolume=DT.prototype.BH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rv(e,t)},Object.defineProperty(DT.prototype,"maxvolume",{get:DT.prototype.JE,set:DT.prototype.BH}),DT.prototype.get_timescale=DT.prototype.OE=function(){return pv(this.kB)},DT.prototype.set_timescale=DT.prototype.GH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),sv(e,t)},Object.defineProperty(DT.prototype,"timescale",{get:DT.prototype.OE,set:DT.prototype.GH}),DT.prototype.get_viterations=DT.prototype.QE=function(){return cv(this.kB)},DT.prototype.set_viterations=DT.prototype.IH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),av(e,t)},Object.defineProperty(DT.prototype,"viterations",{get:DT.prototype.QE,set:DT.prototype.IH}),DT.prototype.get_piterations=DT.prototype.ME=function(){return lv(this.kB)},DT.prototype.set_piterations=DT.prototype.EH=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uv(e,t)},Object.defineProperty(DT.prototype,"piterations",{get:DT.prototype.ME,set:DT.prototype.EH}),DT.prototype.get_diterations=DT.prototype.fC=function(){return bv(this.kB)},DT.prototype.set_diterations=DT.prototype.XE=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mv(e,t)},Object.defineProperty(DT.prototype,"diterations",{get:DT.prototype.fC,set:DT.prototype.XE}),DT.prototype.get_citerations=DT.prototype.dC=function(){return yv(this.kB)},DT.prototype.set_citerations=DT.prototype.VE=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),dv(e,t)},Object.defineProperty(DT.prototype,"citerations",{get:DT.prototype.dC,set:DT.prototype.VE}),DT.prototype.get_collisions=DT.prototype.eC=function(){return fv(this.kB)},DT.prototype.set_collisions=DT.prototype.WE=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hv(e,t)},Object.defineProperty(DT.prototype,"collisions",{get:DT.prototype.eC,set:DT.prototype.WE}),DT.prototype.__destroy__=function(){Bv(this.kB)},PT.prototype=Object.create(lD.prototype),PT.prototype.constructor=PT,PT.prototype.lB=PT,PT.mB={},n.btSoftBody=PT,PT.prototype.checkLink=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),!!kv(n,t,e)},PT.prototype.checkFace=function(t,e,n){var o=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),!!Cv(o,t,e,n)},PT.prototype.appendMaterial=function(){return JR(Sv(this.kB),jT)},PT.prototype.appendNode=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),jv(n,t,e)},PT.prototype.appendLink=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),vv(_,t,e,n,o)},PT.prototype.appendFace=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),Iv(_,t,e,n,o)},PT.prototype.appendTetra=function(t,e,n,o,_){var i=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),Rv(i,t,e,n,o,_)},PT.prototype.appendAnchor=function(t,e,n,o){var _=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),Dv(_,t,e,n,o)},PT.prototype.addForce=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),void 0===e?Pv(n,t):Tv(n,t,e)},PT.prototype.addAeroForceToNode=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Ov(n,t,e)},PT.prototype.getTotalMass=function(){return Wv(this.kB)},PT.prototype.setTotalMass=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Av(n,t,e)},PT.prototype.setMass=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Mv(n,t,e)},PT.prototype.transform=PT.prototype.transform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),xv(e,t)},PT.prototype.translate=PT.prototype.translate=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Fv(e,t)},PT.prototype.rotate=PT.prototype.rotate=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Lv(e,t)},PT.prototype.scale=PT.prototype.scale=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Gv(e,t)},PT.prototype.generateClusters=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),void 0===e?wv(n,t):Hv(n,t,e)},PT.prototype.generateBendingConstraints=function(t,e){var n=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),Vv(n,t,e)},PT.prototype.upcast=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(Ev(e,t),PT)},PT.prototype.getRestLengthScale=function(){return Nv(this.kB)},PT.prototype.setRestLengthScale=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Uv(e,t)},PT.prototype.setAnisotropicFriction=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),zv(n,t,e)},PT.prototype.getCollisionShape=function(){return JR(qv(this.kB),cD)},PT.prototype.setContactProcessingThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Kv(e,t)},PT.prototype.setActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Qv(e,t)},PT.prototype.forceActivationState=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),Xv(e,t)},PT.prototype.activate=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),void 0===t?Zv(e):Yv(e,t)},PT.prototype.isActive=function(){return!!Jv(this.kB)},PT.prototype.isKinematicObject=function(){return!!$v(this.kB)},PT.prototype.isStaticObject=function(){return!!tI(this.kB)},PT.prototype.isStaticOrKinematicObject=function(){return!!eI(this.kB)},PT.prototype.getRestitution=function(){return nI(this.kB)},PT.prototype.getFriction=function(){return oI(this.kB)},PT.prototype.getRollingFriction=function(){return _I(this.kB)},PT.prototype.setRestitution=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),iI(e,t)},PT.prototype.setFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),rI(e,t)},PT.prototype.setRollingFriction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),pI(e,t)},PT.prototype.getWorldTransform=function(){return JR(sI(this.kB),zD)},PT.prototype.getCollisionFlags=function(){return cI(this.kB)},PT.prototype.setCollisionFlags=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),aI(e,t)},PT.prototype.setWorldTransform=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lI(e,t)},PT.prototype.setCollisionShape=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),uI(e,t)},PT.prototype.setCcdMotionThreshold=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),bI(e,t)},PT.prototype.setCcdSweptSphereRadius=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mI(e,t)},PT.prototype.getUserIndex=function(){return yI(this.kB)},PT.prototype.setUserIndex=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),dI(e,t)},PT.prototype.getUserPointer=function(){return JR(fI(this.kB),HD)},PT.prototype.setUserPointer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hI(e,t)},PT.prototype.getBroadphaseHandle=function(){return JR(BI(this.kB),XP)},PT.prototype.get_m_cfg=PT.prototype.QC=function(){return JR(gI(this.kB),DT)},PT.prototype.set_m_cfg=PT.prototype.HF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kI(e,t)},Object.defineProperty(PT.prototype,"m_cfg",{get:PT.prototype.QC,set:PT.prototype.HF}),PT.prototype.get_m_nodes=PT.prototype.QD=function(){return JR(CI(this.kB),ST)},PT.prototype.set_m_nodes=PT.prototype.HG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),SI(e,t)},Object.defineProperty(PT.prototype,"m_nodes",{get:PT.prototype.QD,set:PT.prototype.HG}),PT.prototype.get_m_faces=PT.prototype.KB=function(){return JR(jI(this.kB),kT)},PT.prototype.set_m_faces=PT.prototype.UB=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),vI(e,t)},Object.defineProperty(PT.prototype,"m_faces",{get:PT.prototype.KB,set:PT.prototype.UB}),PT.prototype.get_m_materials=PT.prototype.MD=function(){return JR(II(this.kB),vT)},PT.prototype.set_m_materials=PT.prototype.DG=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),RI(e,t)},Object.defineProperty(PT.prototype,"m_materials",{get:PT.prototype.MD,set:PT.prototype.DG}),PT.prototype.get_m_anchors=PT.prototype.GC=function(){return JR(DI(this.kB),RT)},PT.prototype.set_m_anchors=PT.prototype.xF=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),PI(e,t)},Object.defineProperty(PT.prototype,"m_anchors",{get:PT.prototype.GC,set:PT.prototype.xF}),PT.prototype.__destroy__=function(){TI(this.kB)},TT.prototype=Object.create(WD.prototype),TT.prototype.constructor=TT,TT.prototype.lB=TT,TT.mB={},n.btSoftBodyRigidBodyCollisionConfiguration=TT,TT.prototype.__destroy__=function(){AI(this.kB)},OT.prototype=Object.create(wD.prototype),OT.prototype.constructor=OT,OT.prototype.lB=OT,OT.mB={},n.btDefaultSoftBodySolver=OT,OT.prototype.__destroy__=function(){xI(this.kB)},WT.prototype=Object.create(ZR.prototype),WT.prototype.constructor=WT,WT.prototype.lB=WT,WT.mB={},n.btSoftBodyArray=WT,WT.prototype.size=WT.prototype.size=function(){return FI(this.kB)},WT.prototype.at=WT.prototype.at=function(t){var e=this.kB;return t&&"object"==typeof t&&(t=t.kB),JR(LI(e,t),PT)},WT.prototype.__destroy__=function(){GI(this.kB)},AT.prototype=Object.create(xD.prototype),AT.prototype.constructor=AT,AT.prototype.lB=AT,AT.mB={},n.btSoftRigidDynamicsWorld=AT,AT.prototype.addSoftBody=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),HI(o,t,e,n)},AT.prototype.removeSoftBody=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),VI(e,t)},AT.prototype.removeCollisionObject=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),EI(e,t)},AT.prototype.getWorldInfo=function(){return JR(NI(this.kB),BT)},AT.prototype.getSoftBodyArray=function(){return JR(UI(this.kB),WT)},AT.prototype.getDispatcher=function(){return JR(zI(this.kB),AD)},AT.prototype.rayTest=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),qI(o,t,e,n)},AT.prototype.getPairCache=function(){return JR(KI(this.kB),UP)},AT.prototype.getDispatchInfo=function(){return JR(QI(this.kB),pT)},AT.prototype.addCollisionObject=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?XI(o,t):void 0===n?ZI(o,t,e):YI(o,t,e,n)},AT.prototype.getBroadphase=function(){return JR(JI(this.kB),qP)},AT.prototype.convexSweepTest=function(t,e,n,o,_){var i=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),$I(i,t,e,n,o,_)},AT.prototype.contactPairTest=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),tR(o,t,e,n)},AT.prototype.contactTest=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),eR(n,t,e)},AT.prototype.updateSingleAabb=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),nR(e,t)},AT.prototype.setDebugDrawer=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),oR(e,t)},AT.prototype.getDebugDrawer=function(){return JR(_R(this.kB),dD)},AT.prototype.debugDrawWorld=function(){iR(this.kB)},AT.prototype.debugDrawObject=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),rR(o,t,e,n)},AT.prototype.setGravity=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),pR(e,t)},AT.prototype.getGravity=function(){return JR(sR(this.kB),fD)},AT.prototype.addRigidBody=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?cR(o,t):void 0===n?_emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_2(o,t,e):aR(o,t,e,n)},AT.prototype.removeRigidBody=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),lR(e,t)},AT.prototype.addConstraint=function(t,e){var n=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),void 0===e?uR(n,t):bR(n,t,e)},AT.prototype.removeConstraint=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),mR(e,t)},AT.prototype.stepSimulation=function(t,e,n){var o=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?yR(o,t):void 0===n?dR(o,t,e):fR(o,t,e,n)},AT.prototype.setContactAddedCallback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),hR(e,t)},AT.prototype.setContactProcessedCallback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),BR(e,t)},AT.prototype.setContactDestroyedCallback=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),gR(e,t)},AT.prototype.addAction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),kR(e,t)},AT.prototype.removeAction=function(t){var e=this.kB;t&&"object"==typeof t&&(t=t.kB),CR(e,t)},AT.prototype.getSolverInfo=function(){return JR(SR(this.kB),sT)},AT.prototype.setInternalTickCallback=function(t,e,n){var o=this.kB;t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),void 0===e?jR(o,t):void 0===n?vR(o,t,e):IR(o,t,e,n)},AT.prototype.__destroy__=function(){RR(this.kB)},MT.prototype=Object.create(ZR.prototype),MT.prototype.constructor=MT,MT.prototype.lB=MT,MT.mB={},n.btSoftBodyHelpers=MT,MT.prototype.CreateRope=function(t,e,n,o,_){var i=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),JR(PR(i,t,e,n,o,_),PT)},MT.prototype.CreatePatch=function(t,e,n,o,_,i,r,p,s){var c=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),i&&"object"==typeof i&&(i=i.kB),r&&"object"==typeof r&&(r=r.kB),p&&"object"==typeof p&&(p=p.kB),s&&"object"==typeof s&&(s=s.kB),JR(TR(c,t,e,n,o,_,i,r,p,s),PT)},MT.prototype.CreatePatchUV=function(t,e,n,o,_,i,r,p,s,c){var a=this.kB;return _D(),t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),i&&"object"==typeof i&&(i=i.kB),r&&"object"==typeof r&&(r=r.kB),p&&"object"==typeof p&&(p=p.kB),s&&"object"==typeof s&&(s=s.kB),"object"==typeof c&&(c=sD(c)),JR(OR(a,t,e,n,o,_,i,r,p,s,c),PT)},MT.prototype.CreateEllipsoid=function(t,e,n,o){var _=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),JR(WR(_,t,e,n,o),PT)},MT.prototype.CreateFromTriMesh=function(t,e,n,o,_){var i=this.kB;if(_D(),t&&"object"==typeof t&&(t=t.kB),"object"==typeof e&&(e=sD(e)),"object"==typeof n&&"object"==typeof n){var r=iD(n,C);rD(n,C,r),n=r}return o&&"object"==typeof o&&(o=o.kB),_&&"object"==typeof _&&(_=_.kB),JR(AR(i,t,e,n,o,_),PT)},MT.prototype.CreateFromConvexHull=function(t,e,n,o){var _=this.kB;return t&&"object"==typeof t&&(t=t.kB),e&&"object"==typeof e&&(e=e.kB),n&&"object"==typeof n&&(n=n.kB),o&&"object"==typeof o&&(o=o.kB),JR(MR(_,t,e,n,o),PT)},MT.prototype.__destroy__=function(){xR(this.kB)},function(){function t(){n.PHY_FLOAT=FR(),n.PHY_DOUBLE=LR(),n.PHY_INTEGER=GR(),n.PHY_SHORT=wR(),n.PHY_FIXEDPOINT88=HR(),n.PHY_UCHAR=VR(),n.CONST_GIMPACT_COMPOUND_SHAPE=ER(),n.CONST_GIMPACT_TRIMESH_SHAPE_PART=NR(),n.CONST_GIMPACT_TRIMESH_SHAPE=UR(),n.BT_CONSTRAINT_ERP=zR(),n.BT_CONSTRAINT_STOP_ERP=qR(),n.BT_CONSTRAINT_CFM=KR(),n.BT_CONSTRAINT_STOP_CFM=QR()}P?t():R.unshift(t)}(),n.CONTACT_ADDED_CALLBACK_SIGNATURE="iiiiiiii",n.CONTACT_DESTROYED_CALLBACK_SIGNATURE="ii",n.CONTACT_PROCESSED_CALLBACK_SIGNATURE="iiii",n.INTERNAL_TICK_CALLBACK_SIGNATURE="vif",this.Ammo=n,e.ready}})();"object"==typeof exports&&"object"==typeof module?module.exports=Ammo:"function"==typeof define&&define.amd?define([],(function(){return Ammo})):"object"==typeof exports&&(exports.Ammo=Ammo); \ No newline at end of file +var Ammo = (() => { + var t = "undefined" != typeof document && document.currentScript ? document.currentScript.src : void 0; + return "undefined" != typeof __filename && (t = t || __filename), + function(e = {}) { + var n, o, _; + n || (n = void 0 !== e ? e : {}), n.ready = new Promise((function(t, e) { + o = t, _ = e + })); + var i, r, p, s = Object.assign({}, n), + c = "object" == typeof window, + a = "function" == typeof importScripts, + l = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, + u = ""; + if (l) { + var b = require("fs"), + m = require("path"); + u = a ? m.dirname(u) + "/" : __dirname + "/", i = (t, e) => (t = t.startsWith("file://") ? new URL(t) : m.normalize(t), b.readFileSync(t, e ? void 0 : "utf8")), p = t => ((t = i(t, !0)).buffer || (t = new Uint8Array(t)), t), r = (t, e, n) => { + t = t.startsWith("file://") ? new URL(t) : m.normalize(t), b.readFile(t, (function(t, o) { + t ? n(t) : e(o.buffer) + })) + }, 1 < process.argv.length && process.argv[1].replace(/\\/g, "/"), process.argv.slice(2), n.inspect = function() { + return "[Emscripten Module object]" + } + } else(c || a) && (a ? u = self.location.href : "undefined" != typeof document && document.currentScript && (u = document.currentScript.src), t && (u = t), u = 0 !== u.indexOf("blob:") ? u.substr(0, u.replace(/[?#].*/, "").lastIndexOf("/") + 1) : "", i = t => { + var e = new XMLHttpRequest; + return e.open("GET", t, !1), e.send(null), e.responseText + }, a && (p = t => { + var e = new XMLHttpRequest; + return e.open("GET", t, !1), e.responseType = "arraybuffer", e.send(null), new Uint8Array(e.response) + }), r = (t, e, n) => { + var o = new XMLHttpRequest; + o.open("GET", t, !0), o.responseType = "arraybuffer", o.onload = () => { + 200 == o.status || 0 == o.status && o.response ? e(o.response) : n() + }, o.onerror = n, o.send(null) + }); + n.print || console.log.bind(console); + var y, d = n.printErr || console.warn.bind(console); + Object.assign(n, s), s = null, n.wasmBinary && (y = n.wasmBinary); + n.noExitRuntime; + "object" != typeof WebAssembly && x("no native wasm support detected"); + var f = !1, + h = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0; + + function B(t, e) { + if (t) { + var n = k, + o = t + e; + for (e = t; n[e] && !(e >= o);) ++e; + if (16 < e - t && n.buffer && h) t = h.decode(n.subarray(t, e)); + else { + for (o = ""; t < e;) { + var _ = n[t++]; + if (128 & _) { + var i = 63 & n[t++]; + if (192 == (224 & _)) o += String.fromCharCode((31 & _) << 6 | i); + else { + var r = 63 & n[t++]; + 65536 > (_ = 224 == (240 & _) ? (15 & _) << 12 | i << 6 | r : (7 & _) << 18 | i << 12 | r << 6 | 63 & n[t++]) ? o += String.fromCharCode(_) : (_ -= 65536, o += String.fromCharCode(55296 | _ >> 10, 56320 | 1023 & _)) + } + } else o += String.fromCharCode(_) + } + t = o + } + } else t = ""; + return t + } + var g, k, C, S, j, v, I = [], + R = [], + D = [], + P = !1; + + function T() { + var t = n.preRun.shift(); + I.unshift(t) + } + var O, W = 0, + A = null, + M = null; + + function x(t) { + throw n.onAbort && n.onAbort(t), d(t = "Aborted(" + t + ")"), f = !0, t = new WebAssembly.RuntimeError(t + ". Build with -sASSERTIONS for more info."), _(t), t + } + + function F(t) { + return t.startsWith("data:application/octet-stream;base64,") + } + if (!F(O = "lib/ammo.wasm.wasm")) { + var L = O; + O = n.locateFile ? n.locateFile(L, u) : u + L + } + + function G(t) { + try { + if (t == O && y) return new Uint8Array(y); + if (p) return p(t); + throw "both async and sync fetching of the wasm failed" + } catch (t) { + x(t) + } + } + + function w(t, e, n) { + return function(t) { + if (!y && (c || a)) { + if ("function" == typeof fetch && !t.startsWith("file://")) return fetch(t, { + credentials: "same-origin" + }).then((function(e) { + if (!e.ok) throw "failed to load wasm binary file at '" + t + "'"; + return e.arrayBuffer() + })).catch((function() { + return G(t) + })); + if (r) return new Promise((function(e, n) { + r(t, (function(t) { + e(new Uint8Array(t)) + }), n) + })) + } + return Promise.resolve().then((function() { + return G(t) + })) + }(t).then((function(t) { + return WebAssembly.instantiate(t, e) + })).then((function(t) { + return t + })).then(n, (function(t) { + d("failed to asynchronously prepare wasm: " + t), x(t) + })) + } + var H = { + 27338: (t, e, o, _) => { + if (!(t = n.getCache(n.DebugDrawer)[t]).hasOwnProperty("drawLine")) throw "a JSImplementation must implement all functions, you forgot DebugDrawer::drawLine."; + t.drawLine(e, o, _) + }, + 27558: (t, e, o, _, i, r) => { + if (!(t = n.getCache(n.DebugDrawer)[t]).hasOwnProperty("drawContactPoint")) throw "a JSImplementation must implement all functions, you forgot DebugDrawer::drawContactPoint."; + t.drawContactPoint(e, o, _, i, r) + }, + 27808: (t, e) => { + if (!(t = n.getCache(n.DebugDrawer)[t]).hasOwnProperty("reportErrorWarning")) throw "a JSImplementation must implement all functions, you forgot DebugDrawer::reportErrorWarning."; + t.reportErrorWarning(e) + }, + 28052: (t, e, o) => { + if (!(t = n.getCache(n.DebugDrawer)[t]).hasOwnProperty("draw3dText")) throw "a JSImplementation must implement all functions, you forgot DebugDrawer::draw3dText."; + t.draw3dText(e, o) + }, + 28275: (t, e) => { + if (!(t = n.getCache(n.DebugDrawer)[t]).hasOwnProperty("setDebugMode")) throw "a JSImplementation must implement all functions, you forgot DebugDrawer::setDebugMode."; + t.setDebugMode(e) + }, + 28501: t => { + if (!(t = n.getCache(n.DebugDrawer)[t]).hasOwnProperty("getDebugMode")) throw "a JSImplementation must implement all functions, you forgot DebugDrawer::getDebugMode."; + return t.getDebugMode() + }, + 28732: (t, e) => { + if (!(t = n.getCache(n.MotionState)[t]).hasOwnProperty("getWorldTransform")) throw "a JSImplementation must implement all functions, you forgot MotionState::getWorldTransform."; + t.getWorldTransform(e) + }, + 28973: (t, e) => { + if (!(t = n.getCache(n.MotionState)[t]).hasOwnProperty("setWorldTransform")) throw "a JSImplementation must implement all functions, you forgot MotionState::setWorldTransform."; + t.setWorldTransform(e) + }, + 29214: (t, e, o, _, i, r, p, s) => { + if (!(t = n.getCache(n.ConcreteContactResultCallback)[t]).hasOwnProperty("addSingleResult")) throw "a JSImplementation must implement all functions, you forgot ConcreteContactResultCallback::addSingleResult."; + return t.addSingleResult(e, o, _, i, r, p, s) + } + }; + + function V(t) { + for (; 0 < t.length;) t.shift()(n) + } + var E = []; + + function N(t, e, n) { + var o; + for (E.length = 0, n >>= 2; o = k[e++];) n += 105 != o & n, E.push(105 == o ? C[n] : j[n++ >> 1]), ++n; + return H[t].apply(null, E) + } + var U = [], + z = void 0, + q = [], + K = { + b: function() { + x("") + }, + f: function(t, e, n) { + return N(t, e, n) + }, + a: function(t, e, n) { + return N(t, e, n) + }, + d: function() { + return Date.now() + }, + e: function(t, e, n) { + k.copyWithin(t, e, e + n) + }, + c: function() { + x("OOM") + } + }; + ! function() { + function t(t) { + t = t.exports, n.asm = t; + var e = n.asm.g.buffer; + return n.HEAP8 = g = new Int8Array(e), n.HEAP16 = new Int16Array(e), n.HEAP32 = C = new Int32Array(e), n.HEAPU8 = k = new Uint8Array(e), n.HEAPU16 = new Uint16Array(e), n.HEAPU32 = new Uint32Array(e), n.HEAPF32 = S = new Float32Array(e), n.HEAPF64 = j = new Float64Array(e), v = n.asm.iB, R.unshift(n.asm.h), W--, n.monitorRunDependencies && n.monitorRunDependencies(W), 0 == W && (null !== A && (clearInterval(A), A = null), M && (e = M, M = null, e())), t + } + var e = { + a: K + }; + if (W++, n.monitorRunDependencies && n.monitorRunDependencies(W), n.instantiateWasm) try { + return n.instantiateWasm(e, t) + } catch (t) { + d("Module.instantiateWasm callback failed with error: " + t), _(t) + }(function(t, e) { + var n = O; + return y || "function" != typeof WebAssembly.instantiateStreaming || F(n) || n.startsWith("file://") || l || "function" != typeof fetch ? w(n, t, e) : fetch(n, { + credentials: "same-origin" + }).then((function(o) { + return WebAssembly.instantiateStreaming(o, t).then(e, (function(o) { + return d("wasm streaming compile failed: " + o), d("falling back to ArrayBuffer instantiation"), w(n, t, e) + })) + })) + })(e, (function(e) { + t(e.instance) + })).catch(_) + }(); + var Q, X = n._emscripten_bind_btCollisionShape_setLocalScaling_1 = function() { + return (X = n._emscripten_bind_btCollisionShape_setLocalScaling_1 = n.asm.i).apply(null, arguments) + }, + Z = n._emscripten_bind_btCollisionShape_getLocalScaling_0 = function() { + return (Z = n._emscripten_bind_btCollisionShape_getLocalScaling_0 = n.asm.j).apply(null, arguments) + }, + Y = n._emscripten_bind_btCollisionShape_calculateLocalInertia_2 = function() { + return (Y = n._emscripten_bind_btCollisionShape_calculateLocalInertia_2 = n.asm.k).apply(null, arguments) + }, + J = n._emscripten_bind_btCollisionShape_setMargin_1 = function() { + return (J = n._emscripten_bind_btCollisionShape_setMargin_1 = n.asm.l).apply(null, arguments) + }, + $ = n._emscripten_bind_btCollisionShape_getMargin_0 = function() { + return ($ = n._emscripten_bind_btCollisionShape_getMargin_0 = n.asm.m).apply(null, arguments) + }, + tt = n._emscripten_bind_btCollisionShape___destroy___0 = function() { + return (tt = n._emscripten_bind_btCollisionShape___destroy___0 = n.asm.n).apply(null, arguments) + }, + et = n._emscripten_bind_btCollisionWorld_getDispatcher_0 = function() { + return (et = n._emscripten_bind_btCollisionWorld_getDispatcher_0 = n.asm.o).apply(null, arguments) + }, + nt = n._emscripten_bind_btCollisionWorld_rayTest_3 = function() { + return (nt = n._emscripten_bind_btCollisionWorld_rayTest_3 = n.asm.p).apply(null, arguments) + }, + ot = n._emscripten_bind_btCollisionWorld_getPairCache_0 = function() { + return (ot = n._emscripten_bind_btCollisionWorld_getPairCache_0 = n.asm.q).apply(null, arguments) + }, + _t = n._emscripten_bind_btCollisionWorld_getDispatchInfo_0 = function() { + return (_t = n._emscripten_bind_btCollisionWorld_getDispatchInfo_0 = n.asm.r).apply(null, arguments) + }, + it = n._emscripten_bind_btCollisionWorld_addCollisionObject_1 = function() { + return (it = n._emscripten_bind_btCollisionWorld_addCollisionObject_1 = n.asm.s).apply(null, arguments) + }, + rt = n._emscripten_bind_btCollisionWorld_addCollisionObject_2 = function() { + return (rt = n._emscripten_bind_btCollisionWorld_addCollisionObject_2 = n.asm.t).apply(null, arguments) + }, + pt = n._emscripten_bind_btCollisionWorld_addCollisionObject_3 = function() { + return (pt = n._emscripten_bind_btCollisionWorld_addCollisionObject_3 = n.asm.u).apply(null, arguments) + }, + st = n._emscripten_bind_btCollisionWorld_removeCollisionObject_1 = function() { + return (st = n._emscripten_bind_btCollisionWorld_removeCollisionObject_1 = n.asm.v).apply(null, arguments) + }, + ct = n._emscripten_bind_btCollisionWorld_getBroadphase_0 = function() { + return (ct = n._emscripten_bind_btCollisionWorld_getBroadphase_0 = n.asm.w).apply(null, arguments) + }, + at = n._emscripten_bind_btCollisionWorld_convexSweepTest_5 = function() { + return (at = n._emscripten_bind_btCollisionWorld_convexSweepTest_5 = n.asm.x).apply(null, arguments) + }, + lt = n._emscripten_bind_btCollisionWorld_contactPairTest_3 = function() { + return (lt = n._emscripten_bind_btCollisionWorld_contactPairTest_3 = n.asm.y).apply(null, arguments) + }, + ut = n._emscripten_bind_btCollisionWorld_contactTest_2 = function() { + return (ut = n._emscripten_bind_btCollisionWorld_contactTest_2 = n.asm.z).apply(null, arguments) + }, + bt = n._emscripten_bind_btCollisionWorld_updateSingleAabb_1 = function() { + return (bt = n._emscripten_bind_btCollisionWorld_updateSingleAabb_1 = n.asm.A).apply(null, arguments) + }, + mt = n._emscripten_bind_btCollisionWorld_setDebugDrawer_1 = function() { + return (mt = n._emscripten_bind_btCollisionWorld_setDebugDrawer_1 = n.asm.B).apply(null, arguments) + }, + yt = n._emscripten_bind_btCollisionWorld_getDebugDrawer_0 = function() { + return (yt = n._emscripten_bind_btCollisionWorld_getDebugDrawer_0 = n.asm.C).apply(null, arguments) + }, + dt = n._emscripten_bind_btCollisionWorld_debugDrawWorld_0 = function() { + return (dt = n._emscripten_bind_btCollisionWorld_debugDrawWorld_0 = n.asm.D).apply(null, arguments) + }, + ft = n._emscripten_bind_btCollisionWorld_debugDrawObject_3 = function() { + return (ft = n._emscripten_bind_btCollisionWorld_debugDrawObject_3 = n.asm.E).apply(null, arguments) + }, + ht = n._emscripten_bind_btCollisionWorld___destroy___0 = function() { + return (ht = n._emscripten_bind_btCollisionWorld___destroy___0 = n.asm.F).apply(null, arguments) + }, + Bt = n._emscripten_bind_btCollisionObject_setAnisotropicFriction_2 = function() { + return (Bt = n._emscripten_bind_btCollisionObject_setAnisotropicFriction_2 = n.asm.G).apply(null, arguments) + }, + gt = n._emscripten_bind_btCollisionObject_getCollisionShape_0 = function() { + return (gt = n._emscripten_bind_btCollisionObject_getCollisionShape_0 = n.asm.H).apply(null, arguments) + }, + kt = n._emscripten_bind_btCollisionObject_setContactProcessingThreshold_1 = function() { + return (kt = n._emscripten_bind_btCollisionObject_setContactProcessingThreshold_1 = n.asm.I).apply(null, arguments) + }, + Ct = n._emscripten_bind_btCollisionObject_setActivationState_1 = function() { + return (Ct = n._emscripten_bind_btCollisionObject_setActivationState_1 = n.asm.J).apply(null, arguments) + }, + St = n._emscripten_bind_btCollisionObject_forceActivationState_1 = function() { + return (St = n._emscripten_bind_btCollisionObject_forceActivationState_1 = n.asm.K).apply(null, arguments) + }, + jt = n._emscripten_bind_btCollisionObject_activate_0 = function() { + return (jt = n._emscripten_bind_btCollisionObject_activate_0 = n.asm.L).apply(null, arguments) + }, + vt = n._emscripten_bind_btCollisionObject_activate_1 = function() { + return (vt = n._emscripten_bind_btCollisionObject_activate_1 = n.asm.M).apply(null, arguments) + }, + It = n._emscripten_bind_btCollisionObject_isActive_0 = function() { + return (It = n._emscripten_bind_btCollisionObject_isActive_0 = n.asm.N).apply(null, arguments) + }, + Rt = n._emscripten_bind_btCollisionObject_isKinematicObject_0 = function() { + return (Rt = n._emscripten_bind_btCollisionObject_isKinematicObject_0 = n.asm.O).apply(null, arguments) + }, + Dt = n._emscripten_bind_btCollisionObject_isStaticObject_0 = function() { + return (Dt = n._emscripten_bind_btCollisionObject_isStaticObject_0 = n.asm.P).apply(null, arguments) + }, + Pt = n._emscripten_bind_btCollisionObject_isStaticOrKinematicObject_0 = function() { + return (Pt = n._emscripten_bind_btCollisionObject_isStaticOrKinematicObject_0 = n.asm.Q).apply(null, arguments) + }, + Tt = n._emscripten_bind_btCollisionObject_getRestitution_0 = function() { + return (Tt = n._emscripten_bind_btCollisionObject_getRestitution_0 = n.asm.R).apply(null, arguments) + }, + Ot = n._emscripten_bind_btCollisionObject_getFriction_0 = function() { + return (Ot = n._emscripten_bind_btCollisionObject_getFriction_0 = n.asm.S).apply(null, arguments) + }, + Wt = n._emscripten_bind_btCollisionObject_getRollingFriction_0 = function() { + return (Wt = n._emscripten_bind_btCollisionObject_getRollingFriction_0 = n.asm.T).apply(null, arguments) + }, + At = n._emscripten_bind_btCollisionObject_setRestitution_1 = function() { + return (At = n._emscripten_bind_btCollisionObject_setRestitution_1 = n.asm.U).apply(null, arguments) + }, + Mt = n._emscripten_bind_btCollisionObject_setFriction_1 = function() { + return (Mt = n._emscripten_bind_btCollisionObject_setFriction_1 = n.asm.V).apply(null, arguments) + }, + xt = n._emscripten_bind_btCollisionObject_setRollingFriction_1 = function() { + return (xt = n._emscripten_bind_btCollisionObject_setRollingFriction_1 = n.asm.W).apply(null, arguments) + }, + Ft = n._emscripten_bind_btCollisionObject_getWorldTransform_0 = function() { + return (Ft = n._emscripten_bind_btCollisionObject_getWorldTransform_0 = n.asm.X).apply(null, arguments) + }, + Lt = n._emscripten_bind_btCollisionObject_getCollisionFlags_0 = function() { + return (Lt = n._emscripten_bind_btCollisionObject_getCollisionFlags_0 = n.asm.Y).apply(null, arguments) + }, + Gt = n._emscripten_bind_btCollisionObject_setCollisionFlags_1 = function() { + return (Gt = n._emscripten_bind_btCollisionObject_setCollisionFlags_1 = n.asm.Z).apply(null, arguments) + }, + wt = n._emscripten_bind_btCollisionObject_setWorldTransform_1 = function() { + return (wt = n._emscripten_bind_btCollisionObject_setWorldTransform_1 = n.asm._).apply(null, arguments) + }, + Ht = n._emscripten_bind_btCollisionObject_setCollisionShape_1 = function() { + return (Ht = n._emscripten_bind_btCollisionObject_setCollisionShape_1 = n.asm.$).apply(null, arguments) + }, + Vt = n._emscripten_bind_btCollisionObject_setCcdMotionThreshold_1 = function() { + return (Vt = n._emscripten_bind_btCollisionObject_setCcdMotionThreshold_1 = n.asm.aa).apply(null, arguments) + }, + Et = n._emscripten_bind_btCollisionObject_setCcdSweptSphereRadius_1 = function() { + return (Et = n._emscripten_bind_btCollisionObject_setCcdSweptSphereRadius_1 = n.asm.ba).apply(null, arguments) + }, + Nt = n._emscripten_bind_btCollisionObject_getUserIndex_0 = function() { + return (Nt = n._emscripten_bind_btCollisionObject_getUserIndex_0 = n.asm.ca).apply(null, arguments) + }, + Ut = n._emscripten_bind_btCollisionObject_setUserIndex_1 = function() { + return (Ut = n._emscripten_bind_btCollisionObject_setUserIndex_1 = n.asm.da).apply(null, arguments) + }, + zt = n._emscripten_bind_btCollisionObject_getUserPointer_0 = function() { + return (zt = n._emscripten_bind_btCollisionObject_getUserPointer_0 = n.asm.ea).apply(null, arguments) + }, + qt = n._emscripten_bind_btCollisionObject_setUserPointer_1 = function() { + return (qt = n._emscripten_bind_btCollisionObject_setUserPointer_1 = n.asm.fa).apply(null, arguments) + }, + Kt = n._emscripten_bind_btCollisionObject_getBroadphaseHandle_0 = function() { + return (Kt = n._emscripten_bind_btCollisionObject_getBroadphaseHandle_0 = n.asm.ga).apply(null, arguments) + }, + Qt = n._emscripten_bind_btCollisionObject___destroy___0 = function() { + return (Qt = n._emscripten_bind_btCollisionObject___destroy___0 = n.asm.ha).apply(null, arguments) + }, + Xt = n._emscripten_bind_btConcaveShape_setLocalScaling_1 = function() { + return (Xt = n._emscripten_bind_btConcaveShape_setLocalScaling_1 = n.asm.ia).apply(null, arguments) + }, + Zt = n._emscripten_bind_btConcaveShape_getLocalScaling_0 = function() { + return (Zt = n._emscripten_bind_btConcaveShape_getLocalScaling_0 = n.asm.ja).apply(null, arguments) + }, + Yt = n._emscripten_bind_btConcaveShape_calculateLocalInertia_2 = function() { + return (Yt = n._emscripten_bind_btConcaveShape_calculateLocalInertia_2 = n.asm.ka).apply(null, arguments) + }, + Jt = n._emscripten_bind_btConcaveShape___destroy___0 = function() { + return (Jt = n._emscripten_bind_btConcaveShape___destroy___0 = n.asm.la).apply(null, arguments) + }, + $t = n._emscripten_bind_btCollisionAlgorithm___destroy___0 = function() { + return ($t = n._emscripten_bind_btCollisionAlgorithm___destroy___0 = n.asm.ma).apply(null, arguments) + }, + te = n._emscripten_bind_btTypedConstraint_enableFeedback_1 = function() { + return (te = n._emscripten_bind_btTypedConstraint_enableFeedback_1 = n.asm.na).apply(null, arguments) + }, + ee = n._emscripten_bind_btTypedConstraint_getBreakingImpulseThreshold_0 = function() { + return (ee = n._emscripten_bind_btTypedConstraint_getBreakingImpulseThreshold_0 = n.asm.oa).apply(null, arguments) + }, + ne = n._emscripten_bind_btTypedConstraint_setBreakingImpulseThreshold_1 = function() { + return (ne = n._emscripten_bind_btTypedConstraint_setBreakingImpulseThreshold_1 = n.asm.pa).apply(null, arguments) + }, + oe = n._emscripten_bind_btTypedConstraint_getParam_2 = function() { + return (oe = n._emscripten_bind_btTypedConstraint_getParam_2 = n.asm.qa).apply(null, arguments) + }, + _e = n._emscripten_bind_btTypedConstraint_setParam_3 = function() { + return (_e = n._emscripten_bind_btTypedConstraint_setParam_3 = n.asm.ra).apply(null, arguments) + }, + ie = n._emscripten_bind_btTypedConstraint___destroy___0 = function() { + return (ie = n._emscripten_bind_btTypedConstraint___destroy___0 = n.asm.sa).apply(null, arguments) + }, + re = n._emscripten_bind_btDynamicsWorld_addAction_1 = function() { + return (re = n._emscripten_bind_btDynamicsWorld_addAction_1 = n.asm.ta).apply(null, arguments) + }, + pe = n._emscripten_bind_btDynamicsWorld_removeAction_1 = function() { + return (pe = n._emscripten_bind_btDynamicsWorld_removeAction_1 = n.asm.ua).apply(null, arguments) + }, + se = n._emscripten_bind_btDynamicsWorld_getSolverInfo_0 = function() { + return (se = n._emscripten_bind_btDynamicsWorld_getSolverInfo_0 = n.asm.va).apply(null, arguments) + }, + ce = n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_1 = function() { + return (ce = n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_1 = n.asm.wa).apply(null, arguments) + }, + ae = n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_2 = function() { + return (ae = n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_2 = n.asm.xa).apply(null, arguments) + }, + le = n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_3 = function() { + return (le = n._emscripten_bind_btDynamicsWorld_setInternalTickCallback_3 = n.asm.ya).apply(null, arguments) + }, + ue = n._emscripten_bind_btDynamicsWorld_getDispatcher_0 = function() { + return (ue = n._emscripten_bind_btDynamicsWorld_getDispatcher_0 = n.asm.za).apply(null, arguments) + }, + be = n._emscripten_bind_btDynamicsWorld_rayTest_3 = function() { + return (be = n._emscripten_bind_btDynamicsWorld_rayTest_3 = n.asm.Aa).apply(null, arguments) + }, + me = n._emscripten_bind_btDynamicsWorld_getPairCache_0 = function() { + return (me = n._emscripten_bind_btDynamicsWorld_getPairCache_0 = n.asm.Ba).apply(null, arguments) + }, + ye = n._emscripten_bind_btDynamicsWorld_getDispatchInfo_0 = function() { + return (ye = n._emscripten_bind_btDynamicsWorld_getDispatchInfo_0 = n.asm.Ca).apply(null, arguments) + }, + de = n._emscripten_bind_btDynamicsWorld_addCollisionObject_1 = function() { + return (de = n._emscripten_bind_btDynamicsWorld_addCollisionObject_1 = n.asm.Da).apply(null, arguments) + }, + fe = n._emscripten_bind_btDynamicsWorld_addCollisionObject_2 = function() { + return (fe = n._emscripten_bind_btDynamicsWorld_addCollisionObject_2 = n.asm.Ea).apply(null, arguments) + }, + he = n._emscripten_bind_btDynamicsWorld_addCollisionObject_3 = function() { + return (he = n._emscripten_bind_btDynamicsWorld_addCollisionObject_3 = n.asm.Fa).apply(null, arguments) + }, + Be = n._emscripten_bind_btDynamicsWorld_removeCollisionObject_1 = function() { + return (Be = n._emscripten_bind_btDynamicsWorld_removeCollisionObject_1 = n.asm.Ga).apply(null, arguments) + }, + ge = n._emscripten_bind_btDynamicsWorld_getBroadphase_0 = function() { + return (ge = n._emscripten_bind_btDynamicsWorld_getBroadphase_0 = n.asm.Ha).apply(null, arguments) + }, + ke = n._emscripten_bind_btDynamicsWorld_convexSweepTest_5 = function() { + return (ke = n._emscripten_bind_btDynamicsWorld_convexSweepTest_5 = n.asm.Ia).apply(null, arguments) + }, + Ce = n._emscripten_bind_btDynamicsWorld_contactPairTest_3 = function() { + return (Ce = n._emscripten_bind_btDynamicsWorld_contactPairTest_3 = n.asm.Ja).apply(null, arguments) + }, + Se = n._emscripten_bind_btDynamicsWorld_contactTest_2 = function() { + return (Se = n._emscripten_bind_btDynamicsWorld_contactTest_2 = n.asm.Ka).apply(null, arguments) + }, + je = n._emscripten_bind_btDynamicsWorld_updateSingleAabb_1 = function() { + return (je = n._emscripten_bind_btDynamicsWorld_updateSingleAabb_1 = n.asm.La).apply(null, arguments) + }, + ve = n._emscripten_bind_btDynamicsWorld_setDebugDrawer_1 = function() { + return (ve = n._emscripten_bind_btDynamicsWorld_setDebugDrawer_1 = n.asm.Ma).apply(null, arguments) + }, + Ie = n._emscripten_bind_btDynamicsWorld_getDebugDrawer_0 = function() { + return (Ie = n._emscripten_bind_btDynamicsWorld_getDebugDrawer_0 = n.asm.Na).apply(null, arguments) + }, + Re = n._emscripten_bind_btDynamicsWorld_debugDrawWorld_0 = function() { + return (Re = n._emscripten_bind_btDynamicsWorld_debugDrawWorld_0 = n.asm.Oa).apply(null, arguments) + }, + De = n._emscripten_bind_btDynamicsWorld_debugDrawObject_3 = function() { + return (De = n._emscripten_bind_btDynamicsWorld_debugDrawObject_3 = n.asm.Pa).apply(null, arguments) + }, + Pe = n._emscripten_bind_btDynamicsWorld___destroy___0 = function() { + return (Pe = n._emscripten_bind_btDynamicsWorld___destroy___0 = n.asm.Qa).apply(null, arguments) + }, + Te = n._emscripten_bind_btIDebugDraw_drawLine_3 = function() { + return (Te = n._emscripten_bind_btIDebugDraw_drawLine_3 = n.asm.Ra).apply(null, arguments) + }, + Oe = n._emscripten_bind_btIDebugDraw_drawContactPoint_5 = function() { + return (Oe = n._emscripten_bind_btIDebugDraw_drawContactPoint_5 = n.asm.Sa).apply(null, arguments) + }, + We = n._emscripten_bind_btIDebugDraw_reportErrorWarning_1 = function() { + return (We = n._emscripten_bind_btIDebugDraw_reportErrorWarning_1 = n.asm.Ta).apply(null, arguments) + }, + Ae = n._emscripten_bind_btIDebugDraw_draw3dText_2 = function() { + return (Ae = n._emscripten_bind_btIDebugDraw_draw3dText_2 = n.asm.Ua).apply(null, arguments) + }, + Me = n._emscripten_bind_btIDebugDraw_setDebugMode_1 = function() { + return (Me = n._emscripten_bind_btIDebugDraw_setDebugMode_1 = n.asm.Va).apply(null, arguments) + }, + xe = n._emscripten_bind_btIDebugDraw_getDebugMode_0 = function() { + return (xe = n._emscripten_bind_btIDebugDraw_getDebugMode_0 = n.asm.Wa).apply(null, arguments) + }, + Fe = n._emscripten_bind_btIDebugDraw___destroy___0 = function() { + return (Fe = n._emscripten_bind_btIDebugDraw___destroy___0 = n.asm.Xa).apply(null, arguments) + }, + Le = n._emscripten_bind_btVector3_btVector3_0 = function() { + return (Le = n._emscripten_bind_btVector3_btVector3_0 = n.asm.Ya).apply(null, arguments) + }, + Ge = n._emscripten_bind_btVector3_btVector3_3 = function() { + return (Ge = n._emscripten_bind_btVector3_btVector3_3 = n.asm.Za).apply(null, arguments) + }, + we = n._emscripten_bind_btVector3_length_0 = function() { + return (we = n._emscripten_bind_btVector3_length_0 = n.asm._a).apply(null, arguments) + }, + He = n._emscripten_bind_btVector3_x_0 = function() { + return (He = n._emscripten_bind_btVector3_x_0 = n.asm.$a).apply(null, arguments) + }, + Ve = n._emscripten_bind_btVector3_y_0 = function() { + return (Ve = n._emscripten_bind_btVector3_y_0 = n.asm.ab).apply(null, arguments) + }, + Ee = n._emscripten_bind_btVector3_z_0 = function() { + return (Ee = n._emscripten_bind_btVector3_z_0 = n.asm.bb).apply(null, arguments) + }, + Ne = n._emscripten_bind_btVector3_setX_1 = function() { + return (Ne = n._emscripten_bind_btVector3_setX_1 = n.asm.cb).apply(null, arguments) + }, + Ue = n._emscripten_bind_btVector3_setY_1 = function() { + return (Ue = n._emscripten_bind_btVector3_setY_1 = n.asm.db).apply(null, arguments) + }, + ze = n._emscripten_bind_btVector3_setZ_1 = function() { + return (ze = n._emscripten_bind_btVector3_setZ_1 = n.asm.eb).apply(null, arguments) + }, + qe = n._emscripten_bind_btVector3_setValue_3 = function() { + return (qe = n._emscripten_bind_btVector3_setValue_3 = n.asm.fb).apply(null, arguments) + }, + Ke = n._emscripten_bind_btVector3_normalize_0 = function() { + return (Ke = n._emscripten_bind_btVector3_normalize_0 = n.asm.gb).apply(null, arguments) + }, + Qe = n._emscripten_bind_btVector3_rotate_2 = function() { + return (Qe = n._emscripten_bind_btVector3_rotate_2 = n.asm.hb).apply(null, arguments) + }, + Xe = n._emscripten_bind_btVector3_dot_1 = function() { + return (Xe = n._emscripten_bind_btVector3_dot_1 = n.asm.ib).apply(null, arguments) + }, + Ze = n._emscripten_bind_btVector3_op_mul_1 = function() { + return (Ze = n._emscripten_bind_btVector3_op_mul_1 = n.asm.jb).apply(null, arguments) + }, + Ye = n._emscripten_bind_btVector3_op_add_1 = function() { + return (Ye = n._emscripten_bind_btVector3_op_add_1 = n.asm.kb).apply(null, arguments) + }, + Je = n._emscripten_bind_btVector3_op_sub_1 = function() { + return (Je = n._emscripten_bind_btVector3_op_sub_1 = n.asm.lb).apply(null, arguments) + }, + $e = n._emscripten_bind_btVector3___destroy___0 = function() { + return ($e = n._emscripten_bind_btVector3___destroy___0 = n.asm.mb).apply(null, arguments) + }, + tn = n._emscripten_bind_btQuadWord_x_0 = function() { + return (tn = n._emscripten_bind_btQuadWord_x_0 = n.asm.nb).apply(null, arguments) + }, + en = n._emscripten_bind_btQuadWord_y_0 = function() { + return (en = n._emscripten_bind_btQuadWord_y_0 = n.asm.ob).apply(null, arguments) + }, + nn = n._emscripten_bind_btQuadWord_z_0 = function() { + return (nn = n._emscripten_bind_btQuadWord_z_0 = n.asm.pb).apply(null, arguments) + }, + on = n._emscripten_bind_btQuadWord_w_0 = function() { + return (on = n._emscripten_bind_btQuadWord_w_0 = n.asm.qb).apply(null, arguments) + }, + _n = n._emscripten_bind_btQuadWord_setX_1 = function() { + return (_n = n._emscripten_bind_btQuadWord_setX_1 = n.asm.rb).apply(null, arguments) + }, + rn = n._emscripten_bind_btQuadWord_setY_1 = function() { + return (rn = n._emscripten_bind_btQuadWord_setY_1 = n.asm.sb).apply(null, arguments) + }, + pn = n._emscripten_bind_btQuadWord_setZ_1 = function() { + return (pn = n._emscripten_bind_btQuadWord_setZ_1 = n.asm.tb).apply(null, arguments) + }, + sn = n._emscripten_bind_btQuadWord_setW_1 = function() { + return (sn = n._emscripten_bind_btQuadWord_setW_1 = n.asm.ub).apply(null, arguments) + }, + cn = n._emscripten_bind_btQuadWord___destroy___0 = function() { + return (cn = n._emscripten_bind_btQuadWord___destroy___0 = n.asm.vb).apply(null, arguments) + }, + an = n._emscripten_bind_btMotionState_getWorldTransform_1 = function() { + return (an = n._emscripten_bind_btMotionState_getWorldTransform_1 = n.asm.wb).apply(null, arguments) + }, + ln = n._emscripten_bind_btMotionState_setWorldTransform_1 = function() { + return (ln = n._emscripten_bind_btMotionState_setWorldTransform_1 = n.asm.xb).apply(null, arguments) + }, + un = n._emscripten_bind_btMotionState___destroy___0 = function() { + return (un = n._emscripten_bind_btMotionState___destroy___0 = n.asm.yb).apply(null, arguments) + }, + bn = n._emscripten_bind_RayResultCallback_hasHit_0 = function() { + return (bn = n._emscripten_bind_RayResultCallback_hasHit_0 = n.asm.zb).apply(null, arguments) + }, + mn = n._emscripten_bind_RayResultCallback_get_m_collisionFilterGroup_0 = function() { + return (mn = n._emscripten_bind_RayResultCallback_get_m_collisionFilterGroup_0 = n.asm.Ab).apply(null, arguments) + }, + yn = n._emscripten_bind_RayResultCallback_set_m_collisionFilterGroup_1 = function() { + return (yn = n._emscripten_bind_RayResultCallback_set_m_collisionFilterGroup_1 = n.asm.Bb).apply(null, arguments) + }, + dn = n._emscripten_bind_RayResultCallback_get_m_collisionFilterMask_0 = function() { + return (dn = n._emscripten_bind_RayResultCallback_get_m_collisionFilterMask_0 = n.asm.Cb).apply(null, arguments) + }, + fn = n._emscripten_bind_RayResultCallback_set_m_collisionFilterMask_1 = function() { + return (fn = n._emscripten_bind_RayResultCallback_set_m_collisionFilterMask_1 = n.asm.Db).apply(null, arguments) + }, + hn = n._emscripten_bind_RayResultCallback_get_m_closestHitFraction_0 = function() { + return (hn = n._emscripten_bind_RayResultCallback_get_m_closestHitFraction_0 = n.asm.Eb).apply(null, arguments) + }, + Bn = n._emscripten_bind_RayResultCallback_set_m_closestHitFraction_1 = function() { + return (Bn = n._emscripten_bind_RayResultCallback_set_m_closestHitFraction_1 = n.asm.Fb).apply(null, arguments) + }, + gn = n._emscripten_bind_RayResultCallback_get_m_collisionObject_0 = function() { + return (gn = n._emscripten_bind_RayResultCallback_get_m_collisionObject_0 = n.asm.Gb).apply(null, arguments) + }, + kn = n._emscripten_bind_RayResultCallback_set_m_collisionObject_1 = function() { + return (kn = n._emscripten_bind_RayResultCallback_set_m_collisionObject_1 = n.asm.Hb).apply(null, arguments) + }, + Cn = n._emscripten_bind_RayResultCallback_get_m_flags_0 = function() { + return (Cn = n._emscripten_bind_RayResultCallback_get_m_flags_0 = n.asm.Ib).apply(null, arguments) + }, + Sn = n._emscripten_bind_RayResultCallback_set_m_flags_1 = function() { + return (Sn = n._emscripten_bind_RayResultCallback_set_m_flags_1 = n.asm.Jb).apply(null, arguments) + }, + jn = n._emscripten_bind_RayResultCallback___destroy___0 = function() { + return (jn = n._emscripten_bind_RayResultCallback___destroy___0 = n.asm.Kb).apply(null, arguments) + }, + vn = n._emscripten_bind_ContactResultCallback_addSingleResult_7 = function() { + return (vn = n._emscripten_bind_ContactResultCallback_addSingleResult_7 = n.asm.Lb).apply(null, arguments) + }, + In = n._emscripten_bind_ContactResultCallback___destroy___0 = function() { + return (In = n._emscripten_bind_ContactResultCallback___destroy___0 = n.asm.Mb).apply(null, arguments) + }, + Rn = n._emscripten_bind_ConvexResultCallback_hasHit_0 = function() { + return (Rn = n._emscripten_bind_ConvexResultCallback_hasHit_0 = n.asm.Nb).apply(null, arguments) + }, + Dn = n._emscripten_bind_ConvexResultCallback_get_m_collisionFilterGroup_0 = function() { + return (Dn = n._emscripten_bind_ConvexResultCallback_get_m_collisionFilterGroup_0 = n.asm.Ob).apply(null, arguments) + }, + Pn = n._emscripten_bind_ConvexResultCallback_set_m_collisionFilterGroup_1 = function() { + return (Pn = n._emscripten_bind_ConvexResultCallback_set_m_collisionFilterGroup_1 = n.asm.Pb).apply(null, arguments) + }, + Tn = n._emscripten_bind_ConvexResultCallback_get_m_collisionFilterMask_0 = function() { + return (Tn = n._emscripten_bind_ConvexResultCallback_get_m_collisionFilterMask_0 = n.asm.Qb).apply(null, arguments) + }, + On = n._emscripten_bind_ConvexResultCallback_set_m_collisionFilterMask_1 = function() { + return (On = n._emscripten_bind_ConvexResultCallback_set_m_collisionFilterMask_1 = n.asm.Rb).apply(null, arguments) + }, + Wn = n._emscripten_bind_ConvexResultCallback_get_m_closestHitFraction_0 = function() { + return (Wn = n._emscripten_bind_ConvexResultCallback_get_m_closestHitFraction_0 = n.asm.Sb).apply(null, arguments) + }, + An = n._emscripten_bind_ConvexResultCallback_set_m_closestHitFraction_1 = function() { + return (An = n._emscripten_bind_ConvexResultCallback_set_m_closestHitFraction_1 = n.asm.Tb).apply(null, arguments) + }, + Mn = n._emscripten_bind_ConvexResultCallback___destroy___0 = function() { + return (Mn = n._emscripten_bind_ConvexResultCallback___destroy___0 = n.asm.Ub).apply(null, arguments) + }, + xn = n._emscripten_bind_btConvexShape_setLocalScaling_1 = function() { + return (xn = n._emscripten_bind_btConvexShape_setLocalScaling_1 = n.asm.Vb).apply(null, arguments) + }, + Fn = n._emscripten_bind_btConvexShape_getLocalScaling_0 = function() { + return (Fn = n._emscripten_bind_btConvexShape_getLocalScaling_0 = n.asm.Wb).apply(null, arguments) + }, + Ln = n._emscripten_bind_btConvexShape_calculateLocalInertia_2 = function() { + return (Ln = n._emscripten_bind_btConvexShape_calculateLocalInertia_2 = n.asm.Xb).apply(null, arguments) + }, + Gn = n._emscripten_bind_btConvexShape_setMargin_1 = function() { + return (Gn = n._emscripten_bind_btConvexShape_setMargin_1 = n.asm.Yb).apply(null, arguments) + }, + wn = n._emscripten_bind_btConvexShape_getMargin_0 = function() { + return (wn = n._emscripten_bind_btConvexShape_getMargin_0 = n.asm.Zb).apply(null, arguments) + }, + Hn = n._emscripten_bind_btConvexShape___destroy___0 = function() { + return (Hn = n._emscripten_bind_btConvexShape___destroy___0 = n.asm._b).apply(null, arguments) + }, + Vn = n._emscripten_bind_btCapsuleShape_btCapsuleShape_2 = function() { + return (Vn = n._emscripten_bind_btCapsuleShape_btCapsuleShape_2 = n.asm.$b).apply(null, arguments) + }, + En = n._emscripten_bind_btCapsuleShape_setMargin_1 = function() { + return (En = n._emscripten_bind_btCapsuleShape_setMargin_1 = n.asm.ac).apply(null, arguments) + }, + Nn = n._emscripten_bind_btCapsuleShape_getMargin_0 = function() { + return (Nn = n._emscripten_bind_btCapsuleShape_getMargin_0 = n.asm.bc).apply(null, arguments) + }, + Un = n._emscripten_bind_btCapsuleShape_getUpAxis_0 = function() { + return (Un = n._emscripten_bind_btCapsuleShape_getUpAxis_0 = n.asm.cc).apply(null, arguments) + }, + zn = n._emscripten_bind_btCapsuleShape_getRadius_0 = function() { + return (zn = n._emscripten_bind_btCapsuleShape_getRadius_0 = n.asm.dc).apply(null, arguments) + }, + qn = n._emscripten_bind_btCapsuleShape_getHalfHeight_0 = function() { + return (qn = n._emscripten_bind_btCapsuleShape_getHalfHeight_0 = n.asm.ec).apply(null, arguments) + }, + Kn = n._emscripten_bind_btCapsuleShape_setLocalScaling_1 = function() { + return (Kn = n._emscripten_bind_btCapsuleShape_setLocalScaling_1 = n.asm.fc).apply(null, arguments) + }, + Qn = n._emscripten_bind_btCapsuleShape_getLocalScaling_0 = function() { + return (Qn = n._emscripten_bind_btCapsuleShape_getLocalScaling_0 = n.asm.gc).apply(null, arguments) + }, + Xn = n._emscripten_bind_btCapsuleShape_calculateLocalInertia_2 = function() { + return (Xn = n._emscripten_bind_btCapsuleShape_calculateLocalInertia_2 = n.asm.hc).apply(null, arguments) + }, + Zn = n._emscripten_bind_btCapsuleShape___destroy___0 = function() { + return (Zn = n._emscripten_bind_btCapsuleShape___destroy___0 = n.asm.ic).apply(null, arguments) + }, + Yn = n._emscripten_bind_btCylinderShape_btCylinderShape_1 = function() { + return (Yn = n._emscripten_bind_btCylinderShape_btCylinderShape_1 = n.asm.jc).apply(null, arguments) + }, + Jn = n._emscripten_bind_btCylinderShape_setMargin_1 = function() { + return (Jn = n._emscripten_bind_btCylinderShape_setMargin_1 = n.asm.kc).apply(null, arguments) + }, + $n = n._emscripten_bind_btCylinderShape_getMargin_0 = function() { + return ($n = n._emscripten_bind_btCylinderShape_getMargin_0 = n.asm.lc).apply(null, arguments) + }, + to = n._emscripten_bind_btCylinderShape_setLocalScaling_1 = function() { + return (to = n._emscripten_bind_btCylinderShape_setLocalScaling_1 = n.asm.mc).apply(null, arguments) + }, + eo = n._emscripten_bind_btCylinderShape_getLocalScaling_0 = function() { + return (eo = n._emscripten_bind_btCylinderShape_getLocalScaling_0 = n.asm.nc).apply(null, arguments) + }, + no = n._emscripten_bind_btCylinderShape_calculateLocalInertia_2 = function() { + return (no = n._emscripten_bind_btCylinderShape_calculateLocalInertia_2 = n.asm.oc).apply(null, arguments) + }, + oo = n._emscripten_bind_btCylinderShape___destroy___0 = function() { + return (oo = n._emscripten_bind_btCylinderShape___destroy___0 = n.asm.pc).apply(null, arguments) + }, + _o = n._emscripten_bind_btConeShape_btConeShape_2 = function() { + return (_o = n._emscripten_bind_btConeShape_btConeShape_2 = n.asm.qc).apply(null, arguments) + }, + io = n._emscripten_bind_btConeShape_setLocalScaling_1 = function() { + return (io = n._emscripten_bind_btConeShape_setLocalScaling_1 = n.asm.rc).apply(null, arguments) + }, + ro = n._emscripten_bind_btConeShape_getLocalScaling_0 = function() { + return (ro = n._emscripten_bind_btConeShape_getLocalScaling_0 = n.asm.sc).apply(null, arguments) + }, + po = n._emscripten_bind_btConeShape_calculateLocalInertia_2 = function() { + return (po = n._emscripten_bind_btConeShape_calculateLocalInertia_2 = n.asm.tc).apply(null, arguments) + }, + so = n._emscripten_bind_btConeShape___destroy___0 = function() { + return (so = n._emscripten_bind_btConeShape___destroy___0 = n.asm.uc).apply(null, arguments) + }, + co = n._emscripten_bind_btStridingMeshInterface_setScaling_1 = function() { + return (co = n._emscripten_bind_btStridingMeshInterface_setScaling_1 = n.asm.vc).apply(null, arguments) + }, + ao = n._emscripten_bind_btStridingMeshInterface___destroy___0 = function() { + return (ao = n._emscripten_bind_btStridingMeshInterface___destroy___0 = n.asm.wc).apply(null, arguments) + }, + lo = n._emscripten_bind_btTriangleMeshShape_setLocalScaling_1 = function() { + return (lo = n._emscripten_bind_btTriangleMeshShape_setLocalScaling_1 = n.asm.xc).apply(null, arguments) + }, + uo = n._emscripten_bind_btTriangleMeshShape_getLocalScaling_0 = function() { + return (uo = n._emscripten_bind_btTriangleMeshShape_getLocalScaling_0 = n.asm.yc).apply(null, arguments) + }, + bo = n._emscripten_bind_btTriangleMeshShape_calculateLocalInertia_2 = function() { + return (bo = n._emscripten_bind_btTriangleMeshShape_calculateLocalInertia_2 = n.asm.zc).apply(null, arguments) + }, + mo = n._emscripten_bind_btTriangleMeshShape___destroy___0 = function() { + return (mo = n._emscripten_bind_btTriangleMeshShape___destroy___0 = n.asm.Ac).apply(null, arguments) + }, + yo = n._emscripten_bind_btPrimitiveManagerBase_is_trimesh_0 = function() { + return (yo = n._emscripten_bind_btPrimitiveManagerBase_is_trimesh_0 = n.asm.Bc).apply(null, arguments) + }, + fo = n._emscripten_bind_btPrimitiveManagerBase_get_primitive_count_0 = function() { + return (fo = n._emscripten_bind_btPrimitiveManagerBase_get_primitive_count_0 = n.asm.Cc).apply(null, arguments) + }, + ho = n._emscripten_bind_btPrimitiveManagerBase_get_primitive_box_2 = function() { + return (ho = n._emscripten_bind_btPrimitiveManagerBase_get_primitive_box_2 = n.asm.Dc).apply(null, arguments) + }, + Bo = n._emscripten_bind_btPrimitiveManagerBase_get_primitive_triangle_2 = function() { + return (Bo = n._emscripten_bind_btPrimitiveManagerBase_get_primitive_triangle_2 = n.asm.Ec).apply(null, arguments) + }, + go = n._emscripten_bind_btPrimitiveManagerBase___destroy___0 = function() { + return (go = n._emscripten_bind_btPrimitiveManagerBase___destroy___0 = n.asm.Fc).apply(null, arguments) + }, + ko = n._emscripten_bind_btGImpactShapeInterface_updateBound_0 = function() { + return (ko = n._emscripten_bind_btGImpactShapeInterface_updateBound_0 = n.asm.Gc).apply(null, arguments) + }, + Co = n._emscripten_bind_btGImpactShapeInterface_postUpdate_0 = function() { + return (Co = n._emscripten_bind_btGImpactShapeInterface_postUpdate_0 = n.asm.Hc).apply(null, arguments) + }, + So = n._emscripten_bind_btGImpactShapeInterface_getShapeType_0 = function() { + return (So = n._emscripten_bind_btGImpactShapeInterface_getShapeType_0 = n.asm.Ic).apply(null, arguments) + }, + jo = n._emscripten_bind_btGImpactShapeInterface_getName_0 = function() { + return (jo = n._emscripten_bind_btGImpactShapeInterface_getName_0 = n.asm.Jc).apply(null, arguments) + }, + vo = n._emscripten_bind_btGImpactShapeInterface_getGImpactShapeType_0 = function() { + return (vo = n._emscripten_bind_btGImpactShapeInterface_getGImpactShapeType_0 = n.asm.Kc).apply(null, arguments) + }, + Io = n._emscripten_bind_btGImpactShapeInterface_getPrimitiveManager_0 = function() { + return (Io = n._emscripten_bind_btGImpactShapeInterface_getPrimitiveManager_0 = n.asm.Lc).apply(null, arguments) + }, + Ro = n._emscripten_bind_btGImpactShapeInterface_getNumChildShapes_0 = function() { + return (Ro = n._emscripten_bind_btGImpactShapeInterface_getNumChildShapes_0 = n.asm.Mc).apply(null, arguments) + }, + Do = n._emscripten_bind_btGImpactShapeInterface_childrenHasTransform_0 = function() { + return (Do = n._emscripten_bind_btGImpactShapeInterface_childrenHasTransform_0 = n.asm.Nc).apply(null, arguments) + }, + Po = n._emscripten_bind_btGImpactShapeInterface_needsRetrieveTriangles_0 = function() { + return (Po = n._emscripten_bind_btGImpactShapeInterface_needsRetrieveTriangles_0 = n.asm.Oc).apply(null, arguments) + }, + To = n._emscripten_bind_btGImpactShapeInterface_needsRetrieveTetrahedrons_0 = function() { + return (To = n._emscripten_bind_btGImpactShapeInterface_needsRetrieveTetrahedrons_0 = n.asm.Pc).apply(null, arguments) + }, + Oo = n._emscripten_bind_btGImpactShapeInterface_getBulletTriangle_2 = function() { + return (Oo = n._emscripten_bind_btGImpactShapeInterface_getBulletTriangle_2 = n.asm.Qc).apply(null, arguments) + }, + Wo = n._emscripten_bind_btGImpactShapeInterface_getBulletTetrahedron_2 = function() { + return (Wo = n._emscripten_bind_btGImpactShapeInterface_getBulletTetrahedron_2 = n.asm.Rc).apply(null, arguments) + }, + Ao = n._emscripten_bind_btGImpactShapeInterface_getChildShape_1 = function() { + return (Ao = n._emscripten_bind_btGImpactShapeInterface_getChildShape_1 = n.asm.Sc).apply(null, arguments) + }, + Mo = n._emscripten_bind_btGImpactShapeInterface_getChildTransform_1 = function() { + return (Mo = n._emscripten_bind_btGImpactShapeInterface_getChildTransform_1 = n.asm.Tc).apply(null, arguments) + }, + xo = n._emscripten_bind_btGImpactShapeInterface_setChildTransform_2 = function() { + return (xo = n._emscripten_bind_btGImpactShapeInterface_setChildTransform_2 = n.asm.Uc).apply(null, arguments) + }, + Fo = n._emscripten_bind_btGImpactShapeInterface_setLocalScaling_1 = function() { + return (Fo = n._emscripten_bind_btGImpactShapeInterface_setLocalScaling_1 = n.asm.Vc).apply(null, arguments) + }, + Lo = n._emscripten_bind_btGImpactShapeInterface_getLocalScaling_0 = function() { + return (Lo = n._emscripten_bind_btGImpactShapeInterface_getLocalScaling_0 = n.asm.Wc).apply(null, arguments) + }, + Go = n._emscripten_bind_btGImpactShapeInterface_calculateLocalInertia_2 = function() { + return (Go = n._emscripten_bind_btGImpactShapeInterface_calculateLocalInertia_2 = n.asm.Xc).apply(null, arguments) + }, + wo = n._emscripten_bind_btGImpactShapeInterface___destroy___0 = function() { + return (wo = n._emscripten_bind_btGImpactShapeInterface___destroy___0 = n.asm.Yc).apply(null, arguments) + }, + Ho = n._emscripten_bind_btActivatingCollisionAlgorithm___destroy___0 = function() { + return (Ho = n._emscripten_bind_btActivatingCollisionAlgorithm___destroy___0 = n.asm.Zc).apply(null, arguments) + }, + Vo = n._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_0 = function() { + return (Vo = n._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_0 = n.asm._c).apply(null, arguments) + }, + Eo = n._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_1 = function() { + return (Eo = n._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_1 = n.asm.$c).apply(null, arguments) + }, + No = n._emscripten_bind_btDefaultCollisionConfiguration___destroy___0 = function() { + return (No = n._emscripten_bind_btDefaultCollisionConfiguration___destroy___0 = n.asm.ad).apply(null, arguments) + }, + Uo = n._emscripten_bind_btDispatcher_getNumManifolds_0 = function() { + return (Uo = n._emscripten_bind_btDispatcher_getNumManifolds_0 = n.asm.bd).apply(null, arguments) + }, + zo = n._emscripten_bind_btDispatcher_getManifoldByIndexInternal_1 = function() { + return (zo = n._emscripten_bind_btDispatcher_getManifoldByIndexInternal_1 = n.asm.cd).apply(null, arguments) + }, + qo = n._emscripten_bind_btDispatcher___destroy___0 = function() { + return (qo = n._emscripten_bind_btDispatcher___destroy___0 = n.asm.dd).apply(null, arguments) + }, + Ko = n._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_3 = function() { + return (Ko = n._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_3 = n.asm.ed).apply(null, arguments) + }, + Qo = n._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_5 = function() { + return (Qo = n._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_5 = n.asm.fd).apply(null, arguments) + }, + Xo = n._emscripten_bind_btGeneric6DofConstraint_setLinearLowerLimit_1 = function() { + return (Xo = n._emscripten_bind_btGeneric6DofConstraint_setLinearLowerLimit_1 = n.asm.gd).apply(null, arguments) + }, + Zo = n._emscripten_bind_btGeneric6DofConstraint_setLinearUpperLimit_1 = function() { + return (Zo = n._emscripten_bind_btGeneric6DofConstraint_setLinearUpperLimit_1 = n.asm.hd).apply(null, arguments) + }, + Yo = n._emscripten_bind_btGeneric6DofConstraint_setAngularLowerLimit_1 = function() { + return (Yo = n._emscripten_bind_btGeneric6DofConstraint_setAngularLowerLimit_1 = n.asm.id).apply(null, arguments) + }, + Jo = n._emscripten_bind_btGeneric6DofConstraint_setAngularUpperLimit_1 = function() { + return (Jo = n._emscripten_bind_btGeneric6DofConstraint_setAngularUpperLimit_1 = n.asm.jd).apply(null, arguments) + }, + $o = n._emscripten_bind_btGeneric6DofConstraint_getFrameOffsetA_0 = function() { + return ($o = n._emscripten_bind_btGeneric6DofConstraint_getFrameOffsetA_0 = n.asm.kd).apply(null, arguments) + }, + t_ = n._emscripten_bind_btGeneric6DofConstraint_enableFeedback_1 = function() { + return (t_ = n._emscripten_bind_btGeneric6DofConstraint_enableFeedback_1 = n.asm.ld).apply(null, arguments) + }, + e_ = n._emscripten_bind_btGeneric6DofConstraint_getBreakingImpulseThreshold_0 = function() { + return (e_ = n._emscripten_bind_btGeneric6DofConstraint_getBreakingImpulseThreshold_0 = n.asm.md).apply(null, arguments) + }, + n_ = n._emscripten_bind_btGeneric6DofConstraint_setBreakingImpulseThreshold_1 = function() { + return (n_ = n._emscripten_bind_btGeneric6DofConstraint_setBreakingImpulseThreshold_1 = n.asm.nd).apply(null, arguments) + }, + o_ = n._emscripten_bind_btGeneric6DofConstraint_getParam_2 = function() { + return (o_ = n._emscripten_bind_btGeneric6DofConstraint_getParam_2 = n.asm.od).apply(null, arguments) + }, + __ = n._emscripten_bind_btGeneric6DofConstraint_setParam_3 = function() { + return (__ = n._emscripten_bind_btGeneric6DofConstraint_setParam_3 = n.asm.pd).apply(null, arguments) + }, + i_ = n._emscripten_bind_btGeneric6DofConstraint___destroy___0 = function() { + return (i_ = n._emscripten_bind_btGeneric6DofConstraint___destroy___0 = n.asm.qd).apply(null, arguments) + }, + r_ = n._emscripten_bind_btDiscreteDynamicsWorld_btDiscreteDynamicsWorld_4 = function() { + return (r_ = n._emscripten_bind_btDiscreteDynamicsWorld_btDiscreteDynamicsWorld_4 = n.asm.rd).apply(null, arguments) + }, + p_ = n._emscripten_bind_btDiscreteDynamicsWorld_setGravity_1 = function() { + return (p_ = n._emscripten_bind_btDiscreteDynamicsWorld_setGravity_1 = n.asm.sd).apply(null, arguments) + }, + s_ = n._emscripten_bind_btDiscreteDynamicsWorld_getGravity_0 = function() { + return (s_ = n._emscripten_bind_btDiscreteDynamicsWorld_getGravity_0 = n.asm.td).apply(null, arguments) + }, + c_ = n._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_1 = function() { + return (c_ = n._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_1 = n.asm.ud).apply(null, arguments) + }, + a_ = n._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_3 = function() { + return (a_ = n._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_3 = n.asm.vd).apply(null, arguments) + }, + l_ = n._emscripten_bind_btDiscreteDynamicsWorld_removeRigidBody_1 = function() { + return (l_ = n._emscripten_bind_btDiscreteDynamicsWorld_removeRigidBody_1 = n.asm.wd).apply(null, arguments) + }, + u_ = n._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_1 = function() { + return (u_ = n._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_1 = n.asm.xd).apply(null, arguments) + }, + b_ = n._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_2 = function() { + return (b_ = n._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_2 = n.asm.yd).apply(null, arguments) + }, + m_ = n._emscripten_bind_btDiscreteDynamicsWorld_removeConstraint_1 = function() { + return (m_ = n._emscripten_bind_btDiscreteDynamicsWorld_removeConstraint_1 = n.asm.zd).apply(null, arguments) + }, + y_ = n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_1 = function() { + return (y_ = n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_1 = n.asm.Ad).apply(null, arguments) + }, + d_ = n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_2 = function() { + return (d_ = n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_2 = n.asm.Bd).apply(null, arguments) + }, + f_ = n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_3 = function() { + return (f_ = n._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_3 = n.asm.Cd).apply(null, arguments) + }, + h_ = n._emscripten_bind_btDiscreteDynamicsWorld_setContactAddedCallback_1 = function() { + return (h_ = n._emscripten_bind_btDiscreteDynamicsWorld_setContactAddedCallback_1 = n.asm.Dd).apply(null, arguments) + }, + B_ = n._emscripten_bind_btDiscreteDynamicsWorld_setContactProcessedCallback_1 = function() { + return (B_ = n._emscripten_bind_btDiscreteDynamicsWorld_setContactProcessedCallback_1 = n.asm.Ed).apply(null, arguments) + }, + g_ = n._emscripten_bind_btDiscreteDynamicsWorld_setContactDestroyedCallback_1 = function() { + return (g_ = n._emscripten_bind_btDiscreteDynamicsWorld_setContactDestroyedCallback_1 = n.asm.Fd).apply(null, arguments) + }, + k_ = n._emscripten_bind_btDiscreteDynamicsWorld_getDispatcher_0 = function() { + return (k_ = n._emscripten_bind_btDiscreteDynamicsWorld_getDispatcher_0 = n.asm.Gd).apply(null, arguments) + }, + C_ = n._emscripten_bind_btDiscreteDynamicsWorld_rayTest_3 = function() { + return (C_ = n._emscripten_bind_btDiscreteDynamicsWorld_rayTest_3 = n.asm.Hd).apply(null, arguments) + }, + S_ = n._emscripten_bind_btDiscreteDynamicsWorld_getPairCache_0 = function() { + return (S_ = n._emscripten_bind_btDiscreteDynamicsWorld_getPairCache_0 = n.asm.Id).apply(null, arguments) + }, + j_ = n._emscripten_bind_btDiscreteDynamicsWorld_getDispatchInfo_0 = function() { + return (j_ = n._emscripten_bind_btDiscreteDynamicsWorld_getDispatchInfo_0 = n.asm.Jd).apply(null, arguments) + }, + v_ = n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_1 = function() { + return (v_ = n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_1 = n.asm.Kd).apply(null, arguments) + }, + I_ = n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_2 = function() { + return (I_ = n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_2 = n.asm.Ld).apply(null, arguments) + }, + R_ = n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_3 = function() { + return (R_ = n._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_3 = n.asm.Md).apply(null, arguments) + }, + D_ = n._emscripten_bind_btDiscreteDynamicsWorld_removeCollisionObject_1 = function() { + return (D_ = n._emscripten_bind_btDiscreteDynamicsWorld_removeCollisionObject_1 = n.asm.Nd).apply(null, arguments) + }, + P_ = n._emscripten_bind_btDiscreteDynamicsWorld_getBroadphase_0 = function() { + return (P_ = n._emscripten_bind_btDiscreteDynamicsWorld_getBroadphase_0 = n.asm.Od).apply(null, arguments) + }, + T_ = n._emscripten_bind_btDiscreteDynamicsWorld_convexSweepTest_5 = function() { + return (T_ = n._emscripten_bind_btDiscreteDynamicsWorld_convexSweepTest_5 = n.asm.Pd).apply(null, arguments) + }, + O_ = n._emscripten_bind_btDiscreteDynamicsWorld_contactPairTest_3 = function() { + return (O_ = n._emscripten_bind_btDiscreteDynamicsWorld_contactPairTest_3 = n.asm.Qd).apply(null, arguments) + }, + W_ = n._emscripten_bind_btDiscreteDynamicsWorld_contactTest_2 = function() { + return (W_ = n._emscripten_bind_btDiscreteDynamicsWorld_contactTest_2 = n.asm.Rd).apply(null, arguments) + }, + A_ = n._emscripten_bind_btDiscreteDynamicsWorld_updateSingleAabb_1 = function() { + return (A_ = n._emscripten_bind_btDiscreteDynamicsWorld_updateSingleAabb_1 = n.asm.Sd).apply(null, arguments) + }, + M_ = n._emscripten_bind_btDiscreteDynamicsWorld_setDebugDrawer_1 = function() { + return (M_ = n._emscripten_bind_btDiscreteDynamicsWorld_setDebugDrawer_1 = n.asm.Td).apply(null, arguments) + }, + x_ = n._emscripten_bind_btDiscreteDynamicsWorld_getDebugDrawer_0 = function() { + return (x_ = n._emscripten_bind_btDiscreteDynamicsWorld_getDebugDrawer_0 = n.asm.Ud).apply(null, arguments) + }, + F_ = n._emscripten_bind_btDiscreteDynamicsWorld_debugDrawWorld_0 = function() { + return (F_ = n._emscripten_bind_btDiscreteDynamicsWorld_debugDrawWorld_0 = n.asm.Vd).apply(null, arguments) + }, + L_ = n._emscripten_bind_btDiscreteDynamicsWorld_debugDrawObject_3 = function() { + return (L_ = n._emscripten_bind_btDiscreteDynamicsWorld_debugDrawObject_3 = n.asm.Wd).apply(null, arguments) + }, + G_ = n._emscripten_bind_btDiscreteDynamicsWorld_addAction_1 = function() { + return (G_ = n._emscripten_bind_btDiscreteDynamicsWorld_addAction_1 = n.asm.Xd).apply(null, arguments) + }, + w_ = n._emscripten_bind_btDiscreteDynamicsWorld_removeAction_1 = function() { + return (w_ = n._emscripten_bind_btDiscreteDynamicsWorld_removeAction_1 = n.asm.Yd).apply(null, arguments) + }, + H_ = n._emscripten_bind_btDiscreteDynamicsWorld_getSolverInfo_0 = function() { + return (H_ = n._emscripten_bind_btDiscreteDynamicsWorld_getSolverInfo_0 = n.asm.Zd).apply(null, arguments) + }, + V_ = n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_1 = function() { + return (V_ = n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_1 = n.asm._d).apply(null, arguments) + }, + E_ = n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_2 = function() { + return (E_ = n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_2 = n.asm.$d).apply(null, arguments) + }, + N_ = n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_3 = function() { + return (N_ = n._emscripten_bind_btDiscreteDynamicsWorld_setInternalTickCallback_3 = n.asm.ae).apply(null, arguments) + }, + U_ = n._emscripten_bind_btDiscreteDynamicsWorld___destroy___0 = function() { + return (U_ = n._emscripten_bind_btDiscreteDynamicsWorld___destroy___0 = n.asm.be).apply(null, arguments) + }, + z_ = n._emscripten_bind_btVehicleRaycaster_castRay_3 = function() { + return (z_ = n._emscripten_bind_btVehicleRaycaster_castRay_3 = n.asm.ce).apply(null, arguments) + }, + q_ = n._emscripten_bind_btVehicleRaycaster___destroy___0 = function() { + return (q_ = n._emscripten_bind_btVehicleRaycaster___destroy___0 = n.asm.de).apply(null, arguments) + }, + K_ = n._emscripten_bind_btActionInterface_updateAction_2 = function() { + return (K_ = n._emscripten_bind_btActionInterface_updateAction_2 = n.asm.ee).apply(null, arguments) + }, + Q_ = n._emscripten_bind_btActionInterface___destroy___0 = function() { + return (Q_ = n._emscripten_bind_btActionInterface___destroy___0 = n.asm.fe).apply(null, arguments) + }, + X_ = n._emscripten_bind_btGhostObject_btGhostObject_0 = function() { + return (X_ = n._emscripten_bind_btGhostObject_btGhostObject_0 = n.asm.ge).apply(null, arguments) + }, + Z_ = n._emscripten_bind_btGhostObject_getNumOverlappingObjects_0 = function() { + return (Z_ = n._emscripten_bind_btGhostObject_getNumOverlappingObjects_0 = n.asm.he).apply(null, arguments) + }, + Y_ = n._emscripten_bind_btGhostObject_getOverlappingObject_1 = function() { + return (Y_ = n._emscripten_bind_btGhostObject_getOverlappingObject_1 = n.asm.ie).apply(null, arguments) + }, + J_ = n._emscripten_bind_btGhostObject_setAnisotropicFriction_2 = function() { + return (J_ = n._emscripten_bind_btGhostObject_setAnisotropicFriction_2 = n.asm.je).apply(null, arguments) + }, + $_ = n._emscripten_bind_btGhostObject_getCollisionShape_0 = function() { + return ($_ = n._emscripten_bind_btGhostObject_getCollisionShape_0 = n.asm.ke).apply(null, arguments) + }, + ti = n._emscripten_bind_btGhostObject_setContactProcessingThreshold_1 = function() { + return (ti = n._emscripten_bind_btGhostObject_setContactProcessingThreshold_1 = n.asm.le).apply(null, arguments) + }, + ei = n._emscripten_bind_btGhostObject_setActivationState_1 = function() { + return (ei = n._emscripten_bind_btGhostObject_setActivationState_1 = n.asm.me).apply(null, arguments) + }, + ni = n._emscripten_bind_btGhostObject_forceActivationState_1 = function() { + return (ni = n._emscripten_bind_btGhostObject_forceActivationState_1 = n.asm.ne).apply(null, arguments) + }, + oi = n._emscripten_bind_btGhostObject_activate_0 = function() { + return (oi = n._emscripten_bind_btGhostObject_activate_0 = n.asm.oe).apply(null, arguments) + }, + _i = n._emscripten_bind_btGhostObject_activate_1 = function() { + return (_i = n._emscripten_bind_btGhostObject_activate_1 = n.asm.pe).apply(null, arguments) + }, + ii = n._emscripten_bind_btGhostObject_isActive_0 = function() { + return (ii = n._emscripten_bind_btGhostObject_isActive_0 = n.asm.qe).apply(null, arguments) + }, + ri = n._emscripten_bind_btGhostObject_isKinematicObject_0 = function() { + return (ri = n._emscripten_bind_btGhostObject_isKinematicObject_0 = n.asm.re).apply(null, arguments) + }, + pi = n._emscripten_bind_btGhostObject_isStaticObject_0 = function() { + return (pi = n._emscripten_bind_btGhostObject_isStaticObject_0 = n.asm.se).apply(null, arguments) + }, + si = n._emscripten_bind_btGhostObject_isStaticOrKinematicObject_0 = function() { + return (si = n._emscripten_bind_btGhostObject_isStaticOrKinematicObject_0 = n.asm.te).apply(null, arguments) + }, + ci = n._emscripten_bind_btGhostObject_getRestitution_0 = function() { + return (ci = n._emscripten_bind_btGhostObject_getRestitution_0 = n.asm.ue).apply(null, arguments) + }, + ai = n._emscripten_bind_btGhostObject_getFriction_0 = function() { + return (ai = n._emscripten_bind_btGhostObject_getFriction_0 = n.asm.ve).apply(null, arguments) + }, + li = n._emscripten_bind_btGhostObject_getRollingFriction_0 = function() { + return (li = n._emscripten_bind_btGhostObject_getRollingFriction_0 = n.asm.we).apply(null, arguments) + }, + ui = n._emscripten_bind_btGhostObject_setRestitution_1 = function() { + return (ui = n._emscripten_bind_btGhostObject_setRestitution_1 = n.asm.xe).apply(null, arguments) + }, + bi = n._emscripten_bind_btGhostObject_setFriction_1 = function() { + return (bi = n._emscripten_bind_btGhostObject_setFriction_1 = n.asm.ye).apply(null, arguments) + }, + mi = n._emscripten_bind_btGhostObject_setRollingFriction_1 = function() { + return (mi = n._emscripten_bind_btGhostObject_setRollingFriction_1 = n.asm.ze).apply(null, arguments) + }, + yi = n._emscripten_bind_btGhostObject_getWorldTransform_0 = function() { + return (yi = n._emscripten_bind_btGhostObject_getWorldTransform_0 = n.asm.Ae).apply(null, arguments) + }, + di = n._emscripten_bind_btGhostObject_getCollisionFlags_0 = function() { + return (di = n._emscripten_bind_btGhostObject_getCollisionFlags_0 = n.asm.Be).apply(null, arguments) + }, + fi = n._emscripten_bind_btGhostObject_setCollisionFlags_1 = function() { + return (fi = n._emscripten_bind_btGhostObject_setCollisionFlags_1 = n.asm.Ce).apply(null, arguments) + }, + hi = n._emscripten_bind_btGhostObject_setWorldTransform_1 = function() { + return (hi = n._emscripten_bind_btGhostObject_setWorldTransform_1 = n.asm.De).apply(null, arguments) + }, + Bi = n._emscripten_bind_btGhostObject_setCollisionShape_1 = function() { + return (Bi = n._emscripten_bind_btGhostObject_setCollisionShape_1 = n.asm.Ee).apply(null, arguments) + }, + gi = n._emscripten_bind_btGhostObject_setCcdMotionThreshold_1 = function() { + return (gi = n._emscripten_bind_btGhostObject_setCcdMotionThreshold_1 = n.asm.Fe).apply(null, arguments) + }, + ki = n._emscripten_bind_btGhostObject_setCcdSweptSphereRadius_1 = function() { + return (ki = n._emscripten_bind_btGhostObject_setCcdSweptSphereRadius_1 = n.asm.Ge).apply(null, arguments) + }, + Ci = n._emscripten_bind_btGhostObject_getUserIndex_0 = function() { + return (Ci = n._emscripten_bind_btGhostObject_getUserIndex_0 = n.asm.He).apply(null, arguments) + }, + Si = n._emscripten_bind_btGhostObject_setUserIndex_1 = function() { + return (Si = n._emscripten_bind_btGhostObject_setUserIndex_1 = n.asm.Ie).apply(null, arguments) + }, + ji = n._emscripten_bind_btGhostObject_getUserPointer_0 = function() { + return (ji = n._emscripten_bind_btGhostObject_getUserPointer_0 = n.asm.Je).apply(null, arguments) + }, + vi = n._emscripten_bind_btGhostObject_setUserPointer_1 = function() { + return (vi = n._emscripten_bind_btGhostObject_setUserPointer_1 = n.asm.Ke).apply(null, arguments) + }, + Ii = n._emscripten_bind_btGhostObject_getBroadphaseHandle_0 = function() { + return (Ii = n._emscripten_bind_btGhostObject_getBroadphaseHandle_0 = n.asm.Le).apply(null, arguments) + }, + Ri = n._emscripten_bind_btGhostObject___destroy___0 = function() { + return (Ri = n._emscripten_bind_btGhostObject___destroy___0 = n.asm.Me).apply(null, arguments) + }, + Di = n._emscripten_bind_btSoftBodySolver___destroy___0 = function() { + return (Di = n._emscripten_bind_btSoftBodySolver___destroy___0 = n.asm.Ne).apply(null, arguments) + }, + Pi = n._emscripten_bind_VoidPtr___destroy___0 = function() { + return (Pi = n._emscripten_bind_VoidPtr___destroy___0 = n.asm.Oe).apply(null, arguments) + }, + Ti = n._emscripten_bind_DebugDrawer_DebugDrawer_0 = function() { + return (Ti = n._emscripten_bind_DebugDrawer_DebugDrawer_0 = n.asm.Pe).apply(null, arguments) + }, + Oi = n._emscripten_bind_DebugDrawer_drawLine_3 = function() { + return (Oi = n._emscripten_bind_DebugDrawer_drawLine_3 = n.asm.Qe).apply(null, arguments) + }, + Wi = n._emscripten_bind_DebugDrawer_drawContactPoint_5 = function() { + return (Wi = n._emscripten_bind_DebugDrawer_drawContactPoint_5 = n.asm.Re).apply(null, arguments) + }, + Ai = n._emscripten_bind_DebugDrawer_reportErrorWarning_1 = function() { + return (Ai = n._emscripten_bind_DebugDrawer_reportErrorWarning_1 = n.asm.Se).apply(null, arguments) + }, + Mi = n._emscripten_bind_DebugDrawer_draw3dText_2 = function() { + return (Mi = n._emscripten_bind_DebugDrawer_draw3dText_2 = n.asm.Te).apply(null, arguments) + }, + xi = n._emscripten_bind_DebugDrawer_setDebugMode_1 = function() { + return (xi = n._emscripten_bind_DebugDrawer_setDebugMode_1 = n.asm.Ue).apply(null, arguments) + }, + Fi = n._emscripten_bind_DebugDrawer_getDebugMode_0 = function() { + return (Fi = n._emscripten_bind_DebugDrawer_getDebugMode_0 = n.asm.Ve).apply(null, arguments) + }, + Li = n._emscripten_bind_DebugDrawer___destroy___0 = function() { + return (Li = n._emscripten_bind_DebugDrawer___destroy___0 = n.asm.We).apply(null, arguments) + }, + Gi = n._emscripten_bind_btVector4_btVector4_0 = function() { + return (Gi = n._emscripten_bind_btVector4_btVector4_0 = n.asm.Xe).apply(null, arguments) + }, + wi = n._emscripten_bind_btVector4_btVector4_4 = function() { + return (wi = n._emscripten_bind_btVector4_btVector4_4 = n.asm.Ye).apply(null, arguments) + }, + Hi = n._emscripten_bind_btVector4_w_0 = function() { + return (Hi = n._emscripten_bind_btVector4_w_0 = n.asm.Ze).apply(null, arguments) + }, + Vi = n._emscripten_bind_btVector4_setValue_4 = function() { + return (Vi = n._emscripten_bind_btVector4_setValue_4 = n.asm._e).apply(null, arguments) + }, + Ei = n._emscripten_bind_btVector4_length_0 = function() { + return (Ei = n._emscripten_bind_btVector4_length_0 = n.asm.$e).apply(null, arguments) + }, + Ni = n._emscripten_bind_btVector4_x_0 = function() { + return (Ni = n._emscripten_bind_btVector4_x_0 = n.asm.af).apply(null, arguments) + }, + Ui = n._emscripten_bind_btVector4_y_0 = function() { + return (Ui = n._emscripten_bind_btVector4_y_0 = n.asm.bf).apply(null, arguments) + }, + zi = n._emscripten_bind_btVector4_z_0 = function() { + return (zi = n._emscripten_bind_btVector4_z_0 = n.asm.cf).apply(null, arguments) + }, + qi = n._emscripten_bind_btVector4_setX_1 = function() { + return (qi = n._emscripten_bind_btVector4_setX_1 = n.asm.df).apply(null, arguments) + }, + Ki = n._emscripten_bind_btVector4_setY_1 = function() { + return (Ki = n._emscripten_bind_btVector4_setY_1 = n.asm.ef).apply(null, arguments) + }, + Qi = n._emscripten_bind_btVector4_setZ_1 = function() { + return (Qi = n._emscripten_bind_btVector4_setZ_1 = n.asm.ff).apply(null, arguments) + }, + Xi = n._emscripten_bind_btVector4_normalize_0 = function() { + return (Xi = n._emscripten_bind_btVector4_normalize_0 = n.asm.gf).apply(null, arguments) + }, + Zi = n._emscripten_bind_btVector4_rotate_2 = function() { + return (Zi = n._emscripten_bind_btVector4_rotate_2 = n.asm.hf).apply(null, arguments) + }, + Yi = n._emscripten_bind_btVector4_dot_1 = function() { + return (Yi = n._emscripten_bind_btVector4_dot_1 = n.asm.jf).apply(null, arguments) + }, + Ji = n._emscripten_bind_btVector4_op_mul_1 = function() { + return (Ji = n._emscripten_bind_btVector4_op_mul_1 = n.asm.kf).apply(null, arguments) + }, + $i = n._emscripten_bind_btVector4_op_add_1 = function() { + return ($i = n._emscripten_bind_btVector4_op_add_1 = n.asm.lf).apply(null, arguments) + }, + tr = n._emscripten_bind_btVector4_op_sub_1 = function() { + return (tr = n._emscripten_bind_btVector4_op_sub_1 = n.asm.mf).apply(null, arguments) + }, + er = n._emscripten_bind_btVector4___destroy___0 = function() { + return (er = n._emscripten_bind_btVector4___destroy___0 = n.asm.nf).apply(null, arguments) + }, + nr = n._emscripten_bind_btQuaternion_btQuaternion_4 = function() { + return (nr = n._emscripten_bind_btQuaternion_btQuaternion_4 = n.asm.of).apply(null, arguments) + }, + or = n._emscripten_bind_btQuaternion_setValue_4 = function() { + return (or = n._emscripten_bind_btQuaternion_setValue_4 = n.asm.pf).apply(null, arguments) + }, + _r = n._emscripten_bind_btQuaternion_setEulerZYX_3 = function() { + return (_r = n._emscripten_bind_btQuaternion_setEulerZYX_3 = n.asm.qf).apply(null, arguments) + }, + ir = n._emscripten_bind_btQuaternion_setRotation_2 = function() { + return (ir = n._emscripten_bind_btQuaternion_setRotation_2 = n.asm.rf).apply(null, arguments) + }, + rr = n._emscripten_bind_btQuaternion_normalize_0 = function() { + return (rr = n._emscripten_bind_btQuaternion_normalize_0 = n.asm.sf).apply(null, arguments) + }, + pr = n._emscripten_bind_btQuaternion_length2_0 = function() { + return (pr = n._emscripten_bind_btQuaternion_length2_0 = n.asm.tf).apply(null, arguments) + }, + sr = n._emscripten_bind_btQuaternion_length_0 = function() { + return (sr = n._emscripten_bind_btQuaternion_length_0 = n.asm.uf).apply(null, arguments) + }, + cr = n._emscripten_bind_btQuaternion_dot_1 = function() { + return (cr = n._emscripten_bind_btQuaternion_dot_1 = n.asm.vf).apply(null, arguments) + }, + ar = n._emscripten_bind_btQuaternion_normalized_0 = function() { + return (ar = n._emscripten_bind_btQuaternion_normalized_0 = n.asm.wf).apply(null, arguments) + }, + lr = n._emscripten_bind_btQuaternion_getAxis_0 = function() { + return (lr = n._emscripten_bind_btQuaternion_getAxis_0 = n.asm.xf).apply(null, arguments) + }, + ur = n._emscripten_bind_btQuaternion_inverse_0 = function() { + return (ur = n._emscripten_bind_btQuaternion_inverse_0 = n.asm.yf).apply(null, arguments) + }, + br = n._emscripten_bind_btQuaternion_getAngle_0 = function() { + return (br = n._emscripten_bind_btQuaternion_getAngle_0 = n.asm.zf).apply(null, arguments) + }, + mr = n._emscripten_bind_btQuaternion_getAngleShortestPath_0 = function() { + return (mr = n._emscripten_bind_btQuaternion_getAngleShortestPath_0 = n.asm.Af).apply(null, arguments) + }, + yr = n._emscripten_bind_btQuaternion_angle_1 = function() { + return (yr = n._emscripten_bind_btQuaternion_angle_1 = n.asm.Bf).apply(null, arguments) + }, + dr = n._emscripten_bind_btQuaternion_angleShortestPath_1 = function() { + return (dr = n._emscripten_bind_btQuaternion_angleShortestPath_1 = n.asm.Cf).apply(null, arguments) + }, + fr = n._emscripten_bind_btQuaternion_op_add_1 = function() { + return (fr = n._emscripten_bind_btQuaternion_op_add_1 = n.asm.Df).apply(null, arguments) + }, + hr = n._emscripten_bind_btQuaternion_op_sub_1 = function() { + return (hr = n._emscripten_bind_btQuaternion_op_sub_1 = n.asm.Ef).apply(null, arguments) + }, + Br = n._emscripten_bind_btQuaternion_op_mul_1 = function() { + return (Br = n._emscripten_bind_btQuaternion_op_mul_1 = n.asm.Ff).apply(null, arguments) + }, + gr = n._emscripten_bind_btQuaternion_op_mulq_1 = function() { + return (gr = n._emscripten_bind_btQuaternion_op_mulq_1 = n.asm.Gf).apply(null, arguments) + }, + kr = n._emscripten_bind_btQuaternion_op_div_1 = function() { + return (kr = n._emscripten_bind_btQuaternion_op_div_1 = n.asm.Hf).apply(null, arguments) + }, + Cr = n._emscripten_bind_btQuaternion_x_0 = function() { + return (Cr = n._emscripten_bind_btQuaternion_x_0 = n.asm.If).apply(null, arguments) + }, + Sr = n._emscripten_bind_btQuaternion_y_0 = function() { + return (Sr = n._emscripten_bind_btQuaternion_y_0 = n.asm.Jf).apply(null, arguments) + }, + jr = n._emscripten_bind_btQuaternion_z_0 = function() { + return (jr = n._emscripten_bind_btQuaternion_z_0 = n.asm.Kf).apply(null, arguments) + }, + vr = n._emscripten_bind_btQuaternion_w_0 = function() { + return (vr = n._emscripten_bind_btQuaternion_w_0 = n.asm.Lf).apply(null, arguments) + }, + Ir = n._emscripten_bind_btQuaternion_setX_1 = function() { + return (Ir = n._emscripten_bind_btQuaternion_setX_1 = n.asm.Mf).apply(null, arguments) + }, + Rr = n._emscripten_bind_btQuaternion_setY_1 = function() { + return (Rr = n._emscripten_bind_btQuaternion_setY_1 = n.asm.Nf).apply(null, arguments) + }, + Dr = n._emscripten_bind_btQuaternion_setZ_1 = function() { + return (Dr = n._emscripten_bind_btQuaternion_setZ_1 = n.asm.Of).apply(null, arguments) + }, + Pr = n._emscripten_bind_btQuaternion_setW_1 = function() { + return (Pr = n._emscripten_bind_btQuaternion_setW_1 = n.asm.Pf).apply(null, arguments) + }, + Tr = n._emscripten_bind_btQuaternion___destroy___0 = function() { + return (Tr = n._emscripten_bind_btQuaternion___destroy___0 = n.asm.Qf).apply(null, arguments) + }, + Or = n._emscripten_bind_btMatrix3x3_setEulerZYX_3 = function() { + return (Or = n._emscripten_bind_btMatrix3x3_setEulerZYX_3 = n.asm.Rf).apply(null, arguments) + }, + Wr = n._emscripten_bind_btMatrix3x3_getRotation_1 = function() { + return (Wr = n._emscripten_bind_btMatrix3x3_getRotation_1 = n.asm.Sf).apply(null, arguments) + }, + Ar = n._emscripten_bind_btMatrix3x3_getRow_1 = function() { + return (Ar = n._emscripten_bind_btMatrix3x3_getRow_1 = n.asm.Tf).apply(null, arguments) + }, + Mr = n._emscripten_bind_btMatrix3x3___destroy___0 = function() { + return (Mr = n._emscripten_bind_btMatrix3x3___destroy___0 = n.asm.Uf).apply(null, arguments) + }, + xr = n._emscripten_bind_btTransform_btTransform_0 = function() { + return (xr = n._emscripten_bind_btTransform_btTransform_0 = n.asm.Vf).apply(null, arguments) + }, + Fr = n._emscripten_bind_btTransform_btTransform_2 = function() { + return (Fr = n._emscripten_bind_btTransform_btTransform_2 = n.asm.Wf).apply(null, arguments) + }, + Lr = n._emscripten_bind_btTransform_setIdentity_0 = function() { + return (Lr = n._emscripten_bind_btTransform_setIdentity_0 = n.asm.Xf).apply(null, arguments) + }, + Gr = n._emscripten_bind_btTransform_setOrigin_1 = function() { + return (Gr = n._emscripten_bind_btTransform_setOrigin_1 = n.asm.Yf).apply(null, arguments) + }, + wr = n._emscripten_bind_btTransform_setRotation_1 = function() { + return (wr = n._emscripten_bind_btTransform_setRotation_1 = n.asm.Zf).apply(null, arguments) + }, + Hr = n._emscripten_bind_btTransform_getOrigin_0 = function() { + return (Hr = n._emscripten_bind_btTransform_getOrigin_0 = n.asm._f).apply(null, arguments) + }, + Vr = n._emscripten_bind_btTransform_getRotation_0 = function() { + return (Vr = n._emscripten_bind_btTransform_getRotation_0 = n.asm.$f).apply(null, arguments) + }, + Er = n._emscripten_bind_btTransform_getBasis_0 = function() { + return (Er = n._emscripten_bind_btTransform_getBasis_0 = n.asm.ag).apply(null, arguments) + }, + Nr = n._emscripten_bind_btTransform_setFromOpenGLMatrix_1 = function() { + return (Nr = n._emscripten_bind_btTransform_setFromOpenGLMatrix_1 = n.asm.bg).apply(null, arguments) + }, + Ur = n._emscripten_bind_btTransform_inverse_0 = function() { + return (Ur = n._emscripten_bind_btTransform_inverse_0 = n.asm.cg).apply(null, arguments) + }, + zr = n._emscripten_bind_btTransform_op_mul_1 = function() { + return (zr = n._emscripten_bind_btTransform_op_mul_1 = n.asm.dg).apply(null, arguments) + }, + qr = n._emscripten_bind_btTransform___destroy___0 = function() { + return (qr = n._emscripten_bind_btTransform___destroy___0 = n.asm.eg).apply(null, arguments) + }, + Kr = n._emscripten_bind_MotionState_MotionState_0 = function() { + return (Kr = n._emscripten_bind_MotionState_MotionState_0 = n.asm.fg).apply(null, arguments) + }, + Qr = n._emscripten_bind_MotionState_getWorldTransform_1 = function() { + return (Qr = n._emscripten_bind_MotionState_getWorldTransform_1 = n.asm.gg).apply(null, arguments) + }, + Xr = n._emscripten_bind_MotionState_setWorldTransform_1 = function() { + return (Xr = n._emscripten_bind_MotionState_setWorldTransform_1 = n.asm.hg).apply(null, arguments) + }, + Zr = n._emscripten_bind_MotionState___destroy___0 = function() { + return (Zr = n._emscripten_bind_MotionState___destroy___0 = n.asm.ig).apply(null, arguments) + }, + Yr = n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_0 = function() { + return (Yr = n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_0 = n.asm.jg).apply(null, arguments) + }, + Jr = n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_1 = function() { + return (Jr = n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_1 = n.asm.kg).apply(null, arguments) + }, + $r = n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_2 = function() { + return ($r = n._emscripten_bind_btDefaultMotionState_btDefaultMotionState_2 = n.asm.lg).apply(null, arguments) + }, + tp = n._emscripten_bind_btDefaultMotionState_getWorldTransform_1 = function() { + return (tp = n._emscripten_bind_btDefaultMotionState_getWorldTransform_1 = n.asm.mg).apply(null, arguments) + }, + ep = n._emscripten_bind_btDefaultMotionState_setWorldTransform_1 = function() { + return (ep = n._emscripten_bind_btDefaultMotionState_setWorldTransform_1 = n.asm.ng).apply(null, arguments) + }, + np = n._emscripten_bind_btDefaultMotionState_get_m_graphicsWorldTrans_0 = function() { + return (np = n._emscripten_bind_btDefaultMotionState_get_m_graphicsWorldTrans_0 = n.asm.og).apply(null, arguments) + }, + op = n._emscripten_bind_btDefaultMotionState_set_m_graphicsWorldTrans_1 = function() { + return (op = n._emscripten_bind_btDefaultMotionState_set_m_graphicsWorldTrans_1 = n.asm.pg).apply(null, arguments) + }, + _p = n._emscripten_bind_btDefaultMotionState___destroy___0 = function() { + return (_p = n._emscripten_bind_btDefaultMotionState___destroy___0 = n.asm.qg).apply(null, arguments) + }, + ip = n._emscripten_bind_btCollisionObjectWrapper_getWorldTransform_0 = function() { + return (ip = n._emscripten_bind_btCollisionObjectWrapper_getWorldTransform_0 = n.asm.rg).apply(null, arguments) + }, + rp = n._emscripten_bind_btCollisionObjectWrapper_getCollisionObject_0 = function() { + return (rp = n._emscripten_bind_btCollisionObjectWrapper_getCollisionObject_0 = n.asm.sg).apply(null, arguments) + }, + pp = n._emscripten_bind_btCollisionObjectWrapper_getCollisionShape_0 = function() { + return (pp = n._emscripten_bind_btCollisionObjectWrapper_getCollisionShape_0 = n.asm.tg).apply(null, arguments) + }, + sp = n._emscripten_bind_ClosestRayResultCallback_ClosestRayResultCallback_2 = function() { + return (sp = n._emscripten_bind_ClosestRayResultCallback_ClosestRayResultCallback_2 = n.asm.ug).apply(null, arguments) + }, + cp = n._emscripten_bind_ClosestRayResultCallback_hasHit_0 = function() { + return (cp = n._emscripten_bind_ClosestRayResultCallback_hasHit_0 = n.asm.vg).apply(null, arguments) + }, + ap = n._emscripten_bind_ClosestRayResultCallback_get_m_rayFromWorld_0 = function() { + return (ap = n._emscripten_bind_ClosestRayResultCallback_get_m_rayFromWorld_0 = n.asm.wg).apply(null, arguments) + }, + lp = n._emscripten_bind_ClosestRayResultCallback_set_m_rayFromWorld_1 = function() { + return (lp = n._emscripten_bind_ClosestRayResultCallback_set_m_rayFromWorld_1 = n.asm.xg).apply(null, arguments) + }, + up = n._emscripten_bind_ClosestRayResultCallback_get_m_rayToWorld_0 = function() { + return (up = n._emscripten_bind_ClosestRayResultCallback_get_m_rayToWorld_0 = n.asm.yg).apply(null, arguments) + }, + bp = n._emscripten_bind_ClosestRayResultCallback_set_m_rayToWorld_1 = function() { + return (bp = n._emscripten_bind_ClosestRayResultCallback_set_m_rayToWorld_1 = n.asm.zg).apply(null, arguments) + }, + mp = n._emscripten_bind_ClosestRayResultCallback_get_m_hitNormalWorld_0 = function() { + return (mp = n._emscripten_bind_ClosestRayResultCallback_get_m_hitNormalWorld_0 = n.asm.Ag).apply(null, arguments) + }, + yp = n._emscripten_bind_ClosestRayResultCallback_set_m_hitNormalWorld_1 = function() { + return (yp = n._emscripten_bind_ClosestRayResultCallback_set_m_hitNormalWorld_1 = n.asm.Bg).apply(null, arguments) + }, + dp = n._emscripten_bind_ClosestRayResultCallback_get_m_hitPointWorld_0 = function() { + return (dp = n._emscripten_bind_ClosestRayResultCallback_get_m_hitPointWorld_0 = n.asm.Cg).apply(null, arguments) + }, + fp = n._emscripten_bind_ClosestRayResultCallback_set_m_hitPointWorld_1 = function() { + return (fp = n._emscripten_bind_ClosestRayResultCallback_set_m_hitPointWorld_1 = n.asm.Dg).apply(null, arguments) + }, + hp = n._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterGroup_0 = function() { + return (hp = n._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterGroup_0 = n.asm.Eg).apply(null, arguments) + }, + Bp = n._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterGroup_1 = function() { + return (Bp = n._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterGroup_1 = n.asm.Fg).apply(null, arguments) + }, + gp = n._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterMask_0 = function() { + return (gp = n._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterMask_0 = n.asm.Gg).apply(null, arguments) + }, + kp = n._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterMask_1 = function() { + return (kp = n._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterMask_1 = n.asm.Hg).apply(null, arguments) + }, + Cp = n._emscripten_bind_ClosestRayResultCallback_get_m_closestHitFraction_0 = function() { + return (Cp = n._emscripten_bind_ClosestRayResultCallback_get_m_closestHitFraction_0 = n.asm.Ig).apply(null, arguments) + }, + Sp = n._emscripten_bind_ClosestRayResultCallback_set_m_closestHitFraction_1 = function() { + return (Sp = n._emscripten_bind_ClosestRayResultCallback_set_m_closestHitFraction_1 = n.asm.Jg).apply(null, arguments) + }, + jp = n._emscripten_bind_ClosestRayResultCallback_get_m_collisionObject_0 = function() { + return (jp = n._emscripten_bind_ClosestRayResultCallback_get_m_collisionObject_0 = n.asm.Kg).apply(null, arguments) + }, + vp = n._emscripten_bind_ClosestRayResultCallback_set_m_collisionObject_1 = function() { + return (vp = n._emscripten_bind_ClosestRayResultCallback_set_m_collisionObject_1 = n.asm.Lg).apply(null, arguments) + }, + Ip = n._emscripten_bind_ClosestRayResultCallback_get_m_flags_0 = function() { + return (Ip = n._emscripten_bind_ClosestRayResultCallback_get_m_flags_0 = n.asm.Mg).apply(null, arguments) + }, + Rp = n._emscripten_bind_ClosestRayResultCallback_set_m_flags_1 = function() { + return (Rp = n._emscripten_bind_ClosestRayResultCallback_set_m_flags_1 = n.asm.Ng).apply(null, arguments) + }, + Dp = n._emscripten_bind_ClosestRayResultCallback___destroy___0 = function() { + return (Dp = n._emscripten_bind_ClosestRayResultCallback___destroy___0 = n.asm.Og).apply(null, arguments) + }, + Pp = n._emscripten_bind_btConstCollisionObjectArray_size_0 = function() { + return (Pp = n._emscripten_bind_btConstCollisionObjectArray_size_0 = n.asm.Pg).apply(null, arguments) + }, + Tp = n._emscripten_bind_btConstCollisionObjectArray_at_1 = function() { + return (Tp = n._emscripten_bind_btConstCollisionObjectArray_at_1 = n.asm.Qg).apply(null, arguments) + }, + Op = n._emscripten_bind_btConstCollisionObjectArray___destroy___0 = function() { + return (Op = n._emscripten_bind_btConstCollisionObjectArray___destroy___0 = n.asm.Rg).apply(null, arguments) + }, + Wp = n._emscripten_bind_btScalarArray_size_0 = function() { + return (Wp = n._emscripten_bind_btScalarArray_size_0 = n.asm.Sg).apply(null, arguments) + }, + Ap = n._emscripten_bind_btScalarArray_at_1 = function() { + return (Ap = n._emscripten_bind_btScalarArray_at_1 = n.asm.Tg).apply(null, arguments) + }, + Mp = n._emscripten_bind_btScalarArray___destroy___0 = function() { + return (Mp = n._emscripten_bind_btScalarArray___destroy___0 = n.asm.Ug).apply(null, arguments) + }, + xp = n._emscripten_bind_AllHitsRayResultCallback_AllHitsRayResultCallback_2 = function() { + return (xp = n._emscripten_bind_AllHitsRayResultCallback_AllHitsRayResultCallback_2 = n.asm.Vg).apply(null, arguments) + }, + Fp = n._emscripten_bind_AllHitsRayResultCallback_hasHit_0 = function() { + return (Fp = n._emscripten_bind_AllHitsRayResultCallback_hasHit_0 = n.asm.Wg).apply(null, arguments) + }, + Lp = n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionObjects_0 = function() { + return (Lp = n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionObjects_0 = n.asm.Xg).apply(null, arguments) + }, + Gp = n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionObjects_1 = function() { + return (Gp = n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionObjects_1 = n.asm.Yg).apply(null, arguments) + }, + wp = n._emscripten_bind_AllHitsRayResultCallback_get_m_rayFromWorld_0 = function() { + return (wp = n._emscripten_bind_AllHitsRayResultCallback_get_m_rayFromWorld_0 = n.asm.Zg).apply(null, arguments) + }, + Hp = n._emscripten_bind_AllHitsRayResultCallback_set_m_rayFromWorld_1 = function() { + return (Hp = n._emscripten_bind_AllHitsRayResultCallback_set_m_rayFromWorld_1 = n.asm._g).apply(null, arguments) + }, + Vp = n._emscripten_bind_AllHitsRayResultCallback_get_m_rayToWorld_0 = function() { + return (Vp = n._emscripten_bind_AllHitsRayResultCallback_get_m_rayToWorld_0 = n.asm.$g).apply(null, arguments) + }, + Ep = n._emscripten_bind_AllHitsRayResultCallback_set_m_rayToWorld_1 = function() { + return (Ep = n._emscripten_bind_AllHitsRayResultCallback_set_m_rayToWorld_1 = n.asm.ah).apply(null, arguments) + }, + Np = n._emscripten_bind_AllHitsRayResultCallback_get_m_hitNormalWorld_0 = function() { + return (Np = n._emscripten_bind_AllHitsRayResultCallback_get_m_hitNormalWorld_0 = n.asm.bh).apply(null, arguments) + }, + Up = n._emscripten_bind_AllHitsRayResultCallback_set_m_hitNormalWorld_1 = function() { + return (Up = n._emscripten_bind_AllHitsRayResultCallback_set_m_hitNormalWorld_1 = n.asm.ch).apply(null, arguments) + }, + zp = n._emscripten_bind_AllHitsRayResultCallback_get_m_hitPointWorld_0 = function() { + return (zp = n._emscripten_bind_AllHitsRayResultCallback_get_m_hitPointWorld_0 = n.asm.dh).apply(null, arguments) + }, + qp = n._emscripten_bind_AllHitsRayResultCallback_set_m_hitPointWorld_1 = function() { + return (qp = n._emscripten_bind_AllHitsRayResultCallback_set_m_hitPointWorld_1 = n.asm.eh).apply(null, arguments) + }, + Kp = n._emscripten_bind_AllHitsRayResultCallback_get_m_hitFractions_0 = function() { + return (Kp = n._emscripten_bind_AllHitsRayResultCallback_get_m_hitFractions_0 = n.asm.fh).apply(null, arguments) + }, + Qp = n._emscripten_bind_AllHitsRayResultCallback_set_m_hitFractions_1 = function() { + return (Qp = n._emscripten_bind_AllHitsRayResultCallback_set_m_hitFractions_1 = n.asm.gh).apply(null, arguments) + }, + Xp = n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionFilterGroup_0 = function() { + return (Xp = n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionFilterGroup_0 = n.asm.hh).apply(null, arguments) + }, + Zp = n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionFilterGroup_1 = function() { + return (Zp = n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionFilterGroup_1 = n.asm.ih).apply(null, arguments) + }, + Yp = n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionFilterMask_0 = function() { + return (Yp = n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionFilterMask_0 = n.asm.jh).apply(null, arguments) + }, + Jp = n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionFilterMask_1 = function() { + return (Jp = n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionFilterMask_1 = n.asm.kh).apply(null, arguments) + }, + $p = n._emscripten_bind_AllHitsRayResultCallback_get_m_closestHitFraction_0 = function() { + return ($p = n._emscripten_bind_AllHitsRayResultCallback_get_m_closestHitFraction_0 = n.asm.lh).apply(null, arguments) + }, + ts = n._emscripten_bind_AllHitsRayResultCallback_set_m_closestHitFraction_1 = function() { + return (ts = n._emscripten_bind_AllHitsRayResultCallback_set_m_closestHitFraction_1 = n.asm.mh).apply(null, arguments) + }, + es = n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionObject_0 = function() { + return (es = n._emscripten_bind_AllHitsRayResultCallback_get_m_collisionObject_0 = n.asm.nh).apply(null, arguments) + }, + ns = n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionObject_1 = function() { + return (ns = n._emscripten_bind_AllHitsRayResultCallback_set_m_collisionObject_1 = n.asm.oh).apply(null, arguments) + }, + os = n._emscripten_bind_AllHitsRayResultCallback_get_m_flags_0 = function() { + return (os = n._emscripten_bind_AllHitsRayResultCallback_get_m_flags_0 = n.asm.ph).apply(null, arguments) + }, + _s = n._emscripten_bind_AllHitsRayResultCallback_set_m_flags_1 = function() { + return (_s = n._emscripten_bind_AllHitsRayResultCallback_set_m_flags_1 = n.asm.qh).apply(null, arguments) + }, + is = n._emscripten_bind_AllHitsRayResultCallback___destroy___0 = function() { + return (is = n._emscripten_bind_AllHitsRayResultCallback___destroy___0 = n.asm.rh).apply(null, arguments) + }, + rs = n._emscripten_bind_btManifoldPoint_getPositionWorldOnA_0 = function() { + return (rs = n._emscripten_bind_btManifoldPoint_getPositionWorldOnA_0 = n.asm.sh).apply(null, arguments) + }, + ps = n._emscripten_bind_btManifoldPoint_getPositionWorldOnB_0 = function() { + return (ps = n._emscripten_bind_btManifoldPoint_getPositionWorldOnB_0 = n.asm.th).apply(null, arguments) + }, + ss = n._emscripten_bind_btManifoldPoint_getAppliedImpulse_0 = function() { + return (ss = n._emscripten_bind_btManifoldPoint_getAppliedImpulse_0 = n.asm.uh).apply(null, arguments) + }, + cs = n._emscripten_bind_btManifoldPoint_getDistance_0 = function() { + return (cs = n._emscripten_bind_btManifoldPoint_getDistance_0 = n.asm.vh).apply(null, arguments) + }, + as = n._emscripten_bind_btManifoldPoint_get_m_localPointA_0 = function() { + return (as = n._emscripten_bind_btManifoldPoint_get_m_localPointA_0 = n.asm.wh).apply(null, arguments) + }, + ls = n._emscripten_bind_btManifoldPoint_set_m_localPointA_1 = function() { + return (ls = n._emscripten_bind_btManifoldPoint_set_m_localPointA_1 = n.asm.xh).apply(null, arguments) + }, + us = n._emscripten_bind_btManifoldPoint_get_m_localPointB_0 = function() { + return (us = n._emscripten_bind_btManifoldPoint_get_m_localPointB_0 = n.asm.yh).apply(null, arguments) + }, + bs = n._emscripten_bind_btManifoldPoint_set_m_localPointB_1 = function() { + return (bs = n._emscripten_bind_btManifoldPoint_set_m_localPointB_1 = n.asm.zh).apply(null, arguments) + }, + ms = n._emscripten_bind_btManifoldPoint_get_m_positionWorldOnB_0 = function() { + return (ms = n._emscripten_bind_btManifoldPoint_get_m_positionWorldOnB_0 = n.asm.Ah).apply(null, arguments) + }, + ys = n._emscripten_bind_btManifoldPoint_set_m_positionWorldOnB_1 = function() { + return (ys = n._emscripten_bind_btManifoldPoint_set_m_positionWorldOnB_1 = n.asm.Bh).apply(null, arguments) + }, + ds = n._emscripten_bind_btManifoldPoint_get_m_positionWorldOnA_0 = function() { + return (ds = n._emscripten_bind_btManifoldPoint_get_m_positionWorldOnA_0 = n.asm.Ch).apply(null, arguments) + }, + fs = n._emscripten_bind_btManifoldPoint_set_m_positionWorldOnA_1 = function() { + return (fs = n._emscripten_bind_btManifoldPoint_set_m_positionWorldOnA_1 = n.asm.Dh).apply(null, arguments) + }, + hs = n._emscripten_bind_btManifoldPoint_get_m_normalWorldOnB_0 = function() { + return (hs = n._emscripten_bind_btManifoldPoint_get_m_normalWorldOnB_0 = n.asm.Eh).apply(null, arguments) + }, + Bs = n._emscripten_bind_btManifoldPoint_set_m_normalWorldOnB_1 = function() { + return (Bs = n._emscripten_bind_btManifoldPoint_set_m_normalWorldOnB_1 = n.asm.Fh).apply(null, arguments) + }, + gs = n._emscripten_bind_btManifoldPoint_get_m_userPersistentData_0 = function() { + return (gs = n._emscripten_bind_btManifoldPoint_get_m_userPersistentData_0 = n.asm.Gh).apply(null, arguments) + }, + ks = n._emscripten_bind_btManifoldPoint_set_m_userPersistentData_1 = function() { + return (ks = n._emscripten_bind_btManifoldPoint_set_m_userPersistentData_1 = n.asm.Hh).apply(null, arguments) + }, + Cs = n._emscripten_bind_btManifoldPoint___destroy___0 = function() { + return (Cs = n._emscripten_bind_btManifoldPoint___destroy___0 = n.asm.Ih).apply(null, arguments) + }, + Ss = n._emscripten_bind_ConcreteContactResultCallback_ConcreteContactResultCallback_0 = function() { + return (Ss = n._emscripten_bind_ConcreteContactResultCallback_ConcreteContactResultCallback_0 = n.asm.Jh).apply(null, arguments) + }, + js = n._emscripten_bind_ConcreteContactResultCallback_addSingleResult_7 = function() { + return (js = n._emscripten_bind_ConcreteContactResultCallback_addSingleResult_7 = n.asm.Kh).apply(null, arguments) + }, + vs = n._emscripten_bind_ConcreteContactResultCallback___destroy___0 = function() { + return (vs = n._emscripten_bind_ConcreteContactResultCallback___destroy___0 = n.asm.Lh).apply(null, arguments) + }, + Is = n._emscripten_bind_LocalShapeInfo_get_m_shapePart_0 = function() { + return (Is = n._emscripten_bind_LocalShapeInfo_get_m_shapePart_0 = n.asm.Mh).apply(null, arguments) + }, + Rs = n._emscripten_bind_LocalShapeInfo_set_m_shapePart_1 = function() { + return (Rs = n._emscripten_bind_LocalShapeInfo_set_m_shapePart_1 = n.asm.Nh).apply(null, arguments) + }, + Ds = n._emscripten_bind_LocalShapeInfo_get_m_triangleIndex_0 = function() { + return (Ds = n._emscripten_bind_LocalShapeInfo_get_m_triangleIndex_0 = n.asm.Oh).apply(null, arguments) + }, + Ps = n._emscripten_bind_LocalShapeInfo_set_m_triangleIndex_1 = function() { + return (Ps = n._emscripten_bind_LocalShapeInfo_set_m_triangleIndex_1 = n.asm.Ph).apply(null, arguments) + }, + Ts = n._emscripten_bind_LocalShapeInfo___destroy___0 = function() { + return (Ts = n._emscripten_bind_LocalShapeInfo___destroy___0 = n.asm.Qh).apply(null, arguments) + }, + Os = n._emscripten_bind_LocalConvexResult_LocalConvexResult_5 = function() { + return (Os = n._emscripten_bind_LocalConvexResult_LocalConvexResult_5 = n.asm.Rh).apply(null, arguments) + }, + Ws = n._emscripten_bind_LocalConvexResult_get_m_hitCollisionObject_0 = function() { + return (Ws = n._emscripten_bind_LocalConvexResult_get_m_hitCollisionObject_0 = n.asm.Sh).apply(null, arguments) + }, + As = n._emscripten_bind_LocalConvexResult_set_m_hitCollisionObject_1 = function() { + return (As = n._emscripten_bind_LocalConvexResult_set_m_hitCollisionObject_1 = n.asm.Th).apply(null, arguments) + }, + Ms = n._emscripten_bind_LocalConvexResult_get_m_localShapeInfo_0 = function() { + return (Ms = n._emscripten_bind_LocalConvexResult_get_m_localShapeInfo_0 = n.asm.Uh).apply(null, arguments) + }, + xs = n._emscripten_bind_LocalConvexResult_set_m_localShapeInfo_1 = function() { + return (xs = n._emscripten_bind_LocalConvexResult_set_m_localShapeInfo_1 = n.asm.Vh).apply(null, arguments) + }, + Fs = n._emscripten_bind_LocalConvexResult_get_m_hitNormalLocal_0 = function() { + return (Fs = n._emscripten_bind_LocalConvexResult_get_m_hitNormalLocal_0 = n.asm.Wh).apply(null, arguments) + }, + Ls = n._emscripten_bind_LocalConvexResult_set_m_hitNormalLocal_1 = function() { + return (Ls = n._emscripten_bind_LocalConvexResult_set_m_hitNormalLocal_1 = n.asm.Xh).apply(null, arguments) + }, + Gs = n._emscripten_bind_LocalConvexResult_get_m_hitPointLocal_0 = function() { + return (Gs = n._emscripten_bind_LocalConvexResult_get_m_hitPointLocal_0 = n.asm.Yh).apply(null, arguments) + }, + ws = n._emscripten_bind_LocalConvexResult_set_m_hitPointLocal_1 = function() { + return (ws = n._emscripten_bind_LocalConvexResult_set_m_hitPointLocal_1 = n.asm.Zh).apply(null, arguments) + }, + Hs = n._emscripten_bind_LocalConvexResult_get_m_hitFraction_0 = function() { + return (Hs = n._emscripten_bind_LocalConvexResult_get_m_hitFraction_0 = n.asm._h).apply(null, arguments) + }, + Vs = n._emscripten_bind_LocalConvexResult_set_m_hitFraction_1 = function() { + return (Vs = n._emscripten_bind_LocalConvexResult_set_m_hitFraction_1 = n.asm.$h).apply(null, arguments) + }, + Es = n._emscripten_bind_LocalConvexResult___destroy___0 = function() { + return (Es = n._emscripten_bind_LocalConvexResult___destroy___0 = n.asm.ai).apply(null, arguments) + }, + Ns = n._emscripten_bind_ClosestConvexResultCallback_ClosestConvexResultCallback_2 = function() { + return (Ns = n._emscripten_bind_ClosestConvexResultCallback_ClosestConvexResultCallback_2 = n.asm.bi).apply(null, arguments) + }, + Us = n._emscripten_bind_ClosestConvexResultCallback_hasHit_0 = function() { + return (Us = n._emscripten_bind_ClosestConvexResultCallback_hasHit_0 = n.asm.ci).apply(null, arguments) + }, + zs = n._emscripten_bind_ClosestConvexResultCallback_get_m_hitCollisionObject_0 = function() { + return (zs = n._emscripten_bind_ClosestConvexResultCallback_get_m_hitCollisionObject_0 = n.asm.di).apply(null, arguments) + }, + qs = n._emscripten_bind_ClosestConvexResultCallback_set_m_hitCollisionObject_1 = function() { + return (qs = n._emscripten_bind_ClosestConvexResultCallback_set_m_hitCollisionObject_1 = n.asm.ei).apply(null, arguments) + }, + Ks = n._emscripten_bind_ClosestConvexResultCallback_get_m_convexFromWorld_0 = function() { + return (Ks = n._emscripten_bind_ClosestConvexResultCallback_get_m_convexFromWorld_0 = n.asm.fi).apply(null, arguments) + }, + Qs = n._emscripten_bind_ClosestConvexResultCallback_set_m_convexFromWorld_1 = function() { + return (Qs = n._emscripten_bind_ClosestConvexResultCallback_set_m_convexFromWorld_1 = n.asm.gi).apply(null, arguments) + }, + Xs = n._emscripten_bind_ClosestConvexResultCallback_get_m_convexToWorld_0 = function() { + return (Xs = n._emscripten_bind_ClosestConvexResultCallback_get_m_convexToWorld_0 = n.asm.hi).apply(null, arguments) + }, + Zs = n._emscripten_bind_ClosestConvexResultCallback_set_m_convexToWorld_1 = function() { + return (Zs = n._emscripten_bind_ClosestConvexResultCallback_set_m_convexToWorld_1 = n.asm.ii).apply(null, arguments) + }, + Ys = n._emscripten_bind_ClosestConvexResultCallback_get_m_hitNormalWorld_0 = function() { + return (Ys = n._emscripten_bind_ClosestConvexResultCallback_get_m_hitNormalWorld_0 = n.asm.ji).apply(null, arguments) + }, + Js = n._emscripten_bind_ClosestConvexResultCallback_set_m_hitNormalWorld_1 = function() { + return (Js = n._emscripten_bind_ClosestConvexResultCallback_set_m_hitNormalWorld_1 = n.asm.ki).apply(null, arguments) + }, + $s = n._emscripten_bind_ClosestConvexResultCallback_get_m_hitPointWorld_0 = function() { + return ($s = n._emscripten_bind_ClosestConvexResultCallback_get_m_hitPointWorld_0 = n.asm.li).apply(null, arguments) + }, + tc = n._emscripten_bind_ClosestConvexResultCallback_set_m_hitPointWorld_1 = function() { + return (tc = n._emscripten_bind_ClosestConvexResultCallback_set_m_hitPointWorld_1 = n.asm.mi).apply(null, arguments) + }, + ec = n._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterGroup_0 = function() { + return (ec = n._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterGroup_0 = n.asm.ni).apply(null, arguments) + }, + nc = n._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterGroup_1 = function() { + return (nc = n._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterGroup_1 = n.asm.oi).apply(null, arguments) + }, + oc = n._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterMask_0 = function() { + return (oc = n._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterMask_0 = n.asm.pi).apply(null, arguments) + }, + _c = n._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterMask_1 = function() { + return (_c = n._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterMask_1 = n.asm.qi).apply(null, arguments) + }, + ic = n._emscripten_bind_ClosestConvexResultCallback_get_m_closestHitFraction_0 = function() { + return (ic = n._emscripten_bind_ClosestConvexResultCallback_get_m_closestHitFraction_0 = n.asm.ri).apply(null, arguments) + }, + rc = n._emscripten_bind_ClosestConvexResultCallback_set_m_closestHitFraction_1 = function() { + return (rc = n._emscripten_bind_ClosestConvexResultCallback_set_m_closestHitFraction_1 = n.asm.si).apply(null, arguments) + }, + pc = n._emscripten_bind_ClosestConvexResultCallback___destroy___0 = function() { + return (pc = n._emscripten_bind_ClosestConvexResultCallback___destroy___0 = n.asm.ti).apply(null, arguments) + }, + sc = n._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_1 = function() { + return (sc = n._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_1 = n.asm.ui).apply(null, arguments) + }, + cc = n._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_2 = function() { + return (cc = n._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_2 = n.asm.vi).apply(null, arguments) + }, + ac = n._emscripten_bind_btConvexTriangleMeshShape_setLocalScaling_1 = function() { + return (ac = n._emscripten_bind_btConvexTriangleMeshShape_setLocalScaling_1 = n.asm.wi).apply(null, arguments) + }, + lc = n._emscripten_bind_btConvexTriangleMeshShape_getLocalScaling_0 = function() { + return (lc = n._emscripten_bind_btConvexTriangleMeshShape_getLocalScaling_0 = n.asm.xi).apply(null, arguments) + }, + uc = n._emscripten_bind_btConvexTriangleMeshShape_calculateLocalInertia_2 = function() { + return (uc = n._emscripten_bind_btConvexTriangleMeshShape_calculateLocalInertia_2 = n.asm.yi).apply(null, arguments) + }, + bc = n._emscripten_bind_btConvexTriangleMeshShape_setMargin_1 = function() { + return (bc = n._emscripten_bind_btConvexTriangleMeshShape_setMargin_1 = n.asm.zi).apply(null, arguments) + }, + mc = n._emscripten_bind_btConvexTriangleMeshShape_getMargin_0 = function() { + return (mc = n._emscripten_bind_btConvexTriangleMeshShape_getMargin_0 = n.asm.Ai).apply(null, arguments) + }, + yc = n._emscripten_bind_btConvexTriangleMeshShape___destroy___0 = function() { + return (yc = n._emscripten_bind_btConvexTriangleMeshShape___destroy___0 = n.asm.Bi).apply(null, arguments) + }, + dc = n._emscripten_bind_btBoxShape_btBoxShape_1 = function() { + return (dc = n._emscripten_bind_btBoxShape_btBoxShape_1 = n.asm.Ci).apply(null, arguments) + }, + fc = n._emscripten_bind_btBoxShape_setMargin_1 = function() { + return (fc = n._emscripten_bind_btBoxShape_setMargin_1 = n.asm.Di).apply(null, arguments) + }, + hc = n._emscripten_bind_btBoxShape_getMargin_0 = function() { + return (hc = n._emscripten_bind_btBoxShape_getMargin_0 = n.asm.Ei).apply(null, arguments) + }, + Bc = n._emscripten_bind_btBoxShape_setLocalScaling_1 = function() { + return (Bc = n._emscripten_bind_btBoxShape_setLocalScaling_1 = n.asm.Fi).apply(null, arguments) + }, + gc = n._emscripten_bind_btBoxShape_getLocalScaling_0 = function() { + return (gc = n._emscripten_bind_btBoxShape_getLocalScaling_0 = n.asm.Gi).apply(null, arguments) + }, + kc = n._emscripten_bind_btBoxShape_calculateLocalInertia_2 = function() { + return (kc = n._emscripten_bind_btBoxShape_calculateLocalInertia_2 = n.asm.Hi).apply(null, arguments) + }, + Cc = n._emscripten_bind_btBoxShape___destroy___0 = function() { + return (Cc = n._emscripten_bind_btBoxShape___destroy___0 = n.asm.Ii).apply(null, arguments) + }, + Sc = n._emscripten_bind_btCapsuleShapeX_btCapsuleShapeX_2 = function() { + return (Sc = n._emscripten_bind_btCapsuleShapeX_btCapsuleShapeX_2 = n.asm.Ji).apply(null, arguments) + }, + jc = n._emscripten_bind_btCapsuleShapeX_setMargin_1 = function() { + return (jc = n._emscripten_bind_btCapsuleShapeX_setMargin_1 = n.asm.Ki).apply(null, arguments) + }, + vc = n._emscripten_bind_btCapsuleShapeX_getMargin_0 = function() { + return (vc = n._emscripten_bind_btCapsuleShapeX_getMargin_0 = n.asm.Li).apply(null, arguments) + }, + Ic = n._emscripten_bind_btCapsuleShapeX_getUpAxis_0 = function() { + return (Ic = n._emscripten_bind_btCapsuleShapeX_getUpAxis_0 = n.asm.Mi).apply(null, arguments) + }, + Rc = n._emscripten_bind_btCapsuleShapeX_getRadius_0 = function() { + return (Rc = n._emscripten_bind_btCapsuleShapeX_getRadius_0 = n.asm.Ni).apply(null, arguments) + }, + Dc = n._emscripten_bind_btCapsuleShapeX_getHalfHeight_0 = function() { + return (Dc = n._emscripten_bind_btCapsuleShapeX_getHalfHeight_0 = n.asm.Oi).apply(null, arguments) + }, + Pc = n._emscripten_bind_btCapsuleShapeX_setLocalScaling_1 = function() { + return (Pc = n._emscripten_bind_btCapsuleShapeX_setLocalScaling_1 = n.asm.Pi).apply(null, arguments) + }, + Tc = n._emscripten_bind_btCapsuleShapeX_getLocalScaling_0 = function() { + return (Tc = n._emscripten_bind_btCapsuleShapeX_getLocalScaling_0 = n.asm.Qi).apply(null, arguments) + }, + Oc = n._emscripten_bind_btCapsuleShapeX_calculateLocalInertia_2 = function() { + return (Oc = n._emscripten_bind_btCapsuleShapeX_calculateLocalInertia_2 = n.asm.Ri).apply(null, arguments) + }, + Wc = n._emscripten_bind_btCapsuleShapeX___destroy___0 = function() { + return (Wc = n._emscripten_bind_btCapsuleShapeX___destroy___0 = n.asm.Si).apply(null, arguments) + }, + Ac = n._emscripten_bind_btCapsuleShapeZ_btCapsuleShapeZ_2 = function() { + return (Ac = n._emscripten_bind_btCapsuleShapeZ_btCapsuleShapeZ_2 = n.asm.Ti).apply(null, arguments) + }, + Mc = n._emscripten_bind_btCapsuleShapeZ_setMargin_1 = function() { + return (Mc = n._emscripten_bind_btCapsuleShapeZ_setMargin_1 = n.asm.Ui).apply(null, arguments) + }, + xc = n._emscripten_bind_btCapsuleShapeZ_getMargin_0 = function() { + return (xc = n._emscripten_bind_btCapsuleShapeZ_getMargin_0 = n.asm.Vi).apply(null, arguments) + }, + Fc = n._emscripten_bind_btCapsuleShapeZ_getUpAxis_0 = function() { + return (Fc = n._emscripten_bind_btCapsuleShapeZ_getUpAxis_0 = n.asm.Wi).apply(null, arguments) + }, + Lc = n._emscripten_bind_btCapsuleShapeZ_getRadius_0 = function() { + return (Lc = n._emscripten_bind_btCapsuleShapeZ_getRadius_0 = n.asm.Xi).apply(null, arguments) + }, + Gc = n._emscripten_bind_btCapsuleShapeZ_getHalfHeight_0 = function() { + return (Gc = n._emscripten_bind_btCapsuleShapeZ_getHalfHeight_0 = n.asm.Yi).apply(null, arguments) + }, + wc = n._emscripten_bind_btCapsuleShapeZ_setLocalScaling_1 = function() { + return (wc = n._emscripten_bind_btCapsuleShapeZ_setLocalScaling_1 = n.asm.Zi).apply(null, arguments) + }, + Hc = n._emscripten_bind_btCapsuleShapeZ_getLocalScaling_0 = function() { + return (Hc = n._emscripten_bind_btCapsuleShapeZ_getLocalScaling_0 = n.asm._i).apply(null, arguments) + }, + Vc = n._emscripten_bind_btCapsuleShapeZ_calculateLocalInertia_2 = function() { + return (Vc = n._emscripten_bind_btCapsuleShapeZ_calculateLocalInertia_2 = n.asm.$i).apply(null, arguments) + }, + Ec = n._emscripten_bind_btCapsuleShapeZ___destroy___0 = function() { + return (Ec = n._emscripten_bind_btCapsuleShapeZ___destroy___0 = n.asm.aj).apply(null, arguments) + }, + Nc = n._emscripten_bind_btCylinderShapeX_btCylinderShapeX_1 = function() { + return (Nc = n._emscripten_bind_btCylinderShapeX_btCylinderShapeX_1 = n.asm.bj).apply(null, arguments) + }, + Uc = n._emscripten_bind_btCylinderShapeX_setMargin_1 = function() { + return (Uc = n._emscripten_bind_btCylinderShapeX_setMargin_1 = n.asm.cj).apply(null, arguments) + }, + zc = n._emscripten_bind_btCylinderShapeX_getMargin_0 = function() { + return (zc = n._emscripten_bind_btCylinderShapeX_getMargin_0 = n.asm.dj).apply(null, arguments) + }, + qc = n._emscripten_bind_btCylinderShapeX_setLocalScaling_1 = function() { + return (qc = n._emscripten_bind_btCylinderShapeX_setLocalScaling_1 = n.asm.ej).apply(null, arguments) + }, + Kc = n._emscripten_bind_btCylinderShapeX_getLocalScaling_0 = function() { + return (Kc = n._emscripten_bind_btCylinderShapeX_getLocalScaling_0 = n.asm.fj).apply(null, arguments) + }, + Qc = n._emscripten_bind_btCylinderShapeX_calculateLocalInertia_2 = function() { + return (Qc = n._emscripten_bind_btCylinderShapeX_calculateLocalInertia_2 = n.asm.gj).apply(null, arguments) + }, + Xc = n._emscripten_bind_btCylinderShapeX___destroy___0 = function() { + return (Xc = n._emscripten_bind_btCylinderShapeX___destroy___0 = n.asm.hj).apply(null, arguments) + }, + Zc = n._emscripten_bind_btCylinderShapeZ_btCylinderShapeZ_1 = function() { + return (Zc = n._emscripten_bind_btCylinderShapeZ_btCylinderShapeZ_1 = n.asm.ij).apply(null, arguments) + }, + Yc = n._emscripten_bind_btCylinderShapeZ_setMargin_1 = function() { + return (Yc = n._emscripten_bind_btCylinderShapeZ_setMargin_1 = n.asm.jj).apply(null, arguments) + }, + Jc = n._emscripten_bind_btCylinderShapeZ_getMargin_0 = function() { + return (Jc = n._emscripten_bind_btCylinderShapeZ_getMargin_0 = n.asm.kj).apply(null, arguments) + }, + $c = n._emscripten_bind_btCylinderShapeZ_setLocalScaling_1 = function() { + return ($c = n._emscripten_bind_btCylinderShapeZ_setLocalScaling_1 = n.asm.lj).apply(null, arguments) + }, + ta = n._emscripten_bind_btCylinderShapeZ_getLocalScaling_0 = function() { + return (ta = n._emscripten_bind_btCylinderShapeZ_getLocalScaling_0 = n.asm.mj).apply(null, arguments) + }, + ea = n._emscripten_bind_btCylinderShapeZ_calculateLocalInertia_2 = function() { + return (ea = n._emscripten_bind_btCylinderShapeZ_calculateLocalInertia_2 = n.asm.nj).apply(null, arguments) + }, + na = n._emscripten_bind_btCylinderShapeZ___destroy___0 = function() { + return (na = n._emscripten_bind_btCylinderShapeZ___destroy___0 = n.asm.oj).apply(null, arguments) + }, + oa = n._emscripten_bind_btSphereShape_btSphereShape_1 = function() { + return (oa = n._emscripten_bind_btSphereShape_btSphereShape_1 = n.asm.pj).apply(null, arguments) + }, + _a = n._emscripten_bind_btSphereShape_setMargin_1 = function() { + return (_a = n._emscripten_bind_btSphereShape_setMargin_1 = n.asm.qj).apply(null, arguments) + }, + ia = n._emscripten_bind_btSphereShape_getMargin_0 = function() { + return (ia = n._emscripten_bind_btSphereShape_getMargin_0 = n.asm.rj).apply(null, arguments) + }, + ra = n._emscripten_bind_btSphereShape_setLocalScaling_1 = function() { + return (ra = n._emscripten_bind_btSphereShape_setLocalScaling_1 = n.asm.sj).apply(null, arguments) + }, + pa = n._emscripten_bind_btSphereShape_getLocalScaling_0 = function() { + return (pa = n._emscripten_bind_btSphereShape_getLocalScaling_0 = n.asm.tj).apply(null, arguments) + }, + sa = n._emscripten_bind_btSphereShape_calculateLocalInertia_2 = function() { + return (sa = n._emscripten_bind_btSphereShape_calculateLocalInertia_2 = n.asm.uj).apply(null, arguments) + }, + ca = n._emscripten_bind_btSphereShape___destroy___0 = function() { + return (ca = n._emscripten_bind_btSphereShape___destroy___0 = n.asm.vj).apply(null, arguments) + }, + aa = n._emscripten_bind_btMultiSphereShape_btMultiSphereShape_3 = function() { + return (aa = n._emscripten_bind_btMultiSphereShape_btMultiSphereShape_3 = n.asm.wj).apply(null, arguments) + }, + la = n._emscripten_bind_btMultiSphereShape_setLocalScaling_1 = function() { + return (la = n._emscripten_bind_btMultiSphereShape_setLocalScaling_1 = n.asm.xj).apply(null, arguments) + }, + ua = n._emscripten_bind_btMultiSphereShape_getLocalScaling_0 = function() { + return (ua = n._emscripten_bind_btMultiSphereShape_getLocalScaling_0 = n.asm.yj).apply(null, arguments) + }, + ba = n._emscripten_bind_btMultiSphereShape_calculateLocalInertia_2 = function() { + return (ba = n._emscripten_bind_btMultiSphereShape_calculateLocalInertia_2 = n.asm.zj).apply(null, arguments) + }, + ma = n._emscripten_bind_btMultiSphereShape___destroy___0 = function() { + return (ma = n._emscripten_bind_btMultiSphereShape___destroy___0 = n.asm.Aj).apply(null, arguments) + }, + ya = n._emscripten_bind_btConeShapeX_btConeShapeX_2 = function() { + return (ya = n._emscripten_bind_btConeShapeX_btConeShapeX_2 = n.asm.Bj).apply(null, arguments) + }, + da = n._emscripten_bind_btConeShapeX_setLocalScaling_1 = function() { + return (da = n._emscripten_bind_btConeShapeX_setLocalScaling_1 = n.asm.Cj).apply(null, arguments) + }, + fa = n._emscripten_bind_btConeShapeX_getLocalScaling_0 = function() { + return (fa = n._emscripten_bind_btConeShapeX_getLocalScaling_0 = n.asm.Dj).apply(null, arguments) + }, + ha = n._emscripten_bind_btConeShapeX_calculateLocalInertia_2 = function() { + return (ha = n._emscripten_bind_btConeShapeX_calculateLocalInertia_2 = n.asm.Ej).apply(null, arguments) + }, + Ba = n._emscripten_bind_btConeShapeX___destroy___0 = function() { + return (Ba = n._emscripten_bind_btConeShapeX___destroy___0 = n.asm.Fj).apply(null, arguments) + }, + ga = n._emscripten_bind_btConeShapeZ_btConeShapeZ_2 = function() { + return (ga = n._emscripten_bind_btConeShapeZ_btConeShapeZ_2 = n.asm.Gj).apply(null, arguments) + }, + ka = n._emscripten_bind_btConeShapeZ_setLocalScaling_1 = function() { + return (ka = n._emscripten_bind_btConeShapeZ_setLocalScaling_1 = n.asm.Hj).apply(null, arguments) + }, + Ca = n._emscripten_bind_btConeShapeZ_getLocalScaling_0 = function() { + return (Ca = n._emscripten_bind_btConeShapeZ_getLocalScaling_0 = n.asm.Ij).apply(null, arguments) + }, + Sa = n._emscripten_bind_btConeShapeZ_calculateLocalInertia_2 = function() { + return (Sa = n._emscripten_bind_btConeShapeZ_calculateLocalInertia_2 = n.asm.Jj).apply(null, arguments) + }, + ja = n._emscripten_bind_btConeShapeZ___destroy___0 = function() { + return (ja = n._emscripten_bind_btConeShapeZ___destroy___0 = n.asm.Kj).apply(null, arguments) + }, + va = n._emscripten_bind_btIntArray_size_0 = function() { + return (va = n._emscripten_bind_btIntArray_size_0 = n.asm.Lj).apply(null, arguments) + }, + Ia = n._emscripten_bind_btIntArray_at_1 = function() { + return (Ia = n._emscripten_bind_btIntArray_at_1 = n.asm.Mj).apply(null, arguments) + }, + Ra = n._emscripten_bind_btIntArray___destroy___0 = function() { + return (Ra = n._emscripten_bind_btIntArray___destroy___0 = n.asm.Nj).apply(null, arguments) + }, + Da = n._emscripten_bind_btFace_get_m_indices_0 = function() { + return (Da = n._emscripten_bind_btFace_get_m_indices_0 = n.asm.Oj).apply(null, arguments) + }, + Pa = n._emscripten_bind_btFace_set_m_indices_1 = function() { + return (Pa = n._emscripten_bind_btFace_set_m_indices_1 = n.asm.Pj).apply(null, arguments) + }, + Ta = n._emscripten_bind_btFace_get_m_plane_1 = function() { + return (Ta = n._emscripten_bind_btFace_get_m_plane_1 = n.asm.Qj).apply(null, arguments) + }, + Oa = n._emscripten_bind_btFace_set_m_plane_2 = function() { + return (Oa = n._emscripten_bind_btFace_set_m_plane_2 = n.asm.Rj).apply(null, arguments) + }, + Wa = n._emscripten_bind_btFace___destroy___0 = function() { + return (Wa = n._emscripten_bind_btFace___destroy___0 = n.asm.Sj).apply(null, arguments) + }, + Aa = n._emscripten_bind_btVector3Array_size_0 = function() { + return (Aa = n._emscripten_bind_btVector3Array_size_0 = n.asm.Tj).apply(null, arguments) + }, + Ma = n._emscripten_bind_btVector3Array_at_1 = function() { + return (Ma = n._emscripten_bind_btVector3Array_at_1 = n.asm.Uj).apply(null, arguments) + }, + xa = n._emscripten_bind_btVector3Array___destroy___0 = function() { + return (xa = n._emscripten_bind_btVector3Array___destroy___0 = n.asm.Vj).apply(null, arguments) + }, + Fa = n._emscripten_bind_btFaceArray_size_0 = function() { + return (Fa = n._emscripten_bind_btFaceArray_size_0 = n.asm.Wj).apply(null, arguments) + }, + La = n._emscripten_bind_btFaceArray_at_1 = function() { + return (La = n._emscripten_bind_btFaceArray_at_1 = n.asm.Xj).apply(null, arguments) + }, + Ga = n._emscripten_bind_btFaceArray___destroy___0 = function() { + return (Ga = n._emscripten_bind_btFaceArray___destroy___0 = n.asm.Yj).apply(null, arguments) + }, + wa = n._emscripten_bind_btConvexPolyhedron_get_m_vertices_0 = function() { + return (wa = n._emscripten_bind_btConvexPolyhedron_get_m_vertices_0 = n.asm.Zj).apply(null, arguments) + }, + Ha = n._emscripten_bind_btConvexPolyhedron_set_m_vertices_1 = function() { + return (Ha = n._emscripten_bind_btConvexPolyhedron_set_m_vertices_1 = n.asm._j).apply(null, arguments) + }, + Va = n._emscripten_bind_btConvexPolyhedron_get_m_faces_0 = function() { + return (Va = n._emscripten_bind_btConvexPolyhedron_get_m_faces_0 = n.asm.$j).apply(null, arguments) + }, + Ea = n._emscripten_bind_btConvexPolyhedron_set_m_faces_1 = function() { + return (Ea = n._emscripten_bind_btConvexPolyhedron_set_m_faces_1 = n.asm.ak).apply(null, arguments) + }, + Na = n._emscripten_bind_btConvexPolyhedron___destroy___0 = function() { + return (Na = n._emscripten_bind_btConvexPolyhedron___destroy___0 = n.asm.bk).apply(null, arguments) + }, + Ua = n._emscripten_bind_btConvexHullShape_btConvexHullShape_0 = function() { + return (Ua = n._emscripten_bind_btConvexHullShape_btConvexHullShape_0 = n.asm.ck).apply(null, arguments) + }, + za = n._emscripten_bind_btConvexHullShape_btConvexHullShape_1 = function() { + return (za = n._emscripten_bind_btConvexHullShape_btConvexHullShape_1 = n.asm.dk).apply(null, arguments) + }, + qa = n._emscripten_bind_btConvexHullShape_btConvexHullShape_2 = function() { + return (qa = n._emscripten_bind_btConvexHullShape_btConvexHullShape_2 = n.asm.ek).apply(null, arguments) + }, + Ka = n._emscripten_bind_btConvexHullShape_addPoint_1 = function() { + return (Ka = n._emscripten_bind_btConvexHullShape_addPoint_1 = n.asm.fk).apply(null, arguments) + }, + Qa = n._emscripten_bind_btConvexHullShape_addPoint_2 = function() { + return (Qa = n._emscripten_bind_btConvexHullShape_addPoint_2 = n.asm.gk).apply(null, arguments) + }, + Xa = n._emscripten_bind_btConvexHullShape_setMargin_1 = function() { + return (Xa = n._emscripten_bind_btConvexHullShape_setMargin_1 = n.asm.hk).apply(null, arguments) + }, + Za = n._emscripten_bind_btConvexHullShape_getMargin_0 = function() { + return (Za = n._emscripten_bind_btConvexHullShape_getMargin_0 = n.asm.ik).apply(null, arguments) + }, + Ya = n._emscripten_bind_btConvexHullShape_getNumVertices_0 = function() { + return (Ya = n._emscripten_bind_btConvexHullShape_getNumVertices_0 = n.asm.jk).apply(null, arguments) + }, + Ja = n._emscripten_bind_btConvexHullShape_initializePolyhedralFeatures_1 = function() { + return (Ja = n._emscripten_bind_btConvexHullShape_initializePolyhedralFeatures_1 = n.asm.kk).apply(null, arguments) + }, + $a = n._emscripten_bind_btConvexHullShape_recalcLocalAabb_0 = function() { + return ($a = n._emscripten_bind_btConvexHullShape_recalcLocalAabb_0 = n.asm.lk).apply(null, arguments) + }, + tl = n._emscripten_bind_btConvexHullShape_getConvexPolyhedron_0 = function() { + return (tl = n._emscripten_bind_btConvexHullShape_getConvexPolyhedron_0 = n.asm.mk).apply(null, arguments) + }, + el = n._emscripten_bind_btConvexHullShape_setLocalScaling_1 = function() { + return (el = n._emscripten_bind_btConvexHullShape_setLocalScaling_1 = n.asm.nk).apply(null, arguments) + }, + nl = n._emscripten_bind_btConvexHullShape_getLocalScaling_0 = function() { + return (nl = n._emscripten_bind_btConvexHullShape_getLocalScaling_0 = n.asm.ok).apply(null, arguments) + }, + ol = n._emscripten_bind_btConvexHullShape_calculateLocalInertia_2 = function() { + return (ol = n._emscripten_bind_btConvexHullShape_calculateLocalInertia_2 = n.asm.pk).apply(null, arguments) + }, + _l = n._emscripten_bind_btConvexHullShape___destroy___0 = function() { + return (_l = n._emscripten_bind_btConvexHullShape___destroy___0 = n.asm.qk).apply(null, arguments) + }, + il = n._emscripten_bind_btShapeHull_btShapeHull_1 = function() { + return (il = n._emscripten_bind_btShapeHull_btShapeHull_1 = n.asm.rk).apply(null, arguments) + }, + rl = n._emscripten_bind_btShapeHull_buildHull_1 = function() { + return (rl = n._emscripten_bind_btShapeHull_buildHull_1 = n.asm.sk).apply(null, arguments) + }, + pl = n._emscripten_bind_btShapeHull_numVertices_0 = function() { + return (pl = n._emscripten_bind_btShapeHull_numVertices_0 = n.asm.tk).apply(null, arguments) + }, + sl = n._emscripten_bind_btShapeHull_getVertexPointer_0 = function() { + return (sl = n._emscripten_bind_btShapeHull_getVertexPointer_0 = n.asm.uk).apply(null, arguments) + }, + cl = n._emscripten_bind_btShapeHull___destroy___0 = function() { + return (cl = n._emscripten_bind_btShapeHull___destroy___0 = n.asm.vk).apply(null, arguments) + }, + al = n._emscripten_bind_btCompoundShape_btCompoundShape_0 = function() { + return (al = n._emscripten_bind_btCompoundShape_btCompoundShape_0 = n.asm.wk).apply(null, arguments) + }, + ll = n._emscripten_bind_btCompoundShape_btCompoundShape_1 = function() { + return (ll = n._emscripten_bind_btCompoundShape_btCompoundShape_1 = n.asm.xk).apply(null, arguments) + }, + ul = n._emscripten_bind_btCompoundShape_addChildShape_2 = function() { + return (ul = n._emscripten_bind_btCompoundShape_addChildShape_2 = n.asm.yk).apply(null, arguments) + }, + bl = n._emscripten_bind_btCompoundShape_removeChildShape_1 = function() { + return (bl = n._emscripten_bind_btCompoundShape_removeChildShape_1 = n.asm.zk).apply(null, arguments) + }, + ml = n._emscripten_bind_btCompoundShape_removeChildShapeByIndex_1 = function() { + return (ml = n._emscripten_bind_btCompoundShape_removeChildShapeByIndex_1 = n.asm.Ak).apply(null, arguments) + }, + yl = n._emscripten_bind_btCompoundShape_getNumChildShapes_0 = function() { + return (yl = n._emscripten_bind_btCompoundShape_getNumChildShapes_0 = n.asm.Bk).apply(null, arguments) + }, + dl = n._emscripten_bind_btCompoundShape_getChildShape_1 = function() { + return (dl = n._emscripten_bind_btCompoundShape_getChildShape_1 = n.asm.Ck).apply(null, arguments) + }, + fl = n._emscripten_bind_btCompoundShape_updateChildTransform_2 = function() { + return (fl = n._emscripten_bind_btCompoundShape_updateChildTransform_2 = n.asm.Dk).apply(null, arguments) + }, + hl = n._emscripten_bind_btCompoundShape_updateChildTransform_3 = function() { + return (hl = n._emscripten_bind_btCompoundShape_updateChildTransform_3 = n.asm.Ek).apply(null, arguments) + }, + Bl = n._emscripten_bind_btCompoundShape_setMargin_1 = function() { + return (Bl = n._emscripten_bind_btCompoundShape_setMargin_1 = n.asm.Fk).apply(null, arguments) + }, + gl = n._emscripten_bind_btCompoundShape_getMargin_0 = function() { + return (gl = n._emscripten_bind_btCompoundShape_getMargin_0 = n.asm.Gk).apply(null, arguments) + }, + kl = n._emscripten_bind_btCompoundShape_setLocalScaling_1 = function() { + return (kl = n._emscripten_bind_btCompoundShape_setLocalScaling_1 = n.asm.Hk).apply(null, arguments) + }, + Cl = n._emscripten_bind_btCompoundShape_getLocalScaling_0 = function() { + return (Cl = n._emscripten_bind_btCompoundShape_getLocalScaling_0 = n.asm.Ik).apply(null, arguments) + }, + Sl = n._emscripten_bind_btCompoundShape_calculateLocalInertia_2 = function() { + return (Sl = n._emscripten_bind_btCompoundShape_calculateLocalInertia_2 = n.asm.Jk).apply(null, arguments) + }, + jl = n._emscripten_bind_btCompoundShape___destroy___0 = function() { + return (jl = n._emscripten_bind_btCompoundShape___destroy___0 = n.asm.Kk).apply(null, arguments) + }, + vl = n._emscripten_bind_btIndexedMesh_get_m_numTriangles_0 = function() { + return (vl = n._emscripten_bind_btIndexedMesh_get_m_numTriangles_0 = n.asm.Lk).apply(null, arguments) + }, + Il = n._emscripten_bind_btIndexedMesh_set_m_numTriangles_1 = function() { + return (Il = n._emscripten_bind_btIndexedMesh_set_m_numTriangles_1 = n.asm.Mk).apply(null, arguments) + }, + Rl = n._emscripten_bind_btIndexedMesh___destroy___0 = function() { + return (Rl = n._emscripten_bind_btIndexedMesh___destroy___0 = n.asm.Nk).apply(null, arguments) + }, + Dl = n._emscripten_bind_btIndexedMeshArray_size_0 = function() { + return (Dl = n._emscripten_bind_btIndexedMeshArray_size_0 = n.asm.Ok).apply(null, arguments) + }, + Pl = n._emscripten_bind_btIndexedMeshArray_at_1 = function() { + return (Pl = n._emscripten_bind_btIndexedMeshArray_at_1 = n.asm.Pk).apply(null, arguments) + }, + Tl = n._emscripten_bind_btIndexedMeshArray___destroy___0 = function() { + return (Tl = n._emscripten_bind_btIndexedMeshArray___destroy___0 = n.asm.Qk).apply(null, arguments) + }, + Ol = n._emscripten_bind_btTriangleMesh_btTriangleMesh_0 = function() { + return (Ol = n._emscripten_bind_btTriangleMesh_btTriangleMesh_0 = n.asm.Rk).apply(null, arguments) + }, + Wl = n._emscripten_bind_btTriangleMesh_btTriangleMesh_1 = function() { + return (Wl = n._emscripten_bind_btTriangleMesh_btTriangleMesh_1 = n.asm.Sk).apply(null, arguments) + }, + Al = n._emscripten_bind_btTriangleMesh_btTriangleMesh_2 = function() { + return (Al = n._emscripten_bind_btTriangleMesh_btTriangleMesh_2 = n.asm.Tk).apply(null, arguments) + }, + Ml = n._emscripten_bind_btTriangleMesh_addTriangle_3 = function() { + return (Ml = n._emscripten_bind_btTriangleMesh_addTriangle_3 = n.asm.Uk).apply(null, arguments) + }, + xl = n._emscripten_bind_btTriangleMesh_addTriangle_4 = function() { + return (xl = n._emscripten_bind_btTriangleMesh_addTriangle_4 = n.asm.Vk).apply(null, arguments) + }, + Fl = n._emscripten_bind_btTriangleMesh_findOrAddVertex_2 = function() { + return (Fl = n._emscripten_bind_btTriangleMesh_findOrAddVertex_2 = n.asm.Wk).apply(null, arguments) + }, + Ll = n._emscripten_bind_btTriangleMesh_addIndex_1 = function() { + return (Ll = n._emscripten_bind_btTriangleMesh_addIndex_1 = n.asm.Xk).apply(null, arguments) + }, + Gl = n._emscripten_bind_btTriangleMesh_getIndexedMeshArray_0 = function() { + return (Gl = n._emscripten_bind_btTriangleMesh_getIndexedMeshArray_0 = n.asm.Yk).apply(null, arguments) + }, + wl = n._emscripten_bind_btTriangleMesh_setScaling_1 = function() { + return (wl = n._emscripten_bind_btTriangleMesh_setScaling_1 = n.asm.Zk).apply(null, arguments) + }, + Hl = n._emscripten_bind_btTriangleMesh___destroy___0 = function() { + return (Hl = n._emscripten_bind_btTriangleMesh___destroy___0 = n.asm._k).apply(null, arguments) + }, + Vl = n._emscripten_bind_btEmptyShape_btEmptyShape_0 = function() { + return (Vl = n._emscripten_bind_btEmptyShape_btEmptyShape_0 = n.asm.$k).apply(null, arguments) + }, + El = n._emscripten_bind_btEmptyShape_setLocalScaling_1 = function() { + return (El = n._emscripten_bind_btEmptyShape_setLocalScaling_1 = n.asm.al).apply(null, arguments) + }, + Nl = n._emscripten_bind_btEmptyShape_getLocalScaling_0 = function() { + return (Nl = n._emscripten_bind_btEmptyShape_getLocalScaling_0 = n.asm.bl).apply(null, arguments) + }, + Ul = n._emscripten_bind_btEmptyShape_calculateLocalInertia_2 = function() { + return (Ul = n._emscripten_bind_btEmptyShape_calculateLocalInertia_2 = n.asm.cl).apply(null, arguments) + }, + zl = n._emscripten_bind_btEmptyShape___destroy___0 = function() { + return (zl = n._emscripten_bind_btEmptyShape___destroy___0 = n.asm.dl).apply(null, arguments) + }, + ql = n._emscripten_bind_btStaticPlaneShape_btStaticPlaneShape_2 = function() { + return (ql = n._emscripten_bind_btStaticPlaneShape_btStaticPlaneShape_2 = n.asm.el).apply(null, arguments) + }, + Kl = n._emscripten_bind_btStaticPlaneShape_setLocalScaling_1 = function() { + return (Kl = n._emscripten_bind_btStaticPlaneShape_setLocalScaling_1 = n.asm.fl).apply(null, arguments) + }, + Ql = n._emscripten_bind_btStaticPlaneShape_getLocalScaling_0 = function() { + return (Ql = n._emscripten_bind_btStaticPlaneShape_getLocalScaling_0 = n.asm.gl).apply(null, arguments) + }, + Xl = n._emscripten_bind_btStaticPlaneShape_calculateLocalInertia_2 = function() { + return (Xl = n._emscripten_bind_btStaticPlaneShape_calculateLocalInertia_2 = n.asm.hl).apply(null, arguments) + }, + Zl = n._emscripten_bind_btStaticPlaneShape___destroy___0 = function() { + return (Zl = n._emscripten_bind_btStaticPlaneShape___destroy___0 = n.asm.il).apply(null, arguments) + }, + Yl = n._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_2 = function() { + return (Yl = n._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_2 = n.asm.jl).apply(null, arguments) + }, + Jl = n._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_3 = function() { + return (Jl = n._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_3 = n.asm.kl).apply(null, arguments) + }, + $l = n._emscripten_bind_btBvhTriangleMeshShape_setLocalScaling_1 = function() { + return ($l = n._emscripten_bind_btBvhTriangleMeshShape_setLocalScaling_1 = n.asm.ll).apply(null, arguments) + }, + tu = n._emscripten_bind_btBvhTriangleMeshShape_getLocalScaling_0 = function() { + return (tu = n._emscripten_bind_btBvhTriangleMeshShape_getLocalScaling_0 = n.asm.ml).apply(null, arguments) + }, + eu = n._emscripten_bind_btBvhTriangleMeshShape_calculateLocalInertia_2 = function() { + return (eu = n._emscripten_bind_btBvhTriangleMeshShape_calculateLocalInertia_2 = n.asm.nl).apply(null, arguments) + }, + nu = n._emscripten_bind_btBvhTriangleMeshShape___destroy___0 = function() { + return (nu = n._emscripten_bind_btBvhTriangleMeshShape___destroy___0 = n.asm.ol).apply(null, arguments) + }, + ou = n._emscripten_bind_btHeightfieldTerrainShape_btHeightfieldTerrainShape_9 = function() { + return (ou = n._emscripten_bind_btHeightfieldTerrainShape_btHeightfieldTerrainShape_9 = n.asm.pl).apply(null, arguments) + }, + _u = n._emscripten_bind_btHeightfieldTerrainShape_setMargin_1 = function() { + return (_u = n._emscripten_bind_btHeightfieldTerrainShape_setMargin_1 = n.asm.ql).apply(null, arguments) + }, + iu = n._emscripten_bind_btHeightfieldTerrainShape_getMargin_0 = function() { + return (iu = n._emscripten_bind_btHeightfieldTerrainShape_getMargin_0 = n.asm.rl).apply(null, arguments) + }, + ru = n._emscripten_bind_btHeightfieldTerrainShape_setLocalScaling_1 = function() { + return (ru = n._emscripten_bind_btHeightfieldTerrainShape_setLocalScaling_1 = n.asm.sl).apply(null, arguments) + }, + pu = n._emscripten_bind_btHeightfieldTerrainShape_getLocalScaling_0 = function() { + return (pu = n._emscripten_bind_btHeightfieldTerrainShape_getLocalScaling_0 = n.asm.tl).apply(null, arguments) + }, + su = n._emscripten_bind_btHeightfieldTerrainShape_calculateLocalInertia_2 = function() { + return (su = n._emscripten_bind_btHeightfieldTerrainShape_calculateLocalInertia_2 = n.asm.ul).apply(null, arguments) + }, + cu = n._emscripten_bind_btHeightfieldTerrainShape___destroy___0 = function() { + return (cu = n._emscripten_bind_btHeightfieldTerrainShape___destroy___0 = n.asm.vl).apply(null, arguments) + }, + au = n._emscripten_bind_btAABB_btAABB_4 = function() { + return (au = n._emscripten_bind_btAABB_btAABB_4 = n.asm.wl).apply(null, arguments) + }, + lu = n._emscripten_bind_btAABB_invalidate_0 = function() { + return (lu = n._emscripten_bind_btAABB_invalidate_0 = n.asm.xl).apply(null, arguments) + }, + uu = n._emscripten_bind_btAABB_increment_margin_1 = function() { + return (uu = n._emscripten_bind_btAABB_increment_margin_1 = n.asm.yl).apply(null, arguments) + }, + bu = n._emscripten_bind_btAABB_copy_with_margin_2 = function() { + return (bu = n._emscripten_bind_btAABB_copy_with_margin_2 = n.asm.zl).apply(null, arguments) + }, + mu = n._emscripten_bind_btAABB___destroy___0 = function() { + return (mu = n._emscripten_bind_btAABB___destroy___0 = n.asm.Al).apply(null, arguments) + }, + yu = n._emscripten_bind_btPrimitiveTriangle_btPrimitiveTriangle_0 = function() { + return (yu = n._emscripten_bind_btPrimitiveTriangle_btPrimitiveTriangle_0 = n.asm.Bl).apply(null, arguments) + }, + du = n._emscripten_bind_btPrimitiveTriangle___destroy___0 = function() { + return (du = n._emscripten_bind_btPrimitiveTriangle___destroy___0 = n.asm.Cl).apply(null, arguments) + }, + fu = n._emscripten_bind_btTriangleShapeEx_btTriangleShapeEx_3 = function() { + return (fu = n._emscripten_bind_btTriangleShapeEx_btTriangleShapeEx_3 = n.asm.Dl).apply(null, arguments) + }, + hu = n._emscripten_bind_btTriangleShapeEx_getAabb_3 = function() { + return (hu = n._emscripten_bind_btTriangleShapeEx_getAabb_3 = n.asm.El).apply(null, arguments) + }, + Bu = n._emscripten_bind_btTriangleShapeEx_applyTransform_1 = function() { + return (Bu = n._emscripten_bind_btTriangleShapeEx_applyTransform_1 = n.asm.Fl).apply(null, arguments) + }, + gu = n._emscripten_bind_btTriangleShapeEx_buildTriPlane_1 = function() { + return (gu = n._emscripten_bind_btTriangleShapeEx_buildTriPlane_1 = n.asm.Gl).apply(null, arguments) + }, + ku = n._emscripten_bind_btTriangleShapeEx___destroy___0 = function() { + return (ku = n._emscripten_bind_btTriangleShapeEx___destroy___0 = n.asm.Hl).apply(null, arguments) + }, + Cu = n._emscripten_bind_btTetrahedronShapeEx_btTetrahedronShapeEx_0 = function() { + return (Cu = n._emscripten_bind_btTetrahedronShapeEx_btTetrahedronShapeEx_0 = n.asm.Il).apply(null, arguments) + }, + Su = n._emscripten_bind_btTetrahedronShapeEx_setVertices_4 = function() { + return (Su = n._emscripten_bind_btTetrahedronShapeEx_setVertices_4 = n.asm.Jl).apply(null, arguments) + }, + ju = n._emscripten_bind_btTetrahedronShapeEx___destroy___0 = function() { + return (ju = n._emscripten_bind_btTetrahedronShapeEx___destroy___0 = n.asm.Kl).apply(null, arguments) + }, + vu = n._emscripten_bind_CompoundPrimitiveManager_get_primitive_count_0 = function() { + return (vu = n._emscripten_bind_CompoundPrimitiveManager_get_primitive_count_0 = n.asm.Ll).apply(null, arguments) + }, + Iu = n._emscripten_bind_CompoundPrimitiveManager_get_primitive_box_2 = function() { + return (Iu = n._emscripten_bind_CompoundPrimitiveManager_get_primitive_box_2 = n.asm.Ml).apply(null, arguments) + }, + Ru = n._emscripten_bind_CompoundPrimitiveManager_get_primitive_triangle_2 = function() { + return (Ru = n._emscripten_bind_CompoundPrimitiveManager_get_primitive_triangle_2 = n.asm.Nl).apply(null, arguments) + }, + Du = n._emscripten_bind_CompoundPrimitiveManager_is_trimesh_0 = function() { + return (Du = n._emscripten_bind_CompoundPrimitiveManager_is_trimesh_0 = n.asm.Ol).apply(null, arguments) + }, + Pu = n._emscripten_bind_CompoundPrimitiveManager_get_m_compoundShape_0 = function() { + return (Pu = n._emscripten_bind_CompoundPrimitiveManager_get_m_compoundShape_0 = n.asm.Pl).apply(null, arguments) + }, + Tu = n._emscripten_bind_CompoundPrimitiveManager_set_m_compoundShape_1 = function() { + return (Tu = n._emscripten_bind_CompoundPrimitiveManager_set_m_compoundShape_1 = n.asm.Ql).apply(null, arguments) + }, + Ou = n._emscripten_bind_CompoundPrimitiveManager___destroy___0 = function() { + return (Ou = n._emscripten_bind_CompoundPrimitiveManager___destroy___0 = n.asm.Rl).apply(null, arguments) + }, + Wu = n._emscripten_bind_btGImpactCompoundShape_btGImpactCompoundShape_0 = function() { + return (Wu = n._emscripten_bind_btGImpactCompoundShape_btGImpactCompoundShape_0 = n.asm.Sl).apply(null, arguments) + }, + Au = n._emscripten_bind_btGImpactCompoundShape_btGImpactCompoundShape_1 = function() { + return (Au = n._emscripten_bind_btGImpactCompoundShape_btGImpactCompoundShape_1 = n.asm.Tl).apply(null, arguments) + }, + Mu = n._emscripten_bind_btGImpactCompoundShape_childrenHasTransform_0 = function() { + return (Mu = n._emscripten_bind_btGImpactCompoundShape_childrenHasTransform_0 = n.asm.Ul).apply(null, arguments) + }, + xu = n._emscripten_bind_btGImpactCompoundShape_getPrimitiveManager_0 = function() { + return (xu = n._emscripten_bind_btGImpactCompoundShape_getPrimitiveManager_0 = n.asm.Vl).apply(null, arguments) + }, + Fu = n._emscripten_bind_btGImpactCompoundShape_getCompoundPrimitiveManager_0 = function() { + return (Fu = n._emscripten_bind_btGImpactCompoundShape_getCompoundPrimitiveManager_0 = n.asm.Wl).apply(null, arguments) + }, + Lu = n._emscripten_bind_btGImpactCompoundShape_getNumChildShapes_0 = function() { + return (Lu = n._emscripten_bind_btGImpactCompoundShape_getNumChildShapes_0 = n.asm.Xl).apply(null, arguments) + }, + Gu = n._emscripten_bind_btGImpactCompoundShape_addChildShape_2 = function() { + return (Gu = n._emscripten_bind_btGImpactCompoundShape_addChildShape_2 = n.asm.Yl).apply(null, arguments) + }, + wu = n._emscripten_bind_btGImpactCompoundShape_getChildShape_1 = function() { + return (wu = n._emscripten_bind_btGImpactCompoundShape_getChildShape_1 = n.asm.Zl).apply(null, arguments) + }, + Hu = n._emscripten_bind_btGImpactCompoundShape_getChildAabb_4 = function() { + return (Hu = n._emscripten_bind_btGImpactCompoundShape_getChildAabb_4 = n.asm._l).apply(null, arguments) + }, + Vu = n._emscripten_bind_btGImpactCompoundShape_getChildTransform_1 = function() { + return (Vu = n._emscripten_bind_btGImpactCompoundShape_getChildTransform_1 = n.asm.$l).apply(null, arguments) + }, + Eu = n._emscripten_bind_btGImpactCompoundShape_setChildTransform_2 = function() { + return (Eu = n._emscripten_bind_btGImpactCompoundShape_setChildTransform_2 = n.asm.am).apply(null, arguments) + }, + Nu = n._emscripten_bind_btGImpactCompoundShape_calculateLocalInertia_2 = function() { + return (Nu = n._emscripten_bind_btGImpactCompoundShape_calculateLocalInertia_2 = n.asm.bm).apply(null, arguments) + }, + Uu = n._emscripten_bind_btGImpactCompoundShape_getName_0 = function() { + return (Uu = n._emscripten_bind_btGImpactCompoundShape_getName_0 = n.asm.cm).apply(null, arguments) + }, + zu = n._emscripten_bind_btGImpactCompoundShape_getGImpactShapeType_0 = function() { + return (zu = n._emscripten_bind_btGImpactCompoundShape_getGImpactShapeType_0 = n.asm.dm).apply(null, arguments) + }, + qu = n._emscripten_bind_btGImpactCompoundShape_setLocalScaling_1 = function() { + return (qu = n._emscripten_bind_btGImpactCompoundShape_setLocalScaling_1 = n.asm.em).apply(null, arguments) + }, + Ku = n._emscripten_bind_btGImpactCompoundShape_getLocalScaling_0 = function() { + return (Ku = n._emscripten_bind_btGImpactCompoundShape_getLocalScaling_0 = n.asm.fm).apply(null, arguments) + }, + Qu = n._emscripten_bind_btGImpactCompoundShape_updateBound_0 = function() { + return (Qu = n._emscripten_bind_btGImpactCompoundShape_updateBound_0 = n.asm.gm).apply(null, arguments) + }, + Xu = n._emscripten_bind_btGImpactCompoundShape_postUpdate_0 = function() { + return (Xu = n._emscripten_bind_btGImpactCompoundShape_postUpdate_0 = n.asm.hm).apply(null, arguments) + }, + Zu = n._emscripten_bind_btGImpactCompoundShape_getShapeType_0 = function() { + return (Zu = n._emscripten_bind_btGImpactCompoundShape_getShapeType_0 = n.asm.im).apply(null, arguments) + }, + Yu = n._emscripten_bind_btGImpactCompoundShape_needsRetrieveTriangles_0 = function() { + return (Yu = n._emscripten_bind_btGImpactCompoundShape_needsRetrieveTriangles_0 = n.asm.jm).apply(null, arguments) + }, + Ju = n._emscripten_bind_btGImpactCompoundShape_needsRetrieveTetrahedrons_0 = function() { + return (Ju = n._emscripten_bind_btGImpactCompoundShape_needsRetrieveTetrahedrons_0 = n.asm.km).apply(null, arguments) + }, + $u = n._emscripten_bind_btGImpactCompoundShape_getBulletTriangle_2 = function() { + return ($u = n._emscripten_bind_btGImpactCompoundShape_getBulletTriangle_2 = n.asm.lm).apply(null, arguments) + }, + tb = n._emscripten_bind_btGImpactCompoundShape_getBulletTetrahedron_2 = function() { + return (tb = n._emscripten_bind_btGImpactCompoundShape_getBulletTetrahedron_2 = n.asm.mm).apply(null, arguments) + }, + eb = n._emscripten_bind_btGImpactCompoundShape___destroy___0 = function() { + return (eb = n._emscripten_bind_btGImpactCompoundShape___destroy___0 = n.asm.nm).apply(null, arguments) + }, + nb = n._emscripten_bind_TrimeshPrimitiveManager_TrimeshPrimitiveManager_0 = function() { + return (nb = n._emscripten_bind_TrimeshPrimitiveManager_TrimeshPrimitiveManager_0 = n.asm.om).apply(null, arguments) + }, + ob = n._emscripten_bind_TrimeshPrimitiveManager_TrimeshPrimitiveManager_1 = function() { + return (ob = n._emscripten_bind_TrimeshPrimitiveManager_TrimeshPrimitiveManager_1 = n.asm.pm).apply(null, arguments) + }, + _b = n._emscripten_bind_TrimeshPrimitiveManager_lock_0 = function() { + return (_b = n._emscripten_bind_TrimeshPrimitiveManager_lock_0 = n.asm.qm).apply(null, arguments) + }, + ib = n._emscripten_bind_TrimeshPrimitiveManager_unlock_0 = function() { + return (ib = n._emscripten_bind_TrimeshPrimitiveManager_unlock_0 = n.asm.rm).apply(null, arguments) + }, + rb = n._emscripten_bind_TrimeshPrimitiveManager_is_trimesh_0 = function() { + return (rb = n._emscripten_bind_TrimeshPrimitiveManager_is_trimesh_0 = n.asm.sm).apply(null, arguments) + }, + pb = n._emscripten_bind_TrimeshPrimitiveManager_get_vertex_count_0 = function() { + return (pb = n._emscripten_bind_TrimeshPrimitiveManager_get_vertex_count_0 = n.asm.tm).apply(null, arguments) + }, + sb = n._emscripten_bind_TrimeshPrimitiveManager_get_indices_4 = function() { + return (sb = n._emscripten_bind_TrimeshPrimitiveManager_get_indices_4 = n.asm.um).apply(null, arguments) + }, + cb = n._emscripten_bind_TrimeshPrimitiveManager_get_vertex_2 = function() { + return (cb = n._emscripten_bind_TrimeshPrimitiveManager_get_vertex_2 = n.asm.vm).apply(null, arguments) + }, + ab = n._emscripten_bind_TrimeshPrimitiveManager_get_bullet_triangle_2 = function() { + return (ab = n._emscripten_bind_TrimeshPrimitiveManager_get_bullet_triangle_2 = n.asm.wm).apply(null, arguments) + }, + lb = n._emscripten_bind_TrimeshPrimitiveManager_get_m_margin_0 = function() { + return (lb = n._emscripten_bind_TrimeshPrimitiveManager_get_m_margin_0 = n.asm.xm).apply(null, arguments) + }, + ub = n._emscripten_bind_TrimeshPrimitiveManager_set_m_margin_1 = function() { + return (ub = n._emscripten_bind_TrimeshPrimitiveManager_set_m_margin_1 = n.asm.ym).apply(null, arguments) + }, + bb = n._emscripten_bind_TrimeshPrimitiveManager_get_m_meshInterface_0 = function() { + return (bb = n._emscripten_bind_TrimeshPrimitiveManager_get_m_meshInterface_0 = n.asm.zm).apply(null, arguments) + }, + mb = n._emscripten_bind_TrimeshPrimitiveManager_set_m_meshInterface_1 = function() { + return (mb = n._emscripten_bind_TrimeshPrimitiveManager_set_m_meshInterface_1 = n.asm.Am).apply(null, arguments) + }, + yb = n._emscripten_bind_TrimeshPrimitiveManager_get_m_part_0 = function() { + return (yb = n._emscripten_bind_TrimeshPrimitiveManager_get_m_part_0 = n.asm.Bm).apply(null, arguments) + }, + db = n._emscripten_bind_TrimeshPrimitiveManager_set_m_part_1 = function() { + return (db = n._emscripten_bind_TrimeshPrimitiveManager_set_m_part_1 = n.asm.Cm).apply(null, arguments) + }, + fb = n._emscripten_bind_TrimeshPrimitiveManager_get_m_lock_count_0 = function() { + return (fb = n._emscripten_bind_TrimeshPrimitiveManager_get_m_lock_count_0 = n.asm.Dm).apply(null, arguments) + }, + hb = n._emscripten_bind_TrimeshPrimitiveManager_set_m_lock_count_1 = function() { + return (hb = n._emscripten_bind_TrimeshPrimitiveManager_set_m_lock_count_1 = n.asm.Em).apply(null, arguments) + }, + Bb = n._emscripten_bind_TrimeshPrimitiveManager_get_numverts_0 = function() { + return (Bb = n._emscripten_bind_TrimeshPrimitiveManager_get_numverts_0 = n.asm.Fm).apply(null, arguments) + }, + gb = n._emscripten_bind_TrimeshPrimitiveManager_set_numverts_1 = function() { + return (gb = n._emscripten_bind_TrimeshPrimitiveManager_set_numverts_1 = n.asm.Gm).apply(null, arguments) + }, + kb = n._emscripten_bind_TrimeshPrimitiveManager_get_type_0 = function() { + return (kb = n._emscripten_bind_TrimeshPrimitiveManager_get_type_0 = n.asm.Hm).apply(null, arguments) + }, + Cb = n._emscripten_bind_TrimeshPrimitiveManager_set_type_1 = function() { + return (Cb = n._emscripten_bind_TrimeshPrimitiveManager_set_type_1 = n.asm.Im).apply(null, arguments) + }, + Sb = n._emscripten_bind_TrimeshPrimitiveManager_get_stride_0 = function() { + return (Sb = n._emscripten_bind_TrimeshPrimitiveManager_get_stride_0 = n.asm.Jm).apply(null, arguments) + }, + jb = n._emscripten_bind_TrimeshPrimitiveManager_set_stride_1 = function() { + return (jb = n._emscripten_bind_TrimeshPrimitiveManager_set_stride_1 = n.asm.Km).apply(null, arguments) + }, + vb = n._emscripten_bind_TrimeshPrimitiveManager_get_indexstride_0 = function() { + return (vb = n._emscripten_bind_TrimeshPrimitiveManager_get_indexstride_0 = n.asm.Lm).apply(null, arguments) + }, + Ib = n._emscripten_bind_TrimeshPrimitiveManager_set_indexstride_1 = function() { + return (Ib = n._emscripten_bind_TrimeshPrimitiveManager_set_indexstride_1 = n.asm.Mm).apply(null, arguments) + }, + Rb = n._emscripten_bind_TrimeshPrimitiveManager_get_numfaces_0 = function() { + return (Rb = n._emscripten_bind_TrimeshPrimitiveManager_get_numfaces_0 = n.asm.Nm).apply(null, arguments) + }, + Db = n._emscripten_bind_TrimeshPrimitiveManager_set_numfaces_1 = function() { + return (Db = n._emscripten_bind_TrimeshPrimitiveManager_set_numfaces_1 = n.asm.Om).apply(null, arguments) + }, + Pb = n._emscripten_bind_TrimeshPrimitiveManager_get_indicestype_0 = function() { + return (Pb = n._emscripten_bind_TrimeshPrimitiveManager_get_indicestype_0 = n.asm.Pm).apply(null, arguments) + }, + Tb = n._emscripten_bind_TrimeshPrimitiveManager_set_indicestype_1 = function() { + return (Tb = n._emscripten_bind_TrimeshPrimitiveManager_set_indicestype_1 = n.asm.Qm).apply(null, arguments) + }, + Ob = n._emscripten_bind_TrimeshPrimitiveManager___destroy___0 = function() { + return (Ob = n._emscripten_bind_TrimeshPrimitiveManager___destroy___0 = n.asm.Rm).apply(null, arguments) + }, + Wb = n._emscripten_bind_btGImpactMeshShapePart_btGImpactMeshShapePart_2 = function() { + return (Wb = n._emscripten_bind_btGImpactMeshShapePart_btGImpactMeshShapePart_2 = n.asm.Sm).apply(null, arguments) + }, + Ab = n._emscripten_bind_btGImpactMeshShapePart_getTrimeshPrimitiveManager_0 = function() { + return (Ab = n._emscripten_bind_btGImpactMeshShapePart_getTrimeshPrimitiveManager_0 = n.asm.Tm).apply(null, arguments) + }, + Mb = n._emscripten_bind_btGImpactMeshShapePart_getVertexCount_0 = function() { + return (Mb = n._emscripten_bind_btGImpactMeshShapePart_getVertexCount_0 = n.asm.Um).apply(null, arguments) + }, + xb = n._emscripten_bind_btGImpactMeshShapePart_getVertex_2 = function() { + return (xb = n._emscripten_bind_btGImpactMeshShapePart_getVertex_2 = n.asm.Vm).apply(null, arguments) + }, + Fb = n._emscripten_bind_btGImpactMeshShapePart_getPart_0 = function() { + return (Fb = n._emscripten_bind_btGImpactMeshShapePart_getPart_0 = n.asm.Wm).apply(null, arguments) + }, + Lb = n._emscripten_bind_btGImpactMeshShapePart_setLocalScaling_1 = function() { + return (Lb = n._emscripten_bind_btGImpactMeshShapePart_setLocalScaling_1 = n.asm.Xm).apply(null, arguments) + }, + Gb = n._emscripten_bind_btGImpactMeshShapePart_getLocalScaling_0 = function() { + return (Gb = n._emscripten_bind_btGImpactMeshShapePart_getLocalScaling_0 = n.asm.Ym).apply(null, arguments) + }, + wb = n._emscripten_bind_btGImpactMeshShapePart_updateBound_0 = function() { + return (wb = n._emscripten_bind_btGImpactMeshShapePart_updateBound_0 = n.asm.Zm).apply(null, arguments) + }, + Hb = n._emscripten_bind_btGImpactMeshShapePart_postUpdate_0 = function() { + return (Hb = n._emscripten_bind_btGImpactMeshShapePart_postUpdate_0 = n.asm._m).apply(null, arguments) + }, + Vb = n._emscripten_bind_btGImpactMeshShapePart_getShapeType_0 = function() { + return (Vb = n._emscripten_bind_btGImpactMeshShapePart_getShapeType_0 = n.asm.$m).apply(null, arguments) + }, + Eb = n._emscripten_bind_btGImpactMeshShapePart_needsRetrieveTriangles_0 = function() { + return (Eb = n._emscripten_bind_btGImpactMeshShapePart_needsRetrieveTriangles_0 = n.asm.an).apply(null, arguments) + }, + Nb = n._emscripten_bind_btGImpactMeshShapePart_needsRetrieveTetrahedrons_0 = function() { + return (Nb = n._emscripten_bind_btGImpactMeshShapePart_needsRetrieveTetrahedrons_0 = n.asm.bn).apply(null, arguments) + }, + Ub = n._emscripten_bind_btGImpactMeshShapePart_getBulletTriangle_2 = function() { + return (Ub = n._emscripten_bind_btGImpactMeshShapePart_getBulletTriangle_2 = n.asm.cn).apply(null, arguments) + }, + zb = n._emscripten_bind_btGImpactMeshShapePart_getBulletTetrahedron_2 = function() { + return (zb = n._emscripten_bind_btGImpactMeshShapePart_getBulletTetrahedron_2 = n.asm.dn).apply(null, arguments) + }, + qb = n._emscripten_bind_btGImpactMeshShapePart___destroy___0 = function() { + return (qb = n._emscripten_bind_btGImpactMeshShapePart___destroy___0 = n.asm.en).apply(null, arguments) + }, + Kb = n._emscripten_bind_btGImpactMeshShape_btGImpactMeshShape_1 = function() { + return (Kb = n._emscripten_bind_btGImpactMeshShape_btGImpactMeshShape_1 = n.asm.fn).apply(null, arguments) + }, + Qb = n._emscripten_bind_btGImpactMeshShape_getMeshInterface_0 = function() { + return (Qb = n._emscripten_bind_btGImpactMeshShape_getMeshInterface_0 = n.asm.gn).apply(null, arguments) + }, + Xb = n._emscripten_bind_btGImpactMeshShape_getMeshPartCount_0 = function() { + return (Xb = n._emscripten_bind_btGImpactMeshShape_getMeshPartCount_0 = n.asm.hn).apply(null, arguments) + }, + Zb = n._emscripten_bind_btGImpactMeshShape_getMeshPart_1 = function() { + return (Zb = n._emscripten_bind_btGImpactMeshShape_getMeshPart_1 = n.asm.jn).apply(null, arguments) + }, + Yb = n._emscripten_bind_btGImpactMeshShape_calculateSerializeBufferSize_0 = function() { + return (Yb = n._emscripten_bind_btGImpactMeshShape_calculateSerializeBufferSize_0 = n.asm.kn).apply(null, arguments) + }, + Jb = n._emscripten_bind_btGImpactMeshShape_setLocalScaling_1 = function() { + return (Jb = n._emscripten_bind_btGImpactMeshShape_setLocalScaling_1 = n.asm.ln).apply(null, arguments) + }, + $b = n._emscripten_bind_btGImpactMeshShape_getLocalScaling_0 = function() { + return ($b = n._emscripten_bind_btGImpactMeshShape_getLocalScaling_0 = n.asm.mn).apply(null, arguments) + }, + tm = n._emscripten_bind_btGImpactMeshShape_updateBound_0 = function() { + return (tm = n._emscripten_bind_btGImpactMeshShape_updateBound_0 = n.asm.nn).apply(null, arguments) + }, + em = n._emscripten_bind_btGImpactMeshShape_postUpdate_0 = function() { + return (em = n._emscripten_bind_btGImpactMeshShape_postUpdate_0 = n.asm.on).apply(null, arguments) + }, + nm = n._emscripten_bind_btGImpactMeshShape_getShapeType_0 = function() { + return (nm = n._emscripten_bind_btGImpactMeshShape_getShapeType_0 = n.asm.pn).apply(null, arguments) + }, + om = n._emscripten_bind_btGImpactMeshShape_needsRetrieveTriangles_0 = function() { + return (om = n._emscripten_bind_btGImpactMeshShape_needsRetrieveTriangles_0 = n.asm.qn).apply(null, arguments) + }, + _m = n._emscripten_bind_btGImpactMeshShape_needsRetrieveTetrahedrons_0 = function() { + return (_m = n._emscripten_bind_btGImpactMeshShape_needsRetrieveTetrahedrons_0 = n.asm.rn).apply(null, arguments) + }, + im = n._emscripten_bind_btGImpactMeshShape_getBulletTriangle_2 = function() { + return (im = n._emscripten_bind_btGImpactMeshShape_getBulletTriangle_2 = n.asm.sn).apply(null, arguments) + }, + rm = n._emscripten_bind_btGImpactMeshShape_getBulletTetrahedron_2 = function() { + return (rm = n._emscripten_bind_btGImpactMeshShape_getBulletTetrahedron_2 = n.asm.tn).apply(null, arguments) + }, + pm = n._emscripten_bind_btGImpactMeshShape___destroy___0 = function() { + return (pm = n._emscripten_bind_btGImpactMeshShape___destroy___0 = n.asm.un).apply(null, arguments) + }, + sm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_0 = function() { + return (sm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_0 = n.asm.vn).apply(null, arguments) + }, + cm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_2 = function() { + return (cm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_2 = n.asm.wn).apply(null, arguments) + }, + am = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_get_m_dispatcher1_0 = function() { + return (am = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_get_m_dispatcher1_0 = n.asm.xn).apply(null, arguments) + }, + lm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_set_m_dispatcher1_1 = function() { + return (lm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_set_m_dispatcher1_1 = n.asm.yn).apply(null, arguments) + }, + um = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_get_m_manifold_0 = function() { + return (um = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_get_m_manifold_0 = n.asm.zn).apply(null, arguments) + }, + bm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_set_m_manifold_1 = function() { + return (bm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo_set_m_manifold_1 = n.asm.An).apply(null, arguments) + }, + mm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo___destroy___0 = function() { + return (mm = n._emscripten_bind_btCollisionAlgorithmConstructionInfo___destroy___0 = n.asm.Bn).apply(null, arguments) + }, + ym = n._emscripten_bind_btGImpactCollisionAlgorithm_btGImpactCollisionAlgorithm_3 = function() { + return (ym = n._emscripten_bind_btGImpactCollisionAlgorithm_btGImpactCollisionAlgorithm_3 = n.asm.Cn).apply(null, arguments) + }, + dm = n._emscripten_bind_btGImpactCollisionAlgorithm_registerAlgorithm_1 = function() { + return (dm = n._emscripten_bind_btGImpactCollisionAlgorithm_registerAlgorithm_1 = n.asm.Dn).apply(null, arguments) + }, + fm = n._emscripten_bind_btGImpactCollisionAlgorithm___destroy___0 = function() { + return (fm = n._emscripten_bind_btGImpactCollisionAlgorithm___destroy___0 = n.asm.En).apply(null, arguments) + }, + hm = n._emscripten_bind_btDefaultCollisionConstructionInfo_btDefaultCollisionConstructionInfo_0 = function() { + return (hm = n._emscripten_bind_btDefaultCollisionConstructionInfo_btDefaultCollisionConstructionInfo_0 = n.asm.Fn).apply(null, arguments) + }, + Bm = n._emscripten_bind_btDefaultCollisionConstructionInfo___destroy___0 = function() { + return (Bm = n._emscripten_bind_btDefaultCollisionConstructionInfo___destroy___0 = n.asm.Gn).apply(null, arguments) + }, + gm = n._emscripten_bind_btPersistentManifold_btPersistentManifold_0 = function() { + return (gm = n._emscripten_bind_btPersistentManifold_btPersistentManifold_0 = n.asm.Hn).apply(null, arguments) + }, + km = n._emscripten_bind_btPersistentManifold_getBody0_0 = function() { + return (km = n._emscripten_bind_btPersistentManifold_getBody0_0 = n.asm.In).apply(null, arguments) + }, + Cm = n._emscripten_bind_btPersistentManifold_getBody1_0 = function() { + return (Cm = n._emscripten_bind_btPersistentManifold_getBody1_0 = n.asm.Jn).apply(null, arguments) + }, + Sm = n._emscripten_bind_btPersistentManifold_getNumContacts_0 = function() { + return (Sm = n._emscripten_bind_btPersistentManifold_getNumContacts_0 = n.asm.Kn).apply(null, arguments) + }, + jm = n._emscripten_bind_btPersistentManifold_getContactPoint_1 = function() { + return (jm = n._emscripten_bind_btPersistentManifold_getContactPoint_1 = n.asm.Ln).apply(null, arguments) + }, + vm = n._emscripten_bind_btPersistentManifold___destroy___0 = function() { + return (vm = n._emscripten_bind_btPersistentManifold___destroy___0 = n.asm.Mn).apply(null, arguments) + }, + Im = n._emscripten_bind_btCollisionDispatcher_btCollisionDispatcher_1 = function() { + return (Im = n._emscripten_bind_btCollisionDispatcher_btCollisionDispatcher_1 = n.asm.Nn).apply(null, arguments) + }, + Rm = n._emscripten_bind_btCollisionDispatcher_getNumManifolds_0 = function() { + return (Rm = n._emscripten_bind_btCollisionDispatcher_getNumManifolds_0 = n.asm.On).apply(null, arguments) + }, + Dm = n._emscripten_bind_btCollisionDispatcher_getManifoldByIndexInternal_1 = function() { + return (Dm = n._emscripten_bind_btCollisionDispatcher_getManifoldByIndexInternal_1 = n.asm.Pn).apply(null, arguments) + }, + Pm = n._emscripten_bind_btCollisionDispatcher___destroy___0 = function() { + return (Pm = n._emscripten_bind_btCollisionDispatcher___destroy___0 = n.asm.Qn).apply(null, arguments) + }, + Tm = n._emscripten_bind_btOverlappingPairCallback___destroy___0 = function() { + return (Tm = n._emscripten_bind_btOverlappingPairCallback___destroy___0 = n.asm.Rn).apply(null, arguments) + }, + Om = n._emscripten_bind_btOverlappingPairCache_setInternalGhostPairCallback_1 = function() { + return (Om = n._emscripten_bind_btOverlappingPairCache_setInternalGhostPairCallback_1 = n.asm.Sn).apply(null, arguments) + }, + Wm = n._emscripten_bind_btOverlappingPairCache_getNumOverlappingPairs_0 = function() { + return (Wm = n._emscripten_bind_btOverlappingPairCache_getNumOverlappingPairs_0 = n.asm.Tn).apply(null, arguments) + }, + Am = n._emscripten_bind_btOverlappingPairCache___destroy___0 = function() { + return (Am = n._emscripten_bind_btOverlappingPairCache___destroy___0 = n.asm.Un).apply(null, arguments) + }, + Mm = n._emscripten_bind_btAxisSweep3_btAxisSweep3_2 = function() { + return (Mm = n._emscripten_bind_btAxisSweep3_btAxisSweep3_2 = n.asm.Vn).apply(null, arguments) + }, + xm = n._emscripten_bind_btAxisSweep3_btAxisSweep3_3 = function() { + return (xm = n._emscripten_bind_btAxisSweep3_btAxisSweep3_3 = n.asm.Wn).apply(null, arguments) + }, + Fm = n._emscripten_bind_btAxisSweep3_btAxisSweep3_4 = function() { + return (Fm = n._emscripten_bind_btAxisSweep3_btAxisSweep3_4 = n.asm.Xn).apply(null, arguments) + }, + Lm = n._emscripten_bind_btAxisSweep3_btAxisSweep3_5 = function() { + return (Lm = n._emscripten_bind_btAxisSweep3_btAxisSweep3_5 = n.asm.Yn).apply(null, arguments) + }, + Gm = n._emscripten_bind_btAxisSweep3___destroy___0 = function() { + return (Gm = n._emscripten_bind_btAxisSweep3___destroy___0 = n.asm.Zn).apply(null, arguments) + }, + wm = n._emscripten_bind_btBroadphaseInterface_getOverlappingPairCache_0 = function() { + return (wm = n._emscripten_bind_btBroadphaseInterface_getOverlappingPairCache_0 = n.asm._n).apply(null, arguments) + }, + Hm = n._emscripten_bind_btBroadphaseInterface___destroy___0 = function() { + return (Hm = n._emscripten_bind_btBroadphaseInterface___destroy___0 = n.asm.$n).apply(null, arguments) + }, + Vm = n._emscripten_bind_btCollisionConfiguration___destroy___0 = function() { + return (Vm = n._emscripten_bind_btCollisionConfiguration___destroy___0 = n.asm.ao).apply(null, arguments) + }, + Em = n._emscripten_bind_btDbvtBroadphase_btDbvtBroadphase_0 = function() { + return (Em = n._emscripten_bind_btDbvtBroadphase_btDbvtBroadphase_0 = n.asm.bo).apply(null, arguments) + }, + Nm = n._emscripten_bind_btDbvtBroadphase___destroy___0 = function() { + return (Nm = n._emscripten_bind_btDbvtBroadphase___destroy___0 = n.asm.co).apply(null, arguments) + }, + Um = n._emscripten_bind_btBroadphaseProxy_get_m_collisionFilterGroup_0 = function() { + return (Um = n._emscripten_bind_btBroadphaseProxy_get_m_collisionFilterGroup_0 = n.asm.eo).apply(null, arguments) + }, + zm = n._emscripten_bind_btBroadphaseProxy_set_m_collisionFilterGroup_1 = function() { + return (zm = n._emscripten_bind_btBroadphaseProxy_set_m_collisionFilterGroup_1 = n.asm.fo).apply(null, arguments) + }, + qm = n._emscripten_bind_btBroadphaseProxy_get_m_collisionFilterMask_0 = function() { + return (qm = n._emscripten_bind_btBroadphaseProxy_get_m_collisionFilterMask_0 = n.asm.go).apply(null, arguments) + }, + Km = n._emscripten_bind_btBroadphaseProxy_set_m_collisionFilterMask_1 = function() { + return (Km = n._emscripten_bind_btBroadphaseProxy_set_m_collisionFilterMask_1 = n.asm.ho).apply(null, arguments) + }, + Qm = n._emscripten_bind_btBroadphaseProxy___destroy___0 = function() { + return (Qm = n._emscripten_bind_btBroadphaseProxy___destroy___0 = n.asm.io).apply(null, arguments) + }, + Xm = n._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_3 = function() { + return (Xm = n._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_3 = n.asm.jo).apply(null, arguments) + }, + Zm = n._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_4 = function() { + return (Zm = n._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_4 = n.asm.ko).apply(null, arguments) + }, + Ym = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearDamping_0 = function() { + return (Ym = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearDamping_0 = n.asm.lo).apply(null, arguments) + }, + Jm = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearDamping_1 = function() { + return (Jm = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearDamping_1 = n.asm.mo).apply(null, arguments) + }, + $m = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularDamping_0 = function() { + return ($m = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularDamping_0 = n.asm.no).apply(null, arguments) + }, + ty = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularDamping_1 = function() { + return (ty = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularDamping_1 = n.asm.oo).apply(null, arguments) + }, + ey = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_friction_0 = function() { + return (ey = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_friction_0 = n.asm.po).apply(null, arguments) + }, + ny = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_friction_1 = function() { + return (ny = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_friction_1 = n.asm.qo).apply(null, arguments) + }, + oy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_rollingFriction_0 = function() { + return (oy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_rollingFriction_0 = n.asm.ro).apply(null, arguments) + }, + _y = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_rollingFriction_1 = function() { + return (_y = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_rollingFriction_1 = n.asm.so).apply(null, arguments) + }, + iy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_restitution_0 = function() { + return (iy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_restitution_0 = n.asm.to).apply(null, arguments) + }, + ry = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_restitution_1 = function() { + return (ry = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_restitution_1 = n.asm.uo).apply(null, arguments) + }, + py = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearSleepingThreshold_0 = function() { + return (py = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearSleepingThreshold_0 = n.asm.vo).apply(null, arguments) + }, + sy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearSleepingThreshold_1 = function() { + return (sy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearSleepingThreshold_1 = n.asm.wo).apply(null, arguments) + }, + cy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularSleepingThreshold_0 = function() { + return (cy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularSleepingThreshold_0 = n.asm.xo).apply(null, arguments) + }, + ay = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularSleepingThreshold_1 = function() { + return (ay = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularSleepingThreshold_1 = n.asm.yo).apply(null, arguments) + }, + ly = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDamping_0 = function() { + return (ly = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDamping_0 = n.asm.zo).apply(null, arguments) + }, + uy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDamping_1 = function() { + return (uy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDamping_1 = n.asm.Ao).apply(null, arguments) + }, + by = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDampingFactor_0 = function() { + return (by = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDampingFactor_0 = n.asm.Bo).apply(null, arguments) + }, + my = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDampingFactor_1 = function() { + return (my = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDampingFactor_1 = n.asm.Co).apply(null, arguments) + }, + yy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalLinearDampingThresholdSqr_0 = function() { + return (yy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalLinearDampingThresholdSqr_0 = n.asm.Do).apply(null, arguments) + }, + dy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalLinearDampingThresholdSqr_1 = function() { + return (dy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalLinearDampingThresholdSqr_1 = n.asm.Eo).apply(null, arguments) + }, + fy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingThresholdSqr_0 = function() { + return (fy = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingThresholdSqr_0 = n.asm.Fo).apply(null, arguments) + }, + hy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingThresholdSqr_1 = function() { + return (hy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingThresholdSqr_1 = n.asm.Go).apply(null, arguments) + }, + By = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingFactor_0 = function() { + return (By = n._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingFactor_0 = n.asm.Ho).apply(null, arguments) + }, + gy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingFactor_1 = function() { + return (gy = n._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingFactor_1 = n.asm.Io).apply(null, arguments) + }, + ky = n._emscripten_bind_btRigidBodyConstructionInfo___destroy___0 = function() { + return (ky = n._emscripten_bind_btRigidBodyConstructionInfo___destroy___0 = n.asm.Jo).apply(null, arguments) + }, + Cy = n._emscripten_bind_btRigidBody_btRigidBody_1 = function() { + return (Cy = n._emscripten_bind_btRigidBody_btRigidBody_1 = n.asm.Ko).apply(null, arguments) + }, + Sy = n._emscripten_bind_btRigidBody_getCenterOfMassTransform_0 = function() { + return (Sy = n._emscripten_bind_btRigidBody_getCenterOfMassTransform_0 = n.asm.Lo).apply(null, arguments) + }, + jy = n._emscripten_bind_btRigidBody_setCenterOfMassTransform_1 = function() { + return (jy = n._emscripten_bind_btRigidBody_setCenterOfMassTransform_1 = n.asm.Mo).apply(null, arguments) + }, + vy = n._emscripten_bind_btRigidBody_setSleepingThresholds_2 = function() { + return (vy = n._emscripten_bind_btRigidBody_setSleepingThresholds_2 = n.asm.No).apply(null, arguments) + }, + Iy = n._emscripten_bind_btRigidBody_getLinearDamping_0 = function() { + return (Iy = n._emscripten_bind_btRigidBody_getLinearDamping_0 = n.asm.Oo).apply(null, arguments) + }, + Ry = n._emscripten_bind_btRigidBody_getAngularDamping_0 = function() { + return (Ry = n._emscripten_bind_btRigidBody_getAngularDamping_0 = n.asm.Po).apply(null, arguments) + }, + Dy = n._emscripten_bind_btRigidBody_setDamping_2 = function() { + return (Dy = n._emscripten_bind_btRigidBody_setDamping_2 = n.asm.Qo).apply(null, arguments) + }, + Py = n._emscripten_bind_btRigidBody_setMassProps_2 = function() { + return (Py = n._emscripten_bind_btRigidBody_setMassProps_2 = n.asm.Ro).apply(null, arguments) + }, + Ty = n._emscripten_bind_btRigidBody_getLinearFactor_0 = function() { + return (Ty = n._emscripten_bind_btRigidBody_getLinearFactor_0 = n.asm.So).apply(null, arguments) + }, + Oy = n._emscripten_bind_btRigidBody_setLinearFactor_1 = function() { + return (Oy = n._emscripten_bind_btRigidBody_setLinearFactor_1 = n.asm.To).apply(null, arguments) + }, + Wy = n._emscripten_bind_btRigidBody_applyTorque_1 = function() { + return (Wy = n._emscripten_bind_btRigidBody_applyTorque_1 = n.asm.Uo).apply(null, arguments) + }, + Ay = n._emscripten_bind_btRigidBody_applyLocalTorque_1 = function() { + return (Ay = n._emscripten_bind_btRigidBody_applyLocalTorque_1 = n.asm.Vo).apply(null, arguments) + }, + My = n._emscripten_bind_btRigidBody_applyForce_2 = function() { + return (My = n._emscripten_bind_btRigidBody_applyForce_2 = n.asm.Wo).apply(null, arguments) + }, + xy = n._emscripten_bind_btRigidBody_applyCentralForce_1 = function() { + return (xy = n._emscripten_bind_btRigidBody_applyCentralForce_1 = n.asm.Xo).apply(null, arguments) + }, + Fy = n._emscripten_bind_btRigidBody_applyCentralLocalForce_1 = function() { + return (Fy = n._emscripten_bind_btRigidBody_applyCentralLocalForce_1 = n.asm.Yo).apply(null, arguments) + }, + Ly = n._emscripten_bind_btRigidBody_applyTorqueImpulse_1 = function() { + return (Ly = n._emscripten_bind_btRigidBody_applyTorqueImpulse_1 = n.asm.Zo).apply(null, arguments) + }, + Gy = n._emscripten_bind_btRigidBody_applyImpulse_2 = function() { + return (Gy = n._emscripten_bind_btRigidBody_applyImpulse_2 = n.asm._o).apply(null, arguments) + }, + wy = n._emscripten_bind_btRigidBody_applyCentralImpulse_1 = function() { + return (wy = n._emscripten_bind_btRigidBody_applyCentralImpulse_1 = n.asm.$o).apply(null, arguments) + }, + Hy = n._emscripten_bind_btRigidBody_updateInertiaTensor_0 = function() { + return (Hy = n._emscripten_bind_btRigidBody_updateInertiaTensor_0 = n.asm.ap).apply(null, arguments) + }, + Vy = n._emscripten_bind_btRigidBody_getLinearVelocity_0 = function() { + return (Vy = n._emscripten_bind_btRigidBody_getLinearVelocity_0 = n.asm.bp).apply(null, arguments) + }, + Ey = n._emscripten_bind_btRigidBody_getAngularVelocity_0 = function() { + return (Ey = n._emscripten_bind_btRigidBody_getAngularVelocity_0 = n.asm.cp).apply(null, arguments) + }, + Ny = n._emscripten_bind_btRigidBody_setLinearVelocity_1 = function() { + return (Ny = n._emscripten_bind_btRigidBody_setLinearVelocity_1 = n.asm.dp).apply(null, arguments) + }, + Uy = n._emscripten_bind_btRigidBody_setAngularVelocity_1 = function() { + return (Uy = n._emscripten_bind_btRigidBody_setAngularVelocity_1 = n.asm.ep).apply(null, arguments) + }, + zy = n._emscripten_bind_btRigidBody_getMotionState_0 = function() { + return (zy = n._emscripten_bind_btRigidBody_getMotionState_0 = n.asm.fp).apply(null, arguments) + }, + qy = n._emscripten_bind_btRigidBody_setMotionState_1 = function() { + return (qy = n._emscripten_bind_btRigidBody_setMotionState_1 = n.asm.gp).apply(null, arguments) + }, + Ky = n._emscripten_bind_btRigidBody_getAngularFactor_0 = function() { + return (Ky = n._emscripten_bind_btRigidBody_getAngularFactor_0 = n.asm.hp).apply(null, arguments) + }, + Qy = n._emscripten_bind_btRigidBody_setAngularFactor_1 = function() { + return (Qy = n._emscripten_bind_btRigidBody_setAngularFactor_1 = n.asm.ip).apply(null, arguments) + }, + Xy = n._emscripten_bind_btRigidBody_upcast_1 = function() { + return (Xy = n._emscripten_bind_btRigidBody_upcast_1 = n.asm.jp).apply(null, arguments) + }, + Zy = n._emscripten_bind_btRigidBody_getAabb_2 = function() { + return (Zy = n._emscripten_bind_btRigidBody_getAabb_2 = n.asm.kp).apply(null, arguments) + }, + Yy = n._emscripten_bind_btRigidBody_applyGravity_0 = function() { + return (Yy = n._emscripten_bind_btRigidBody_applyGravity_0 = n.asm.lp).apply(null, arguments) + }, + Jy = n._emscripten_bind_btRigidBody_getGravity_0 = function() { + return (Jy = n._emscripten_bind_btRigidBody_getGravity_0 = n.asm.mp).apply(null, arguments) + }, + $y = n._emscripten_bind_btRigidBody_setGravity_1 = function() { + return ($y = n._emscripten_bind_btRigidBody_setGravity_1 = n.asm.np).apply(null, arguments) + }, + td = n._emscripten_bind_btRigidBody_getBroadphaseProxy_0 = function() { + return (td = n._emscripten_bind_btRigidBody_getBroadphaseProxy_0 = n.asm.op).apply(null, arguments) + }, + ed = n._emscripten_bind_btRigidBody_clearForces_0 = function() { + return (ed = n._emscripten_bind_btRigidBody_clearForces_0 = n.asm.pp).apply(null, arguments) + }, + nd = n._emscripten_bind_btRigidBody_setFlags_1 = function() { + return (nd = n._emscripten_bind_btRigidBody_setFlags_1 = n.asm.qp).apply(null, arguments) + }, + od = n._emscripten_bind_btRigidBody_getFlags_0 = function() { + return (od = n._emscripten_bind_btRigidBody_getFlags_0 = n.asm.rp).apply(null, arguments) + }, + _d = n._emscripten_bind_btRigidBody_setAnisotropicFriction_2 = function() { + return (_d = n._emscripten_bind_btRigidBody_setAnisotropicFriction_2 = n.asm.sp).apply(null, arguments) + }, + id = n._emscripten_bind_btRigidBody_getCollisionShape_0 = function() { + return (id = n._emscripten_bind_btRigidBody_getCollisionShape_0 = n.asm.tp).apply(null, arguments) + }, + rd = n._emscripten_bind_btRigidBody_setContactProcessingThreshold_1 = function() { + return (rd = n._emscripten_bind_btRigidBody_setContactProcessingThreshold_1 = n.asm.up).apply(null, arguments) + }, + pd = n._emscripten_bind_btRigidBody_setActivationState_1 = function() { + return (pd = n._emscripten_bind_btRigidBody_setActivationState_1 = n.asm.vp).apply(null, arguments) + }, + sd = n._emscripten_bind_btRigidBody_forceActivationState_1 = function() { + return (sd = n._emscripten_bind_btRigidBody_forceActivationState_1 = n.asm.wp).apply(null, arguments) + }, + cd = n._emscripten_bind_btRigidBody_activate_0 = function() { + return (cd = n._emscripten_bind_btRigidBody_activate_0 = n.asm.xp).apply(null, arguments) + }, + ad = n._emscripten_bind_btRigidBody_activate_1 = function() { + return (ad = n._emscripten_bind_btRigidBody_activate_1 = n.asm.yp).apply(null, arguments) + }, + ld = n._emscripten_bind_btRigidBody_isActive_0 = function() { + return (ld = n._emscripten_bind_btRigidBody_isActive_0 = n.asm.zp).apply(null, arguments) + }, + ud = n._emscripten_bind_btRigidBody_isKinematicObject_0 = function() { + return (ud = n._emscripten_bind_btRigidBody_isKinematicObject_0 = n.asm.Ap).apply(null, arguments) + }, + bd = n._emscripten_bind_btRigidBody_isStaticObject_0 = function() { + return (bd = n._emscripten_bind_btRigidBody_isStaticObject_0 = n.asm.Bp).apply(null, arguments) + }, + md = n._emscripten_bind_btRigidBody_isStaticOrKinematicObject_0 = function() { + return (md = n._emscripten_bind_btRigidBody_isStaticOrKinematicObject_0 = n.asm.Cp).apply(null, arguments) + }, + yd = n._emscripten_bind_btRigidBody_getRestitution_0 = function() { + return (yd = n._emscripten_bind_btRigidBody_getRestitution_0 = n.asm.Dp).apply(null, arguments) + }, + dd = n._emscripten_bind_btRigidBody_getFriction_0 = function() { + return (dd = n._emscripten_bind_btRigidBody_getFriction_0 = n.asm.Ep).apply(null, arguments) + }, + fd = n._emscripten_bind_btRigidBody_getRollingFriction_0 = function() { + return (fd = n._emscripten_bind_btRigidBody_getRollingFriction_0 = n.asm.Fp).apply(null, arguments) + }, + hd = n._emscripten_bind_btRigidBody_setRestitution_1 = function() { + return (hd = n._emscripten_bind_btRigidBody_setRestitution_1 = n.asm.Gp).apply(null, arguments) + }, + Bd = n._emscripten_bind_btRigidBody_setFriction_1 = function() { + return (Bd = n._emscripten_bind_btRigidBody_setFriction_1 = n.asm.Hp).apply(null, arguments) + }, + gd = n._emscripten_bind_btRigidBody_setRollingFriction_1 = function() { + return (gd = n._emscripten_bind_btRigidBody_setRollingFriction_1 = n.asm.Ip).apply(null, arguments) + }, + kd = n._emscripten_bind_btRigidBody_getWorldTransform_0 = function() { + return (kd = n._emscripten_bind_btRigidBody_getWorldTransform_0 = n.asm.Jp).apply(null, arguments) + }, + Cd = n._emscripten_bind_btRigidBody_getCollisionFlags_0 = function() { + return (Cd = n._emscripten_bind_btRigidBody_getCollisionFlags_0 = n.asm.Kp).apply(null, arguments) + }, + Sd = n._emscripten_bind_btRigidBody_setCollisionFlags_1 = function() { + return (Sd = n._emscripten_bind_btRigidBody_setCollisionFlags_1 = n.asm.Lp).apply(null, arguments) + }, + jd = n._emscripten_bind_btRigidBody_setWorldTransform_1 = function() { + return (jd = n._emscripten_bind_btRigidBody_setWorldTransform_1 = n.asm.Mp).apply(null, arguments) + }, + vd = n._emscripten_bind_btRigidBody_setCollisionShape_1 = function() { + return (vd = n._emscripten_bind_btRigidBody_setCollisionShape_1 = n.asm.Np).apply(null, arguments) + }, + Id = n._emscripten_bind_btRigidBody_setCcdMotionThreshold_1 = function() { + return (Id = n._emscripten_bind_btRigidBody_setCcdMotionThreshold_1 = n.asm.Op).apply(null, arguments) + }, + Rd = n._emscripten_bind_btRigidBody_setCcdSweptSphereRadius_1 = function() { + return (Rd = n._emscripten_bind_btRigidBody_setCcdSweptSphereRadius_1 = n.asm.Pp).apply(null, arguments) + }, + Dd = n._emscripten_bind_btRigidBody_getUserIndex_0 = function() { + return (Dd = n._emscripten_bind_btRigidBody_getUserIndex_0 = n.asm.Qp).apply(null, arguments) + }, + Pd = n._emscripten_bind_btRigidBody_setUserIndex_1 = function() { + return (Pd = n._emscripten_bind_btRigidBody_setUserIndex_1 = n.asm.Rp).apply(null, arguments) + }, + Td = n._emscripten_bind_btRigidBody_getUserPointer_0 = function() { + return (Td = n._emscripten_bind_btRigidBody_getUserPointer_0 = n.asm.Sp).apply(null, arguments) + }, + Od = n._emscripten_bind_btRigidBody_setUserPointer_1 = function() { + return (Od = n._emscripten_bind_btRigidBody_setUserPointer_1 = n.asm.Tp).apply(null, arguments) + }, + Wd = n._emscripten_bind_btRigidBody_getBroadphaseHandle_0 = function() { + return (Wd = n._emscripten_bind_btRigidBody_getBroadphaseHandle_0 = n.asm.Up).apply(null, arguments) + }, + Ad = n._emscripten_bind_btRigidBody___destroy___0 = function() { + return (Ad = n._emscripten_bind_btRigidBody___destroy___0 = n.asm.Vp).apply(null, arguments) + }, + Md = n._emscripten_bind_btConstraintSetting_btConstraintSetting_0 = function() { + return (Md = n._emscripten_bind_btConstraintSetting_btConstraintSetting_0 = n.asm.Wp).apply(null, arguments) + }, + xd = n._emscripten_bind_btConstraintSetting_get_m_tau_0 = function() { + return (xd = n._emscripten_bind_btConstraintSetting_get_m_tau_0 = n.asm.Xp).apply(null, arguments) + }, + Fd = n._emscripten_bind_btConstraintSetting_set_m_tau_1 = function() { + return (Fd = n._emscripten_bind_btConstraintSetting_set_m_tau_1 = n.asm.Yp).apply(null, arguments) + }, + Ld = n._emscripten_bind_btConstraintSetting_get_m_damping_0 = function() { + return (Ld = n._emscripten_bind_btConstraintSetting_get_m_damping_0 = n.asm.Zp).apply(null, arguments) + }, + Gd = n._emscripten_bind_btConstraintSetting_set_m_damping_1 = function() { + return (Gd = n._emscripten_bind_btConstraintSetting_set_m_damping_1 = n.asm._p).apply(null, arguments) + }, + wd = n._emscripten_bind_btConstraintSetting_get_m_impulseClamp_0 = function() { + return (wd = n._emscripten_bind_btConstraintSetting_get_m_impulseClamp_0 = n.asm.$p).apply(null, arguments) + }, + Hd = n._emscripten_bind_btConstraintSetting_set_m_impulseClamp_1 = function() { + return (Hd = n._emscripten_bind_btConstraintSetting_set_m_impulseClamp_1 = n.asm.aq).apply(null, arguments) + }, + Vd = n._emscripten_bind_btConstraintSetting___destroy___0 = function() { + return (Vd = n._emscripten_bind_btConstraintSetting___destroy___0 = n.asm.bq).apply(null, arguments) + }, + Ed = n._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_2 = function() { + return (Ed = n._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_2 = n.asm.cq).apply(null, arguments) + }, + Nd = n._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_4 = function() { + return (Nd = n._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_4 = n.asm.dq).apply(null, arguments) + }, + Ud = n._emscripten_bind_btPoint2PointConstraint_setPivotA_1 = function() { + return (Ud = n._emscripten_bind_btPoint2PointConstraint_setPivotA_1 = n.asm.eq).apply(null, arguments) + }, + zd = n._emscripten_bind_btPoint2PointConstraint_setPivotB_1 = function() { + return (zd = n._emscripten_bind_btPoint2PointConstraint_setPivotB_1 = n.asm.fq).apply(null, arguments) + }, + qd = n._emscripten_bind_btPoint2PointConstraint_getPivotInA_0 = function() { + return (qd = n._emscripten_bind_btPoint2PointConstraint_getPivotInA_0 = n.asm.gq).apply(null, arguments) + }, + Kd = n._emscripten_bind_btPoint2PointConstraint_getPivotInB_0 = function() { + return (Kd = n._emscripten_bind_btPoint2PointConstraint_getPivotInB_0 = n.asm.hq).apply(null, arguments) + }, + Qd = n._emscripten_bind_btPoint2PointConstraint_enableFeedback_1 = function() { + return (Qd = n._emscripten_bind_btPoint2PointConstraint_enableFeedback_1 = n.asm.iq).apply(null, arguments) + }, + Xd = n._emscripten_bind_btPoint2PointConstraint_getBreakingImpulseThreshold_0 = function() { + return (Xd = n._emscripten_bind_btPoint2PointConstraint_getBreakingImpulseThreshold_0 = n.asm.jq).apply(null, arguments) + }, + Zd = n._emscripten_bind_btPoint2PointConstraint_setBreakingImpulseThreshold_1 = function() { + return (Zd = n._emscripten_bind_btPoint2PointConstraint_setBreakingImpulseThreshold_1 = n.asm.kq).apply(null, arguments) + }, + Yd = n._emscripten_bind_btPoint2PointConstraint_getParam_2 = function() { + return (Yd = n._emscripten_bind_btPoint2PointConstraint_getParam_2 = n.asm.lq).apply(null, arguments) + }, + Jd = n._emscripten_bind_btPoint2PointConstraint_setParam_3 = function() { + return (Jd = n._emscripten_bind_btPoint2PointConstraint_setParam_3 = n.asm.mq).apply(null, arguments) + }, + $d = n._emscripten_bind_btPoint2PointConstraint_get_m_setting_0 = function() { + return ($d = n._emscripten_bind_btPoint2PointConstraint_get_m_setting_0 = n.asm.nq).apply(null, arguments) + }, + tf = n._emscripten_bind_btPoint2PointConstraint_set_m_setting_1 = function() { + return (tf = n._emscripten_bind_btPoint2PointConstraint_set_m_setting_1 = n.asm.oq).apply(null, arguments) + }, + ef = n._emscripten_bind_btPoint2PointConstraint___destroy___0 = function() { + return (ef = n._emscripten_bind_btPoint2PointConstraint___destroy___0 = n.asm.pq).apply(null, arguments) + }, + nf = n._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_3 = function() { + return (nf = n._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_3 = n.asm.qq).apply(null, arguments) + }, + of = n._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_5 = function() { + return (of = n._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_5 = n.asm.rq).apply(null, arguments) + }, + _f = n._emscripten_bind_btGeneric6DofSpringConstraint_enableSpring_2 = function() { + return (_f = n._emscripten_bind_btGeneric6DofSpringConstraint_enableSpring_2 = n.asm.sq).apply(null, arguments) + }, + rf = n._emscripten_bind_btGeneric6DofSpringConstraint_setStiffness_2 = function() { + return (rf = n._emscripten_bind_btGeneric6DofSpringConstraint_setStiffness_2 = n.asm.tq).apply(null, arguments) + }, + pf = n._emscripten_bind_btGeneric6DofSpringConstraint_setDamping_2 = function() { + return (pf = n._emscripten_bind_btGeneric6DofSpringConstraint_setDamping_2 = n.asm.uq).apply(null, arguments) + }, + sf = n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_0 = function() { + return (sf = n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_0 = n.asm.vq).apply(null, arguments) + }, + cf = n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_1 = function() { + return (cf = n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_1 = n.asm.wq).apply(null, arguments) + }, + af = n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_2 = function() { + return (af = n._emscripten_bind_btGeneric6DofSpringConstraint_setEquilibriumPoint_2 = n.asm.xq).apply(null, arguments) + }, + lf = n._emscripten_bind_btGeneric6DofSpringConstraint_setLinearLowerLimit_1 = function() { + return (lf = n._emscripten_bind_btGeneric6DofSpringConstraint_setLinearLowerLimit_1 = n.asm.yq).apply(null, arguments) + }, + uf = n._emscripten_bind_btGeneric6DofSpringConstraint_setLinearUpperLimit_1 = function() { + return (uf = n._emscripten_bind_btGeneric6DofSpringConstraint_setLinearUpperLimit_1 = n.asm.zq).apply(null, arguments) + }, + bf = n._emscripten_bind_btGeneric6DofSpringConstraint_setAngularLowerLimit_1 = function() { + return (bf = n._emscripten_bind_btGeneric6DofSpringConstraint_setAngularLowerLimit_1 = n.asm.Aq).apply(null, arguments) + }, + mf = n._emscripten_bind_btGeneric6DofSpringConstraint_setAngularUpperLimit_1 = function() { + return (mf = n._emscripten_bind_btGeneric6DofSpringConstraint_setAngularUpperLimit_1 = n.asm.Bq).apply(null, arguments) + }, + yf = n._emscripten_bind_btGeneric6DofSpringConstraint_getFrameOffsetA_0 = function() { + return (yf = n._emscripten_bind_btGeneric6DofSpringConstraint_getFrameOffsetA_0 = n.asm.Cq).apply(null, arguments) + }, + df = n._emscripten_bind_btGeneric6DofSpringConstraint_enableFeedback_1 = function() { + return (df = n._emscripten_bind_btGeneric6DofSpringConstraint_enableFeedback_1 = n.asm.Dq).apply(null, arguments) + }, + ff = n._emscripten_bind_btGeneric6DofSpringConstraint_getBreakingImpulseThreshold_0 = function() { + return (ff = n._emscripten_bind_btGeneric6DofSpringConstraint_getBreakingImpulseThreshold_0 = n.asm.Eq).apply(null, arguments) + }, + hf = n._emscripten_bind_btGeneric6DofSpringConstraint_setBreakingImpulseThreshold_1 = function() { + return (hf = n._emscripten_bind_btGeneric6DofSpringConstraint_setBreakingImpulseThreshold_1 = n.asm.Fq).apply(null, arguments) + }, + Bf = n._emscripten_bind_btGeneric6DofSpringConstraint_getParam_2 = function() { + return (Bf = n._emscripten_bind_btGeneric6DofSpringConstraint_getParam_2 = n.asm.Gq).apply(null, arguments) + }, + gf = n._emscripten_bind_btGeneric6DofSpringConstraint_setParam_3 = function() { + return (gf = n._emscripten_bind_btGeneric6DofSpringConstraint_setParam_3 = n.asm.Hq).apply(null, arguments) + }, + kf = n._emscripten_bind_btGeneric6DofSpringConstraint___destroy___0 = function() { + return (kf = n._emscripten_bind_btGeneric6DofSpringConstraint___destroy___0 = n.asm.Iq).apply(null, arguments) + }, + Cf = n._emscripten_bind_btSequentialImpulseConstraintSolver_btSequentialImpulseConstraintSolver_0 = function() { + return (Cf = n._emscripten_bind_btSequentialImpulseConstraintSolver_btSequentialImpulseConstraintSolver_0 = n.asm.Jq).apply(null, arguments) + }, + Sf = n._emscripten_bind_btSequentialImpulseConstraintSolver___destroy___0 = function() { + return (Sf = n._emscripten_bind_btSequentialImpulseConstraintSolver___destroy___0 = n.asm.Kq).apply(null, arguments) + }, + jf = n._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_2 = function() { + return (jf = n._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_2 = n.asm.Lq).apply(null, arguments) + }, + vf = n._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_4 = function() { + return (vf = n._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_4 = n.asm.Mq).apply(null, arguments) + }, + If = n._emscripten_bind_btConeTwistConstraint_setLimit_2 = function() { + return (If = n._emscripten_bind_btConeTwistConstraint_setLimit_2 = n.asm.Nq).apply(null, arguments) + }, + Rf = n._emscripten_bind_btConeTwistConstraint_setAngularOnly_1 = function() { + return (Rf = n._emscripten_bind_btConeTwistConstraint_setAngularOnly_1 = n.asm.Oq).apply(null, arguments) + }, + Df = n._emscripten_bind_btConeTwistConstraint_setDamping_1 = function() { + return (Df = n._emscripten_bind_btConeTwistConstraint_setDamping_1 = n.asm.Pq).apply(null, arguments) + }, + Pf = n._emscripten_bind_btConeTwistConstraint_enableMotor_1 = function() { + return (Pf = n._emscripten_bind_btConeTwistConstraint_enableMotor_1 = n.asm.Qq).apply(null, arguments) + }, + Tf = n._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulse_1 = function() { + return (Tf = n._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulse_1 = n.asm.Rq).apply(null, arguments) + }, + Of = n._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulseNormalized_1 = function() { + return (Of = n._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulseNormalized_1 = n.asm.Sq).apply(null, arguments) + }, + Wf = n._emscripten_bind_btConeTwistConstraint_setMotorTarget_1 = function() { + return (Wf = n._emscripten_bind_btConeTwistConstraint_setMotorTarget_1 = n.asm.Tq).apply(null, arguments) + }, + Af = n._emscripten_bind_btConeTwistConstraint_setMotorTargetInConstraintSpace_1 = function() { + return (Af = n._emscripten_bind_btConeTwistConstraint_setMotorTargetInConstraintSpace_1 = n.asm.Uq).apply(null, arguments) + }, + Mf = n._emscripten_bind_btConeTwistConstraint_enableFeedback_1 = function() { + return (Mf = n._emscripten_bind_btConeTwistConstraint_enableFeedback_1 = n.asm.Vq).apply(null, arguments) + }, + xf = n._emscripten_bind_btConeTwistConstraint_getBreakingImpulseThreshold_0 = function() { + return (xf = n._emscripten_bind_btConeTwistConstraint_getBreakingImpulseThreshold_0 = n.asm.Wq).apply(null, arguments) + }, + Ff = n._emscripten_bind_btConeTwistConstraint_setBreakingImpulseThreshold_1 = function() { + return (Ff = n._emscripten_bind_btConeTwistConstraint_setBreakingImpulseThreshold_1 = n.asm.Xq).apply(null, arguments) + }, + Lf = n._emscripten_bind_btConeTwistConstraint_getParam_2 = function() { + return (Lf = n._emscripten_bind_btConeTwistConstraint_getParam_2 = n.asm.Yq).apply(null, arguments) + }, + Gf = n._emscripten_bind_btConeTwistConstraint_setParam_3 = function() { + return (Gf = n._emscripten_bind_btConeTwistConstraint_setParam_3 = n.asm.Zq).apply(null, arguments) + }, + wf = n._emscripten_bind_btConeTwistConstraint___destroy___0 = function() { + return (wf = n._emscripten_bind_btConeTwistConstraint___destroy___0 = n.asm._q).apply(null, arguments) + }, + Hf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_2 = function() { + return (Hf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_2 = n.asm.$q).apply(null, arguments) + }, + Vf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_3 = function() { + return (Vf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_3 = n.asm.ar).apply(null, arguments) + }, + Ef = n._emscripten_bind_btHingeConstraint_btHingeConstraint_4 = function() { + return (Ef = n._emscripten_bind_btHingeConstraint_btHingeConstraint_4 = n.asm.br).apply(null, arguments) + }, + Nf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_5 = function() { + return (Nf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_5 = n.asm.cr).apply(null, arguments) + }, + Uf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_6 = function() { + return (Uf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_6 = n.asm.dr).apply(null, arguments) + }, + zf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_7 = function() { + return (zf = n._emscripten_bind_btHingeConstraint_btHingeConstraint_7 = n.asm.er).apply(null, arguments) + }, + qf = n._emscripten_bind_btHingeConstraint_getHingeAngle_0 = function() { + return (qf = n._emscripten_bind_btHingeConstraint_getHingeAngle_0 = n.asm.fr).apply(null, arguments) + }, + Kf = n._emscripten_bind_btHingeConstraint_setLimit_4 = function() { + return (Kf = n._emscripten_bind_btHingeConstraint_setLimit_4 = n.asm.gr).apply(null, arguments) + }, + Qf = n._emscripten_bind_btHingeConstraint_setLimit_5 = function() { + return (Qf = n._emscripten_bind_btHingeConstraint_setLimit_5 = n.asm.hr).apply(null, arguments) + }, + Xf = n._emscripten_bind_btHingeConstraint_enableAngularMotor_3 = function() { + return (Xf = n._emscripten_bind_btHingeConstraint_enableAngularMotor_3 = n.asm.ir).apply(null, arguments) + }, + Zf = n._emscripten_bind_btHingeConstraint_setAngularOnly_1 = function() { + return (Zf = n._emscripten_bind_btHingeConstraint_setAngularOnly_1 = n.asm.jr).apply(null, arguments) + }, + Yf = n._emscripten_bind_btHingeConstraint_enableMotor_1 = function() { + return (Yf = n._emscripten_bind_btHingeConstraint_enableMotor_1 = n.asm.kr).apply(null, arguments) + }, + Jf = n._emscripten_bind_btHingeConstraint_setMaxMotorImpulse_1 = function() { + return (Jf = n._emscripten_bind_btHingeConstraint_setMaxMotorImpulse_1 = n.asm.lr).apply(null, arguments) + }, + $f = n._emscripten_bind_btHingeConstraint_setMotorTarget_2 = function() { + return ($f = n._emscripten_bind_btHingeConstraint_setMotorTarget_2 = n.asm.mr).apply(null, arguments) + }, + th = n._emscripten_bind_btHingeConstraint_enableFeedback_1 = function() { + return (th = n._emscripten_bind_btHingeConstraint_enableFeedback_1 = n.asm.nr).apply(null, arguments) + }, + eh = n._emscripten_bind_btHingeConstraint_getBreakingImpulseThreshold_0 = function() { + return (eh = n._emscripten_bind_btHingeConstraint_getBreakingImpulseThreshold_0 = n.asm.or).apply(null, arguments) + }, + nh = n._emscripten_bind_btHingeConstraint_setBreakingImpulseThreshold_1 = function() { + return (nh = n._emscripten_bind_btHingeConstraint_setBreakingImpulseThreshold_1 = n.asm.pr).apply(null, arguments) + }, + oh = n._emscripten_bind_btHingeConstraint_getParam_2 = function() { + return (oh = n._emscripten_bind_btHingeConstraint_getParam_2 = n.asm.qr).apply(null, arguments) + }, + _h = n._emscripten_bind_btHingeConstraint_setParam_3 = function() { + return (_h = n._emscripten_bind_btHingeConstraint_setParam_3 = n.asm.rr).apply(null, arguments) + }, + ih = n._emscripten_bind_btHingeConstraint___destroy___0 = function() { + return (ih = n._emscripten_bind_btHingeConstraint___destroy___0 = n.asm.sr).apply(null, arguments) + }, + rh = n._emscripten_bind_btSliderConstraint_btSliderConstraint_3 = function() { + return (rh = n._emscripten_bind_btSliderConstraint_btSliderConstraint_3 = n.asm.tr).apply(null, arguments) + }, + ph = n._emscripten_bind_btSliderConstraint_btSliderConstraint_5 = function() { + return (ph = n._emscripten_bind_btSliderConstraint_btSliderConstraint_5 = n.asm.ur).apply(null, arguments) + }, + sh = n._emscripten_bind_btSliderConstraint_getLinearPos_0 = function() { + return (sh = n._emscripten_bind_btSliderConstraint_getLinearPos_0 = n.asm.vr).apply(null, arguments) + }, + ch = n._emscripten_bind_btSliderConstraint_getAngularPos_0 = function() { + return (ch = n._emscripten_bind_btSliderConstraint_getAngularPos_0 = n.asm.wr).apply(null, arguments) + }, + ah = n._emscripten_bind_btSliderConstraint_setLowerLinLimit_1 = function() { + return (ah = n._emscripten_bind_btSliderConstraint_setLowerLinLimit_1 = n.asm.xr).apply(null, arguments) + }, + lh = n._emscripten_bind_btSliderConstraint_setUpperLinLimit_1 = function() { + return (lh = n._emscripten_bind_btSliderConstraint_setUpperLinLimit_1 = n.asm.yr).apply(null, arguments) + }, + uh = n._emscripten_bind_btSliderConstraint_setLowerAngLimit_1 = function() { + return (uh = n._emscripten_bind_btSliderConstraint_setLowerAngLimit_1 = n.asm.zr).apply(null, arguments) + }, + bh = n._emscripten_bind_btSliderConstraint_setUpperAngLimit_1 = function() { + return (bh = n._emscripten_bind_btSliderConstraint_setUpperAngLimit_1 = n.asm.Ar).apply(null, arguments) + }, + mh = n._emscripten_bind_btSliderConstraint_setPoweredLinMotor_1 = function() { + return (mh = n._emscripten_bind_btSliderConstraint_setPoweredLinMotor_1 = n.asm.Br).apply(null, arguments) + }, + yh = n._emscripten_bind_btSliderConstraint_setMaxLinMotorForce_1 = function() { + return (yh = n._emscripten_bind_btSliderConstraint_setMaxLinMotorForce_1 = n.asm.Cr).apply(null, arguments) + }, + dh = n._emscripten_bind_btSliderConstraint_setTargetLinMotorVelocity_1 = function() { + return (dh = n._emscripten_bind_btSliderConstraint_setTargetLinMotorVelocity_1 = n.asm.Dr).apply(null, arguments) + }, + fh = n._emscripten_bind_btSliderConstraint_enableFeedback_1 = function() { + return (fh = n._emscripten_bind_btSliderConstraint_enableFeedback_1 = n.asm.Er).apply(null, arguments) + }, + hh = n._emscripten_bind_btSliderConstraint_getBreakingImpulseThreshold_0 = function() { + return (hh = n._emscripten_bind_btSliderConstraint_getBreakingImpulseThreshold_0 = n.asm.Fr).apply(null, arguments) + }, + Bh = n._emscripten_bind_btSliderConstraint_setBreakingImpulseThreshold_1 = function() { + return (Bh = n._emscripten_bind_btSliderConstraint_setBreakingImpulseThreshold_1 = n.asm.Gr).apply(null, arguments) + }, + gh = n._emscripten_bind_btSliderConstraint_getParam_2 = function() { + return (gh = n._emscripten_bind_btSliderConstraint_getParam_2 = n.asm.Hr).apply(null, arguments) + }, + kh = n._emscripten_bind_btSliderConstraint_setParam_3 = function() { + return (kh = n._emscripten_bind_btSliderConstraint_setParam_3 = n.asm.Ir).apply(null, arguments) + }, + Ch = n._emscripten_bind_btSliderConstraint___destroy___0 = function() { + return (Ch = n._emscripten_bind_btSliderConstraint___destroy___0 = n.asm.Jr).apply(null, arguments) + }, + Sh = n._emscripten_bind_btFixedConstraint_btFixedConstraint_4 = function() { + return (Sh = n._emscripten_bind_btFixedConstraint_btFixedConstraint_4 = n.asm.Kr).apply(null, arguments) + }, + jh = n._emscripten_bind_btFixedConstraint_enableFeedback_1 = function() { + return (jh = n._emscripten_bind_btFixedConstraint_enableFeedback_1 = n.asm.Lr).apply(null, arguments) + }, + vh = n._emscripten_bind_btFixedConstraint_getBreakingImpulseThreshold_0 = function() { + return (vh = n._emscripten_bind_btFixedConstraint_getBreakingImpulseThreshold_0 = n.asm.Mr).apply(null, arguments) + }, + Ih = n._emscripten_bind_btFixedConstraint_setBreakingImpulseThreshold_1 = function() { + return (Ih = n._emscripten_bind_btFixedConstraint_setBreakingImpulseThreshold_1 = n.asm.Nr).apply(null, arguments) + }, + Rh = n._emscripten_bind_btFixedConstraint_getParam_2 = function() { + return (Rh = n._emscripten_bind_btFixedConstraint_getParam_2 = n.asm.Or).apply(null, arguments) + }, + Dh = n._emscripten_bind_btFixedConstraint_setParam_3 = function() { + return (Dh = n._emscripten_bind_btFixedConstraint_setParam_3 = n.asm.Pr).apply(null, arguments) + }, + Ph = n._emscripten_bind_btFixedConstraint___destroy___0 = function() { + return (Ph = n._emscripten_bind_btFixedConstraint___destroy___0 = n.asm.Qr).apply(null, arguments) + }, + Th = n._emscripten_bind_btConstraintSolver___destroy___0 = function() { + return (Th = n._emscripten_bind_btConstraintSolver___destroy___0 = n.asm.Rr).apply(null, arguments) + }, + Oh = n._emscripten_bind_btDispatcherInfo_get_m_timeStep_0 = function() { + return (Oh = n._emscripten_bind_btDispatcherInfo_get_m_timeStep_0 = n.asm.Sr).apply(null, arguments) + }, + Wh = n._emscripten_bind_btDispatcherInfo_set_m_timeStep_1 = function() { + return (Wh = n._emscripten_bind_btDispatcherInfo_set_m_timeStep_1 = n.asm.Tr).apply(null, arguments) + }, + Ah = n._emscripten_bind_btDispatcherInfo_get_m_stepCount_0 = function() { + return (Ah = n._emscripten_bind_btDispatcherInfo_get_m_stepCount_0 = n.asm.Ur).apply(null, arguments) + }, + Mh = n._emscripten_bind_btDispatcherInfo_set_m_stepCount_1 = function() { + return (Mh = n._emscripten_bind_btDispatcherInfo_set_m_stepCount_1 = n.asm.Vr).apply(null, arguments) + }, + xh = n._emscripten_bind_btDispatcherInfo_get_m_dispatchFunc_0 = function() { + return (xh = n._emscripten_bind_btDispatcherInfo_get_m_dispatchFunc_0 = n.asm.Wr).apply(null, arguments) + }, + Fh = n._emscripten_bind_btDispatcherInfo_set_m_dispatchFunc_1 = function() { + return (Fh = n._emscripten_bind_btDispatcherInfo_set_m_dispatchFunc_1 = n.asm.Xr).apply(null, arguments) + }, + Lh = n._emscripten_bind_btDispatcherInfo_get_m_timeOfImpact_0 = function() { + return (Lh = n._emscripten_bind_btDispatcherInfo_get_m_timeOfImpact_0 = n.asm.Yr).apply(null, arguments) + }, + Gh = n._emscripten_bind_btDispatcherInfo_set_m_timeOfImpact_1 = function() { + return (Gh = n._emscripten_bind_btDispatcherInfo_set_m_timeOfImpact_1 = n.asm.Zr).apply(null, arguments) + }, + wh = n._emscripten_bind_btDispatcherInfo_get_m_useContinuous_0 = function() { + return (wh = n._emscripten_bind_btDispatcherInfo_get_m_useContinuous_0 = n.asm._r).apply(null, arguments) + }, + Hh = n._emscripten_bind_btDispatcherInfo_set_m_useContinuous_1 = function() { + return (Hh = n._emscripten_bind_btDispatcherInfo_set_m_useContinuous_1 = n.asm.$r).apply(null, arguments) + }, + Vh = n._emscripten_bind_btDispatcherInfo_get_m_enableSatConvex_0 = function() { + return (Vh = n._emscripten_bind_btDispatcherInfo_get_m_enableSatConvex_0 = n.asm.as).apply(null, arguments) + }, + Eh = n._emscripten_bind_btDispatcherInfo_set_m_enableSatConvex_1 = function() { + return (Eh = n._emscripten_bind_btDispatcherInfo_set_m_enableSatConvex_1 = n.asm.bs).apply(null, arguments) + }, + Nh = n._emscripten_bind_btDispatcherInfo_get_m_enableSPU_0 = function() { + return (Nh = n._emscripten_bind_btDispatcherInfo_get_m_enableSPU_0 = n.asm.cs).apply(null, arguments) + }, + Uh = n._emscripten_bind_btDispatcherInfo_set_m_enableSPU_1 = function() { + return (Uh = n._emscripten_bind_btDispatcherInfo_set_m_enableSPU_1 = n.asm.ds).apply(null, arguments) + }, + zh = n._emscripten_bind_btDispatcherInfo_get_m_useEpa_0 = function() { + return (zh = n._emscripten_bind_btDispatcherInfo_get_m_useEpa_0 = n.asm.es).apply(null, arguments) + }, + qh = n._emscripten_bind_btDispatcherInfo_set_m_useEpa_1 = function() { + return (qh = n._emscripten_bind_btDispatcherInfo_set_m_useEpa_1 = n.asm.fs).apply(null, arguments) + }, + Kh = n._emscripten_bind_btDispatcherInfo_get_m_allowedCcdPenetration_0 = function() { + return (Kh = n._emscripten_bind_btDispatcherInfo_get_m_allowedCcdPenetration_0 = n.asm.gs).apply(null, arguments) + }, + Qh = n._emscripten_bind_btDispatcherInfo_set_m_allowedCcdPenetration_1 = function() { + return (Qh = n._emscripten_bind_btDispatcherInfo_set_m_allowedCcdPenetration_1 = n.asm.hs).apply(null, arguments) + }, + Xh = n._emscripten_bind_btDispatcherInfo_get_m_useConvexConservativeDistanceUtil_0 = function() { + return (Xh = n._emscripten_bind_btDispatcherInfo_get_m_useConvexConservativeDistanceUtil_0 = n.asm.is).apply(null, arguments) + }, + Zh = n._emscripten_bind_btDispatcherInfo_set_m_useConvexConservativeDistanceUtil_1 = function() { + return (Zh = n._emscripten_bind_btDispatcherInfo_set_m_useConvexConservativeDistanceUtil_1 = n.asm.js).apply(null, arguments) + }, + Yh = n._emscripten_bind_btDispatcherInfo_get_m_convexConservativeDistanceThreshold_0 = function() { + return (Yh = n._emscripten_bind_btDispatcherInfo_get_m_convexConservativeDistanceThreshold_0 = n.asm.ks).apply(null, arguments) + }, + Jh = n._emscripten_bind_btDispatcherInfo_set_m_convexConservativeDistanceThreshold_1 = function() { + return (Jh = n._emscripten_bind_btDispatcherInfo_set_m_convexConservativeDistanceThreshold_1 = n.asm.ls).apply(null, arguments) + }, + $h = n._emscripten_bind_btDispatcherInfo___destroy___0 = function() { + return ($h = n._emscripten_bind_btDispatcherInfo___destroy___0 = n.asm.ms).apply(null, arguments) + }, + tB = n._emscripten_bind_btContactSolverInfo_get_m_splitImpulse_0 = function() { + return (tB = n._emscripten_bind_btContactSolverInfo_get_m_splitImpulse_0 = n.asm.ns).apply(null, arguments) + }, + eB = n._emscripten_bind_btContactSolverInfo_set_m_splitImpulse_1 = function() { + return (eB = n._emscripten_bind_btContactSolverInfo_set_m_splitImpulse_1 = n.asm.os).apply(null, arguments) + }, + nB = n._emscripten_bind_btContactSolverInfo_get_m_splitImpulsePenetrationThreshold_0 = function() { + return (nB = n._emscripten_bind_btContactSolverInfo_get_m_splitImpulsePenetrationThreshold_0 = n.asm.ps).apply(null, arguments) + }, + oB = n._emscripten_bind_btContactSolverInfo_set_m_splitImpulsePenetrationThreshold_1 = function() { + return (oB = n._emscripten_bind_btContactSolverInfo_set_m_splitImpulsePenetrationThreshold_1 = n.asm.qs).apply(null, arguments) + }, + _B = n._emscripten_bind_btContactSolverInfo_get_m_numIterations_0 = function() { + return (_B = n._emscripten_bind_btContactSolverInfo_get_m_numIterations_0 = n.asm.rs).apply(null, arguments) + }, + iB = n._emscripten_bind_btContactSolverInfo_set_m_numIterations_1 = function() { + return (iB = n._emscripten_bind_btContactSolverInfo_set_m_numIterations_1 = n.asm.ss).apply(null, arguments) + }, + rB = n._emscripten_bind_btContactSolverInfo___destroy___0 = function() { + return (rB = n._emscripten_bind_btContactSolverInfo___destroy___0 = n.asm.ts).apply(null, arguments) + }, + pB = n._emscripten_bind_btVehicleTuning_btVehicleTuning_0 = function() { + return (pB = n._emscripten_bind_btVehicleTuning_btVehicleTuning_0 = n.asm.us).apply(null, arguments) + }, + sB = n._emscripten_bind_btVehicleTuning_get_m_suspensionStiffness_0 = function() { + return (sB = n._emscripten_bind_btVehicleTuning_get_m_suspensionStiffness_0 = n.asm.vs).apply(null, arguments) + }, + cB = n._emscripten_bind_btVehicleTuning_set_m_suspensionStiffness_1 = function() { + return (cB = n._emscripten_bind_btVehicleTuning_set_m_suspensionStiffness_1 = n.asm.ws).apply(null, arguments) + }, + aB = n._emscripten_bind_btVehicleTuning_get_m_suspensionCompression_0 = function() { + return (aB = n._emscripten_bind_btVehicleTuning_get_m_suspensionCompression_0 = n.asm.xs).apply(null, arguments) + }, + lB = n._emscripten_bind_btVehicleTuning_set_m_suspensionCompression_1 = function() { + return (lB = n._emscripten_bind_btVehicleTuning_set_m_suspensionCompression_1 = n.asm.ys).apply(null, arguments) + }, + uB = n._emscripten_bind_btVehicleTuning_get_m_suspensionDamping_0 = function() { + return (uB = n._emscripten_bind_btVehicleTuning_get_m_suspensionDamping_0 = n.asm.zs).apply(null, arguments) + }, + bB = n._emscripten_bind_btVehicleTuning_set_m_suspensionDamping_1 = function() { + return (bB = n._emscripten_bind_btVehicleTuning_set_m_suspensionDamping_1 = n.asm.As).apply(null, arguments) + }, + mB = n._emscripten_bind_btVehicleTuning_get_m_maxSuspensionTravelCm_0 = function() { + return (mB = n._emscripten_bind_btVehicleTuning_get_m_maxSuspensionTravelCm_0 = n.asm.Bs).apply(null, arguments) + }, + yB = n._emscripten_bind_btVehicleTuning_set_m_maxSuspensionTravelCm_1 = function() { + return (yB = n._emscripten_bind_btVehicleTuning_set_m_maxSuspensionTravelCm_1 = n.asm.Cs).apply(null, arguments) + }, + dB = n._emscripten_bind_btVehicleTuning_get_m_frictionSlip_0 = function() { + return (dB = n._emscripten_bind_btVehicleTuning_get_m_frictionSlip_0 = n.asm.Ds).apply(null, arguments) + }, + fB = n._emscripten_bind_btVehicleTuning_set_m_frictionSlip_1 = function() { + return (fB = n._emscripten_bind_btVehicleTuning_set_m_frictionSlip_1 = n.asm.Es).apply(null, arguments) + }, + hB = n._emscripten_bind_btVehicleTuning_get_m_maxSuspensionForce_0 = function() { + return (hB = n._emscripten_bind_btVehicleTuning_get_m_maxSuspensionForce_0 = n.asm.Fs).apply(null, arguments) + }, + BB = n._emscripten_bind_btVehicleTuning_set_m_maxSuspensionForce_1 = function() { + return (BB = n._emscripten_bind_btVehicleTuning_set_m_maxSuspensionForce_1 = n.asm.Gs).apply(null, arguments) + }, + gB = n._emscripten_bind_btVehicleRaycasterResult_get_m_hitPointInWorld_0 = function() { + return (gB = n._emscripten_bind_btVehicleRaycasterResult_get_m_hitPointInWorld_0 = n.asm.Hs).apply(null, arguments) + }, + kB = n._emscripten_bind_btVehicleRaycasterResult_set_m_hitPointInWorld_1 = function() { + return (kB = n._emscripten_bind_btVehicleRaycasterResult_set_m_hitPointInWorld_1 = n.asm.Is).apply(null, arguments) + }, + CB = n._emscripten_bind_btVehicleRaycasterResult_get_m_hitNormalInWorld_0 = function() { + return (CB = n._emscripten_bind_btVehicleRaycasterResult_get_m_hitNormalInWorld_0 = n.asm.Js).apply(null, arguments) + }, + SB = n._emscripten_bind_btVehicleRaycasterResult_set_m_hitNormalInWorld_1 = function() { + return (SB = n._emscripten_bind_btVehicleRaycasterResult_set_m_hitNormalInWorld_1 = n.asm.Ks).apply(null, arguments) + }, + jB = n._emscripten_bind_btVehicleRaycasterResult_get_m_distFraction_0 = function() { + return (jB = n._emscripten_bind_btVehicleRaycasterResult_get_m_distFraction_0 = n.asm.Ls).apply(null, arguments) + }, + vB = n._emscripten_bind_btVehicleRaycasterResult_set_m_distFraction_1 = function() { + return (vB = n._emscripten_bind_btVehicleRaycasterResult_set_m_distFraction_1 = n.asm.Ms).apply(null, arguments) + }, + IB = n._emscripten_bind_btVehicleRaycasterResult___destroy___0 = function() { + return (IB = n._emscripten_bind_btVehicleRaycasterResult___destroy___0 = n.asm.Ns).apply(null, arguments) + }, + RB = n._emscripten_bind_btDefaultVehicleRaycaster_btDefaultVehicleRaycaster_1 = function() { + return (RB = n._emscripten_bind_btDefaultVehicleRaycaster_btDefaultVehicleRaycaster_1 = n.asm.Os).apply(null, arguments) + }, + DB = n._emscripten_bind_btDefaultVehicleRaycaster_castRay_3 = function() { + return (DB = n._emscripten_bind_btDefaultVehicleRaycaster_castRay_3 = n.asm.Ps).apply(null, arguments) + }, + PB = n._emscripten_bind_btDefaultVehicleRaycaster___destroy___0 = function() { + return (PB = n._emscripten_bind_btDefaultVehicleRaycaster___destroy___0 = n.asm.Qs).apply(null, arguments) + }, + TB = n._emscripten_bind_RaycastInfo_get_m_contactNormalWS_0 = function() { + return (TB = n._emscripten_bind_RaycastInfo_get_m_contactNormalWS_0 = n.asm.Rs).apply(null, arguments) + }, + OB = n._emscripten_bind_RaycastInfo_set_m_contactNormalWS_1 = function() { + return (OB = n._emscripten_bind_RaycastInfo_set_m_contactNormalWS_1 = n.asm.Ss).apply(null, arguments) + }, + WB = n._emscripten_bind_RaycastInfo_get_m_contactPointWS_0 = function() { + return (WB = n._emscripten_bind_RaycastInfo_get_m_contactPointWS_0 = n.asm.Ts).apply(null, arguments) + }, + AB = n._emscripten_bind_RaycastInfo_set_m_contactPointWS_1 = function() { + return (AB = n._emscripten_bind_RaycastInfo_set_m_contactPointWS_1 = n.asm.Us).apply(null, arguments) + }, + MB = n._emscripten_bind_RaycastInfo_get_m_suspensionLength_0 = function() { + return (MB = n._emscripten_bind_RaycastInfo_get_m_suspensionLength_0 = n.asm.Vs).apply(null, arguments) + }, + xB = n._emscripten_bind_RaycastInfo_set_m_suspensionLength_1 = function() { + return (xB = n._emscripten_bind_RaycastInfo_set_m_suspensionLength_1 = n.asm.Ws).apply(null, arguments) + }, + FB = n._emscripten_bind_RaycastInfo_get_m_hardPointWS_0 = function() { + return (FB = n._emscripten_bind_RaycastInfo_get_m_hardPointWS_0 = n.asm.Xs).apply(null, arguments) + }, + LB = n._emscripten_bind_RaycastInfo_set_m_hardPointWS_1 = function() { + return (LB = n._emscripten_bind_RaycastInfo_set_m_hardPointWS_1 = n.asm.Ys).apply(null, arguments) + }, + GB = n._emscripten_bind_RaycastInfo_get_m_wheelDirectionWS_0 = function() { + return (GB = n._emscripten_bind_RaycastInfo_get_m_wheelDirectionWS_0 = n.asm.Zs).apply(null, arguments) + }, + wB = n._emscripten_bind_RaycastInfo_set_m_wheelDirectionWS_1 = function() { + return (wB = n._emscripten_bind_RaycastInfo_set_m_wheelDirectionWS_1 = n.asm._s).apply(null, arguments) + }, + HB = n._emscripten_bind_RaycastInfo_get_m_wheelAxleWS_0 = function() { + return (HB = n._emscripten_bind_RaycastInfo_get_m_wheelAxleWS_0 = n.asm.$s).apply(null, arguments) + }, + VB = n._emscripten_bind_RaycastInfo_set_m_wheelAxleWS_1 = function() { + return (VB = n._emscripten_bind_RaycastInfo_set_m_wheelAxleWS_1 = n.asm.at).apply(null, arguments) + }, + EB = n._emscripten_bind_RaycastInfo_get_m_isInContact_0 = function() { + return (EB = n._emscripten_bind_RaycastInfo_get_m_isInContact_0 = n.asm.bt).apply(null, arguments) + }, + NB = n._emscripten_bind_RaycastInfo_set_m_isInContact_1 = function() { + return (NB = n._emscripten_bind_RaycastInfo_set_m_isInContact_1 = n.asm.ct).apply(null, arguments) + }, + UB = n._emscripten_bind_RaycastInfo_get_m_groundObject_0 = function() { + return (UB = n._emscripten_bind_RaycastInfo_get_m_groundObject_0 = n.asm.dt).apply(null, arguments) + }, + zB = n._emscripten_bind_RaycastInfo_set_m_groundObject_1 = function() { + return (zB = n._emscripten_bind_RaycastInfo_set_m_groundObject_1 = n.asm.et).apply(null, arguments) + }, + qB = n._emscripten_bind_RaycastInfo___destroy___0 = function() { + return (qB = n._emscripten_bind_RaycastInfo___destroy___0 = n.asm.ft).apply(null, arguments) + }, + KB = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_chassisConnectionCS_0 = function() { + return (KB = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_chassisConnectionCS_0 = n.asm.gt).apply(null, arguments) + }, + QB = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_chassisConnectionCS_1 = function() { + return (QB = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_chassisConnectionCS_1 = n.asm.ht).apply(null, arguments) + }, + XB = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelDirectionCS_0 = function() { + return (XB = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelDirectionCS_0 = n.asm.it).apply(null, arguments) + }, + ZB = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelDirectionCS_1 = function() { + return (ZB = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelDirectionCS_1 = n.asm.jt).apply(null, arguments) + }, + YB = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelAxleCS_0 = function() { + return (YB = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelAxleCS_0 = n.asm.kt).apply(null, arguments) + }, + JB = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelAxleCS_1 = function() { + return (JB = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelAxleCS_1 = n.asm.lt).apply(null, arguments) + }, + $B = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionRestLength_0 = function() { + return ($B = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionRestLength_0 = n.asm.mt).apply(null, arguments) + }, + tg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionRestLength_1 = function() { + return (tg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionRestLength_1 = n.asm.nt).apply(null, arguments) + }, + eg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionTravelCm_0 = function() { + return (eg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionTravelCm_0 = n.asm.ot).apply(null, arguments) + }, + ng = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionTravelCm_1 = function() { + return (ng = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionTravelCm_1 = n.asm.pt).apply(null, arguments) + }, + og = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelRadius_0 = function() { + return (og = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelRadius_0 = n.asm.qt).apply(null, arguments) + }, + _g = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelRadius_1 = function() { + return (_g = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelRadius_1 = n.asm.rt).apply(null, arguments) + }, + ig = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionStiffness_0 = function() { + return (ig = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionStiffness_0 = n.asm.st).apply(null, arguments) + }, + rg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionStiffness_1 = function() { + return (rg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionStiffness_1 = n.asm.tt).apply(null, arguments) + }, + pg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingCompression_0 = function() { + return (pg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingCompression_0 = n.asm.ut).apply(null, arguments) + }, + sg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingCompression_1 = function() { + return (sg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingCompression_1 = n.asm.vt).apply(null, arguments) + }, + cg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingRelaxation_0 = function() { + return (cg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingRelaxation_0 = n.asm.wt).apply(null, arguments) + }, + ag = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingRelaxation_1 = function() { + return (ag = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingRelaxation_1 = n.asm.xt).apply(null, arguments) + }, + lg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_frictionSlip_0 = function() { + return (lg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_frictionSlip_0 = n.asm.yt).apply(null, arguments) + }, + ug = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_frictionSlip_1 = function() { + return (ug = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_frictionSlip_1 = n.asm.zt).apply(null, arguments) + }, + bg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionForce_0 = function() { + return (bg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionForce_0 = n.asm.At).apply(null, arguments) + }, + mg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionForce_1 = function() { + return (mg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionForce_1 = n.asm.Bt).apply(null, arguments) + }, + yg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_bIsFrontWheel_0 = function() { + return (yg = n._emscripten_bind_btWheelInfoConstructionInfo_get_m_bIsFrontWheel_0 = n.asm.Ct).apply(null, arguments) + }, + dg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_bIsFrontWheel_1 = function() { + return (dg = n._emscripten_bind_btWheelInfoConstructionInfo_set_m_bIsFrontWheel_1 = n.asm.Dt).apply(null, arguments) + }, + fg = n._emscripten_bind_btWheelInfoConstructionInfo___destroy___0 = function() { + return (fg = n._emscripten_bind_btWheelInfoConstructionInfo___destroy___0 = n.asm.Et).apply(null, arguments) + }, + hg = n._emscripten_bind_btWheelInfo_btWheelInfo_1 = function() { + return (hg = n._emscripten_bind_btWheelInfo_btWheelInfo_1 = n.asm.Ft).apply(null, arguments) + }, + Bg = n._emscripten_bind_btWheelInfo_getSuspensionRestLength_0 = function() { + return (Bg = n._emscripten_bind_btWheelInfo_getSuspensionRestLength_0 = n.asm.Gt).apply(null, arguments) + }, + gg = n._emscripten_bind_btWheelInfo_updateWheel_2 = function() { + return (gg = n._emscripten_bind_btWheelInfo_updateWheel_2 = n.asm.Ht).apply(null, arguments) + }, + kg = n._emscripten_bind_btWheelInfo_get_m_suspensionStiffness_0 = function() { + return (kg = n._emscripten_bind_btWheelInfo_get_m_suspensionStiffness_0 = n.asm.It).apply(null, arguments) + }, + Cg = n._emscripten_bind_btWheelInfo_set_m_suspensionStiffness_1 = function() { + return (Cg = n._emscripten_bind_btWheelInfo_set_m_suspensionStiffness_1 = n.asm.Jt).apply(null, arguments) + }, + Sg = n._emscripten_bind_btWheelInfo_get_m_frictionSlip_0 = function() { + return (Sg = n._emscripten_bind_btWheelInfo_get_m_frictionSlip_0 = n.asm.Kt).apply(null, arguments) + }, + jg = n._emscripten_bind_btWheelInfo_set_m_frictionSlip_1 = function() { + return (jg = n._emscripten_bind_btWheelInfo_set_m_frictionSlip_1 = n.asm.Lt).apply(null, arguments) + }, + vg = n._emscripten_bind_btWheelInfo_get_m_engineForce_0 = function() { + return (vg = n._emscripten_bind_btWheelInfo_get_m_engineForce_0 = n.asm.Mt).apply(null, arguments) + }, + Ig = n._emscripten_bind_btWheelInfo_set_m_engineForce_1 = function() { + return (Ig = n._emscripten_bind_btWheelInfo_set_m_engineForce_1 = n.asm.Nt).apply(null, arguments) + }, + Rg = n._emscripten_bind_btWheelInfo_get_m_rollInfluence_0 = function() { + return (Rg = n._emscripten_bind_btWheelInfo_get_m_rollInfluence_0 = n.asm.Ot).apply(null, arguments) + }, + Dg = n._emscripten_bind_btWheelInfo_set_m_rollInfluence_1 = function() { + return (Dg = n._emscripten_bind_btWheelInfo_set_m_rollInfluence_1 = n.asm.Pt).apply(null, arguments) + }, + Pg = n._emscripten_bind_btWheelInfo_get_m_suspensionRestLength1_0 = function() { + return (Pg = n._emscripten_bind_btWheelInfo_get_m_suspensionRestLength1_0 = n.asm.Qt).apply(null, arguments) + }, + Tg = n._emscripten_bind_btWheelInfo_set_m_suspensionRestLength1_1 = function() { + return (Tg = n._emscripten_bind_btWheelInfo_set_m_suspensionRestLength1_1 = n.asm.Rt).apply(null, arguments) + }, + Og = n._emscripten_bind_btWheelInfo_get_m_wheelsRadius_0 = function() { + return (Og = n._emscripten_bind_btWheelInfo_get_m_wheelsRadius_0 = n.asm.St).apply(null, arguments) + }, + Wg = n._emscripten_bind_btWheelInfo_set_m_wheelsRadius_1 = function() { + return (Wg = n._emscripten_bind_btWheelInfo_set_m_wheelsRadius_1 = n.asm.Tt).apply(null, arguments) + }, + Ag = n._emscripten_bind_btWheelInfo_get_m_wheelsDampingCompression_0 = function() { + return (Ag = n._emscripten_bind_btWheelInfo_get_m_wheelsDampingCompression_0 = n.asm.Ut).apply(null, arguments) + }, + Mg = n._emscripten_bind_btWheelInfo_set_m_wheelsDampingCompression_1 = function() { + return (Mg = n._emscripten_bind_btWheelInfo_set_m_wheelsDampingCompression_1 = n.asm.Vt).apply(null, arguments) + }, + xg = n._emscripten_bind_btWheelInfo_get_m_wheelsDampingRelaxation_0 = function() { + return (xg = n._emscripten_bind_btWheelInfo_get_m_wheelsDampingRelaxation_0 = n.asm.Wt).apply(null, arguments) + }, + Fg = n._emscripten_bind_btWheelInfo_set_m_wheelsDampingRelaxation_1 = function() { + return (Fg = n._emscripten_bind_btWheelInfo_set_m_wheelsDampingRelaxation_1 = n.asm.Xt).apply(null, arguments) + }, + Lg = n._emscripten_bind_btWheelInfo_get_m_steering_0 = function() { + return (Lg = n._emscripten_bind_btWheelInfo_get_m_steering_0 = n.asm.Yt).apply(null, arguments) + }, + Gg = n._emscripten_bind_btWheelInfo_set_m_steering_1 = function() { + return (Gg = n._emscripten_bind_btWheelInfo_set_m_steering_1 = n.asm.Zt).apply(null, arguments) + }, + wg = n._emscripten_bind_btWheelInfo_get_m_maxSuspensionForce_0 = function() { + return (wg = n._emscripten_bind_btWheelInfo_get_m_maxSuspensionForce_0 = n.asm._t).apply(null, arguments) + }, + Hg = n._emscripten_bind_btWheelInfo_set_m_maxSuspensionForce_1 = function() { + return (Hg = n._emscripten_bind_btWheelInfo_set_m_maxSuspensionForce_1 = n.asm.$t).apply(null, arguments) + }, + Vg = n._emscripten_bind_btWheelInfo_get_m_maxSuspensionTravelCm_0 = function() { + return (Vg = n._emscripten_bind_btWheelInfo_get_m_maxSuspensionTravelCm_0 = n.asm.au).apply(null, arguments) + }, + Eg = n._emscripten_bind_btWheelInfo_set_m_maxSuspensionTravelCm_1 = function() { + return (Eg = n._emscripten_bind_btWheelInfo_set_m_maxSuspensionTravelCm_1 = n.asm.bu).apply(null, arguments) + }, + Ng = n._emscripten_bind_btWheelInfo_get_m_wheelsSuspensionForce_0 = function() { + return (Ng = n._emscripten_bind_btWheelInfo_get_m_wheelsSuspensionForce_0 = n.asm.cu).apply(null, arguments) + }, + Ug = n._emscripten_bind_btWheelInfo_set_m_wheelsSuspensionForce_1 = function() { + return (Ug = n._emscripten_bind_btWheelInfo_set_m_wheelsSuspensionForce_1 = n.asm.du).apply(null, arguments) + }, + zg = n._emscripten_bind_btWheelInfo_get_m_bIsFrontWheel_0 = function() { + return (zg = n._emscripten_bind_btWheelInfo_get_m_bIsFrontWheel_0 = n.asm.eu).apply(null, arguments) + }, + qg = n._emscripten_bind_btWheelInfo_set_m_bIsFrontWheel_1 = function() { + return (qg = n._emscripten_bind_btWheelInfo_set_m_bIsFrontWheel_1 = n.asm.fu).apply(null, arguments) + }, + Kg = n._emscripten_bind_btWheelInfo_get_m_raycastInfo_0 = function() { + return (Kg = n._emscripten_bind_btWheelInfo_get_m_raycastInfo_0 = n.asm.gu).apply(null, arguments) + }, + Qg = n._emscripten_bind_btWheelInfo_set_m_raycastInfo_1 = function() { + return (Qg = n._emscripten_bind_btWheelInfo_set_m_raycastInfo_1 = n.asm.hu).apply(null, arguments) + }, + Xg = n._emscripten_bind_btWheelInfo_get_m_chassisConnectionPointCS_0 = function() { + return (Xg = n._emscripten_bind_btWheelInfo_get_m_chassisConnectionPointCS_0 = n.asm.iu).apply(null, arguments) + }, + Zg = n._emscripten_bind_btWheelInfo_set_m_chassisConnectionPointCS_1 = function() { + return (Zg = n._emscripten_bind_btWheelInfo_set_m_chassisConnectionPointCS_1 = n.asm.ju).apply(null, arguments) + }, + Yg = n._emscripten_bind_btWheelInfo_get_m_worldTransform_0 = function() { + return (Yg = n._emscripten_bind_btWheelInfo_get_m_worldTransform_0 = n.asm.ku).apply(null, arguments) + }, + Jg = n._emscripten_bind_btWheelInfo_set_m_worldTransform_1 = function() { + return (Jg = n._emscripten_bind_btWheelInfo_set_m_worldTransform_1 = n.asm.lu).apply(null, arguments) + }, + $g = n._emscripten_bind_btWheelInfo_get_m_wheelDirectionCS_0 = function() { + return ($g = n._emscripten_bind_btWheelInfo_get_m_wheelDirectionCS_0 = n.asm.mu).apply(null, arguments) + }, + tk = n._emscripten_bind_btWheelInfo_set_m_wheelDirectionCS_1 = function() { + return (tk = n._emscripten_bind_btWheelInfo_set_m_wheelDirectionCS_1 = n.asm.nu).apply(null, arguments) + }, + ek = n._emscripten_bind_btWheelInfo_get_m_wheelAxleCS_0 = function() { + return (ek = n._emscripten_bind_btWheelInfo_get_m_wheelAxleCS_0 = n.asm.ou).apply(null, arguments) + }, + nk = n._emscripten_bind_btWheelInfo_set_m_wheelAxleCS_1 = function() { + return (nk = n._emscripten_bind_btWheelInfo_set_m_wheelAxleCS_1 = n.asm.pu).apply(null, arguments) + }, + ok = n._emscripten_bind_btWheelInfo_get_m_rotation_0 = function() { + return (ok = n._emscripten_bind_btWheelInfo_get_m_rotation_0 = n.asm.qu).apply(null, arguments) + }, + _k = n._emscripten_bind_btWheelInfo_set_m_rotation_1 = function() { + return (_k = n._emscripten_bind_btWheelInfo_set_m_rotation_1 = n.asm.ru).apply(null, arguments) + }, + ik = n._emscripten_bind_btWheelInfo_get_m_deltaRotation_0 = function() { + return (ik = n._emscripten_bind_btWheelInfo_get_m_deltaRotation_0 = n.asm.su).apply(null, arguments) + }, + rk = n._emscripten_bind_btWheelInfo_set_m_deltaRotation_1 = function() { + return (rk = n._emscripten_bind_btWheelInfo_set_m_deltaRotation_1 = n.asm.tu).apply(null, arguments) + }, + pk = n._emscripten_bind_btWheelInfo_get_m_brake_0 = function() { + return (pk = n._emscripten_bind_btWheelInfo_get_m_brake_0 = n.asm.uu).apply(null, arguments) + }, + sk = n._emscripten_bind_btWheelInfo_set_m_brake_1 = function() { + return (sk = n._emscripten_bind_btWheelInfo_set_m_brake_1 = n.asm.vu).apply(null, arguments) + }, + ck = n._emscripten_bind_btWheelInfo_get_m_clippedInvContactDotSuspension_0 = function() { + return (ck = n._emscripten_bind_btWheelInfo_get_m_clippedInvContactDotSuspension_0 = n.asm.wu).apply(null, arguments) + }, + ak = n._emscripten_bind_btWheelInfo_set_m_clippedInvContactDotSuspension_1 = function() { + return (ak = n._emscripten_bind_btWheelInfo_set_m_clippedInvContactDotSuspension_1 = n.asm.xu).apply(null, arguments) + }, + lk = n._emscripten_bind_btWheelInfo_get_m_suspensionRelativeVelocity_0 = function() { + return (lk = n._emscripten_bind_btWheelInfo_get_m_suspensionRelativeVelocity_0 = n.asm.yu).apply(null, arguments) + }, + uk = n._emscripten_bind_btWheelInfo_set_m_suspensionRelativeVelocity_1 = function() { + return (uk = n._emscripten_bind_btWheelInfo_set_m_suspensionRelativeVelocity_1 = n.asm.zu).apply(null, arguments) + }, + bk = n._emscripten_bind_btWheelInfo_get_m_skidInfo_0 = function() { + return (bk = n._emscripten_bind_btWheelInfo_get_m_skidInfo_0 = n.asm.Au).apply(null, arguments) + }, + mk = n._emscripten_bind_btWheelInfo_set_m_skidInfo_1 = function() { + return (mk = n._emscripten_bind_btWheelInfo_set_m_skidInfo_1 = n.asm.Bu).apply(null, arguments) + }, + yk = n._emscripten_bind_btWheelInfo___destroy___0 = function() { + return (yk = n._emscripten_bind_btWheelInfo___destroy___0 = n.asm.Cu).apply(null, arguments) + }, + dk = n._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_3 = function() { + return (dk = n._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_3 = n.asm.Du).apply(null, arguments) + }, + fk = n._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_4 = function() { + return (fk = n._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_4 = n.asm.Eu).apply(null, arguments) + }, + hk = n._emscripten_bind_btKinematicCharacterController_setUpAxis_1 = function() { + return (hk = n._emscripten_bind_btKinematicCharacterController_setUpAxis_1 = n.asm.Fu).apply(null, arguments) + }, + Bk = n._emscripten_bind_btKinematicCharacterController_setWalkDirection_1 = function() { + return (Bk = n._emscripten_bind_btKinematicCharacterController_setWalkDirection_1 = n.asm.Gu).apply(null, arguments) + }, + gk = n._emscripten_bind_btKinematicCharacterController_setVelocityForTimeInterval_2 = function() { + return (gk = n._emscripten_bind_btKinematicCharacterController_setVelocityForTimeInterval_2 = n.asm.Hu).apply(null, arguments) + }, + kk = n._emscripten_bind_btKinematicCharacterController_warp_1 = function() { + return (kk = n._emscripten_bind_btKinematicCharacterController_warp_1 = n.asm.Iu).apply(null, arguments) + }, + Ck = n._emscripten_bind_btKinematicCharacterController_preStep_1 = function() { + return (Ck = n._emscripten_bind_btKinematicCharacterController_preStep_1 = n.asm.Ju).apply(null, arguments) + }, + Sk = n._emscripten_bind_btKinematicCharacterController_playerStep_2 = function() { + return (Sk = n._emscripten_bind_btKinematicCharacterController_playerStep_2 = n.asm.Ku).apply(null, arguments) + }, + jk = n._emscripten_bind_btKinematicCharacterController_setFallSpeed_1 = function() { + return (jk = n._emscripten_bind_btKinematicCharacterController_setFallSpeed_1 = n.asm.Lu).apply(null, arguments) + }, + vk = n._emscripten_bind_btKinematicCharacterController_setJumpSpeed_1 = function() { + return (vk = n._emscripten_bind_btKinematicCharacterController_setJumpSpeed_1 = n.asm.Mu).apply(null, arguments) + }, + Ik = n._emscripten_bind_btKinematicCharacterController_setMaxJumpHeight_1 = function() { + return (Ik = n._emscripten_bind_btKinematicCharacterController_setMaxJumpHeight_1 = n.asm.Nu).apply(null, arguments) + }, + Rk = n._emscripten_bind_btKinematicCharacterController_canJump_0 = function() { + return (Rk = n._emscripten_bind_btKinematicCharacterController_canJump_0 = n.asm.Ou).apply(null, arguments) + }, + Dk = n._emscripten_bind_btKinematicCharacterController_jump_0 = function() { + return (Dk = n._emscripten_bind_btKinematicCharacterController_jump_0 = n.asm.Pu).apply(null, arguments) + }, + Pk = n._emscripten_bind_btKinematicCharacterController_setGravity_1 = function() { + return (Pk = n._emscripten_bind_btKinematicCharacterController_setGravity_1 = n.asm.Qu).apply(null, arguments) + }, + Tk = n._emscripten_bind_btKinematicCharacterController_getGravity_0 = function() { + return (Tk = n._emscripten_bind_btKinematicCharacterController_getGravity_0 = n.asm.Ru).apply(null, arguments) + }, + Ok = n._emscripten_bind_btKinematicCharacterController_setMaxSlope_1 = function() { + return (Ok = n._emscripten_bind_btKinematicCharacterController_setMaxSlope_1 = n.asm.Su).apply(null, arguments) + }, + Wk = n._emscripten_bind_btKinematicCharacterController_getMaxSlope_0 = function() { + return (Wk = n._emscripten_bind_btKinematicCharacterController_getMaxSlope_0 = n.asm.Tu).apply(null, arguments) + }, + Ak = n._emscripten_bind_btKinematicCharacterController_getGhostObject_0 = function() { + return (Ak = n._emscripten_bind_btKinematicCharacterController_getGhostObject_0 = n.asm.Uu).apply(null, arguments) + }, + Mk = n._emscripten_bind_btKinematicCharacterController_setUseGhostSweepTest_1 = function() { + return (Mk = n._emscripten_bind_btKinematicCharacterController_setUseGhostSweepTest_1 = n.asm.Vu).apply(null, arguments) + }, + xk = n._emscripten_bind_btKinematicCharacterController_onGround_0 = function() { + return (xk = n._emscripten_bind_btKinematicCharacterController_onGround_0 = n.asm.Wu).apply(null, arguments) + }, + Fk = n._emscripten_bind_btKinematicCharacterController_setUpInterpolate_1 = function() { + return (Fk = n._emscripten_bind_btKinematicCharacterController_setUpInterpolate_1 = n.asm.Xu).apply(null, arguments) + }, + Lk = n._emscripten_bind_btKinematicCharacterController_updateAction_2 = function() { + return (Lk = n._emscripten_bind_btKinematicCharacterController_updateAction_2 = n.asm.Yu).apply(null, arguments) + }, + Gk = n._emscripten_bind_btKinematicCharacterController___destroy___0 = function() { + return (Gk = n._emscripten_bind_btKinematicCharacterController___destroy___0 = n.asm.Zu).apply(null, arguments) + }, + wk = n._emscripten_bind_btRaycastVehicle_btRaycastVehicle_3 = function() { + return (wk = n._emscripten_bind_btRaycastVehicle_btRaycastVehicle_3 = n.asm._u).apply(null, arguments) + }, + Hk = n._emscripten_bind_btRaycastVehicle_applyEngineForce_2 = function() { + return (Hk = n._emscripten_bind_btRaycastVehicle_applyEngineForce_2 = n.asm.$u).apply(null, arguments) + }, + Vk = n._emscripten_bind_btRaycastVehicle_setSteeringValue_2 = function() { + return (Vk = n._emscripten_bind_btRaycastVehicle_setSteeringValue_2 = n.asm.av).apply(null, arguments) + }, + Ek = n._emscripten_bind_btRaycastVehicle_getWheelTransformWS_1 = function() { + return (Ek = n._emscripten_bind_btRaycastVehicle_getWheelTransformWS_1 = n.asm.bv).apply(null, arguments) + }, + Nk = n._emscripten_bind_btRaycastVehicle_updateWheelTransform_2 = function() { + return (Nk = n._emscripten_bind_btRaycastVehicle_updateWheelTransform_2 = n.asm.cv).apply(null, arguments) + }, + Uk = n._emscripten_bind_btRaycastVehicle_addWheel_7 = function() { + return (Uk = n._emscripten_bind_btRaycastVehicle_addWheel_7 = n.asm.dv).apply(null, arguments) + }, + zk = n._emscripten_bind_btRaycastVehicle_getNumWheels_0 = function() { + return (zk = n._emscripten_bind_btRaycastVehicle_getNumWheels_0 = n.asm.ev).apply(null, arguments) + }, + qk = n._emscripten_bind_btRaycastVehicle_getRigidBody_0 = function() { + return (qk = n._emscripten_bind_btRaycastVehicle_getRigidBody_0 = n.asm.fv).apply(null, arguments) + }, + Kk = n._emscripten_bind_btRaycastVehicle_getWheelInfo_1 = function() { + return (Kk = n._emscripten_bind_btRaycastVehicle_getWheelInfo_1 = n.asm.gv).apply(null, arguments) + }, + Qk = n._emscripten_bind_btRaycastVehicle_setBrake_2 = function() { + return (Qk = n._emscripten_bind_btRaycastVehicle_setBrake_2 = n.asm.hv).apply(null, arguments) + }, + Xk = n._emscripten_bind_btRaycastVehicle_setCoordinateSystem_3 = function() { + return (Xk = n._emscripten_bind_btRaycastVehicle_setCoordinateSystem_3 = n.asm.iv).apply(null, arguments) + }, + Zk = n._emscripten_bind_btRaycastVehicle_getCurrentSpeedKmHour_0 = function() { + return (Zk = n._emscripten_bind_btRaycastVehicle_getCurrentSpeedKmHour_0 = n.asm.jv).apply(null, arguments) + }, + Yk = n._emscripten_bind_btRaycastVehicle_getChassisWorldTransform_0 = function() { + return (Yk = n._emscripten_bind_btRaycastVehicle_getChassisWorldTransform_0 = n.asm.kv).apply(null, arguments) + }, + Jk = n._emscripten_bind_btRaycastVehicle_rayCast_1 = function() { + return (Jk = n._emscripten_bind_btRaycastVehicle_rayCast_1 = n.asm.lv).apply(null, arguments) + }, + $k = n._emscripten_bind_btRaycastVehicle_updateVehicle_1 = function() { + return ($k = n._emscripten_bind_btRaycastVehicle_updateVehicle_1 = n.asm.mv).apply(null, arguments) + }, + tC = n._emscripten_bind_btRaycastVehicle_resetSuspension_0 = function() { + return (tC = n._emscripten_bind_btRaycastVehicle_resetSuspension_0 = n.asm.nv).apply(null, arguments) + }, + eC = n._emscripten_bind_btRaycastVehicle_getSteeringValue_1 = function() { + return (eC = n._emscripten_bind_btRaycastVehicle_getSteeringValue_1 = n.asm.ov).apply(null, arguments) + }, + nC = n._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_1 = function() { + return (nC = n._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_1 = n.asm.pv).apply(null, arguments) + }, + oC = n._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_2 = function() { + return (oC = n._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_2 = n.asm.qv).apply(null, arguments) + }, + _C = n._emscripten_bind_btRaycastVehicle_setPitchControl_1 = function() { + return (_C = n._emscripten_bind_btRaycastVehicle_setPitchControl_1 = n.asm.rv).apply(null, arguments) + }, + iC = n._emscripten_bind_btRaycastVehicle_updateSuspension_1 = function() { + return (iC = n._emscripten_bind_btRaycastVehicle_updateSuspension_1 = n.asm.sv).apply(null, arguments) + }, + rC = n._emscripten_bind_btRaycastVehicle_updateFriction_1 = function() { + return (rC = n._emscripten_bind_btRaycastVehicle_updateFriction_1 = n.asm.tv).apply(null, arguments) + }, + pC = n._emscripten_bind_btRaycastVehicle_getRightAxis_0 = function() { + return (pC = n._emscripten_bind_btRaycastVehicle_getRightAxis_0 = n.asm.uv).apply(null, arguments) + }, + sC = n._emscripten_bind_btRaycastVehicle_getUpAxis_0 = function() { + return (sC = n._emscripten_bind_btRaycastVehicle_getUpAxis_0 = n.asm.vv).apply(null, arguments) + }, + cC = n._emscripten_bind_btRaycastVehicle_getForwardAxis_0 = function() { + return (cC = n._emscripten_bind_btRaycastVehicle_getForwardAxis_0 = n.asm.wv).apply(null, arguments) + }, + aC = n._emscripten_bind_btRaycastVehicle_getForwardVector_0 = function() { + return (aC = n._emscripten_bind_btRaycastVehicle_getForwardVector_0 = n.asm.xv).apply(null, arguments) + }, + lC = n._emscripten_bind_btRaycastVehicle_getUserConstraintType_0 = function() { + return (lC = n._emscripten_bind_btRaycastVehicle_getUserConstraintType_0 = n.asm.yv).apply(null, arguments) + }, + uC = n._emscripten_bind_btRaycastVehicle_setUserConstraintType_1 = function() { + return (uC = n._emscripten_bind_btRaycastVehicle_setUserConstraintType_1 = n.asm.zv).apply(null, arguments) + }, + bC = n._emscripten_bind_btRaycastVehicle_setUserConstraintId_1 = function() { + return (bC = n._emscripten_bind_btRaycastVehicle_setUserConstraintId_1 = n.asm.Av).apply(null, arguments) + }, + mC = n._emscripten_bind_btRaycastVehicle_getUserConstraintId_0 = function() { + return (mC = n._emscripten_bind_btRaycastVehicle_getUserConstraintId_0 = n.asm.Bv).apply(null, arguments) + }, + yC = n._emscripten_bind_btRaycastVehicle_updateAction_2 = function() { + return (yC = n._emscripten_bind_btRaycastVehicle_updateAction_2 = n.asm.Cv).apply(null, arguments) + }, + dC = n._emscripten_bind_btRaycastVehicle___destroy___0 = function() { + return (dC = n._emscripten_bind_btRaycastVehicle___destroy___0 = n.asm.Dv).apply(null, arguments) + }, + fC = n._emscripten_bind_btPairCachingGhostObject_btPairCachingGhostObject_0 = function() { + return (fC = n._emscripten_bind_btPairCachingGhostObject_btPairCachingGhostObject_0 = n.asm.Ev).apply(null, arguments) + }, + hC = n._emscripten_bind_btPairCachingGhostObject_setAnisotropicFriction_2 = function() { + return (hC = n._emscripten_bind_btPairCachingGhostObject_setAnisotropicFriction_2 = n.asm.Fv).apply(null, arguments) + }, + BC = n._emscripten_bind_btPairCachingGhostObject_getCollisionShape_0 = function() { + return (BC = n._emscripten_bind_btPairCachingGhostObject_getCollisionShape_0 = n.asm.Gv).apply(null, arguments) + }, + gC = n._emscripten_bind_btPairCachingGhostObject_setContactProcessingThreshold_1 = function() { + return (gC = n._emscripten_bind_btPairCachingGhostObject_setContactProcessingThreshold_1 = n.asm.Hv).apply(null, arguments) + }, + kC = n._emscripten_bind_btPairCachingGhostObject_setActivationState_1 = function() { + return (kC = n._emscripten_bind_btPairCachingGhostObject_setActivationState_1 = n.asm.Iv).apply(null, arguments) + }, + CC = n._emscripten_bind_btPairCachingGhostObject_forceActivationState_1 = function() { + return (CC = n._emscripten_bind_btPairCachingGhostObject_forceActivationState_1 = n.asm.Jv).apply(null, arguments) + }, + SC = n._emscripten_bind_btPairCachingGhostObject_activate_0 = function() { + return (SC = n._emscripten_bind_btPairCachingGhostObject_activate_0 = n.asm.Kv).apply(null, arguments) + }, + jC = n._emscripten_bind_btPairCachingGhostObject_activate_1 = function() { + return (jC = n._emscripten_bind_btPairCachingGhostObject_activate_1 = n.asm.Lv).apply(null, arguments) + }, + vC = n._emscripten_bind_btPairCachingGhostObject_isActive_0 = function() { + return (vC = n._emscripten_bind_btPairCachingGhostObject_isActive_0 = n.asm.Mv).apply(null, arguments) + }, + IC = n._emscripten_bind_btPairCachingGhostObject_isKinematicObject_0 = function() { + return (IC = n._emscripten_bind_btPairCachingGhostObject_isKinematicObject_0 = n.asm.Nv).apply(null, arguments) + }, + RC = n._emscripten_bind_btPairCachingGhostObject_isStaticObject_0 = function() { + return (RC = n._emscripten_bind_btPairCachingGhostObject_isStaticObject_0 = n.asm.Ov).apply(null, arguments) + }, + DC = n._emscripten_bind_btPairCachingGhostObject_isStaticOrKinematicObject_0 = function() { + return (DC = n._emscripten_bind_btPairCachingGhostObject_isStaticOrKinematicObject_0 = n.asm.Pv).apply(null, arguments) + }, + PC = n._emscripten_bind_btPairCachingGhostObject_getRestitution_0 = function() { + return (PC = n._emscripten_bind_btPairCachingGhostObject_getRestitution_0 = n.asm.Qv).apply(null, arguments) + }, + TC = n._emscripten_bind_btPairCachingGhostObject_getFriction_0 = function() { + return (TC = n._emscripten_bind_btPairCachingGhostObject_getFriction_0 = n.asm.Rv).apply(null, arguments) + }, + OC = n._emscripten_bind_btPairCachingGhostObject_getRollingFriction_0 = function() { + return (OC = n._emscripten_bind_btPairCachingGhostObject_getRollingFriction_0 = n.asm.Sv).apply(null, arguments) + }, + WC = n._emscripten_bind_btPairCachingGhostObject_setRestitution_1 = function() { + return (WC = n._emscripten_bind_btPairCachingGhostObject_setRestitution_1 = n.asm.Tv).apply(null, arguments) + }, + AC = n._emscripten_bind_btPairCachingGhostObject_setFriction_1 = function() { + return (AC = n._emscripten_bind_btPairCachingGhostObject_setFriction_1 = n.asm.Uv).apply(null, arguments) + }, + MC = n._emscripten_bind_btPairCachingGhostObject_setRollingFriction_1 = function() { + return (MC = n._emscripten_bind_btPairCachingGhostObject_setRollingFriction_1 = n.asm.Vv).apply(null, arguments) + }, + xC = n._emscripten_bind_btPairCachingGhostObject_getWorldTransform_0 = function() { + return (xC = n._emscripten_bind_btPairCachingGhostObject_getWorldTransform_0 = n.asm.Wv).apply(null, arguments) + }, + FC = n._emscripten_bind_btPairCachingGhostObject_getCollisionFlags_0 = function() { + return (FC = n._emscripten_bind_btPairCachingGhostObject_getCollisionFlags_0 = n.asm.Xv).apply(null, arguments) + }, + LC = n._emscripten_bind_btPairCachingGhostObject_setCollisionFlags_1 = function() { + return (LC = n._emscripten_bind_btPairCachingGhostObject_setCollisionFlags_1 = n.asm.Yv).apply(null, arguments) + }, + GC = n._emscripten_bind_btPairCachingGhostObject_setWorldTransform_1 = function() { + return (GC = n._emscripten_bind_btPairCachingGhostObject_setWorldTransform_1 = n.asm.Zv).apply(null, arguments) + }, + wC = n._emscripten_bind_btPairCachingGhostObject_setCollisionShape_1 = function() { + return (wC = n._emscripten_bind_btPairCachingGhostObject_setCollisionShape_1 = n.asm._v).apply(null, arguments) + }, + HC = n._emscripten_bind_btPairCachingGhostObject_setCcdMotionThreshold_1 = function() { + return (HC = n._emscripten_bind_btPairCachingGhostObject_setCcdMotionThreshold_1 = n.asm.$v).apply(null, arguments) + }, + VC = n._emscripten_bind_btPairCachingGhostObject_setCcdSweptSphereRadius_1 = function() { + return (VC = n._emscripten_bind_btPairCachingGhostObject_setCcdSweptSphereRadius_1 = n.asm.aw).apply(null, arguments) + }, + EC = n._emscripten_bind_btPairCachingGhostObject_getUserIndex_0 = function() { + return (EC = n._emscripten_bind_btPairCachingGhostObject_getUserIndex_0 = n.asm.bw).apply(null, arguments) + }, + NC = n._emscripten_bind_btPairCachingGhostObject_setUserIndex_1 = function() { + return (NC = n._emscripten_bind_btPairCachingGhostObject_setUserIndex_1 = n.asm.cw).apply(null, arguments) + }, + UC = n._emscripten_bind_btPairCachingGhostObject_getUserPointer_0 = function() { + return (UC = n._emscripten_bind_btPairCachingGhostObject_getUserPointer_0 = n.asm.dw).apply(null, arguments) + }, + zC = n._emscripten_bind_btPairCachingGhostObject_setUserPointer_1 = function() { + return (zC = n._emscripten_bind_btPairCachingGhostObject_setUserPointer_1 = n.asm.ew).apply(null, arguments) + }, + qC = n._emscripten_bind_btPairCachingGhostObject_getBroadphaseHandle_0 = function() { + return (qC = n._emscripten_bind_btPairCachingGhostObject_getBroadphaseHandle_0 = n.asm.fw).apply(null, arguments) + }, + KC = n._emscripten_bind_btPairCachingGhostObject_getNumOverlappingObjects_0 = function() { + return (KC = n._emscripten_bind_btPairCachingGhostObject_getNumOverlappingObjects_0 = n.asm.gw).apply(null, arguments) + }, + QC = n._emscripten_bind_btPairCachingGhostObject_getOverlappingObject_1 = function() { + return (QC = n._emscripten_bind_btPairCachingGhostObject_getOverlappingObject_1 = n.asm.hw).apply(null, arguments) + }, + XC = n._emscripten_bind_btPairCachingGhostObject___destroy___0 = function() { + return (XC = n._emscripten_bind_btPairCachingGhostObject___destroy___0 = n.asm.iw).apply(null, arguments) + }, + ZC = n._emscripten_bind_btGhostPairCallback_btGhostPairCallback_0 = function() { + return (ZC = n._emscripten_bind_btGhostPairCallback_btGhostPairCallback_0 = n.asm.jw).apply(null, arguments) + }, + YC = n._emscripten_bind_btGhostPairCallback___destroy___0 = function() { + return (YC = n._emscripten_bind_btGhostPairCallback___destroy___0 = n.asm.kw).apply(null, arguments) + }, + JC = n._emscripten_bind_btSoftBodyWorldInfo_btSoftBodyWorldInfo_0 = function() { + return (JC = n._emscripten_bind_btSoftBodyWorldInfo_btSoftBodyWorldInfo_0 = n.asm.lw).apply(null, arguments) + }, + $C = n._emscripten_bind_btSoftBodyWorldInfo_get_air_density_0 = function() { + return ($C = n._emscripten_bind_btSoftBodyWorldInfo_get_air_density_0 = n.asm.mw).apply(null, arguments) + }, + tS = n._emscripten_bind_btSoftBodyWorldInfo_set_air_density_1 = function() { + return (tS = n._emscripten_bind_btSoftBodyWorldInfo_set_air_density_1 = n.asm.nw).apply(null, arguments) + }, + eS = n._emscripten_bind_btSoftBodyWorldInfo_get_water_density_0 = function() { + return (eS = n._emscripten_bind_btSoftBodyWorldInfo_get_water_density_0 = n.asm.ow).apply(null, arguments) + }, + nS = n._emscripten_bind_btSoftBodyWorldInfo_set_water_density_1 = function() { + return (nS = n._emscripten_bind_btSoftBodyWorldInfo_set_water_density_1 = n.asm.pw).apply(null, arguments) + }, + oS = n._emscripten_bind_btSoftBodyWorldInfo_get_water_offset_0 = function() { + return (oS = n._emscripten_bind_btSoftBodyWorldInfo_get_water_offset_0 = n.asm.qw).apply(null, arguments) + }, + _S = n._emscripten_bind_btSoftBodyWorldInfo_set_water_offset_1 = function() { + return (_S = n._emscripten_bind_btSoftBodyWorldInfo_set_water_offset_1 = n.asm.rw).apply(null, arguments) + }, + iS = n._emscripten_bind_btSoftBodyWorldInfo_get_m_maxDisplacement_0 = function() { + return (iS = n._emscripten_bind_btSoftBodyWorldInfo_get_m_maxDisplacement_0 = n.asm.sw).apply(null, arguments) + }, + rS = n._emscripten_bind_btSoftBodyWorldInfo_set_m_maxDisplacement_1 = function() { + return (rS = n._emscripten_bind_btSoftBodyWorldInfo_set_m_maxDisplacement_1 = n.asm.tw).apply(null, arguments) + }, + pS = n._emscripten_bind_btSoftBodyWorldInfo_get_water_normal_0 = function() { + return (pS = n._emscripten_bind_btSoftBodyWorldInfo_get_water_normal_0 = n.asm.uw).apply(null, arguments) + }, + sS = n._emscripten_bind_btSoftBodyWorldInfo_set_water_normal_1 = function() { + return (sS = n._emscripten_bind_btSoftBodyWorldInfo_set_water_normal_1 = n.asm.vw).apply(null, arguments) + }, + cS = n._emscripten_bind_btSoftBodyWorldInfo_get_m_broadphase_0 = function() { + return (cS = n._emscripten_bind_btSoftBodyWorldInfo_get_m_broadphase_0 = n.asm.ww).apply(null, arguments) + }, + aS = n._emscripten_bind_btSoftBodyWorldInfo_set_m_broadphase_1 = function() { + return (aS = n._emscripten_bind_btSoftBodyWorldInfo_set_m_broadphase_1 = n.asm.xw).apply(null, arguments) + }, + lS = n._emscripten_bind_btSoftBodyWorldInfo_get_m_dispatcher_0 = function() { + return (lS = n._emscripten_bind_btSoftBodyWorldInfo_get_m_dispatcher_0 = n.asm.yw).apply(null, arguments) + }, + uS = n._emscripten_bind_btSoftBodyWorldInfo_set_m_dispatcher_1 = function() { + return (uS = n._emscripten_bind_btSoftBodyWorldInfo_set_m_dispatcher_1 = n.asm.zw).apply(null, arguments) + }, + bS = n._emscripten_bind_btSoftBodyWorldInfo_get_m_gravity_0 = function() { + return (bS = n._emscripten_bind_btSoftBodyWorldInfo_get_m_gravity_0 = n.asm.Aw).apply(null, arguments) + }, + mS = n._emscripten_bind_btSoftBodyWorldInfo_set_m_gravity_1 = function() { + return (mS = n._emscripten_bind_btSoftBodyWorldInfo_set_m_gravity_1 = n.asm.Bw).apply(null, arguments) + }, + yS = n._emscripten_bind_btSoftBodyWorldInfo___destroy___0 = function() { + return (yS = n._emscripten_bind_btSoftBodyWorldInfo___destroy___0 = n.asm.Cw).apply(null, arguments) + }, + dS = n._emscripten_bind_Face_get_m_n_1 = function() { + return (dS = n._emscripten_bind_Face_get_m_n_1 = n.asm.Dw).apply(null, arguments) + }, + fS = n._emscripten_bind_Face_set_m_n_2 = function() { + return (fS = n._emscripten_bind_Face_set_m_n_2 = n.asm.Ew).apply(null, arguments) + }, + hS = n._emscripten_bind_Face_get_m_normal_0 = function() { + return (hS = n._emscripten_bind_Face_get_m_normal_0 = n.asm.Fw).apply(null, arguments) + }, + BS = n._emscripten_bind_Face_set_m_normal_1 = function() { + return (BS = n._emscripten_bind_Face_set_m_normal_1 = n.asm.Gw).apply(null, arguments) + }, + gS = n._emscripten_bind_Face_get_m_ra_0 = function() { + return (gS = n._emscripten_bind_Face_get_m_ra_0 = n.asm.Hw).apply(null, arguments) + }, + kS = n._emscripten_bind_Face_set_m_ra_1 = function() { + return (kS = n._emscripten_bind_Face_set_m_ra_1 = n.asm.Iw).apply(null, arguments) + }, + CS = n._emscripten_bind_Face___destroy___0 = function() { + return (CS = n._emscripten_bind_Face___destroy___0 = n.asm.Jw).apply(null, arguments) + }, + SS = n._emscripten_bind_tFaceArray_size_0 = function() { + return (SS = n._emscripten_bind_tFaceArray_size_0 = n.asm.Kw).apply(null, arguments) + }, + jS = n._emscripten_bind_tFaceArray_at_1 = function() { + return (jS = n._emscripten_bind_tFaceArray_at_1 = n.asm.Lw).apply(null, arguments) + }, + vS = n._emscripten_bind_tFaceArray___destroy___0 = function() { + return (vS = n._emscripten_bind_tFaceArray___destroy___0 = n.asm.Mw).apply(null, arguments) + }, + IS = n._emscripten_bind_Node_get_m_x_0 = function() { + return (IS = n._emscripten_bind_Node_get_m_x_0 = n.asm.Nw).apply(null, arguments) + }, + RS = n._emscripten_bind_Node_set_m_x_1 = function() { + return (RS = n._emscripten_bind_Node_set_m_x_1 = n.asm.Ow).apply(null, arguments) + }, + DS = n._emscripten_bind_Node_get_m_q_0 = function() { + return (DS = n._emscripten_bind_Node_get_m_q_0 = n.asm.Pw).apply(null, arguments) + }, + PS = n._emscripten_bind_Node_set_m_q_1 = function() { + return (PS = n._emscripten_bind_Node_set_m_q_1 = n.asm.Qw).apply(null, arguments) + }, + TS = n._emscripten_bind_Node_get_m_v_0 = function() { + return (TS = n._emscripten_bind_Node_get_m_v_0 = n.asm.Rw).apply(null, arguments) + }, + OS = n._emscripten_bind_Node_set_m_v_1 = function() { + return (OS = n._emscripten_bind_Node_set_m_v_1 = n.asm.Sw).apply(null, arguments) + }, + WS = n._emscripten_bind_Node_get_m_f_0 = function() { + return (WS = n._emscripten_bind_Node_get_m_f_0 = n.asm.Tw).apply(null, arguments) + }, + AS = n._emscripten_bind_Node_set_m_f_1 = function() { + return (AS = n._emscripten_bind_Node_set_m_f_1 = n.asm.Uw).apply(null, arguments) + }, + MS = n._emscripten_bind_Node_get_m_n_0 = function() { + return (MS = n._emscripten_bind_Node_get_m_n_0 = n.asm.Vw).apply(null, arguments) + }, + xS = n._emscripten_bind_Node_set_m_n_1 = function() { + return (xS = n._emscripten_bind_Node_set_m_n_1 = n.asm.Ww).apply(null, arguments) + }, + FS = n._emscripten_bind_Node_get_m_im_0 = function() { + return (FS = n._emscripten_bind_Node_get_m_im_0 = n.asm.Xw).apply(null, arguments) + }, + LS = n._emscripten_bind_Node_set_m_im_1 = function() { + return (LS = n._emscripten_bind_Node_set_m_im_1 = n.asm.Yw).apply(null, arguments) + }, + GS = n._emscripten_bind_Node_get_m_area_0 = function() { + return (GS = n._emscripten_bind_Node_get_m_area_0 = n.asm.Zw).apply(null, arguments) + }, + wS = n._emscripten_bind_Node_set_m_area_1 = function() { + return (wS = n._emscripten_bind_Node_set_m_area_1 = n.asm._w).apply(null, arguments) + }, + HS = n._emscripten_bind_Node___destroy___0 = function() { + return (HS = n._emscripten_bind_Node___destroy___0 = n.asm.$w).apply(null, arguments) + }, + VS = n._emscripten_bind_tNodeArray_size_0 = function() { + return (VS = n._emscripten_bind_tNodeArray_size_0 = n.asm.ax).apply(null, arguments) + }, + ES = n._emscripten_bind_tNodeArray_at_1 = function() { + return (ES = n._emscripten_bind_tNodeArray_at_1 = n.asm.bx).apply(null, arguments) + }, + NS = n._emscripten_bind_tNodeArray___destroy___0 = function() { + return (NS = n._emscripten_bind_tNodeArray___destroy___0 = n.asm.cx).apply(null, arguments) + }, + US = n._emscripten_bind_Material_get_m_kLST_0 = function() { + return (US = n._emscripten_bind_Material_get_m_kLST_0 = n.asm.dx).apply(null, arguments) + }, + zS = n._emscripten_bind_Material_set_m_kLST_1 = function() { + return (zS = n._emscripten_bind_Material_set_m_kLST_1 = n.asm.ex).apply(null, arguments) + }, + qS = n._emscripten_bind_Material_get_m_kAST_0 = function() { + return (qS = n._emscripten_bind_Material_get_m_kAST_0 = n.asm.fx).apply(null, arguments) + }, + KS = n._emscripten_bind_Material_set_m_kAST_1 = function() { + return (KS = n._emscripten_bind_Material_set_m_kAST_1 = n.asm.gx).apply(null, arguments) + }, + QS = n._emscripten_bind_Material_get_m_kVST_0 = function() { + return (QS = n._emscripten_bind_Material_get_m_kVST_0 = n.asm.hx).apply(null, arguments) + }, + XS = n._emscripten_bind_Material_set_m_kVST_1 = function() { + return (XS = n._emscripten_bind_Material_set_m_kVST_1 = n.asm.ix).apply(null, arguments) + }, + ZS = n._emscripten_bind_Material_get_m_flags_0 = function() { + return (ZS = n._emscripten_bind_Material_get_m_flags_0 = n.asm.jx).apply(null, arguments) + }, + YS = n._emscripten_bind_Material_set_m_flags_1 = function() { + return (YS = n._emscripten_bind_Material_set_m_flags_1 = n.asm.kx).apply(null, arguments) + }, + JS = n._emscripten_bind_Material___destroy___0 = function() { + return (JS = n._emscripten_bind_Material___destroy___0 = n.asm.lx).apply(null, arguments) + }, + $S = n._emscripten_bind_tMaterialArray_size_0 = function() { + return ($S = n._emscripten_bind_tMaterialArray_size_0 = n.asm.mx).apply(null, arguments) + }, + tj = n._emscripten_bind_tMaterialArray_at_1 = function() { + return (tj = n._emscripten_bind_tMaterialArray_at_1 = n.asm.nx).apply(null, arguments) + }, + ej = n._emscripten_bind_tMaterialArray___destroy___0 = function() { + return (ej = n._emscripten_bind_tMaterialArray___destroy___0 = n.asm.ox).apply(null, arguments) + }, + nj = n._emscripten_bind_Anchor_get_m_node_0 = function() { + return (nj = n._emscripten_bind_Anchor_get_m_node_0 = n.asm.px).apply(null, arguments) + }, + oj = n._emscripten_bind_Anchor_set_m_node_1 = function() { + return (oj = n._emscripten_bind_Anchor_set_m_node_1 = n.asm.qx).apply(null, arguments) + }, + _j = n._emscripten_bind_Anchor_get_m_local_0 = function() { + return (_j = n._emscripten_bind_Anchor_get_m_local_0 = n.asm.rx).apply(null, arguments) + }, + ij = n._emscripten_bind_Anchor_set_m_local_1 = function() { + return (ij = n._emscripten_bind_Anchor_set_m_local_1 = n.asm.sx).apply(null, arguments) + }, + rj = n._emscripten_bind_Anchor_get_m_body_0 = function() { + return (rj = n._emscripten_bind_Anchor_get_m_body_0 = n.asm.tx).apply(null, arguments) + }, + pj = n._emscripten_bind_Anchor_set_m_body_1 = function() { + return (pj = n._emscripten_bind_Anchor_set_m_body_1 = n.asm.ux).apply(null, arguments) + }, + sj = n._emscripten_bind_Anchor_get_m_influence_0 = function() { + return (sj = n._emscripten_bind_Anchor_get_m_influence_0 = n.asm.vx).apply(null, arguments) + }, + cj = n._emscripten_bind_Anchor_set_m_influence_1 = function() { + return (cj = n._emscripten_bind_Anchor_set_m_influence_1 = n.asm.wx).apply(null, arguments) + }, + aj = n._emscripten_bind_Anchor_get_m_c0_0 = function() { + return (aj = n._emscripten_bind_Anchor_get_m_c0_0 = n.asm.xx).apply(null, arguments) + }, + lj = n._emscripten_bind_Anchor_set_m_c0_1 = function() { + return (lj = n._emscripten_bind_Anchor_set_m_c0_1 = n.asm.yx).apply(null, arguments) + }, + uj = n._emscripten_bind_Anchor_get_m_c1_0 = function() { + return (uj = n._emscripten_bind_Anchor_get_m_c1_0 = n.asm.zx).apply(null, arguments) + }, + bj = n._emscripten_bind_Anchor_set_m_c1_1 = function() { + return (bj = n._emscripten_bind_Anchor_set_m_c1_1 = n.asm.Ax).apply(null, arguments) + }, + mj = n._emscripten_bind_Anchor_get_m_c2_0 = function() { + return (mj = n._emscripten_bind_Anchor_get_m_c2_0 = n.asm.Bx).apply(null, arguments) + }, + yj = n._emscripten_bind_Anchor_set_m_c2_1 = function() { + return (yj = n._emscripten_bind_Anchor_set_m_c2_1 = n.asm.Cx).apply(null, arguments) + }, + dj = n._emscripten_bind_Anchor___destroy___0 = function() { + return (dj = n._emscripten_bind_Anchor___destroy___0 = n.asm.Dx).apply(null, arguments) + }, + fj = n._emscripten_bind_tAnchorArray_size_0 = function() { + return (fj = n._emscripten_bind_tAnchorArray_size_0 = n.asm.Ex).apply(null, arguments) + }, + hj = n._emscripten_bind_tAnchorArray_at_1 = function() { + return (hj = n._emscripten_bind_tAnchorArray_at_1 = n.asm.Fx).apply(null, arguments) + }, + Bj = n._emscripten_bind_tAnchorArray_clear_0 = function() { + return (Bj = n._emscripten_bind_tAnchorArray_clear_0 = n.asm.Gx).apply(null, arguments) + }, + gj = n._emscripten_bind_tAnchorArray_push_back_1 = function() { + return (gj = n._emscripten_bind_tAnchorArray_push_back_1 = n.asm.Hx).apply(null, arguments) + }, + kj = n._emscripten_bind_tAnchorArray_pop_back_0 = function() { + return (kj = n._emscripten_bind_tAnchorArray_pop_back_0 = n.asm.Ix).apply(null, arguments) + }, + Cj = n._emscripten_bind_tAnchorArray___destroy___0 = function() { + return (Cj = n._emscripten_bind_tAnchorArray___destroy___0 = n.asm.Jx).apply(null, arguments) + }, + Sj = n._emscripten_bind_Config_get_kVCF_0 = function() { + return (Sj = n._emscripten_bind_Config_get_kVCF_0 = n.asm.Kx).apply(null, arguments) + }, + jj = n._emscripten_bind_Config_set_kVCF_1 = function() { + return (jj = n._emscripten_bind_Config_set_kVCF_1 = n.asm.Lx).apply(null, arguments) + }, + vj = n._emscripten_bind_Config_get_kDP_0 = function() { + return (vj = n._emscripten_bind_Config_get_kDP_0 = n.asm.Mx).apply(null, arguments) + }, + Ij = n._emscripten_bind_Config_set_kDP_1 = function() { + return (Ij = n._emscripten_bind_Config_set_kDP_1 = n.asm.Nx).apply(null, arguments) + }, + Rj = n._emscripten_bind_Config_get_kDG_0 = function() { + return (Rj = n._emscripten_bind_Config_get_kDG_0 = n.asm.Ox).apply(null, arguments) + }, + Dj = n._emscripten_bind_Config_set_kDG_1 = function() { + return (Dj = n._emscripten_bind_Config_set_kDG_1 = n.asm.Px).apply(null, arguments) + }, + Pj = n._emscripten_bind_Config_get_kLF_0 = function() { + return (Pj = n._emscripten_bind_Config_get_kLF_0 = n.asm.Qx).apply(null, arguments) + }, + Tj = n._emscripten_bind_Config_set_kLF_1 = function() { + return (Tj = n._emscripten_bind_Config_set_kLF_1 = n.asm.Rx).apply(null, arguments) + }, + Oj = n._emscripten_bind_Config_get_kPR_0 = function() { + return (Oj = n._emscripten_bind_Config_get_kPR_0 = n.asm.Sx).apply(null, arguments) + }, + Wj = n._emscripten_bind_Config_set_kPR_1 = function() { + return (Wj = n._emscripten_bind_Config_set_kPR_1 = n.asm.Tx).apply(null, arguments) + }, + Aj = n._emscripten_bind_Config_get_kVC_0 = function() { + return (Aj = n._emscripten_bind_Config_get_kVC_0 = n.asm.Ux).apply(null, arguments) + }, + Mj = n._emscripten_bind_Config_set_kVC_1 = function() { + return (Mj = n._emscripten_bind_Config_set_kVC_1 = n.asm.Vx).apply(null, arguments) + }, + xj = n._emscripten_bind_Config_get_kDF_0 = function() { + return (xj = n._emscripten_bind_Config_get_kDF_0 = n.asm.Wx).apply(null, arguments) + }, + Fj = n._emscripten_bind_Config_set_kDF_1 = function() { + return (Fj = n._emscripten_bind_Config_set_kDF_1 = n.asm.Xx).apply(null, arguments) + }, + Lj = n._emscripten_bind_Config_get_kMT_0 = function() { + return (Lj = n._emscripten_bind_Config_get_kMT_0 = n.asm.Yx).apply(null, arguments) + }, + Gj = n._emscripten_bind_Config_set_kMT_1 = function() { + return (Gj = n._emscripten_bind_Config_set_kMT_1 = n.asm.Zx).apply(null, arguments) + }, + wj = n._emscripten_bind_Config_get_kCHR_0 = function() { + return (wj = n._emscripten_bind_Config_get_kCHR_0 = n.asm._x).apply(null, arguments) + }, + Hj = n._emscripten_bind_Config_set_kCHR_1 = function() { + return (Hj = n._emscripten_bind_Config_set_kCHR_1 = n.asm.$x).apply(null, arguments) + }, + Vj = n._emscripten_bind_Config_get_kKHR_0 = function() { + return (Vj = n._emscripten_bind_Config_get_kKHR_0 = n.asm.ay).apply(null, arguments) + }, + Ej = n._emscripten_bind_Config_set_kKHR_1 = function() { + return (Ej = n._emscripten_bind_Config_set_kKHR_1 = n.asm.by).apply(null, arguments) + }, + Nj = n._emscripten_bind_Config_get_kSHR_0 = function() { + return (Nj = n._emscripten_bind_Config_get_kSHR_0 = n.asm.cy).apply(null, arguments) + }, + Uj = n._emscripten_bind_Config_set_kSHR_1 = function() { + return (Uj = n._emscripten_bind_Config_set_kSHR_1 = n.asm.dy).apply(null, arguments) + }, + zj = n._emscripten_bind_Config_get_kAHR_0 = function() { + return (zj = n._emscripten_bind_Config_get_kAHR_0 = n.asm.ey).apply(null, arguments) + }, + qj = n._emscripten_bind_Config_set_kAHR_1 = function() { + return (qj = n._emscripten_bind_Config_set_kAHR_1 = n.asm.fy).apply(null, arguments) + }, + Kj = n._emscripten_bind_Config_get_kSRHR_CL_0 = function() { + return (Kj = n._emscripten_bind_Config_get_kSRHR_CL_0 = n.asm.gy).apply(null, arguments) + }, + Qj = n._emscripten_bind_Config_set_kSRHR_CL_1 = function() { + return (Qj = n._emscripten_bind_Config_set_kSRHR_CL_1 = n.asm.hy).apply(null, arguments) + }, + Xj = n._emscripten_bind_Config_get_kSKHR_CL_0 = function() { + return (Xj = n._emscripten_bind_Config_get_kSKHR_CL_0 = n.asm.iy).apply(null, arguments) + }, + Zj = n._emscripten_bind_Config_set_kSKHR_CL_1 = function() { + return (Zj = n._emscripten_bind_Config_set_kSKHR_CL_1 = n.asm.jy).apply(null, arguments) + }, + Yj = n._emscripten_bind_Config_get_kSSHR_CL_0 = function() { + return (Yj = n._emscripten_bind_Config_get_kSSHR_CL_0 = n.asm.ky).apply(null, arguments) + }, + Jj = n._emscripten_bind_Config_set_kSSHR_CL_1 = function() { + return (Jj = n._emscripten_bind_Config_set_kSSHR_CL_1 = n.asm.ly).apply(null, arguments) + }, + $j = n._emscripten_bind_Config_get_kSR_SPLT_CL_0 = function() { + return ($j = n._emscripten_bind_Config_get_kSR_SPLT_CL_0 = n.asm.my).apply(null, arguments) + }, + tv = n._emscripten_bind_Config_set_kSR_SPLT_CL_1 = function() { + return (tv = n._emscripten_bind_Config_set_kSR_SPLT_CL_1 = n.asm.ny).apply(null, arguments) + }, + ev = n._emscripten_bind_Config_get_kSK_SPLT_CL_0 = function() { + return (ev = n._emscripten_bind_Config_get_kSK_SPLT_CL_0 = n.asm.oy).apply(null, arguments) + }, + nv = n._emscripten_bind_Config_set_kSK_SPLT_CL_1 = function() { + return (nv = n._emscripten_bind_Config_set_kSK_SPLT_CL_1 = n.asm.py).apply(null, arguments) + }, + ov = n._emscripten_bind_Config_get_kSS_SPLT_CL_0 = function() { + return (ov = n._emscripten_bind_Config_get_kSS_SPLT_CL_0 = n.asm.qy).apply(null, arguments) + }, + _v = n._emscripten_bind_Config_set_kSS_SPLT_CL_1 = function() { + return (_v = n._emscripten_bind_Config_set_kSS_SPLT_CL_1 = n.asm.ry).apply(null, arguments) + }, + iv = n._emscripten_bind_Config_get_maxvolume_0 = function() { + return (iv = n._emscripten_bind_Config_get_maxvolume_0 = n.asm.sy).apply(null, arguments) + }, + rv = n._emscripten_bind_Config_set_maxvolume_1 = function() { + return (rv = n._emscripten_bind_Config_set_maxvolume_1 = n.asm.ty).apply(null, arguments) + }, + pv = n._emscripten_bind_Config_get_timescale_0 = function() { + return (pv = n._emscripten_bind_Config_get_timescale_0 = n.asm.uy).apply(null, arguments) + }, + sv = n._emscripten_bind_Config_set_timescale_1 = function() { + return (sv = n._emscripten_bind_Config_set_timescale_1 = n.asm.vy).apply(null, arguments) + }, + cv = n._emscripten_bind_Config_get_viterations_0 = function() { + return (cv = n._emscripten_bind_Config_get_viterations_0 = n.asm.wy).apply(null, arguments) + }, + av = n._emscripten_bind_Config_set_viterations_1 = function() { + return (av = n._emscripten_bind_Config_set_viterations_1 = n.asm.xy).apply(null, arguments) + }, + lv = n._emscripten_bind_Config_get_piterations_0 = function() { + return (lv = n._emscripten_bind_Config_get_piterations_0 = n.asm.yy).apply(null, arguments) + }, + uv = n._emscripten_bind_Config_set_piterations_1 = function() { + return (uv = n._emscripten_bind_Config_set_piterations_1 = n.asm.zy).apply(null, arguments) + }, + bv = n._emscripten_bind_Config_get_diterations_0 = function() { + return (bv = n._emscripten_bind_Config_get_diterations_0 = n.asm.Ay).apply(null, arguments) + }, + mv = n._emscripten_bind_Config_set_diterations_1 = function() { + return (mv = n._emscripten_bind_Config_set_diterations_1 = n.asm.By).apply(null, arguments) + }, + yv = n._emscripten_bind_Config_get_citerations_0 = function() { + return (yv = n._emscripten_bind_Config_get_citerations_0 = n.asm.Cy).apply(null, arguments) + }, + dv = n._emscripten_bind_Config_set_citerations_1 = function() { + return (dv = n._emscripten_bind_Config_set_citerations_1 = n.asm.Dy).apply(null, arguments) + }, + fv = n._emscripten_bind_Config_get_collisions_0 = function() { + return (fv = n._emscripten_bind_Config_get_collisions_0 = n.asm.Ey).apply(null, arguments) + }, + hv = n._emscripten_bind_Config_set_collisions_1 = function() { + return (hv = n._emscripten_bind_Config_set_collisions_1 = n.asm.Fy).apply(null, arguments) + }, + Bv = n._emscripten_bind_Config___destroy___0 = function() { + return (Bv = n._emscripten_bind_Config___destroy___0 = n.asm.Gy).apply(null, arguments) + }, + gv = n._emscripten_bind_btSoftBody_btSoftBody_4 = function() { + return (gv = n._emscripten_bind_btSoftBody_btSoftBody_4 = n.asm.Hy).apply(null, arguments) + }, + kv = n._emscripten_bind_btSoftBody_checkLink_2 = function() { + return (kv = n._emscripten_bind_btSoftBody_checkLink_2 = n.asm.Iy).apply(null, arguments) + }, + Cv = n._emscripten_bind_btSoftBody_checkFace_3 = function() { + return (Cv = n._emscripten_bind_btSoftBody_checkFace_3 = n.asm.Jy).apply(null, arguments) + }, + Sv = n._emscripten_bind_btSoftBody_appendMaterial_0 = function() { + return (Sv = n._emscripten_bind_btSoftBody_appendMaterial_0 = n.asm.Ky).apply(null, arguments) + }, + jv = n._emscripten_bind_btSoftBody_appendNode_2 = function() { + return (jv = n._emscripten_bind_btSoftBody_appendNode_2 = n.asm.Ly).apply(null, arguments) + }, + vv = n._emscripten_bind_btSoftBody_appendLink_4 = function() { + return (vv = n._emscripten_bind_btSoftBody_appendLink_4 = n.asm.My).apply(null, arguments) + }, + Iv = n._emscripten_bind_btSoftBody_appendFace_4 = function() { + return (Iv = n._emscripten_bind_btSoftBody_appendFace_4 = n.asm.Ny).apply(null, arguments) + }, + Rv = n._emscripten_bind_btSoftBody_appendTetra_5 = function() { + return (Rv = n._emscripten_bind_btSoftBody_appendTetra_5 = n.asm.Oy).apply(null, arguments) + }, + Dv = n._emscripten_bind_btSoftBody_appendAnchor_4 = function() { + return (Dv = n._emscripten_bind_btSoftBody_appendAnchor_4 = n.asm.Py).apply(null, arguments) + }, + Pv = n._emscripten_bind_btSoftBody_addForce_1 = function() { + return (Pv = n._emscripten_bind_btSoftBody_addForce_1 = n.asm.Qy).apply(null, arguments) + }, + Tv = n._emscripten_bind_btSoftBody_addForce_2 = function() { + return (Tv = n._emscripten_bind_btSoftBody_addForce_2 = n.asm.Ry).apply(null, arguments) + }, + Ov = n._emscripten_bind_btSoftBody_addAeroForceToNode_2 = function() { + return (Ov = n._emscripten_bind_btSoftBody_addAeroForceToNode_2 = n.asm.Sy).apply(null, arguments) + }, + Wv = n._emscripten_bind_btSoftBody_getTotalMass_0 = function() { + return (Wv = n._emscripten_bind_btSoftBody_getTotalMass_0 = n.asm.Ty).apply(null, arguments) + }, + Av = n._emscripten_bind_btSoftBody_setTotalMass_2 = function() { + return (Av = n._emscripten_bind_btSoftBody_setTotalMass_2 = n.asm.Uy).apply(null, arguments) + }, + Mv = n._emscripten_bind_btSoftBody_setMass_2 = function() { + return (Mv = n._emscripten_bind_btSoftBody_setMass_2 = n.asm.Vy).apply(null, arguments) + }, + xv = n._emscripten_bind_btSoftBody_transform_1 = function() { + return (xv = n._emscripten_bind_btSoftBody_transform_1 = n.asm.Wy).apply(null, arguments) + }, + Fv = n._emscripten_bind_btSoftBody_translate_1 = function() { + return (Fv = n._emscripten_bind_btSoftBody_translate_1 = n.asm.Xy).apply(null, arguments) + }, + Lv = n._emscripten_bind_btSoftBody_rotate_1 = function() { + return (Lv = n._emscripten_bind_btSoftBody_rotate_1 = n.asm.Yy).apply(null, arguments) + }, + Gv = n._emscripten_bind_btSoftBody_scale_1 = function() { + return (Gv = n._emscripten_bind_btSoftBody_scale_1 = n.asm.Zy).apply(null, arguments) + }, + wv = n._emscripten_bind_btSoftBody_generateClusters_1 = function() { + return (wv = n._emscripten_bind_btSoftBody_generateClusters_1 = n.asm._y).apply(null, arguments) + }, + Hv = n._emscripten_bind_btSoftBody_generateClusters_2 = function() { + return (Hv = n._emscripten_bind_btSoftBody_generateClusters_2 = n.asm.$y).apply(null, arguments) + }, + Vv = n._emscripten_bind_btSoftBody_generateBendingConstraints_2 = function() { + return (Vv = n._emscripten_bind_btSoftBody_generateBendingConstraints_2 = n.asm.az).apply(null, arguments) + }, + Ev = n._emscripten_bind_btSoftBody_upcast_1 = function() { + return (Ev = n._emscripten_bind_btSoftBody_upcast_1 = n.asm.bz).apply(null, arguments) + }, + Nv = n._emscripten_bind_btSoftBody_getRestLengthScale_0 = function() { + return (Nv = n._emscripten_bind_btSoftBody_getRestLengthScale_0 = n.asm.cz).apply(null, arguments) + }, + Uv = n._emscripten_bind_btSoftBody_setRestLengthScale_1 = function() { + return (Uv = n._emscripten_bind_btSoftBody_setRestLengthScale_1 = n.asm.dz).apply(null, arguments) + }, + zv = n._emscripten_bind_btSoftBody_setAnisotropicFriction_2 = function() { + return (zv = n._emscripten_bind_btSoftBody_setAnisotropicFriction_2 = n.asm.ez).apply(null, arguments) + }, + qv = n._emscripten_bind_btSoftBody_getCollisionShape_0 = function() { + return (qv = n._emscripten_bind_btSoftBody_getCollisionShape_0 = n.asm.fz).apply(null, arguments) + }, + Kv = n._emscripten_bind_btSoftBody_setContactProcessingThreshold_1 = function() { + return (Kv = n._emscripten_bind_btSoftBody_setContactProcessingThreshold_1 = n.asm.gz).apply(null, arguments) + }, + Qv = n._emscripten_bind_btSoftBody_setActivationState_1 = function() { + return (Qv = n._emscripten_bind_btSoftBody_setActivationState_1 = n.asm.hz).apply(null, arguments) + }, + Xv = n._emscripten_bind_btSoftBody_forceActivationState_1 = function() { + return (Xv = n._emscripten_bind_btSoftBody_forceActivationState_1 = n.asm.iz).apply(null, arguments) + }, + Zv = n._emscripten_bind_btSoftBody_activate_0 = function() { + return (Zv = n._emscripten_bind_btSoftBody_activate_0 = n.asm.jz).apply(null, arguments) + }, + Yv = n._emscripten_bind_btSoftBody_activate_1 = function() { + return (Yv = n._emscripten_bind_btSoftBody_activate_1 = n.asm.kz).apply(null, arguments) + }, + Jv = n._emscripten_bind_btSoftBody_isActive_0 = function() { + return (Jv = n._emscripten_bind_btSoftBody_isActive_0 = n.asm.lz).apply(null, arguments) + }, + $v = n._emscripten_bind_btSoftBody_isKinematicObject_0 = function() { + return ($v = n._emscripten_bind_btSoftBody_isKinematicObject_0 = n.asm.mz).apply(null, arguments) + }, + tI = n._emscripten_bind_btSoftBody_isStaticObject_0 = function() { + return (tI = n._emscripten_bind_btSoftBody_isStaticObject_0 = n.asm.nz).apply(null, arguments) + }, + eI = n._emscripten_bind_btSoftBody_isStaticOrKinematicObject_0 = function() { + return (eI = n._emscripten_bind_btSoftBody_isStaticOrKinematicObject_0 = n.asm.oz).apply(null, arguments) + }, + nI = n._emscripten_bind_btSoftBody_getRestitution_0 = function() { + return (nI = n._emscripten_bind_btSoftBody_getRestitution_0 = n.asm.pz).apply(null, arguments) + }, + oI = n._emscripten_bind_btSoftBody_getFriction_0 = function() { + return (oI = n._emscripten_bind_btSoftBody_getFriction_0 = n.asm.qz).apply(null, arguments) + }, + _I = n._emscripten_bind_btSoftBody_getRollingFriction_0 = function() { + return (_I = n._emscripten_bind_btSoftBody_getRollingFriction_0 = n.asm.rz).apply(null, arguments) + }, + iI = n._emscripten_bind_btSoftBody_setRestitution_1 = function() { + return (iI = n._emscripten_bind_btSoftBody_setRestitution_1 = n.asm.sz).apply(null, arguments) + }, + rI = n._emscripten_bind_btSoftBody_setFriction_1 = function() { + return (rI = n._emscripten_bind_btSoftBody_setFriction_1 = n.asm.tz).apply(null, arguments) + }, + pI = n._emscripten_bind_btSoftBody_setRollingFriction_1 = function() { + return (pI = n._emscripten_bind_btSoftBody_setRollingFriction_1 = n.asm.uz).apply(null, arguments) + }, + sI = n._emscripten_bind_btSoftBody_getWorldTransform_0 = function() { + return (sI = n._emscripten_bind_btSoftBody_getWorldTransform_0 = n.asm.vz).apply(null, arguments) + }, + cI = n._emscripten_bind_btSoftBody_getCollisionFlags_0 = function() { + return (cI = n._emscripten_bind_btSoftBody_getCollisionFlags_0 = n.asm.wz).apply(null, arguments) + }, + aI = n._emscripten_bind_btSoftBody_setCollisionFlags_1 = function() { + return (aI = n._emscripten_bind_btSoftBody_setCollisionFlags_1 = n.asm.xz).apply(null, arguments) + }, + lI = n._emscripten_bind_btSoftBody_setWorldTransform_1 = function() { + return (lI = n._emscripten_bind_btSoftBody_setWorldTransform_1 = n.asm.yz).apply(null, arguments) + }, + uI = n._emscripten_bind_btSoftBody_setCollisionShape_1 = function() { + return (uI = n._emscripten_bind_btSoftBody_setCollisionShape_1 = n.asm.zz).apply(null, arguments) + }, + bI = n._emscripten_bind_btSoftBody_setCcdMotionThreshold_1 = function() { + return (bI = n._emscripten_bind_btSoftBody_setCcdMotionThreshold_1 = n.asm.Az).apply(null, arguments) + }, + mI = n._emscripten_bind_btSoftBody_setCcdSweptSphereRadius_1 = function() { + return (mI = n._emscripten_bind_btSoftBody_setCcdSweptSphereRadius_1 = n.asm.Bz).apply(null, arguments) + }, + yI = n._emscripten_bind_btSoftBody_getUserIndex_0 = function() { + return (yI = n._emscripten_bind_btSoftBody_getUserIndex_0 = n.asm.Cz).apply(null, arguments) + }, + dI = n._emscripten_bind_btSoftBody_setUserIndex_1 = function() { + return (dI = n._emscripten_bind_btSoftBody_setUserIndex_1 = n.asm.Dz).apply(null, arguments) + }, + fI = n._emscripten_bind_btSoftBody_getUserPointer_0 = function() { + return (fI = n._emscripten_bind_btSoftBody_getUserPointer_0 = n.asm.Ez).apply(null, arguments) + }, + hI = n._emscripten_bind_btSoftBody_setUserPointer_1 = function() { + return (hI = n._emscripten_bind_btSoftBody_setUserPointer_1 = n.asm.Fz).apply(null, arguments) + }, + BI = n._emscripten_bind_btSoftBody_getBroadphaseHandle_0 = function() { + return (BI = n._emscripten_bind_btSoftBody_getBroadphaseHandle_0 = n.asm.Gz).apply(null, arguments) + }, + gI = n._emscripten_bind_btSoftBody_get_m_cfg_0 = function() { + return (gI = n._emscripten_bind_btSoftBody_get_m_cfg_0 = n.asm.Hz).apply(null, arguments) + }, + kI = n._emscripten_bind_btSoftBody_set_m_cfg_1 = function() { + return (kI = n._emscripten_bind_btSoftBody_set_m_cfg_1 = n.asm.Iz).apply(null, arguments) + }, + CI = n._emscripten_bind_btSoftBody_get_m_nodes_0 = function() { + return (CI = n._emscripten_bind_btSoftBody_get_m_nodes_0 = n.asm.Jz).apply(null, arguments) + }, + SI = n._emscripten_bind_btSoftBody_set_m_nodes_1 = function() { + return (SI = n._emscripten_bind_btSoftBody_set_m_nodes_1 = n.asm.Kz).apply(null, arguments) + }, + jI = n._emscripten_bind_btSoftBody_get_m_faces_0 = function() { + return (jI = n._emscripten_bind_btSoftBody_get_m_faces_0 = n.asm.Lz).apply(null, arguments) + }, + vI = n._emscripten_bind_btSoftBody_set_m_faces_1 = function() { + return (vI = n._emscripten_bind_btSoftBody_set_m_faces_1 = n.asm.Mz).apply(null, arguments) + }, + II = n._emscripten_bind_btSoftBody_get_m_materials_0 = function() { + return (II = n._emscripten_bind_btSoftBody_get_m_materials_0 = n.asm.Nz).apply(null, arguments) + }, + RI = n._emscripten_bind_btSoftBody_set_m_materials_1 = function() { + return (RI = n._emscripten_bind_btSoftBody_set_m_materials_1 = n.asm.Oz).apply(null, arguments) + }, + DI = n._emscripten_bind_btSoftBody_get_m_anchors_0 = function() { + return (DI = n._emscripten_bind_btSoftBody_get_m_anchors_0 = n.asm.Pz).apply(null, arguments) + }, + PI = n._emscripten_bind_btSoftBody_set_m_anchors_1 = function() { + return (PI = n._emscripten_bind_btSoftBody_set_m_anchors_1 = n.asm.Qz).apply(null, arguments) + }, + TI = n._emscripten_bind_btSoftBody___destroy___0 = function() { + return (TI = n._emscripten_bind_btSoftBody___destroy___0 = n.asm.Rz).apply(null, arguments) + }, + OI = n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_0 = function() { + return (OI = n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_0 = n.asm.Sz).apply(null, arguments) + }, + WI = n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_1 = function() { + return (WI = n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_1 = n.asm.Tz).apply(null, arguments) + }, + AI = n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration___destroy___0 = function() { + return (AI = n._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration___destroy___0 = n.asm.Uz).apply(null, arguments) + }, + MI = n._emscripten_bind_btDefaultSoftBodySolver_btDefaultSoftBodySolver_0 = function() { + return (MI = n._emscripten_bind_btDefaultSoftBodySolver_btDefaultSoftBodySolver_0 = n.asm.Vz).apply(null, arguments) + }, + xI = n._emscripten_bind_btDefaultSoftBodySolver___destroy___0 = function() { + return (xI = n._emscripten_bind_btDefaultSoftBodySolver___destroy___0 = n.asm.Wz).apply(null, arguments) + }, + FI = n._emscripten_bind_btSoftBodyArray_size_0 = function() { + return (FI = n._emscripten_bind_btSoftBodyArray_size_0 = n.asm.Xz).apply(null, arguments) + }, + LI = n._emscripten_bind_btSoftBodyArray_at_1 = function() { + return (LI = n._emscripten_bind_btSoftBodyArray_at_1 = n.asm.Yz).apply(null, arguments) + }, + GI = n._emscripten_bind_btSoftBodyArray___destroy___0 = function() { + return (GI = n._emscripten_bind_btSoftBodyArray___destroy___0 = n.asm.Zz).apply(null, arguments) + }, + wI = n._emscripten_bind_btSoftRigidDynamicsWorld_btSoftRigidDynamicsWorld_5 = function() { + return (wI = n._emscripten_bind_btSoftRigidDynamicsWorld_btSoftRigidDynamicsWorld_5 = n.asm._z).apply(null, arguments) + }, + HI = n._emscripten_bind_btSoftRigidDynamicsWorld_addSoftBody_3 = function() { + return (HI = n._emscripten_bind_btSoftRigidDynamicsWorld_addSoftBody_3 = n.asm.$z).apply(null, arguments) + }, + VI = n._emscripten_bind_btSoftRigidDynamicsWorld_removeSoftBody_1 = function() { + return (VI = n._emscripten_bind_btSoftRigidDynamicsWorld_removeSoftBody_1 = n.asm.aA).apply(null, arguments) + }, + EI = n._emscripten_bind_btSoftRigidDynamicsWorld_removeCollisionObject_1 = function() { + return (EI = n._emscripten_bind_btSoftRigidDynamicsWorld_removeCollisionObject_1 = n.asm.bA).apply(null, arguments) + }, + NI = n._emscripten_bind_btSoftRigidDynamicsWorld_getWorldInfo_0 = function() { + return (NI = n._emscripten_bind_btSoftRigidDynamicsWorld_getWorldInfo_0 = n.asm.cA).apply(null, arguments) + }, + UI = n._emscripten_bind_btSoftRigidDynamicsWorld_getSoftBodyArray_0 = function() { + return (UI = n._emscripten_bind_btSoftRigidDynamicsWorld_getSoftBodyArray_0 = n.asm.dA).apply(null, arguments) + }, + zI = n._emscripten_bind_btSoftRigidDynamicsWorld_getDispatcher_0 = function() { + return (zI = n._emscripten_bind_btSoftRigidDynamicsWorld_getDispatcher_0 = n.asm.eA).apply(null, arguments) + }, + qI = n._emscripten_bind_btSoftRigidDynamicsWorld_rayTest_3 = function() { + return (qI = n._emscripten_bind_btSoftRigidDynamicsWorld_rayTest_3 = n.asm.fA).apply(null, arguments) + }, + KI = n._emscripten_bind_btSoftRigidDynamicsWorld_getPairCache_0 = function() { + return (KI = n._emscripten_bind_btSoftRigidDynamicsWorld_getPairCache_0 = n.asm.gA).apply(null, arguments) + }, + QI = n._emscripten_bind_btSoftRigidDynamicsWorld_getDispatchInfo_0 = function() { + return (QI = n._emscripten_bind_btSoftRigidDynamicsWorld_getDispatchInfo_0 = n.asm.hA).apply(null, arguments) + }, + XI = n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_1 = function() { + return (XI = n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_1 = n.asm.iA).apply(null, arguments) + }, + ZI = n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_2 = function() { + return (ZI = n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_2 = n.asm.jA).apply(null, arguments) + }, + YI = n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_3 = function() { + return (YI = n._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_3 = n.asm.kA).apply(null, arguments) + }, + JI = n._emscripten_bind_btSoftRigidDynamicsWorld_getBroadphase_0 = function() { + return (JI = n._emscripten_bind_btSoftRigidDynamicsWorld_getBroadphase_0 = n.asm.lA).apply(null, arguments) + }, + $I = n._emscripten_bind_btSoftRigidDynamicsWorld_convexSweepTest_5 = function() { + return ($I = n._emscripten_bind_btSoftRigidDynamicsWorld_convexSweepTest_5 = n.asm.mA).apply(null, arguments) + }, + tR = n._emscripten_bind_btSoftRigidDynamicsWorld_contactPairTest_3 = function() { + return (tR = n._emscripten_bind_btSoftRigidDynamicsWorld_contactPairTest_3 = n.asm.nA).apply(null, arguments) + }, + eR = n._emscripten_bind_btSoftRigidDynamicsWorld_contactTest_2 = function() { + return (eR = n._emscripten_bind_btSoftRigidDynamicsWorld_contactTest_2 = n.asm.oA).apply(null, arguments) + }, + nR = n._emscripten_bind_btSoftRigidDynamicsWorld_updateSingleAabb_1 = function() { + return (nR = n._emscripten_bind_btSoftRigidDynamicsWorld_updateSingleAabb_1 = n.asm.pA).apply(null, arguments) + }, + oR = n._emscripten_bind_btSoftRigidDynamicsWorld_setDebugDrawer_1 = function() { + return (oR = n._emscripten_bind_btSoftRigidDynamicsWorld_setDebugDrawer_1 = n.asm.qA).apply(null, arguments) + }, + _R = n._emscripten_bind_btSoftRigidDynamicsWorld_getDebugDrawer_0 = function() { + return (_R = n._emscripten_bind_btSoftRigidDynamicsWorld_getDebugDrawer_0 = n.asm.rA).apply(null, arguments) + }, + iR = n._emscripten_bind_btSoftRigidDynamicsWorld_debugDrawWorld_0 = function() { + return (iR = n._emscripten_bind_btSoftRigidDynamicsWorld_debugDrawWorld_0 = n.asm.sA).apply(null, arguments) + }, + rR = n._emscripten_bind_btSoftRigidDynamicsWorld_debugDrawObject_3 = function() { + return (rR = n._emscripten_bind_btSoftRigidDynamicsWorld_debugDrawObject_3 = n.asm.tA).apply(null, arguments) + }, + pR = n._emscripten_bind_btSoftRigidDynamicsWorld_setGravity_1 = function() { + return (pR = n._emscripten_bind_btSoftRigidDynamicsWorld_setGravity_1 = n.asm.uA).apply(null, arguments) + }, + sR = n._emscripten_bind_btSoftRigidDynamicsWorld_getGravity_0 = function() { + return (sR = n._emscripten_bind_btSoftRigidDynamicsWorld_getGravity_0 = n.asm.vA).apply(null, arguments) + }, + cR = n._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_1 = function() { + return (cR = n._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_1 = n.asm.wA).apply(null, arguments) + }, + aR = n._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_3 = function() { + return (aR = n._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_3 = n.asm.xA).apply(null, arguments) + }, + lR = n._emscripten_bind_btSoftRigidDynamicsWorld_removeRigidBody_1 = function() { + return (lR = n._emscripten_bind_btSoftRigidDynamicsWorld_removeRigidBody_1 = n.asm.yA).apply(null, arguments) + }, + uR = n._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_1 = function() { + return (uR = n._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_1 = n.asm.zA).apply(null, arguments) + }, + bR = n._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_2 = function() { + return (bR = n._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_2 = n.asm.AA).apply(null, arguments) + }, + mR = n._emscripten_bind_btSoftRigidDynamicsWorld_removeConstraint_1 = function() { + return (mR = n._emscripten_bind_btSoftRigidDynamicsWorld_removeConstraint_1 = n.asm.BA).apply(null, arguments) + }, + yR = n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_1 = function() { + return (yR = n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_1 = n.asm.CA).apply(null, arguments) + }, + dR = n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_2 = function() { + return (dR = n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_2 = n.asm.DA).apply(null, arguments) + }, + fR = n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_3 = function() { + return (fR = n._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_3 = n.asm.EA).apply(null, arguments) + }, + hR = n._emscripten_bind_btSoftRigidDynamicsWorld_setContactAddedCallback_1 = function() { + return (hR = n._emscripten_bind_btSoftRigidDynamicsWorld_setContactAddedCallback_1 = n.asm.FA).apply(null, arguments) + }, + BR = n._emscripten_bind_btSoftRigidDynamicsWorld_setContactProcessedCallback_1 = function() { + return (BR = n._emscripten_bind_btSoftRigidDynamicsWorld_setContactProcessedCallback_1 = n.asm.GA).apply(null, arguments) + }, + gR = n._emscripten_bind_btSoftRigidDynamicsWorld_setContactDestroyedCallback_1 = function() { + return (gR = n._emscripten_bind_btSoftRigidDynamicsWorld_setContactDestroyedCallback_1 = n.asm.HA).apply(null, arguments) + }, + kR = n._emscripten_bind_btSoftRigidDynamicsWorld_addAction_1 = function() { + return (kR = n._emscripten_bind_btSoftRigidDynamicsWorld_addAction_1 = n.asm.IA).apply(null, arguments) + }, + CR = n._emscripten_bind_btSoftRigidDynamicsWorld_removeAction_1 = function() { + return (CR = n._emscripten_bind_btSoftRigidDynamicsWorld_removeAction_1 = n.asm.JA).apply(null, arguments) + }, + SR = n._emscripten_bind_btSoftRigidDynamicsWorld_getSolverInfo_0 = function() { + return (SR = n._emscripten_bind_btSoftRigidDynamicsWorld_getSolverInfo_0 = n.asm.KA).apply(null, arguments) + }, + jR = n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_1 = function() { + return (jR = n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_1 = n.asm.LA).apply(null, arguments) + }, + vR = n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_2 = function() { + return (vR = n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_2 = n.asm.MA).apply(null, arguments) + }, + IR = n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_3 = function() { + return (IR = n._emscripten_bind_btSoftRigidDynamicsWorld_setInternalTickCallback_3 = n.asm.NA).apply(null, arguments) + }, + RR = n._emscripten_bind_btSoftRigidDynamicsWorld___destroy___0 = function() { + return (RR = n._emscripten_bind_btSoftRigidDynamicsWorld___destroy___0 = n.asm.OA).apply(null, arguments) + }, + DR = n._emscripten_bind_btSoftBodyHelpers_btSoftBodyHelpers_0 = function() { + return (DR = n._emscripten_bind_btSoftBodyHelpers_btSoftBodyHelpers_0 = n.asm.PA).apply(null, arguments) + }, + PR = n._emscripten_bind_btSoftBodyHelpers_CreateRope_5 = function() { + return (PR = n._emscripten_bind_btSoftBodyHelpers_CreateRope_5 = n.asm.QA).apply(null, arguments) + }, + TR = n._emscripten_bind_btSoftBodyHelpers_CreatePatch_9 = function() { + return (TR = n._emscripten_bind_btSoftBodyHelpers_CreatePatch_9 = n.asm.RA).apply(null, arguments) + }, + OR = n._emscripten_bind_btSoftBodyHelpers_CreatePatchUV_10 = function() { + return (OR = n._emscripten_bind_btSoftBodyHelpers_CreatePatchUV_10 = n.asm.SA).apply(null, arguments) + }, + WR = n._emscripten_bind_btSoftBodyHelpers_CreateEllipsoid_4 = function() { + return (WR = n._emscripten_bind_btSoftBodyHelpers_CreateEllipsoid_4 = n.asm.TA).apply(null, arguments) + }, + AR = n._emscripten_bind_btSoftBodyHelpers_CreateFromTriMesh_5 = function() { + return (AR = n._emscripten_bind_btSoftBodyHelpers_CreateFromTriMesh_5 = n.asm.UA).apply(null, arguments) + }, + MR = n._emscripten_bind_btSoftBodyHelpers_CreateFromConvexHull_4 = function() { + return (MR = n._emscripten_bind_btSoftBodyHelpers_CreateFromConvexHull_4 = n.asm.VA).apply(null, arguments) + }, + xR = n._emscripten_bind_btSoftBodyHelpers___destroy___0 = function() { + return (xR = n._emscripten_bind_btSoftBodyHelpers___destroy___0 = n.asm.WA).apply(null, arguments) + }, + FR = n._emscripten_enum_PHY_ScalarType_PHY_FLOAT = function() { + return (FR = n._emscripten_enum_PHY_ScalarType_PHY_FLOAT = n.asm.XA).apply(null, arguments) + }, + LR = n._emscripten_enum_PHY_ScalarType_PHY_DOUBLE = function() { + return (LR = n._emscripten_enum_PHY_ScalarType_PHY_DOUBLE = n.asm.YA).apply(null, arguments) + }, + GR = n._emscripten_enum_PHY_ScalarType_PHY_INTEGER = function() { + return (GR = n._emscripten_enum_PHY_ScalarType_PHY_INTEGER = n.asm.ZA).apply(null, arguments) + }, + wR = n._emscripten_enum_PHY_ScalarType_PHY_SHORT = function() { + return (wR = n._emscripten_enum_PHY_ScalarType_PHY_SHORT = n.asm._A).apply(null, arguments) + }, + HR = n._emscripten_enum_PHY_ScalarType_PHY_FIXEDPOINT88 = function() { + return (HR = n._emscripten_enum_PHY_ScalarType_PHY_FIXEDPOINT88 = n.asm.$A).apply(null, arguments) + }, + VR = n._emscripten_enum_PHY_ScalarType_PHY_UCHAR = function() { + return (VR = n._emscripten_enum_PHY_ScalarType_PHY_UCHAR = n.asm.aB).apply(null, arguments) + }, + ER = n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_COMPOUND_SHAPE = function() { + return (ER = n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_COMPOUND_SHAPE = n.asm.bB).apply(null, arguments) + }, + NR = n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_TRIMESH_SHAPE_PART = function() { + return (NR = n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_TRIMESH_SHAPE_PART = n.asm.cB).apply(null, arguments) + }, + UR = n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_TRIMESH_SHAPE = function() { + return (UR = n._emscripten_enum_eGIMPACT_SHAPE_TYPE_CONST_GIMPACT_TRIMESH_SHAPE = n.asm.dB).apply(null, arguments) + }, + zR = n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_ERP = function() { + return (zR = n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_ERP = n.asm.eB).apply(null, arguments) + }, + qR = n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_ERP = function() { + return (qR = n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_ERP = n.asm.fB).apply(null, arguments) + }, + KR = n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_CFM = function() { + return (KR = n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_CFM = n.asm.gB).apply(null, arguments) + }, + QR = n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_CFM = function() { + return (QR = n._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_CFM = n.asm.hB).apply(null, arguments) + }; + + function XR() { + function t() { + if (!Q && (Q = !0, n.calledRun = !0, !f)) { + if (P = !0, V(R), o(n), n.onRuntimeInitialized && n.onRuntimeInitialized(), n.postRun) + for ("function" == typeof n.postRun && (n.postRun = [n.postRun]); n.postRun.length;) { + var t = n.postRun.shift(); + D.unshift(t) + } + V(D) + } + } + if (!(0 < W)) { + if (n.preRun) + for ("function" == typeof n.preRun && (n.preRun = [n.preRun]); n.preRun.length;) T(); + V(I), 0 < W || (n.setStatus ? (n.setStatus("Running..."), setTimeout((function() { + setTimeout((function() { + n.setStatus("") + }), 1), t() + }), 1)) : t()) + } + } + if (n._malloc = function() { + return (n._malloc = n.asm.jB).apply(null, arguments) + }, n.___start_em_js = 27240, n.___stop_em_js = 27338, n.UTF8ToString = B, n.addFunction = function(t, e) { + if (!z) { + z = new WeakMap; + var n = v.length; + if (z) + for (var o = 0; o < 0 + n; o++) { + var _ = o, + i = U[_]; + i || (_ >= U.length && (U.length = _ + 1), U[_] = i = v.get(_)), (_ = i) && z.set(_, o) + } + } + if (n = z.get(t) || 0) return n; + if (q.length) n = q.pop(); + else { + try { + v.grow(1) + } catch (t) { + if (!(t instanceof RangeError)) throw t; + throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH." + } + n = v.length - 1 + } + try { + o = n, v.set(o, t), U[o] = v.get(o) + } catch (p) { + if (!(p instanceof TypeError)) throw p; + if ("function" == typeof WebAssembly.Function) { + o = WebAssembly.Function, _ = { + i: "i32", + j: "i32", + f: "f32", + d: "f64", + p: "i32" + }, i = { + parameters: [], + results: "v" == e[0] ? [] : [_[e[0]]] + }; + for (var r = 1; r < e.length; ++r) i.parameters.push(_[e[r]]), "j" === e[r] && i.parameters.push("i32"); + e = new o(i, t) + } else { + for (o = [1], _ = e.slice(0, 1), e = e.slice(1), i = { + i: 127, + p: 127, + j: 126, + f: 125, + d: 124 + }, o.push(96), 128 > (r = e.length) ? o.push(r) : o.push(r % 128 | 128, r >> 7), r = 0; r < e.length; ++r) o.push(i[e[r]]); + "v" == _ ? o.push(0) : o.push(1, i[_]), e = [0, 97, 115, 109, 1, 0, 0, 0, 1], 128 > (_ = o.length) ? e.push(_) : e.push(_ % 128 | 128, _ >> 7), e.push.apply(e, o), e.push(2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0), e = new WebAssembly.Module(new Uint8Array(e)), e = new WebAssembly.Instance(e, { + e: { + f: t + } + }).exports.f + } + o = n, v.set(o, e), U[o] = v.get(o) + } + return z.set(t, n), n + }, M = function t() { + Q || XR(), Q || (M = t) + }, n.preInit) + for ("function" == typeof n.preInit && (n.preInit = [n.preInit]); 0 < n.preInit.length;) n.preInit.pop()(); + + function ZR() {} + + function YR(t) { + return (t || ZR).mB + } + + function JR(t, e) { + var n = YR(e), + o = n[t]; + return o || ((o = Object.create((e || ZR).prototype)).kB = t, n[t] = o) + } + XR(), ZR.prototype = Object.create(ZR.prototype), ZR.prototype.constructor = ZR, ZR.prototype.lB = ZR, ZR.mB = {}, n.WrapperObject = ZR, n.getCache = YR, n.wrapPointer = JR, n.castObject = function(t, e) { + return JR(t.kB, e) + }, n.NULL = JR(0), n.destroy = function(t) { + if (!t.__destroy__) throw "Error: Cannot destroy object. (Did you create it yourself?)"; + t.__destroy__(), delete YR(t.lB)[t.kB] + }, n.compare = function(t, e) { + return t.kB === e.kB + }, n.getPointer = function(t) { + return t.kB + }, n.getClass = function(t) { + return t.lB + }; + var $R = 0, + tD = 0, + eD = 0, + nD = [], + oD = 0; + + function _D() { + if (oD) { + for (var t = 0; t < nD.length; t++) n._free(nD[t]); + nD.length = 0, n._free($R), $R = 0, tD += oD, oD = 0 + } + $R || (tD += 128, ($R = n._malloc(tD)) || x()), eD = 0 + } + + function iD(t, e) { + return $R || x(), t = t.length * e.BYTES_PER_ELEMENT, eD + (t = t + 7 & -8) >= tD ? (0 < t || x(), oD += t, e = n._malloc(t), nD.push(e)) : (e = $R + eD, eD += t), e + } + + function rD(t, e, n) { + switch (n >>>= 0, e.BYTES_PER_ELEMENT) { + case 2: + n >>>= 1; + break; + case 4: + n >>>= 2; + break; + case 8: + n >>>= 3 + } + for (var o = 0; o < t.length; o++) e[n + o] = t[o] + } + + function pD(t) { + if ("string" == typeof t) { + for (var e = 0, n = 0; n < t.length; ++n) { + var o = t.charCodeAt(n); + 127 >= o ? e++ : 2047 >= o ? e += 2 : 55296 <= o && 57343 >= o ? (e += 4, ++n) : e += 3 + } + if (n = 0, 0 < (o = (e = Array(e + 1)).length)) { + o = n + o - 1; + for (var _ = 0; _ < t.length; ++_) { + var i = t.charCodeAt(_); + if (55296 <= i && 57343 >= i) i = 65536 + ((1023 & i) << 10) | 1023 & t.charCodeAt(++_); + if (127 >= i) { + if (n >= o) break; + e[n++] = i + } else { + if (2047 >= i) { + if (n + 1 >= o) break; + e[n++] = 192 | i >> 6 + } else { + if (65535 >= i) { + if (n + 2 >= o) break; + e[n++] = 224 | i >> 12 + } else { + if (n + 3 >= o) break; + e[n++] = 240 | i >> 18, e[n++] = 128 | i >> 12 & 63 + } + e[n++] = 128 | i >> 6 & 63 + } + e[n++] = 128 | 63 & i + } + } + e[n] = 0 + } + return t = iD(e, g), rD(e, g, t), t + } + return t + } + + function sD(t) { + if ("object" == typeof t) { + var e = iD(t, S); + return rD(t, S, e), e + } + return t + } + + function cD() { + throw "cannot construct a btCollisionShape, no constructor in IDL" + } + + function aD() { + throw "cannot construct a btCollisionWorld, no constructor in IDL" + } + + function lD() { + throw "cannot construct a btCollisionObject, no constructor in IDL" + } + + function uD() { + throw "cannot construct a btConcaveShape, no constructor in IDL" + } + + function bD() { + throw "cannot construct a btCollisionAlgorithm, no constructor in IDL" + } + + function mD() { + throw "cannot construct a btTypedConstraint, no constructor in IDL" + } + + function yD() { + throw "cannot construct a btDynamicsWorld, no constructor in IDL" + } + + function dD() { + throw "cannot construct a btIDebugDraw, no constructor in IDL" + } + + function fD(t, e, n) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), this.kB = void 0 === t ? Le() : void 0 === e ? _emscripten_bind_btVector3_btVector3_1(t) : void 0 === n ? _emscripten_bind_btVector3_btVector3_2(t, e) : Ge(t, e, n), YR(fD)[this.kB] = this + } + + function hD() { + throw "cannot construct a btQuadWord, no constructor in IDL" + } + + function BD() { + throw "cannot construct a btMotionState, no constructor in IDL" + } + + function gD() { + throw "cannot construct a RayResultCallback, no constructor in IDL" + } + + function kD() { + throw "cannot construct a ContactResultCallback, no constructor in IDL" + } + + function CD() { + throw "cannot construct a ConvexResultCallback, no constructor in IDL" + } + + function SD() { + throw "cannot construct a btConvexShape, no constructor in IDL" + } + + function jD(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = Vn(t, e), YR(jD)[this.kB] = this + } + + function vD(t) { + t && "object" == typeof t && (t = t.kB), this.kB = Yn(t), YR(vD)[this.kB] = this + } + + function ID(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = _o(t, e), YR(ID)[this.kB] = this + } + + function RD() { + throw "cannot construct a btStridingMeshInterface, no constructor in IDL" + } + + function DD() { + throw "cannot construct a btTriangleMeshShape, no constructor in IDL" + } + + function PD() { + throw "cannot construct a btPrimitiveManagerBase, no constructor in IDL" + } + + function TD() { + throw "cannot construct a btGImpactShapeInterface, no constructor in IDL" + } + + function OD() { + throw "cannot construct a btActivatingCollisionAlgorithm, no constructor in IDL" + } + + function WD(t) { + t && "object" == typeof t && (t = t.kB), this.kB = void 0 === t ? Vo() : Eo(t), YR(WD)[this.kB] = this + } + + function AD() { + throw "cannot construct a btDispatcher, no constructor in IDL" + } + + function MD(t, e, n, o, _) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), this.kB = void 0 === o ? Ko(t, e, n) : void 0 === _ ? _emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_4(t, e, n, o) : Qo(t, e, n, o, _), YR(MD)[this.kB] = this + } + + function xD(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = r_(t, e, n, o), YR(xD)[this.kB] = this + } + + function FD() { + throw "cannot construct a btVehicleRaycaster, no constructor in IDL" + } + + function LD() { + throw "cannot construct a btActionInterface, no constructor in IDL" + } + + function GD() { + this.kB = X_(), YR(GD)[this.kB] = this + } + + function wD() { + throw "cannot construct a btSoftBodySolver, no constructor in IDL" + } + + function HD() { + throw "cannot construct a VoidPtr, no constructor in IDL" + } + + function VD() { + this.kB = Ti(), YR(VD)[this.kB] = this + } + + function ED(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = void 0 === t ? Gi() : void 0 === e ? _emscripten_bind_btVector4_btVector4_1(t) : void 0 === n ? _emscripten_bind_btVector4_btVector4_2(t, e) : void 0 === o ? _emscripten_bind_btVector4_btVector4_3(t, e, n) : wi(t, e, n, o), YR(ED)[this.kB] = this + } + + function ND(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = nr(t, e, n, o), YR(ND)[this.kB] = this + } + + function UD() { + throw "cannot construct a btMatrix3x3, no constructor in IDL" + } + + function zD(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = void 0 === t ? xr() : void 0 === e ? _emscripten_bind_btTransform_btTransform_1(t) : Fr(t, e), YR(zD)[this.kB] = this + } + + function qD() { + this.kB = Kr(), YR(qD)[this.kB] = this + } + + function KD(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = void 0 === t ? Yr() : void 0 === e ? Jr(t) : $r(t, e), YR(KD)[this.kB] = this + } + + function QD() { + throw "cannot construct a btCollisionObjectWrapper, no constructor in IDL" + } + + function XD(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = sp(t, e), YR(XD)[this.kB] = this + } + + function ZD() { + throw "cannot construct a btConstCollisionObjectArray, no constructor in IDL" + } + + function YD() { + throw "cannot construct a btScalarArray, no constructor in IDL" + } + + function JD(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = xp(t, e), YR(JD)[this.kB] = this + } + + function $D() { + throw "cannot construct a btManifoldPoint, no constructor in IDL" + } + + function tP() { + this.kB = Ss(), YR(tP)[this.kB] = this + } + + function eP() { + throw "cannot construct a LocalShapeInfo, no constructor in IDL" + } + + function nP(t, e, n, o, _) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), this.kB = Os(t, e, n, o, _), YR(nP)[this.kB] = this + } + + function oP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = Ns(t, e), YR(oP)[this.kB] = this + } + + function _P(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = void 0 === e ? sc(t) : cc(t, e), YR(_P)[this.kB] = this + } + + function iP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = dc(t), YR(iP)[this.kB] = this + } + + function rP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = Sc(t, e), YR(rP)[this.kB] = this + } + + function pP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = Ac(t, e), YR(pP)[this.kB] = this + } + + function sP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = Nc(t), YR(sP)[this.kB] = this + } + + function cP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = Zc(t), YR(cP)[this.kB] = this + } + + function aP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = oa(t), YR(aP)[this.kB] = this + } + + function lP(t, e, n) { + _D(), t && "object" == typeof t && (t = t.kB), "object" == typeof e && (e = sD(e)), n && "object" == typeof n && (n = n.kB), this.kB = aa(t, e, n), YR(lP)[this.kB] = this + } + + function uP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = ya(t, e), YR(uP)[this.kB] = this + } + + function bP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = ga(t, e), YR(bP)[this.kB] = this + } + + function mP() { + throw "cannot construct a btIntArray, no constructor in IDL" + } + + function yP() { + throw "cannot construct a btFace, no constructor in IDL" + } + + function dP() { + throw "cannot construct a btVector3Array, no constructor in IDL" + } + + function fP() { + throw "cannot construct a btFaceArray, no constructor in IDL" + } + + function hP() { + throw "cannot construct a btConvexPolyhedron, no constructor in IDL" + } + + function BP(t, e) { + _D(), "object" == typeof t && (t = sD(t)), e && "object" == typeof e && (e = e.kB), this.kB = void 0 === t ? Ua() : void 0 === e ? za(t) : qa(t, e), YR(BP)[this.kB] = this + } + + function gP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = il(t), YR(gP)[this.kB] = this + } + + function kP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = void 0 === t ? al() : ll(t), YR(kP)[this.kB] = this + } + + function CP() { + throw "cannot construct a btIndexedMesh, no constructor in IDL" + } + + function SP() { + throw "cannot construct a btIndexedMeshArray, no constructor in IDL" + } + + function jP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = void 0 === t ? Ol() : void 0 === e ? Wl(t) : Al(t, e), YR(jP)[this.kB] = this + } + + function vP() { + this.kB = Vl(), YR(vP)[this.kB] = this + } + + function IP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = ql(t, e), YR(IP)[this.kB] = this + } + + function RP(t, e, n) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), this.kB = void 0 === n ? Yl(t, e) : Jl(t, e, n), YR(RP)[this.kB] = this + } + + function DP(t, e, n, o, _, i, r, p, s) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), i && "object" == typeof i && (i = i.kB), r && "object" == typeof r && (r = r.kB), p && "object" == typeof p && (p = p.kB), s && "object" == typeof s && (s = s.kB), this.kB = ou(t, e, n, o, _, i, r, p, s), YR(DP)[this.kB] = this + } + + function PP(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = au(t, e, n, o), YR(PP)[this.kB] = this + } + + function TP() { + this.kB = yu(), YR(TP)[this.kB] = this + } + + function OP(t, e, n) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), this.kB = fu(t, e, n), YR(OP)[this.kB] = this + } + + function WP() { + this.kB = Cu(), YR(WP)[this.kB] = this + } + + function AP() { + throw "cannot construct a CompoundPrimitiveManager, no constructor in IDL" + } + + function MP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = void 0 === t ? Wu() : Au(t), YR(MP)[this.kB] = this + } + + function xP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = void 0 === t ? nb() : ob(t), YR(xP)[this.kB] = this + } + + function FP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = Wb(t, e), YR(FP)[this.kB] = this + } + + function LP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = Kb(t), YR(LP)[this.kB] = this + } + + function GP(t, e) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), this.kB = void 0 === t ? sm() : void 0 === e ? _emscripten_bind_btCollisionAlgorithmConstructionInfo_btCollisionAlgorithmConstructionInfo_1(t) : cm(t, e), YR(GP)[this.kB] = this + } + + function wP(t, e, n) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), this.kB = ym(t, e, n), YR(wP)[this.kB] = this + } + + function HP() { + this.kB = hm(), YR(HP)[this.kB] = this + } + + function VP() { + this.kB = gm(), YR(VP)[this.kB] = this + } + + function EP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = Im(t), YR(EP)[this.kB] = this + } + + function NP() { + throw "cannot construct a btOverlappingPairCallback, no constructor in IDL" + } + + function UP() { + throw "cannot construct a btOverlappingPairCache, no constructor in IDL" + } + + function zP(t, e, n, o, _) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), this.kB = void 0 === n ? Mm(t, e) : void 0 === o ? xm(t, e, n) : void 0 === _ ? Fm(t, e, n, o) : Lm(t, e, n, o, _), YR(zP)[this.kB] = this + } + + function qP() { + throw "cannot construct a btBroadphaseInterface, no constructor in IDL" + } + + function KP() { + throw "cannot construct a btCollisionConfiguration, no constructor in IDL" + } + + function QP() { + this.kB = Em(), YR(QP)[this.kB] = this + } + + function XP() { + throw "cannot construct a btBroadphaseProxy, no constructor in IDL" + } + + function ZP(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = void 0 === o ? Xm(t, e, n) : Zm(t, e, n, o), YR(ZP)[this.kB] = this + } + + function YP(t) { + t && "object" == typeof t && (t = t.kB), this.kB = Cy(t), YR(YP)[this.kB] = this + } + + function JP() { + this.kB = Md(), YR(JP)[this.kB] = this + } + + function $P(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = void 0 === n ? Ed(t, e) : void 0 === o ? _emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_3(t, e, n) : Nd(t, e, n, o), YR($P)[this.kB] = this + } + + function tT(t, e, n, o, _) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), this.kB = void 0 === o ? nf(t, e, n) : void 0 === _ ? _emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_4(t, e, n, o) : of(t, e, n, o, _), YR(tT)[this.kB] = this + } + + function eT() { + this.kB = Cf(), YR(eT)[this.kB] = this + } + + function nT(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = void 0 === n ? jf(t, e) : void 0 === o ? _emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_3(t, e, n) : vf(t, e, n, o), YR(nT)[this.kB] = this + } + + function oT(t, e, n, o, _, i, r) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), i && "object" == typeof i && (i = i.kB), r && "object" == typeof r && (r = r.kB), this.kB = void 0 === n ? Hf(t, e) : void 0 === o ? Vf(t, e, n) : void 0 === _ ? Ef(t, e, n, o) : void 0 === i ? Nf(t, e, n, o, _) : void 0 === r ? Uf(t, e, n, o, _, i) : zf(t, e, n, o, _, i, r), YR(oT)[this.kB] = this + } + + function _T(t, e, n, o, _) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), this.kB = void 0 === o ? rh(t, e, n) : void 0 === _ ? _emscripten_bind_btSliderConstraint_btSliderConstraint_4(t, e, n, o) : ph(t, e, n, o, _), YR(_T)[this.kB] = this + } + + function iT(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = Sh(t, e, n, o), YR(iT)[this.kB] = this + } + + function rT() { + throw "cannot construct a btConstraintSolver, no constructor in IDL" + } + + function pT() { + throw "cannot construct a btDispatcherInfo, no constructor in IDL" + } + + function sT() { + throw "cannot construct a btContactSolverInfo, no constructor in IDL" + } + + function cT() { + this.kB = pB(), YR(cT)[this.kB] = this + } + + function aT() { + throw "cannot construct a btVehicleRaycasterResult, no constructor in IDL" + } + + function lT(t) { + t && "object" == typeof t && (t = t.kB), this.kB = RB(t), YR(lT)[this.kB] = this + } + + function uT() { + throw "cannot construct a RaycastInfo, no constructor in IDL" + } + + function bT() { + throw "cannot construct a btWheelInfoConstructionInfo, no constructor in IDL" + } + + function mT(t) { + t && "object" == typeof t && (t = t.kB), this.kB = hg(t), YR(mT)[this.kB] = this + } + + function yT(t, e, n, o) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), this.kB = void 0 === o ? dk(t, e, n) : fk(t, e, n, o), YR(yT)[this.kB] = this + } + + function dT(t, e, n) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), this.kB = wk(t, e, n), YR(dT)[this.kB] = this + } + + function fT() { + this.kB = fC(), YR(fT)[this.kB] = this + } + + function hT() { + this.kB = ZC(), YR(hT)[this.kB] = this + } + + function BT() { + this.kB = JC(), YR(BT)[this.kB] = this + } + + function gT() { + throw "cannot construct a Face, no constructor in IDL" + } + + function kT() { + throw "cannot construct a tFaceArray, no constructor in IDL" + } + + function CT() { + throw "cannot construct a Node, no constructor in IDL" + } + + function ST() { + throw "cannot construct a tNodeArray, no constructor in IDL" + } + + function jT() { + throw "cannot construct a Material, no constructor in IDL" + } + + function vT() { + throw "cannot construct a tMaterialArray, no constructor in IDL" + } + + function IT() { + throw "cannot construct a Anchor, no constructor in IDL" + } + + function RT() { + throw "cannot construct a tAnchorArray, no constructor in IDL" + } + + function DT() { + throw "cannot construct a Config, no constructor in IDL" + } + + function PT(t, e, n, o) { + _D(), t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), "object" == typeof o && (o = sD(o)), this.kB = gv(t, e, n, o), YR(PT)[this.kB] = this + } + + function TT(t) { + t && "object" == typeof t && (t = t.kB), this.kB = void 0 === t ? OI() : WI(t), YR(TT)[this.kB] = this + } + + function OT() { + this.kB = MI(), YR(OT)[this.kB] = this + } + + function WT() { + throw "cannot construct a btSoftBodyArray, no constructor in IDL" + } + + function AT(t, e, n, o, _) { + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), this.kB = wI(t, e, n, o, _), YR(AT)[this.kB] = this + } + + function MT() { + this.kB = DR(), YR(MT)[this.kB] = this + } + return cD.prototype = Object.create(ZR.prototype), cD.prototype.constructor = cD, cD.prototype.lB = cD, cD.mB = {}, n.btCollisionShape = cD, cD.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), X(e, t) + }, cD.prototype.getLocalScaling = function() { + return JR(Z(this.kB), fD) + }, cD.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Y(n, t, e) + }, cD.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), J(e, t) + }, cD.prototype.getMargin = function() { + return $(this.kB) + }, cD.prototype.__destroy__ = function() { + tt(this.kB) + }, aD.prototype = Object.create(ZR.prototype), aD.prototype.constructor = aD, aD.prototype.lB = aD, aD.mB = {}, n.btCollisionWorld = aD, aD.prototype.getDispatcher = function() { + return JR(et(this.kB), AD) + }, aD.prototype.rayTest = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), nt(o, t, e, n) + }, aD.prototype.getPairCache = function() { + return JR(ot(this.kB), UP) + }, aD.prototype.getDispatchInfo = function() { + return JR(_t(this.kB), pT) + }, aD.prototype.addCollisionObject = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? it(o, t) : void 0 === n ? rt(o, t, e) : pt(o, t, e, n) + }, aD.prototype.removeCollisionObject = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), st(e, t) + }, aD.prototype.getBroadphase = function() { + return JR(ct(this.kB), qP) + }, aD.prototype.convexSweepTest = function(t, e, n, o, _) { + var i = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), at(i, t, e, n, o, _) + }, aD.prototype.contactPairTest = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), lt(o, t, e, n) + }, aD.prototype.contactTest = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ut(n, t, e) + }, aD.prototype.updateSingleAabb = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bt(e, t) + }, aD.prototype.setDebugDrawer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mt(e, t) + }, aD.prototype.getDebugDrawer = function() { + return JR(yt(this.kB), dD) + }, aD.prototype.debugDrawWorld = function() { + dt(this.kB) + }, aD.prototype.debugDrawObject = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), ft(o, t, e, n) + }, aD.prototype.__destroy__ = function() { + ht(this.kB) + }, lD.prototype = Object.create(ZR.prototype), lD.prototype.constructor = lD, lD.prototype.lB = lD, lD.mB = {}, n.btCollisionObject = lD, lD.prototype.setAnisotropicFriction = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Bt(n, t, e) + }, lD.prototype.getCollisionShape = function() { + return JR(gt(this.kB), cD) + }, lD.prototype.setContactProcessingThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kt(e, t) + }, lD.prototype.setActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ct(e, t) + }, lD.prototype.forceActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), St(e, t) + }, lD.prototype.activate = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), void 0 === t ? jt(e) : vt(e, t) + }, lD.prototype.isActive = function() { + return !!It(this.kB) + }, lD.prototype.isKinematicObject = function() { + return !!Rt(this.kB) + }, lD.prototype.isStaticObject = function() { + return !!Dt(this.kB) + }, lD.prototype.isStaticOrKinematicObject = function() { + return !!Pt(this.kB) + }, lD.prototype.getRestitution = function() { + return Tt(this.kB) + }, lD.prototype.getFriction = function() { + return Ot(this.kB) + }, lD.prototype.getRollingFriction = function() { + return Wt(this.kB) + }, lD.prototype.setRestitution = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), At(e, t) + }, lD.prototype.setFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Mt(e, t) + }, lD.prototype.setRollingFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), xt(e, t) + }, lD.prototype.getWorldTransform = function() { + return JR(Ft(this.kB), zD) + }, lD.prototype.getCollisionFlags = function() { + return Lt(this.kB) + }, lD.prototype.setCollisionFlags = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gt(e, t) + }, lD.prototype.setWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), wt(e, t) + }, lD.prototype.setCollisionShape = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ht(e, t) + }, lD.prototype.setCcdMotionThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Vt(e, t) + }, lD.prototype.setCcdSweptSphereRadius = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Et(e, t) + }, lD.prototype.getUserIndex = function() { + return Nt(this.kB) + }, lD.prototype.setUserIndex = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ut(e, t) + }, lD.prototype.getUserPointer = function() { + return JR(zt(this.kB), HD) + }, lD.prototype.setUserPointer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qt(e, t) + }, lD.prototype.getBroadphaseHandle = function() { + return JR(Kt(this.kB), XP) + }, lD.prototype.__destroy__ = function() { + Qt(this.kB) + }, uD.prototype = Object.create(cD.prototype), uD.prototype.constructor = uD, uD.prototype.lB = uD, uD.mB = {}, n.btConcaveShape = uD, uD.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Xt(e, t) + }, uD.prototype.getLocalScaling = function() { + return JR(Zt(this.kB), fD) + }, uD.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Yt(n, t, e) + }, uD.prototype.__destroy__ = function() { + Jt(this.kB) + }, bD.prototype = Object.create(ZR.prototype), bD.prototype.constructor = bD, bD.prototype.lB = bD, bD.mB = {}, n.btCollisionAlgorithm = bD, bD.prototype.__destroy__ = function() { + $t(this.kB) + }, mD.prototype = Object.create(ZR.prototype), mD.prototype.constructor = mD, mD.prototype.lB = mD, mD.mB = {}, n.btTypedConstraint = mD, mD.prototype.enableFeedback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), te(e, t) + }, mD.prototype.getBreakingImpulseThreshold = function() { + return ee(this.kB) + }, mD.prototype.setBreakingImpulseThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ne(e, t) + }, mD.prototype.getParam = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), oe(n, t, e) + }, mD.prototype.setParam = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), _e(o, t, e, n) + }, mD.prototype.__destroy__ = function() { + ie(this.kB) + }, yD.prototype = Object.create(aD.prototype), yD.prototype.constructor = yD, yD.prototype.lB = yD, yD.mB = {}, n.btDynamicsWorld = yD, yD.prototype.addAction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), re(e, t) + }, yD.prototype.removeAction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), pe(e, t) + }, yD.prototype.getSolverInfo = function() { + return JR(se(this.kB), sT) + }, yD.prototype.setInternalTickCallback = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? ce(o, t) : void 0 === n ? ae(o, t, e) : le(o, t, e, n) + }, yD.prototype.getDispatcher = function() { + return JR(ue(this.kB), AD) + }, yD.prototype.rayTest = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), be(o, t, e, n) + }, yD.prototype.getPairCache = function() { + return JR(me(this.kB), UP) + }, yD.prototype.getDispatchInfo = function() { + return JR(ye(this.kB), pT) + }, yD.prototype.addCollisionObject = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? de(o, t) : void 0 === n ? fe(o, t, e) : he(o, t, e, n) + }, yD.prototype.removeCollisionObject = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Be(e, t) + }, yD.prototype.getBroadphase = function() { + return JR(ge(this.kB), qP) + }, yD.prototype.convexSweepTest = function(t, e, n, o, _) { + var i = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), ke(i, t, e, n, o, _) + }, yD.prototype.contactPairTest = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Ce(o, t, e, n) + }, yD.prototype.contactTest = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Se(n, t, e) + }, yD.prototype.updateSingleAabb = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), je(e, t) + }, yD.prototype.setDebugDrawer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ve(e, t) + }, yD.prototype.getDebugDrawer = function() { + return JR(Ie(this.kB), dD) + }, yD.prototype.debugDrawWorld = function() { + Re(this.kB) + }, yD.prototype.debugDrawObject = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), De(o, t, e, n) + }, yD.prototype.__destroy__ = function() { + Pe(this.kB) + }, dD.prototype = Object.create(ZR.prototype), dD.prototype.constructor = dD, dD.prototype.lB = dD, dD.mB = {}, n.btIDebugDraw = dD, dD.prototype.drawLine = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Te(o, t, e, n) + }, dD.prototype.drawContactPoint = function(t, e, n, o, _) { + var i = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), Oe(i, t, e, n, o, _) + }, dD.prototype.reportErrorWarning = function(t) { + var e = this.kB; + _D(), t = t && "object" == typeof t ? t.kB : pD(t), We(e, t) + }, dD.prototype.draw3dText = function(t, e) { + var n = this.kB; + _D(), t && "object" == typeof t && (t = t.kB), e = e && "object" == typeof e ? e.kB : pD(e), Ae(n, t, e) + }, dD.prototype.setDebugMode = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Me(e, t) + }, dD.prototype.getDebugMode = function() { + return xe(this.kB) + }, dD.prototype.__destroy__ = function() { + Fe(this.kB) + }, fD.prototype = Object.create(ZR.prototype), fD.prototype.constructor = fD, fD.prototype.lB = fD, fD.mB = {}, n.btVector3 = fD, fD.prototype.length = fD.prototype.length = function() { + return we(this.kB) + }, fD.prototype.x = fD.prototype.x = function() { + return He(this.kB) + }, fD.prototype.y = fD.prototype.y = function() { + return Ve(this.kB) + }, fD.prototype.z = fD.prototype.z = function() { + return Ee(this.kB) + }, fD.prototype.setX = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ne(e, t) + }, fD.prototype.setY = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ue(e, t) + }, fD.prototype.setZ = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ze(e, t) + }, fD.prototype.setValue = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), qe(o, t, e, n) + }, fD.prototype.normalize = fD.prototype.normalize = function() { + Ke(this.kB) + }, fD.prototype.rotate = fD.prototype.rotate = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), JR(Qe(n, t, e), fD) + }, fD.prototype.dot = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), Xe(e, t) + }, fD.prototype.op_mul = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Ze(e, t), fD) + }, fD.prototype.op_add = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Ye(e, t), fD) + }, fD.prototype.op_sub = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Je(e, t), fD) + }, fD.prototype.__destroy__ = function() { + $e(this.kB) + }, hD.prototype = Object.create(ZR.prototype), hD.prototype.constructor = hD, hD.prototype.lB = hD, hD.mB = {}, n.btQuadWord = hD, hD.prototype.x = hD.prototype.x = function() { + return tn(this.kB) + }, hD.prototype.y = hD.prototype.y = function() { + return en(this.kB) + }, hD.prototype.z = hD.prototype.z = function() { + return nn(this.kB) + }, hD.prototype.w = hD.prototype.w = function() { + return on(this.kB) + }, hD.prototype.setX = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _n(e, t) + }, hD.prototype.setY = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rn(e, t) + }, hD.prototype.setZ = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), pn(e, t) + }, hD.prototype.setW = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), sn(e, t) + }, hD.prototype.__destroy__ = function() { + cn(this.kB) + }, BD.prototype = Object.create(ZR.prototype), BD.prototype.constructor = BD, BD.prototype.lB = BD, BD.mB = {}, n.btMotionState = BD, BD.prototype.getWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), an(e, t) + }, BD.prototype.setWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ln(e, t) + }, BD.prototype.__destroy__ = function() { + un(this.kB) + }, gD.prototype = Object.create(ZR.prototype), gD.prototype.constructor = gD, gD.prototype.lB = gD, gD.mB = {}, n.RayResultCallback = gD, gD.prototype.hasHit = function() { + return !!bn(this.kB) + }, gD.prototype.get_m_collisionFilterGroup = gD.prototype.nB = function() { + return mn(this.kB) + }, gD.prototype.set_m_collisionFilterGroup = gD.prototype.pB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), yn(e, t) + }, Object.defineProperty(gD.prototype, "m_collisionFilterGroup", { + get: gD.prototype.nB, + set: gD.prototype.pB + }), gD.prototype.get_m_collisionFilterMask = gD.prototype.oB = function() { + return dn(this.kB) + }, gD.prototype.set_m_collisionFilterMask = gD.prototype.qB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), fn(e, t) + }, Object.defineProperty(gD.prototype, "m_collisionFilterMask", { + get: gD.prototype.oB, + set: gD.prototype.qB + }), gD.prototype.get_m_closestHitFraction = gD.prototype.rB = function() { + return hn(this.kB) + }, gD.prototype.set_m_closestHitFraction = gD.prototype.sB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bn(e, t) + }, Object.defineProperty(gD.prototype, "m_closestHitFraction", { + get: gD.prototype.rB, + set: gD.prototype.sB + }), gD.prototype.get_m_collisionObject = gD.prototype.vB = function() { + return JR(gn(this.kB), lD) + }, gD.prototype.set_m_collisionObject = gD.prototype.CB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kn(e, t) + }, Object.defineProperty(gD.prototype, "m_collisionObject", { + get: gD.prototype.vB, + set: gD.prototype.CB + }), gD.prototype.get_m_flags = gD.prototype.tB = function() { + return Cn(this.kB) + }, gD.prototype.set_m_flags = gD.prototype.uB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Sn(e, t) + }, Object.defineProperty(gD.prototype, "m_flags", { + get: gD.prototype.tB, + set: gD.prototype.uB + }), gD.prototype.__destroy__ = function() { + jn(this.kB) + }, kD.prototype = Object.create(ZR.prototype), kD.prototype.constructor = kD, kD.prototype.lB = kD, kD.mB = {}, n.ContactResultCallback = kD, kD.prototype.addSingleResult = function(t, e, n, o, _, i, r) { + var p = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), i && "object" == typeof i && (i = i.kB), r && "object" == typeof r && (r = r.kB), vn(p, t, e, n, o, _, i, r) + }, kD.prototype.__destroy__ = function() { + In(this.kB) + }, CD.prototype = Object.create(ZR.prototype), CD.prototype.constructor = CD, CD.prototype.lB = CD, CD.mB = {}, n.ConvexResultCallback = CD, CD.prototype.hasHit = function() { + return !!Rn(this.kB) + }, CD.prototype.get_m_collisionFilterGroup = CD.prototype.nB = function() { + return Dn(this.kB) + }, CD.prototype.set_m_collisionFilterGroup = CD.prototype.pB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Pn(e, t) + }, Object.defineProperty(CD.prototype, "m_collisionFilterGroup", { + get: CD.prototype.nB, + set: CD.prototype.pB + }), CD.prototype.get_m_collisionFilterMask = CD.prototype.oB = function() { + return Tn(this.kB) + }, CD.prototype.set_m_collisionFilterMask = CD.prototype.qB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), On(e, t) + }, Object.defineProperty(CD.prototype, "m_collisionFilterMask", { + get: CD.prototype.oB, + set: CD.prototype.qB + }), CD.prototype.get_m_closestHitFraction = CD.prototype.rB = function() { + return Wn(this.kB) + }, CD.prototype.set_m_closestHitFraction = CD.prototype.sB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), An(e, t) + }, Object.defineProperty(CD.prototype, "m_closestHitFraction", { + get: CD.prototype.rB, + set: CD.prototype.sB + }), CD.prototype.__destroy__ = function() { + Mn(this.kB) + }, SD.prototype = Object.create(cD.prototype), SD.prototype.constructor = SD, SD.prototype.lB = SD, SD.mB = {}, n.btConvexShape = SD, SD.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), xn(e, t) + }, SD.prototype.getLocalScaling = function() { + return JR(Fn(this.kB), fD) + }, SD.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Ln(n, t, e) + }, SD.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gn(e, t) + }, SD.prototype.getMargin = function() { + return wn(this.kB) + }, SD.prototype.__destroy__ = function() { + Hn(this.kB) + }, jD.prototype = Object.create(cD.prototype), jD.prototype.constructor = jD, jD.prototype.lB = jD, jD.mB = {}, n.btCapsuleShape = jD, jD.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), En(e, t) + }, jD.prototype.getMargin = function() { + return Nn(this.kB) + }, jD.prototype.getUpAxis = function() { + return Un(this.kB) + }, jD.prototype.getRadius = function() { + return zn(this.kB) + }, jD.prototype.getHalfHeight = function() { + return qn(this.kB) + }, jD.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Kn(e, t) + }, jD.prototype.getLocalScaling = function() { + return JR(Qn(this.kB), fD) + }, jD.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Xn(n, t, e) + }, jD.prototype.__destroy__ = function() { + Zn(this.kB) + }, vD.prototype = Object.create(cD.prototype), vD.prototype.constructor = vD, vD.prototype.lB = vD, vD.mB = {}, n.btCylinderShape = vD, vD.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jn(e, t) + }, vD.prototype.getMargin = function() { + return $n(this.kB) + }, vD.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), to(e, t) + }, vD.prototype.getLocalScaling = function() { + return JR(eo(this.kB), fD) + }, vD.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), no(n, t, e) + }, vD.prototype.__destroy__ = function() { + oo(this.kB) + }, ID.prototype = Object.create(cD.prototype), ID.prototype.constructor = ID, ID.prototype.lB = ID, ID.mB = {}, n.btConeShape = ID, ID.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), io(e, t) + }, ID.prototype.getLocalScaling = function() { + return JR(ro(this.kB), fD) + }, ID.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), po(n, t, e) + }, ID.prototype.__destroy__ = function() { + so(this.kB) + }, RD.prototype = Object.create(ZR.prototype), RD.prototype.constructor = RD, RD.prototype.lB = RD, RD.mB = {}, n.btStridingMeshInterface = RD, RD.prototype.setScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), co(e, t) + }, RD.prototype.__destroy__ = function() { + ao(this.kB) + }, DD.prototype = Object.create(uD.prototype), DD.prototype.constructor = DD, DD.prototype.lB = DD, DD.mB = {}, n.btTriangleMeshShape = DD, DD.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lo(e, t) + }, DD.prototype.getLocalScaling = function() { + return JR(uo(this.kB), fD) + }, DD.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), bo(n, t, e) + }, DD.prototype.__destroy__ = function() { + mo(this.kB) + }, PD.prototype = Object.create(ZR.prototype), PD.prototype.constructor = PD, PD.prototype.lB = PD, PD.mB = {}, n.btPrimitiveManagerBase = PD, PD.prototype.is_trimesh = function() { + return !!yo(this.kB) + }, PD.prototype.get_primitive_count = function() { + return fo(this.kB) + }, PD.prototype.get_primitive_box = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ho(n, t, e) + }, PD.prototype.get_primitive_triangle = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Bo(n, t, e) + }, PD.prototype.__destroy__ = function() { + go(this.kB) + }, TD.prototype = Object.create(uD.prototype), TD.prototype.constructor = TD, TD.prototype.lB = TD, TD.mB = {}, n.btGImpactShapeInterface = TD, TD.prototype.updateBound = function() { + ko(this.kB) + }, TD.prototype.postUpdate = function() { + Co(this.kB) + }, TD.prototype.getShapeType = function() { + return So(this.kB) + }, TD.prototype.getName = function() { + return B(jo(this.kB)) + }, TD.prototype.getGImpactShapeType = function() { + return vo(this.kB) + }, TD.prototype.getPrimitiveManager = function() { + return JR(Io(this.kB), PD) + }, TD.prototype.getNumChildShapes = function() { + return Ro(this.kB) + }, TD.prototype.childrenHasTransform = function() { + return !!Do(this.kB) + }, TD.prototype.needsRetrieveTriangles = function() { + return !!Po(this.kB) + }, TD.prototype.needsRetrieveTetrahedrons = function() { + return !!To(this.kB) + }, TD.prototype.getBulletTriangle = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Oo(n, t, e) + }, TD.prototype.getBulletTetrahedron = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Wo(n, t, e) + }, TD.prototype.getChildShape = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Ao(e, t), cD) + }, TD.prototype.getChildTransform = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Mo(e, t), zD) + }, TD.prototype.setChildTransform = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), xo(n, t, e) + }, TD.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Fo(e, t) + }, TD.prototype.getLocalScaling = function() { + return JR(Lo(this.kB), fD) + }, TD.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Go(n, t, e) + }, TD.prototype.__destroy__ = function() { + wo(this.kB) + }, OD.prototype = Object.create(bD.prototype), OD.prototype.constructor = OD, OD.prototype.lB = OD, OD.mB = {}, n.btActivatingCollisionAlgorithm = OD, OD.prototype.__destroy__ = function() { + Ho(this.kB) + }, WD.prototype = Object.create(ZR.prototype), WD.prototype.constructor = WD, WD.prototype.lB = WD, WD.mB = {}, n.btDefaultCollisionConfiguration = WD, WD.prototype.__destroy__ = function() { + No(this.kB) + }, AD.prototype = Object.create(ZR.prototype), AD.prototype.constructor = AD, AD.prototype.lB = AD, AD.mB = {}, n.btDispatcher = AD, AD.prototype.getNumManifolds = function() { + return Uo(this.kB) + }, AD.prototype.getManifoldByIndexInternal = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(zo(e, t), VP) + }, AD.prototype.__destroy__ = function() { + qo(this.kB) + }, MD.prototype = Object.create(mD.prototype), MD.prototype.constructor = MD, MD.prototype.lB = MD, MD.mB = {}, n.btGeneric6DofConstraint = MD, MD.prototype.setLinearLowerLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Xo(e, t) + }, MD.prototype.setLinearUpperLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Zo(e, t) + }, MD.prototype.setAngularLowerLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Yo(e, t) + }, MD.prototype.setAngularUpperLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jo(e, t) + }, MD.prototype.getFrameOffsetA = function() { + return JR($o(this.kB), zD) + }, MD.prototype.enableFeedback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), t_(e, t) + }, MD.prototype.getBreakingImpulseThreshold = function() { + return e_(this.kB) + }, MD.prototype.setBreakingImpulseThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), n_(e, t) + }, MD.prototype.getParam = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), o_(n, t, e) + }, MD.prototype.setParam = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), __(o, t, e, n) + }, MD.prototype.__destroy__ = function() { + i_(this.kB) + }, xD.prototype = Object.create(yD.prototype), xD.prototype.constructor = xD, xD.prototype.lB = xD, xD.mB = {}, n.btDiscreteDynamicsWorld = xD, xD.prototype.setGravity = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), p_(e, t) + }, xD.prototype.getGravity = function() { + return JR(s_(this.kB), fD) + }, xD.prototype.addRigidBody = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? c_(o, t) : void 0 === n ? _emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_2(o, t, e) : a_(o, t, e, n) + }, xD.prototype.removeRigidBody = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), l_(e, t) + }, xD.prototype.addConstraint = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), void 0 === e ? u_(n, t) : b_(n, t, e) + }, xD.prototype.removeConstraint = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), m_(e, t) + }, xD.prototype.stepSimulation = function(t, e, n) { + var o = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? y_(o, t) : void 0 === n ? d_(o, t, e) : f_(o, t, e, n) + }, xD.prototype.setContactAddedCallback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), h_(e, t) + }, xD.prototype.setContactProcessedCallback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), B_(e, t) + }, xD.prototype.setContactDestroyedCallback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), g_(e, t) + }, xD.prototype.getDispatcher = function() { + return JR(k_(this.kB), AD) + }, xD.prototype.rayTest = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), C_(o, t, e, n) + }, xD.prototype.getPairCache = function() { + return JR(S_(this.kB), UP) + }, xD.prototype.getDispatchInfo = function() { + return JR(j_(this.kB), pT) + }, xD.prototype.addCollisionObject = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? v_(o, t) : void 0 === n ? I_(o, t, e) : R_(o, t, e, n) + }, xD.prototype.removeCollisionObject = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), D_(e, t) + }, xD.prototype.getBroadphase = function() { + return JR(P_(this.kB), qP) + }, xD.prototype.convexSweepTest = function(t, e, n, o, _) { + var i = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), T_(i, t, e, n, o, _) + }, xD.prototype.contactPairTest = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), O_(o, t, e, n) + }, xD.prototype.contactTest = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), W_(n, t, e) + }, xD.prototype.updateSingleAabb = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), A_(e, t) + }, xD.prototype.setDebugDrawer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), M_(e, t) + }, xD.prototype.getDebugDrawer = function() { + return JR(x_(this.kB), dD) + }, xD.prototype.debugDrawWorld = function() { + F_(this.kB) + }, xD.prototype.debugDrawObject = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), L_(o, t, e, n) + }, xD.prototype.addAction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), G_(e, t) + }, xD.prototype.removeAction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), w_(e, t) + }, xD.prototype.getSolverInfo = function() { + return JR(H_(this.kB), sT) + }, xD.prototype.setInternalTickCallback = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? V_(o, t) : void 0 === n ? E_(o, t, e) : N_(o, t, e, n) + }, xD.prototype.__destroy__ = function() { + U_(this.kB) + }, FD.prototype = Object.create(ZR.prototype), FD.prototype.constructor = FD, FD.prototype.lB = FD, FD.mB = {}, n.btVehicleRaycaster = FD, FD.prototype.castRay = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), z_(o, t, e, n) + }, FD.prototype.__destroy__ = function() { + q_(this.kB) + }, LD.prototype = Object.create(ZR.prototype), LD.prototype.constructor = LD, LD.prototype.lB = LD, LD.mB = {}, n.btActionInterface = LD, LD.prototype.updateAction = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), K_(n, t, e) + }, LD.prototype.__destroy__ = function() { + Q_(this.kB) + }, GD.prototype = Object.create(lD.prototype), GD.prototype.constructor = GD, GD.prototype.lB = GD, GD.mB = {}, n.btGhostObject = GD, GD.prototype.getNumOverlappingObjects = function() { + return Z_(this.kB) + }, GD.prototype.getOverlappingObject = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Y_(e, t), lD) + }, GD.prototype.setAnisotropicFriction = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), J_(n, t, e) + }, GD.prototype.getCollisionShape = function() { + return JR($_(this.kB), cD) + }, GD.prototype.setContactProcessingThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ti(e, t) + }, GD.prototype.setActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ei(e, t) + }, GD.prototype.forceActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ni(e, t) + }, GD.prototype.activate = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), void 0 === t ? oi(e) : _i(e, t) + }, GD.prototype.isActive = function() { + return !!ii(this.kB) + }, GD.prototype.isKinematicObject = function() { + return !!ri(this.kB) + }, GD.prototype.isStaticObject = function() { + return !!pi(this.kB) + }, GD.prototype.isStaticOrKinematicObject = function() { + return !!si(this.kB) + }, GD.prototype.getRestitution = function() { + return ci(this.kB) + }, GD.prototype.getFriction = function() { + return ai(this.kB) + }, GD.prototype.getRollingFriction = function() { + return li(this.kB) + }, GD.prototype.setRestitution = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ui(e, t) + }, GD.prototype.setFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bi(e, t) + }, GD.prototype.setRollingFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mi(e, t) + }, GD.prototype.getWorldTransform = function() { + return JR(yi(this.kB), zD) + }, GD.prototype.getCollisionFlags = function() { + return di(this.kB) + }, GD.prototype.setCollisionFlags = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), fi(e, t) + }, GD.prototype.setWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hi(e, t) + }, GD.prototype.setCollisionShape = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bi(e, t) + }, GD.prototype.setCcdMotionThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), gi(e, t) + }, GD.prototype.setCcdSweptSphereRadius = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ki(e, t) + }, GD.prototype.getUserIndex = function() { + return Ci(this.kB) + }, GD.prototype.setUserIndex = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Si(e, t) + }, GD.prototype.getUserPointer = function() { + return JR(ji(this.kB), HD) + }, GD.prototype.setUserPointer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), vi(e, t) + }, GD.prototype.getBroadphaseHandle = function() { + return JR(Ii(this.kB), XP) + }, GD.prototype.__destroy__ = function() { + Ri(this.kB) + }, wD.prototype = Object.create(ZR.prototype), wD.prototype.constructor = wD, wD.prototype.lB = wD, wD.mB = {}, n.btSoftBodySolver = wD, wD.prototype.__destroy__ = function() { + Di(this.kB) + }, HD.prototype = Object.create(ZR.prototype), HD.prototype.constructor = HD, HD.prototype.lB = HD, HD.mB = {}, n.VoidPtr = HD, HD.prototype.__destroy__ = function() { + Pi(this.kB) + }, VD.prototype = Object.create(dD.prototype), VD.prototype.constructor = VD, VD.prototype.lB = VD, VD.mB = {}, n.DebugDrawer = VD, VD.prototype.drawLine = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Oi(o, t, e, n) + }, VD.prototype.drawContactPoint = function(t, e, n, o, _) { + var i = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), Wi(i, t, e, n, o, _) + }, VD.prototype.reportErrorWarning = function(t) { + var e = this.kB; + _D(), t = t && "object" == typeof t ? t.kB : pD(t), Ai(e, t) + }, VD.prototype.draw3dText = function(t, e) { + var n = this.kB; + _D(), t && "object" == typeof t && (t = t.kB), e = e && "object" == typeof e ? e.kB : pD(e), Mi(n, t, e) + }, VD.prototype.setDebugMode = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), xi(e, t) + }, VD.prototype.getDebugMode = function() { + return Fi(this.kB) + }, VD.prototype.__destroy__ = function() { + Li(this.kB) + }, ED.prototype = Object.create(fD.prototype), ED.prototype.constructor = ED, ED.prototype.lB = ED, ED.mB = {}, n.btVector4 = ED, ED.prototype.w = ED.prototype.w = function() { + return Hi(this.kB) + }, ED.prototype.setValue = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), Vi(_, t, e, n, o) + }, ED.prototype.length = ED.prototype.length = function() { + return Ei(this.kB) + }, ED.prototype.x = ED.prototype.x = function() { + return Ni(this.kB) + }, ED.prototype.y = ED.prototype.y = function() { + return Ui(this.kB) + }, ED.prototype.z = ED.prototype.z = function() { + return zi(this.kB) + }, ED.prototype.setX = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qi(e, t) + }, ED.prototype.setY = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ki(e, t) + }, ED.prototype.setZ = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qi(e, t) + }, ED.prototype.normalize = ED.prototype.normalize = function() { + Xi(this.kB) + }, ED.prototype.rotate = ED.prototype.rotate = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), JR(Zi(n, t, e), fD) + }, ED.prototype.dot = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), Yi(e, t) + }, ED.prototype.op_mul = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Ji(e, t), fD) + }, ED.prototype.op_add = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR($i(e, t), fD) + }, ED.prototype.op_sub = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(tr(e, t), fD) + }, ED.prototype.__destroy__ = function() { + er(this.kB) + }, ND.prototype = Object.create(hD.prototype), ND.prototype.constructor = ND, ND.prototype.lB = ND, ND.mB = {}, n.btQuaternion = ND, ND.prototype.setValue = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), or(_, t, e, n, o) + }, ND.prototype.setEulerZYX = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), _r(o, t, e, n) + }, ND.prototype.setRotation = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ir(n, t, e) + }, ND.prototype.normalize = ND.prototype.normalize = function() { + rr(this.kB) + }, ND.prototype.length2 = function() { + return pr(this.kB) + }, ND.prototype.length = ND.prototype.length = function() { + return sr(this.kB) + }, ND.prototype.dot = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), cr(e, t) + }, ND.prototype.normalized = function() { + return JR(ar(this.kB), ND) + }, ND.prototype.getAxis = function() { + return JR(lr(this.kB), fD) + }, ND.prototype.inverse = ND.prototype.inverse = function() { + return JR(ur(this.kB), ND) + }, ND.prototype.getAngle = function() { + return br(this.kB) + }, ND.prototype.getAngleShortestPath = function() { + return mr(this.kB) + }, ND.prototype.angle = ND.prototype.angle = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), yr(e, t) + }, ND.prototype.angleShortestPath = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), dr(e, t) + }, ND.prototype.op_add = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(fr(e, t), ND) + }, ND.prototype.op_sub = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(hr(e, t), ND) + }, ND.prototype.op_mul = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Br(e, t), ND) + }, ND.prototype.op_mulq = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(gr(e, t), ND) + }, ND.prototype.op_div = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(kr(e, t), ND) + }, ND.prototype.x = ND.prototype.x = function() { + return Cr(this.kB) + }, ND.prototype.y = ND.prototype.y = function() { + return Sr(this.kB) + }, ND.prototype.z = ND.prototype.z = function() { + return jr(this.kB) + }, ND.prototype.w = ND.prototype.w = function() { + return vr(this.kB) + }, ND.prototype.setX = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ir(e, t) + }, ND.prototype.setY = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Rr(e, t) + }, ND.prototype.setZ = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Dr(e, t) + }, ND.prototype.setW = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Pr(e, t) + }, ND.prototype.__destroy__ = function() { + Tr(this.kB) + }, UD.prototype = Object.create(ZR.prototype), UD.prototype.constructor = UD, UD.prototype.lB = UD, UD.mB = {}, n.btMatrix3x3 = UD, UD.prototype.setEulerZYX = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Or(o, t, e, n) + }, UD.prototype.getRotation = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Wr(e, t) + }, UD.prototype.getRow = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Ar(e, t), fD) + }, UD.prototype.__destroy__ = function() { + Mr(this.kB) + }, zD.prototype = Object.create(ZR.prototype), zD.prototype.constructor = zD, zD.prototype.lB = zD, zD.mB = {}, n.btTransform = zD, zD.prototype.setIdentity = function() { + Lr(this.kB) + }, zD.prototype.setOrigin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gr(e, t) + }, zD.prototype.setRotation = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), wr(e, t) + }, zD.prototype.getOrigin = function() { + return JR(Hr(this.kB), fD) + }, zD.prototype.getRotation = function() { + return JR(Vr(this.kB), ND) + }, zD.prototype.getBasis = function() { + return JR(Er(this.kB), UD) + }, zD.prototype.setFromOpenGLMatrix = function(t) { + var e = this.kB; + _D(), "object" == typeof t && (t = sD(t)), Nr(e, t) + }, zD.prototype.inverse = zD.prototype.inverse = function() { + return JR(Ur(this.kB), zD) + }, zD.prototype.op_mul = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(zr(e, t), zD) + }, zD.prototype.__destroy__ = function() { + qr(this.kB) + }, qD.prototype = Object.create(BD.prototype), qD.prototype.constructor = qD, qD.prototype.lB = qD, qD.mB = {}, n.MotionState = qD, qD.prototype.getWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qr(e, t) + }, qD.prototype.setWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Xr(e, t) + }, qD.prototype.__destroy__ = function() { + Zr(this.kB) + }, KD.prototype = Object.create(BD.prototype), KD.prototype.constructor = KD, KD.prototype.lB = KD, KD.mB = {}, n.btDefaultMotionState = KD, KD.prototype.getWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), tp(e, t) + }, KD.prototype.setWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ep(e, t) + }, KD.prototype.get_m_graphicsWorldTrans = KD.prototype.lD = function() { + return JR(np(this.kB), zD) + }, KD.prototype.set_m_graphicsWorldTrans = KD.prototype.cG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), op(e, t) + }, Object.defineProperty(KD.prototype, "m_graphicsWorldTrans", { + get: KD.prototype.lD, + set: KD.prototype.cG + }), KD.prototype.__destroy__ = function() { + _p(this.kB) + }, QD.prototype = Object.create(ZR.prototype), QD.prototype.constructor = QD, QD.prototype.lB = QD, QD.mB = {}, n.btCollisionObjectWrapper = QD, QD.prototype.getWorldTransform = function() { + return JR(ip(this.kB), zD) + }, QD.prototype.getCollisionObject = function() { + return JR(rp(this.kB), lD) + }, QD.prototype.getCollisionShape = function() { + return JR(pp(this.kB), cD) + }, XD.prototype = Object.create(gD.prototype), XD.prototype.constructor = XD, XD.prototype.lB = XD, XD.mB = {}, n.ClosestRayResultCallback = XD, XD.prototype.hasHit = function() { + return !!cp(this.kB) + }, XD.prototype.get_m_rayFromWorld = XD.prototype.NB = function() { + return JR(ap(this.kB), fD) + }, XD.prototype.set_m_rayFromWorld = XD.prototype.XB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lp(e, t) + }, Object.defineProperty(XD.prototype, "m_rayFromWorld", { + get: XD.prototype.NB, + set: XD.prototype.XB + }), XD.prototype.get_m_rayToWorld = XD.prototype.OB = function() { + return JR(up(this.kB), fD) + }, XD.prototype.set_m_rayToWorld = XD.prototype.YB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bp(e, t) + }, Object.defineProperty(XD.prototype, "m_rayToWorld", { + get: XD.prototype.OB, + set: XD.prototype.YB + }), XD.prototype.get_m_hitNormalWorld = XD.prototype.xB = function() { + return JR(mp(this.kB), fD) + }, XD.prototype.set_m_hitNormalWorld = XD.prototype.EB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), yp(e, t) + }, Object.defineProperty(XD.prototype, "m_hitNormalWorld", { + get: XD.prototype.xB, + set: XD.prototype.EB + }), XD.prototype.get_m_hitPointWorld = XD.prototype.yB = function() { + return JR(dp(this.kB), fD) + }, XD.prototype.set_m_hitPointWorld = XD.prototype.FB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), fp(e, t) + }, Object.defineProperty(XD.prototype, "m_hitPointWorld", { + get: XD.prototype.yB, + set: XD.prototype.FB + }), XD.prototype.get_m_collisionFilterGroup = XD.prototype.nB = function() { + return hp(this.kB) + }, XD.prototype.set_m_collisionFilterGroup = XD.prototype.pB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bp(e, t) + }, Object.defineProperty(XD.prototype, "m_collisionFilterGroup", { + get: XD.prototype.nB, + set: XD.prototype.pB + }), XD.prototype.get_m_collisionFilterMask = XD.prototype.oB = function() { + return gp(this.kB) + }, XD.prototype.set_m_collisionFilterMask = XD.prototype.qB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kp(e, t) + }, Object.defineProperty(XD.prototype, "m_collisionFilterMask", { + get: XD.prototype.oB, + set: XD.prototype.qB + }), XD.prototype.get_m_closestHitFraction = XD.prototype.rB = function() { + return Cp(this.kB) + }, XD.prototype.set_m_closestHitFraction = XD.prototype.sB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Sp(e, t) + }, Object.defineProperty(XD.prototype, "m_closestHitFraction", { + get: XD.prototype.rB, + set: XD.prototype.sB + }), XD.prototype.get_m_collisionObject = XD.prototype.vB = function() { + return JR(jp(this.kB), lD) + }, XD.prototype.set_m_collisionObject = XD.prototype.CB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), vp(e, t) + }, Object.defineProperty(XD.prototype, "m_collisionObject", { + get: XD.prototype.vB, + set: XD.prototype.CB + }), XD.prototype.get_m_flags = XD.prototype.tB = function() { + return Ip(this.kB) + }, XD.prototype.set_m_flags = XD.prototype.uB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Rp(e, t) + }, Object.defineProperty(XD.prototype, "m_flags", { + get: XD.prototype.tB, + set: XD.prototype.uB + }), XD.prototype.__destroy__ = function() { + Dp(this.kB) + }, ZD.prototype = Object.create(ZR.prototype), ZD.prototype.constructor = ZD, ZD.prototype.lB = ZD, ZD.mB = {}, n.btConstCollisionObjectArray = ZD, ZD.prototype.size = ZD.prototype.size = function() { + return Pp(this.kB) + }, ZD.prototype.at = ZD.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Tp(e, t), lD) + }, ZD.prototype.__destroy__ = function() { + Op(this.kB) + }, YD.prototype = Object.create(ZR.prototype), YD.prototype.constructor = YD, YD.prototype.lB = YD, YD.mB = {}, n.btScalarArray = YD, YD.prototype.size = YD.prototype.size = function() { + return Wp(this.kB) + }, YD.prototype.at = YD.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), Ap(e, t) + }, YD.prototype.__destroy__ = function() { + Mp(this.kB) + }, JD.prototype = Object.create(gD.prototype), JD.prototype.constructor = JD, JD.prototype.lB = JD, JD.mB = {}, n.AllHitsRayResultCallback = JD, JD.prototype.hasHit = function() { + return !!Fp(this.kB) + }, JD.prototype.get_m_collisionObjects = JD.prototype.UC = function() { + return JR(Lp(this.kB), ZD) + }, JD.prototype.set_m_collisionObjects = JD.prototype.LF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gp(e, t) + }, Object.defineProperty(JD.prototype, "m_collisionObjects", { + get: JD.prototype.UC, + set: JD.prototype.LF + }), JD.prototype.get_m_rayFromWorld = JD.prototype.NB = function() { + return JR(wp(this.kB), fD) + }, JD.prototype.set_m_rayFromWorld = JD.prototype.XB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Hp(e, t) + }, Object.defineProperty(JD.prototype, "m_rayFromWorld", { + get: JD.prototype.NB, + set: JD.prototype.XB + }), JD.prototype.get_m_rayToWorld = JD.prototype.OB = function() { + return JR(Vp(this.kB), fD) + }, JD.prototype.set_m_rayToWorld = JD.prototype.YB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ep(e, t) + }, Object.defineProperty(JD.prototype, "m_rayToWorld", { + get: JD.prototype.OB, + set: JD.prototype.YB + }), JD.prototype.get_m_hitNormalWorld = JD.prototype.xB = function() { + return JR(Np(this.kB), dP) + }, JD.prototype.set_m_hitNormalWorld = JD.prototype.EB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Up(e, t) + }, Object.defineProperty(JD.prototype, "m_hitNormalWorld", { + get: JD.prototype.xB, + set: JD.prototype.EB + }), JD.prototype.get_m_hitPointWorld = JD.prototype.yB = function() { + return JR(zp(this.kB), dP) + }, JD.prototype.set_m_hitPointWorld = JD.prototype.FB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qp(e, t) + }, Object.defineProperty(JD.prototype, "m_hitPointWorld", { + get: JD.prototype.yB, + set: JD.prototype.FB + }), JD.prototype.get_m_hitFractions = JD.prototype.qD = function() { + return JR(Kp(this.kB), YD) + }, JD.prototype.set_m_hitFractions = JD.prototype.hG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qp(e, t) + }, Object.defineProperty(JD.prototype, "m_hitFractions", { + get: JD.prototype.qD, + set: JD.prototype.hG + }), JD.prototype.get_m_collisionFilterGroup = JD.prototype.nB = function() { + return Xp(this.kB) + }, JD.prototype.set_m_collisionFilterGroup = JD.prototype.pB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Zp(e, t) + }, Object.defineProperty(JD.prototype, "m_collisionFilterGroup", { + get: JD.prototype.nB, + set: JD.prototype.pB + }), JD.prototype.get_m_collisionFilterMask = JD.prototype.oB = function() { + return Yp(this.kB) + }, JD.prototype.set_m_collisionFilterMask = JD.prototype.qB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jp(e, t) + }, Object.defineProperty(JD.prototype, "m_collisionFilterMask", { + get: JD.prototype.oB, + set: JD.prototype.qB + }), JD.prototype.get_m_closestHitFraction = JD.prototype.rB = function() { + return $p(this.kB) + }, JD.prototype.set_m_closestHitFraction = JD.prototype.sB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ts(e, t) + }, Object.defineProperty(JD.prototype, "m_closestHitFraction", { + get: JD.prototype.rB, + set: JD.prototype.sB + }), JD.prototype.get_m_collisionObject = JD.prototype.vB = function() { + return JR(es(this.kB), lD) + }, JD.prototype.set_m_collisionObject = JD.prototype.CB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ns(e, t) + }, Object.defineProperty(JD.prototype, "m_collisionObject", { + get: JD.prototype.vB, + set: JD.prototype.CB + }), JD.prototype.get_m_flags = JD.prototype.tB = function() { + return os(this.kB) + }, JD.prototype.set_m_flags = JD.prototype.uB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _s(e, t) + }, Object.defineProperty(JD.prototype, "m_flags", { + get: JD.prototype.tB, + set: JD.prototype.uB + }), JD.prototype.__destroy__ = function() { + is(this.kB) + }, $D.prototype = Object.create(ZR.prototype), $D.prototype.constructor = $D, $D.prototype.lB = $D, $D.mB = {}, n.btManifoldPoint = $D, $D.prototype.getPositionWorldOnA = function() { + return JR(rs(this.kB), fD) + }, $D.prototype.getPositionWorldOnB = function() { + return JR(ps(this.kB), fD) + }, $D.prototype.getAppliedImpulse = function() { + return ss(this.kB) + }, $D.prototype.getDistance = function() { + return cs(this.kB) + }, $D.prototype.get_m_localPointA = $D.prototype.GD = function() { + return JR(as(this.kB), fD) + }, $D.prototype.set_m_localPointA = $D.prototype.xG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ls(e, t) + }, Object.defineProperty($D.prototype, "m_localPointA", { + get: $D.prototype.GD, + set: $D.prototype.xG + }), $D.prototype.get_m_localPointB = $D.prototype.HD = function() { + return JR(us(this.kB), fD) + }, $D.prototype.set_m_localPointB = $D.prototype.yG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bs(e, t) + }, Object.defineProperty($D.prototype, "m_localPointB", { + get: $D.prototype.HD, + set: $D.prototype.yG + }), $D.prototype.get_m_positionWorldOnB = $D.prototype.YD = function() { + return JR(ms(this.kB), fD) + }, $D.prototype.set_m_positionWorldOnB = $D.prototype.PG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ys(e, t) + }, Object.defineProperty($D.prototype, "m_positionWorldOnB", { + get: $D.prototype.YD, + set: $D.prototype.PG + }), $D.prototype.get_m_positionWorldOnA = $D.prototype.XD = function() { + return JR(ds(this.kB), fD) + }, $D.prototype.set_m_positionWorldOnA = $D.prototype.OG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), fs(e, t) + }, Object.defineProperty($D.prototype, "m_positionWorldOnA", { + get: $D.prototype.XD, + set: $D.prototype.OG + }), $D.prototype.get_m_normalWorldOnB = $D.prototype.SD = function() { + return JR(hs(this.kB), fD) + }, $D.prototype.set_m_normalWorldOnB = $D.prototype.JG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bs(e, t) + }, Object.defineProperty($D.prototype, "m_normalWorldOnB", { + get: $D.prototype.SD, + set: $D.prototype.JG + }), $D.prototype.get_m_userPersistentData = $D.prototype.zE = function() { + return gs(this.kB) + }, $D.prototype.set_m_userPersistentData = $D.prototype.rH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ks(e, t) + }, Object.defineProperty($D.prototype, "m_userPersistentData", { + get: $D.prototype.zE, + set: $D.prototype.rH + }), $D.prototype.__destroy__ = function() { + Cs(this.kB) + }, tP.prototype = Object.create(kD.prototype), tP.prototype.constructor = tP, tP.prototype.lB = tP, tP.mB = {}, n.ConcreteContactResultCallback = tP, tP.prototype.addSingleResult = function(t, e, n, o, _, i, r) { + var p = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), i && "object" == typeof i && (i = i.kB), r && "object" == typeof r && (r = r.kB), js(p, t, e, n, o, _, i, r) + }, tP.prototype.__destroy__ = function() { + vs(this.kB) + }, eP.prototype = Object.create(ZR.prototype), eP.prototype.constructor = eP, eP.prototype.lB = eP, eP.mB = {}, n.LocalShapeInfo = eP, eP.prototype.get_m_shapePart = eP.prototype.gE = function() { + return Is(this.kB) + }, eP.prototype.set_m_shapePart = eP.prototype.ZG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Rs(e, t) + }, Object.defineProperty(eP.prototype, "m_shapePart", { + get: eP.prototype.gE, + set: eP.prototype.ZG + }), eP.prototype.get_m_triangleIndex = eP.prototype.vE = function() { + return Ds(this.kB) + }, eP.prototype.set_m_triangleIndex = eP.prototype.nH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ps(e, t) + }, Object.defineProperty(eP.prototype, "m_triangleIndex", { + get: eP.prototype.vE, + set: eP.prototype.nH + }), eP.prototype.__destroy__ = function() { + Ts(this.kB) + }, nP.prototype = Object.create(ZR.prototype), nP.prototype.constructor = nP, nP.prototype.lB = nP, nP.mB = {}, n.LocalConvexResult = nP, nP.prototype.get_m_hitCollisionObject = nP.prototype.LB = function() { + return JR(Ws(this.kB), lD) + }, nP.prototype.set_m_hitCollisionObject = nP.prototype.VB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), As(e, t) + }, Object.defineProperty(nP.prototype, "m_hitCollisionObject", { + get: nP.prototype.LB, + set: nP.prototype.VB + }), nP.prototype.get_m_localShapeInfo = nP.prototype.ID = function() { + return JR(Ms(this.kB), eP) + }, nP.prototype.set_m_localShapeInfo = nP.prototype.zG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), xs(e, t) + }, Object.defineProperty(nP.prototype, "m_localShapeInfo", { + get: nP.prototype.ID, + set: nP.prototype.zG + }), nP.prototype.get_m_hitNormalLocal = nP.prototype.sD = function() { + return JR(Fs(this.kB), fD) + }, nP.prototype.set_m_hitNormalLocal = nP.prototype.jG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ls(e, t) + }, Object.defineProperty(nP.prototype, "m_hitNormalLocal", { + get: nP.prototype.sD, + set: nP.prototype.jG + }), nP.prototype.get_m_hitPointLocal = nP.prototype.uD = function() { + return JR(Gs(this.kB), fD) + }, nP.prototype.set_m_hitPointLocal = nP.prototype.lG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ws(e, t) + }, Object.defineProperty(nP.prototype, "m_hitPointLocal", { + get: nP.prototype.uD, + set: nP.prototype.lG + }), nP.prototype.get_m_hitFraction = nP.prototype.pD = function() { + return Hs(this.kB) + }, nP.prototype.set_m_hitFraction = nP.prototype.gG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Vs(e, t) + }, Object.defineProperty(nP.prototype, "m_hitFraction", { + get: nP.prototype.pD, + set: nP.prototype.gG + }), nP.prototype.__destroy__ = function() { + Es(this.kB) + }, oP.prototype = Object.create(CD.prototype), oP.prototype.constructor = oP, oP.prototype.lB = oP, oP.mB = {}, n.ClosestConvexResultCallback = oP, oP.prototype.hasHit = function() { + return !!Us(this.kB) + }, oP.prototype.get_m_hitCollisionObject = oP.prototype.LB = function() { + return JR(zs(this.kB), lD) + }, oP.prototype.set_m_hitCollisionObject = oP.prototype.VB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qs(e, t) + }, Object.defineProperty(oP.prototype, "m_hitCollisionObject", { + get: oP.prototype.LB, + set: oP.prototype.VB + }), oP.prototype.get_m_convexFromWorld = oP.prototype.ZC = function() { + return JR(Ks(this.kB), fD) + }, oP.prototype.set_m_convexFromWorld = oP.prototype.QF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qs(e, t) + }, Object.defineProperty(oP.prototype, "m_convexFromWorld", { + get: oP.prototype.ZC, + set: oP.prototype.QF + }), oP.prototype.get_m_convexToWorld = oP.prototype.$C = function() { + return JR(Xs(this.kB), fD) + }, oP.prototype.set_m_convexToWorld = oP.prototype.RF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Zs(e, t) + }, Object.defineProperty(oP.prototype, "m_convexToWorld", { + get: oP.prototype.$C, + set: oP.prototype.RF + }), oP.prototype.get_m_hitNormalWorld = oP.prototype.xB = function() { + return JR(Ys(this.kB), fD) + }, oP.prototype.set_m_hitNormalWorld = oP.prototype.EB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Js(e, t) + }, Object.defineProperty(oP.prototype, "m_hitNormalWorld", { + get: oP.prototype.xB, + set: oP.prototype.EB + }), oP.prototype.get_m_hitPointWorld = oP.prototype.yB = function() { + return JR($s(this.kB), fD) + }, oP.prototype.set_m_hitPointWorld = oP.prototype.FB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), tc(e, t) + }, Object.defineProperty(oP.prototype, "m_hitPointWorld", { + get: oP.prototype.yB, + set: oP.prototype.FB + }), oP.prototype.get_m_collisionFilterGroup = oP.prototype.nB = function() { + return ec(this.kB) + }, oP.prototype.set_m_collisionFilterGroup = oP.prototype.pB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), nc(e, t) + }, Object.defineProperty(oP.prototype, "m_collisionFilterGroup", { + get: oP.prototype.nB, + set: oP.prototype.pB + }), oP.prototype.get_m_collisionFilterMask = oP.prototype.oB = function() { + return oc(this.kB) + }, oP.prototype.set_m_collisionFilterMask = oP.prototype.qB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _c(e, t) + }, Object.defineProperty(oP.prototype, "m_collisionFilterMask", { + get: oP.prototype.oB, + set: oP.prototype.qB + }), oP.prototype.get_m_closestHitFraction = oP.prototype.rB = function() { + return ic(this.kB) + }, oP.prototype.set_m_closestHitFraction = oP.prototype.sB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rc(e, t) + }, Object.defineProperty(oP.prototype, "m_closestHitFraction", { + get: oP.prototype.rB, + set: oP.prototype.sB + }), oP.prototype.__destroy__ = function() { + pc(this.kB) + }, _P.prototype = Object.create(SD.prototype), _P.prototype.constructor = _P, _P.prototype.lB = _P, _P.mB = {}, n.btConvexTriangleMeshShape = _P, _P.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ac(e, t) + }, _P.prototype.getLocalScaling = function() { + return JR(lc(this.kB), fD) + }, _P.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), uc(n, t, e) + }, _P.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bc(e, t) + }, _P.prototype.getMargin = function() { + return mc(this.kB) + }, _P.prototype.__destroy__ = function() { + yc(this.kB) + }, iP.prototype = Object.create(cD.prototype), iP.prototype.constructor = iP, iP.prototype.lB = iP, iP.mB = {}, n.btBoxShape = iP, iP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), fc(e, t) + }, iP.prototype.getMargin = function() { + return hc(this.kB) + }, iP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bc(e, t) + }, iP.prototype.getLocalScaling = function() { + return JR(gc(this.kB), fD) + }, iP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), kc(n, t, e) + }, iP.prototype.__destroy__ = function() { + Cc(this.kB) + }, rP.prototype = Object.create(jD.prototype), rP.prototype.constructor = rP, rP.prototype.lB = rP, rP.mB = {}, n.btCapsuleShapeX = rP, rP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), jc(e, t) + }, rP.prototype.getMargin = function() { + return vc(this.kB) + }, rP.prototype.getUpAxis = function() { + return Ic(this.kB) + }, rP.prototype.getRadius = function() { + return Rc(this.kB) + }, rP.prototype.getHalfHeight = function() { + return Dc(this.kB) + }, rP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Pc(e, t) + }, rP.prototype.getLocalScaling = function() { + return JR(Tc(this.kB), fD) + }, rP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Oc(n, t, e) + }, rP.prototype.__destroy__ = function() { + Wc(this.kB) + }, pP.prototype = Object.create(jD.prototype), pP.prototype.constructor = pP, pP.prototype.lB = pP, pP.mB = {}, n.btCapsuleShapeZ = pP, pP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Mc(e, t) + }, pP.prototype.getMargin = function() { + return xc(this.kB) + }, pP.prototype.getUpAxis = function() { + return Fc(this.kB) + }, pP.prototype.getRadius = function() { + return Lc(this.kB) + }, pP.prototype.getHalfHeight = function() { + return Gc(this.kB) + }, pP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), wc(e, t) + }, pP.prototype.getLocalScaling = function() { + return JR(Hc(this.kB), fD) + }, pP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Vc(n, t, e) + }, pP.prototype.__destroy__ = function() { + Ec(this.kB) + }, sP.prototype = Object.create(vD.prototype), sP.prototype.constructor = sP, sP.prototype.lB = sP, sP.mB = {}, n.btCylinderShapeX = sP, sP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Uc(e, t) + }, sP.prototype.getMargin = function() { + return zc(this.kB) + }, sP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qc(e, t) + }, sP.prototype.getLocalScaling = function() { + return JR(Kc(this.kB), fD) + }, sP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Qc(n, t, e) + }, sP.prototype.__destroy__ = function() { + Xc(this.kB) + }, cP.prototype = Object.create(vD.prototype), cP.prototype.constructor = cP, cP.prototype.lB = cP, cP.mB = {}, n.btCylinderShapeZ = cP, cP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Yc(e, t) + }, cP.prototype.getMargin = function() { + return Jc(this.kB) + }, cP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), $c(e, t) + }, cP.prototype.getLocalScaling = function() { + return JR(ta(this.kB), fD) + }, cP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ea(n, t, e) + }, cP.prototype.__destroy__ = function() { + na(this.kB) + }, aP.prototype = Object.create(cD.prototype), aP.prototype.constructor = aP, aP.prototype.lB = aP, aP.mB = {}, n.btSphereShape = aP, aP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _a(e, t) + }, aP.prototype.getMargin = function() { + return ia(this.kB) + }, aP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ra(e, t) + }, aP.prototype.getLocalScaling = function() { + return JR(pa(this.kB), fD) + }, aP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), sa(n, t, e) + }, aP.prototype.__destroy__ = function() { + ca(this.kB) + }, lP.prototype = Object.create(cD.prototype), lP.prototype.constructor = lP, lP.prototype.lB = lP, lP.mB = {}, n.btMultiSphereShape = lP, lP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), la(e, t) + }, lP.prototype.getLocalScaling = function() { + return JR(ua(this.kB), fD) + }, lP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ba(n, t, e) + }, lP.prototype.__destroy__ = function() { + ma(this.kB) + }, uP.prototype = Object.create(ID.prototype), uP.prototype.constructor = uP, uP.prototype.lB = uP, uP.mB = {}, n.btConeShapeX = uP, uP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), da(e, t) + }, uP.prototype.getLocalScaling = function() { + return JR(fa(this.kB), fD) + }, uP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ha(n, t, e) + }, uP.prototype.__destroy__ = function() { + Ba(this.kB) + }, bP.prototype = Object.create(ID.prototype), bP.prototype.constructor = bP, bP.prototype.lB = bP, bP.mB = {}, n.btConeShapeZ = bP, bP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ka(e, t) + }, bP.prototype.getLocalScaling = function() { + return JR(Ca(this.kB), fD) + }, bP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Sa(n, t, e) + }, bP.prototype.__destroy__ = function() { + ja(this.kB) + }, mP.prototype = Object.create(ZR.prototype), mP.prototype.constructor = mP, mP.prototype.lB = mP, mP.mB = {}, n.btIntArray = mP, mP.prototype.size = mP.prototype.size = function() { + return va(this.kB) + }, mP.prototype.at = mP.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), Ia(e, t) + }, mP.prototype.__destroy__ = function() { + Ra(this.kB) + }, yP.prototype = Object.create(ZR.prototype), yP.prototype.constructor = yP, yP.prototype.lB = yP, yP.mB = {}, n.btFace = yP, yP.prototype.get_m_indices = yP.prototype.xD = function() { + return JR(Da(this.kB), mP) + }, yP.prototype.set_m_indices = yP.prototype.oG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Pa(e, t) + }, Object.defineProperty(yP.prototype, "m_indices", { + get: yP.prototype.xD, + set: yP.prototype.oG + }), yP.prototype.get_m_plane = yP.prototype.WD = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), Ta(e, t) + }, yP.prototype.set_m_plane = yP.prototype.NG = function(t, e) { + var n = this.kB; + _D(), t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Oa(n, t, e) + }, Object.defineProperty(yP.prototype, "m_plane", { + get: yP.prototype.WD, + set: yP.prototype.NG + }), yP.prototype.__destroy__ = function() { + Wa(this.kB) + }, dP.prototype = Object.create(ZR.prototype), dP.prototype.constructor = dP, dP.prototype.lB = dP, dP.mB = {}, n.btVector3Array = dP, dP.prototype.size = dP.prototype.size = function() { + return Aa(this.kB) + }, dP.prototype.at = dP.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Ma(e, t), fD) + }, dP.prototype.__destroy__ = function() { + xa(this.kB) + }, fP.prototype = Object.create(ZR.prototype), fP.prototype.constructor = fP, fP.prototype.lB = fP, fP.mB = {}, n.btFaceArray = fP, fP.prototype.size = fP.prototype.size = function() { + return Fa(this.kB) + }, fP.prototype.at = fP.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(La(e, t), yP) + }, fP.prototype.__destroy__ = function() { + Ga(this.kB) + }, hP.prototype = Object.create(ZR.prototype), hP.prototype.constructor = hP, hP.prototype.lB = hP, hP.mB = {}, n.btConvexPolyhedron = hP, hP.prototype.get_m_vertices = hP.prototype.BE = function() { + return JR(wa(this.kB), dP) + }, hP.prototype.set_m_vertices = hP.prototype.tH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ha(e, t) + }, Object.defineProperty(hP.prototype, "m_vertices", { + get: hP.prototype.BE, + set: hP.prototype.tH + }), hP.prototype.get_m_faces = hP.prototype.KB = function() { + return JR(Va(this.kB), fP) + }, hP.prototype.set_m_faces = hP.prototype.UB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ea(e, t) + }, Object.defineProperty(hP.prototype, "m_faces", { + get: hP.prototype.KB, + set: hP.prototype.UB + }), hP.prototype.__destroy__ = function() { + Na(this.kB) + }, BP.prototype = Object.create(cD.prototype), BP.prototype.constructor = BP, BP.prototype.lB = BP, BP.mB = {}, n.btConvexHullShape = BP, BP.prototype.addPoint = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), void 0 === e ? Ka(n, t) : Qa(n, t, e) + }, BP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Xa(e, t) + }, BP.prototype.getMargin = function() { + return Za(this.kB) + }, BP.prototype.getNumVertices = function() { + return Ya(this.kB) + }, BP.prototype.initializePolyhedralFeatures = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), !!Ja(e, t) + }, BP.prototype.recalcLocalAabb = function() { + $a(this.kB) + }, BP.prototype.getConvexPolyhedron = function() { + return JR(tl(this.kB), hP) + }, BP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), el(e, t) + }, BP.prototype.getLocalScaling = function() { + return JR(nl(this.kB), fD) + }, BP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ol(n, t, e) + }, BP.prototype.__destroy__ = function() { + _l(this.kB) + }, gP.prototype = Object.create(ZR.prototype), gP.prototype.constructor = gP, gP.prototype.lB = gP, gP.mB = {}, n.btShapeHull = gP, gP.prototype.buildHull = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), !!rl(e, t) + }, gP.prototype.numVertices = function() { + return pl(this.kB) + }, gP.prototype.getVertexPointer = function() { + return JR(sl(this.kB), fD) + }, gP.prototype.__destroy__ = function() { + cl(this.kB) + }, kP.prototype = Object.create(cD.prototype), kP.prototype.constructor = kP, kP.prototype.lB = kP, kP.mB = {}, n.btCompoundShape = kP, kP.prototype.addChildShape = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ul(n, t, e) + }, kP.prototype.removeChildShape = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bl(e, t) + }, kP.prototype.removeChildShapeByIndex = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ml(e, t) + }, kP.prototype.getNumChildShapes = function() { + return yl(this.kB) + }, kP.prototype.getChildShape = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(dl(e, t), cD) + }, kP.prototype.updateChildTransform = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === n ? fl(o, t, e) : hl(o, t, e, n) + }, kP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bl(e, t) + }, kP.prototype.getMargin = function() { + return gl(this.kB) + }, kP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kl(e, t) + }, kP.prototype.getLocalScaling = function() { + return JR(Cl(this.kB), fD) + }, kP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Sl(n, t, e) + }, kP.prototype.__destroy__ = function() { + jl(this.kB) + }, CP.prototype = Object.create(ZR.prototype), CP.prototype.constructor = CP, CP.prototype.lB = CP, CP.mB = {}, n.btIndexedMesh = CP, CP.prototype.get_m_numTriangles = CP.prototype.UD = function() { + return vl(this.kB) + }, CP.prototype.set_m_numTriangles = CP.prototype.LG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Il(e, t) + }, Object.defineProperty(CP.prototype, "m_numTriangles", { + get: CP.prototype.UD, + set: CP.prototype.LG + }), CP.prototype.__destroy__ = function() { + Rl(this.kB) + }, SP.prototype = Object.create(ZR.prototype), SP.prototype.constructor = SP, SP.prototype.lB = SP, SP.mB = {}, n.btIndexedMeshArray = SP, SP.prototype.size = SP.prototype.size = function() { + return Dl(this.kB) + }, SP.prototype.at = SP.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Pl(e, t), CP) + }, SP.prototype.__destroy__ = function() { + Tl(this.kB) + }, jP.prototype = Object.create(RD.prototype), jP.prototype.constructor = jP, jP.prototype.lB = jP, jP.mB = {}, n.btTriangleMesh = jP, jP.prototype.addTriangle = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), void 0 === o ? Ml(_, t, e, n) : xl(_, t, e, n, o) + }, jP.prototype.findOrAddVertex = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Fl(n, t, e) + }, jP.prototype.addIndex = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ll(e, t) + }, jP.prototype.getIndexedMeshArray = function() { + return JR(Gl(this.kB), SP) + }, jP.prototype.setScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), wl(e, t) + }, jP.prototype.__destroy__ = function() { + Hl(this.kB) + }, vP.prototype = Object.create(uD.prototype), vP.prototype.constructor = vP, vP.prototype.lB = vP, vP.mB = {}, n.btEmptyShape = vP, vP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), El(e, t) + }, vP.prototype.getLocalScaling = function() { + return JR(Nl(this.kB), fD) + }, vP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Ul(n, t, e) + }, vP.prototype.__destroy__ = function() { + zl(this.kB) + }, IP.prototype = Object.create(uD.prototype), IP.prototype.constructor = IP, IP.prototype.lB = IP, IP.mB = {}, n.btStaticPlaneShape = IP, IP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Kl(e, t) + }, IP.prototype.getLocalScaling = function() { + return JR(Ql(this.kB), fD) + }, IP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Xl(n, t, e) + }, IP.prototype.__destroy__ = function() { + Zl(this.kB) + }, RP.prototype = Object.create(DD.prototype), RP.prototype.constructor = RP, RP.prototype.lB = RP, RP.mB = {}, n.btBvhTriangleMeshShape = RP, RP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), $l(e, t) + }, RP.prototype.getLocalScaling = function() { + return JR(tu(this.kB), fD) + }, RP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), eu(n, t, e) + }, RP.prototype.__destroy__ = function() { + nu(this.kB) + }, DP.prototype = Object.create(uD.prototype), DP.prototype.constructor = DP, DP.prototype.lB = DP, DP.mB = {}, n.btHeightfieldTerrainShape = DP, DP.prototype.setMargin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _u(e, t) + }, DP.prototype.getMargin = function() { + return iu(this.kB) + }, DP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ru(e, t) + }, DP.prototype.getLocalScaling = function() { + return JR(pu(this.kB), fD) + }, DP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), su(n, t, e) + }, DP.prototype.__destroy__ = function() { + cu(this.kB) + }, PP.prototype = Object.create(ZR.prototype), PP.prototype.constructor = PP, PP.prototype.lB = PP, PP.mB = {}, n.btAABB = PP, PP.prototype.invalidate = function() { + lu(this.kB) + }, PP.prototype.increment_margin = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uu(e, t) + }, PP.prototype.copy_with_margin = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), bu(n, t, e) + }, PP.prototype.__destroy__ = function() { + mu(this.kB) + }, TP.prototype = Object.create(ZR.prototype), TP.prototype.constructor = TP, TP.prototype.lB = TP, TP.mB = {}, n.btPrimitiveTriangle = TP, TP.prototype.__destroy__ = function() { + du(this.kB) + }, OP.prototype = Object.create(ZR.prototype), OP.prototype.constructor = OP, OP.prototype.lB = OP, OP.mB = {}, n.btTriangleShapeEx = OP, OP.prototype.getAabb = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), hu(o, t, e, n) + }, OP.prototype.applyTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bu(e, t) + }, OP.prototype.buildTriPlane = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), gu(e, t) + }, OP.prototype.__destroy__ = function() { + ku(this.kB) + }, WP.prototype = Object.create(ZR.prototype), WP.prototype.constructor = WP, WP.prototype.lB = WP, WP.mB = {}, n.btTetrahedronShapeEx = WP, WP.prototype.setVertices = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), Su(_, t, e, n, o) + }, WP.prototype.__destroy__ = function() { + ju(this.kB) + }, AP.prototype = Object.create(PD.prototype), AP.prototype.constructor = AP, AP.prototype.lB = AP, AP.mB = {}, n.CompoundPrimitiveManager = AP, AP.prototype.get_primitive_count = function() { + return vu(this.kB) + }, AP.prototype.get_primitive_box = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Iu(n, t, e) + }, AP.prototype.get_primitive_triangle = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Ru(n, t, e) + }, AP.prototype.is_trimesh = function() { + return !!Du(this.kB) + }, AP.prototype.get_m_compoundShape = AP.prototype.VC = function() { + return JR(Pu(this.kB), MP) + }, AP.prototype.set_m_compoundShape = AP.prototype.MF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Tu(e, t) + }, Object.defineProperty(AP.prototype, "m_compoundShape", { + get: AP.prototype.VC, + set: AP.prototype.MF + }), AP.prototype.__destroy__ = function() { + Ou(this.kB) + }, MP.prototype = Object.create(TD.prototype), MP.prototype.constructor = MP, MP.prototype.lB = MP, MP.mB = {}, n.btGImpactCompoundShape = MP, MP.prototype.childrenHasTransform = function() { + return !!Mu(this.kB) + }, MP.prototype.getPrimitiveManager = function() { + return JR(xu(this.kB), PD) + }, MP.prototype.getCompoundPrimitiveManager = function() { + return JR(Fu(this.kB), AP) + }, MP.prototype.getNumChildShapes = function() { + return Lu(this.kB) + }, MP.prototype.addChildShape = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Gu(n, t, e) + }, MP.prototype.getChildShape = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(wu(e, t), cD) + }, MP.prototype.getChildAabb = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), Hu(_, t, e, n, o) + }, MP.prototype.getChildTransform = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Vu(e, t), zD) + }, MP.prototype.setChildTransform = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Eu(n, t, e) + }, MP.prototype.calculateLocalInertia = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Nu(n, t, e) + }, MP.prototype.getName = function() { + return B(Uu(this.kB)) + }, MP.prototype.getGImpactShapeType = function() { + return zu(this.kB) + }, MP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qu(e, t) + }, MP.prototype.getLocalScaling = function() { + return JR(Ku(this.kB), fD) + }, MP.prototype.updateBound = function() { + Qu(this.kB) + }, MP.prototype.postUpdate = function() { + Xu(this.kB) + }, MP.prototype.getShapeType = function() { + return Zu(this.kB) + }, MP.prototype.needsRetrieveTriangles = function() { + return !!Yu(this.kB) + }, MP.prototype.needsRetrieveTetrahedrons = function() { + return !!Ju(this.kB) + }, MP.prototype.getBulletTriangle = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), $u(n, t, e) + }, MP.prototype.getBulletTetrahedron = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), tb(n, t, e) + }, MP.prototype.__destroy__ = function() { + eb(this.kB) + }, xP.prototype = Object.create(PD.prototype), xP.prototype.constructor = xP, xP.prototype.lB = xP, xP.mB = {}, n.TrimeshPrimitiveManager = xP, xP.prototype.lock = xP.prototype.lock = function() { + _b(this.kB) + }, xP.prototype.unlock = xP.prototype.unlock = function() { + ib(this.kB) + }, xP.prototype.is_trimesh = function() { + return !!rb(this.kB) + }, xP.prototype.get_vertex_count = function() { + return pb(this.kB) + }, xP.prototype.get_indices = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), sb(_, t, e, n, o) + }, xP.prototype.get_vertex = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), cb(n, t, e) + }, xP.prototype.get_bullet_triangle = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), ab(n, t, e) + }, xP.prototype.get_m_margin = xP.prototype.LD = function() { + return lb(this.kB) + }, xP.prototype.set_m_margin = xP.prototype.CG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ub(e, t) + }, Object.defineProperty(xP.prototype, "m_margin", { + get: xP.prototype.LD, + set: xP.prototype.CG + }), xP.prototype.get_m_meshInterface = xP.prototype.OD = function() { + return JR(bb(this.kB), RD) + }, xP.prototype.set_m_meshInterface = xP.prototype.FG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mb(e, t) + }, Object.defineProperty(xP.prototype, "m_meshInterface", { + get: xP.prototype.OD, + set: xP.prototype.FG + }), xP.prototype.get_m_part = xP.prototype.VD = function() { + return yb(this.kB) + }, xP.prototype.set_m_part = xP.prototype.MG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), db(e, t) + }, Object.defineProperty(xP.prototype, "m_part", { + get: xP.prototype.VD, + set: xP.prototype.MG + }), xP.prototype.get_m_lock_count = xP.prototype.JD = function() { + return fb(this.kB) + }, xP.prototype.set_m_lock_count = xP.prototype.AG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hb(e, t) + }, Object.defineProperty(xP.prototype, "m_lock_count", { + get: xP.prototype.JD, + set: xP.prototype.AG + }), xP.prototype.get_numverts = xP.prototype.LE = function() { + return Bb(this.kB) + }, xP.prototype.set_numverts = xP.prototype.DH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), gb(e, t) + }, Object.defineProperty(xP.prototype, "numverts", { + get: xP.prototype.LE, + set: xP.prototype.DH + }), xP.prototype.get_type = xP.prototype.PE = function() { + return kb(this.kB) + }, xP.prototype.set_type = xP.prototype.HH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Cb(e, t) + }, Object.defineProperty(xP.prototype, "type", { + get: xP.prototype.PE, + set: xP.prototype.HH + }), xP.prototype.get_stride = xP.prototype.NE = function() { + return Sb(this.kB) + }, xP.prototype.set_stride = xP.prototype.FH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), jb(e, t) + }, Object.defineProperty(xP.prototype, "stride", { + get: xP.prototype.NE, + set: xP.prototype.FH + }), xP.prototype.get_indexstride = xP.prototype.gC = function() { + return vb(this.kB) + }, xP.prototype.set_indexstride = xP.prototype.YE = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ib(e, t) + }, Object.defineProperty(xP.prototype, "indexstride", { + get: xP.prototype.gC, + set: xP.prototype.YE + }), xP.prototype.get_numfaces = xP.prototype.KE = function() { + return Rb(this.kB) + }, xP.prototype.set_numfaces = xP.prototype.CH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Db(e, t) + }, Object.defineProperty(xP.prototype, "numfaces", { + get: xP.prototype.KE, + set: xP.prototype.CH + }), xP.prototype.get_indicestype = xP.prototype.hC = function() { + return Pb(this.kB) + }, xP.prototype.set_indicestype = xP.prototype.ZE = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Tb(e, t) + }, Object.defineProperty(xP.prototype, "indicestype", { + get: xP.prototype.hC, + set: xP.prototype.ZE + }), xP.prototype.__destroy__ = function() { + Ob(this.kB) + }, FP.prototype = Object.create(TD.prototype), FP.prototype.constructor = FP, FP.prototype.lB = FP, FP.mB = {}, n.btGImpactMeshShapePart = FP, FP.prototype.getTrimeshPrimitiveManager = function() { + return JR(Ab(this.kB), xP) + }, FP.prototype.getVertexCount = function() { + return Mb(this.kB) + }, FP.prototype.getVertex = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), xb(n, t, e) + }, FP.prototype.getPart = function() { + return Fb(this.kB) + }, FP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Lb(e, t) + }, FP.prototype.getLocalScaling = function() { + return JR(Gb(this.kB), fD) + }, FP.prototype.updateBound = function() { + wb(this.kB) + }, FP.prototype.postUpdate = function() { + Hb(this.kB) + }, FP.prototype.getShapeType = function() { + return Vb(this.kB) + }, FP.prototype.needsRetrieveTriangles = function() { + return !!Eb(this.kB) + }, FP.prototype.needsRetrieveTetrahedrons = function() { + return !!Nb(this.kB) + }, FP.prototype.getBulletTriangle = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Ub(n, t, e) + }, FP.prototype.getBulletTetrahedron = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), zb(n, t, e) + }, FP.prototype.__destroy__ = function() { + qb(this.kB) + }, LP.prototype = Object.create(TD.prototype), LP.prototype.constructor = LP, LP.prototype.lB = LP, LP.mB = {}, n.btGImpactMeshShape = LP, LP.prototype.getMeshInterface = function() { + return JR(Qb(this.kB), RD) + }, LP.prototype.getMeshPartCount = function() { + return Xb(this.kB) + }, LP.prototype.getMeshPart = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Zb(e, t), FP) + }, LP.prototype.calculateSerializeBufferSize = function() { + return Yb(this.kB) + }, LP.prototype.setLocalScaling = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jb(e, t) + }, LP.prototype.getLocalScaling = function() { + return JR($b(this.kB), fD) + }, LP.prototype.updateBound = function() { + tm(this.kB) + }, LP.prototype.postUpdate = function() { + em(this.kB) + }, LP.prototype.getShapeType = function() { + return nm(this.kB) + }, LP.prototype.needsRetrieveTriangles = function() { + return !!om(this.kB) + }, LP.prototype.needsRetrieveTetrahedrons = function() { + return !!_m(this.kB) + }, LP.prototype.getBulletTriangle = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), im(n, t, e) + }, LP.prototype.getBulletTetrahedron = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), rm(n, t, e) + }, LP.prototype.__destroy__ = function() { + pm(this.kB) + }, GP.prototype = Object.create(ZR.prototype), GP.prototype.constructor = GP, GP.prototype.lB = GP, GP.mB = {}, n.btCollisionAlgorithmConstructionInfo = GP, GP.prototype.get_m_dispatcher1 = GP.prototype.eD = function() { + return JR(am(this.kB), AD) + }, GP.prototype.set_m_dispatcher1 = GP.prototype.WF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lm(e, t) + }, Object.defineProperty(GP.prototype, "m_dispatcher1", { + get: GP.prototype.eD, + set: GP.prototype.WF + }), GP.prototype.get_m_manifold = GP.prototype.KD = function() { + return JR(um(this.kB), VP) + }, GP.prototype.set_m_manifold = GP.prototype.BG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bm(e, t) + }, Object.defineProperty(GP.prototype, "m_manifold", { + get: GP.prototype.KD, + set: GP.prototype.BG + }), GP.prototype.__destroy__ = function() { + mm(this.kB) + }, wP.prototype = Object.create(OD.prototype), wP.prototype.constructor = wP, wP.prototype.lB = wP, wP.mB = {}, n.btGImpactCollisionAlgorithm = wP, wP.prototype.registerAlgorithm = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), dm(e, t) + }, wP.prototype.__destroy__ = function() { + fm(this.kB) + }, HP.prototype = Object.create(ZR.prototype), HP.prototype.constructor = HP, HP.prototype.lB = HP, HP.mB = {}, n.btDefaultCollisionConstructionInfo = HP, HP.prototype.__destroy__ = function() { + Bm(this.kB) + }, VP.prototype = Object.create(ZR.prototype), VP.prototype.constructor = VP, VP.prototype.lB = VP, VP.mB = {}, n.btPersistentManifold = VP, VP.prototype.getBody0 = function() { + return JR(km(this.kB), lD) + }, VP.prototype.getBody1 = function() { + return JR(Cm(this.kB), lD) + }, VP.prototype.getNumContacts = function() { + return Sm(this.kB) + }, VP.prototype.getContactPoint = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(jm(e, t), $D) + }, VP.prototype.__destroy__ = function() { + vm(this.kB) + }, EP.prototype = Object.create(AD.prototype), EP.prototype.constructor = EP, EP.prototype.lB = EP, EP.mB = {}, n.btCollisionDispatcher = EP, EP.prototype.getNumManifolds = function() { + return Rm(this.kB) + }, EP.prototype.getManifoldByIndexInternal = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Dm(e, t), VP) + }, EP.prototype.__destroy__ = function() { + Pm(this.kB) + }, NP.prototype = Object.create(ZR.prototype), NP.prototype.constructor = NP, NP.prototype.lB = NP, NP.mB = {}, n.btOverlappingPairCallback = NP, NP.prototype.__destroy__ = function() { + Tm(this.kB) + }, UP.prototype = Object.create(ZR.prototype), UP.prototype.constructor = UP, UP.prototype.lB = UP, UP.mB = {}, n.btOverlappingPairCache = UP, UP.prototype.setInternalGhostPairCallback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Om(e, t) + }, UP.prototype.getNumOverlappingPairs = function() { + return Wm(this.kB) + }, UP.prototype.__destroy__ = function() { + Am(this.kB) + }, zP.prototype = Object.create(ZR.prototype), zP.prototype.constructor = zP, zP.prototype.lB = zP, zP.mB = {}, n.btAxisSweep3 = zP, zP.prototype.__destroy__ = function() { + Gm(this.kB) + }, qP.prototype = Object.create(ZR.prototype), qP.prototype.constructor = qP, qP.prototype.lB = qP, qP.mB = {}, n.btBroadphaseInterface = qP, qP.prototype.getOverlappingPairCache = function() { + return JR(wm(this.kB), UP) + }, qP.prototype.__destroy__ = function() { + Hm(this.kB) + }, KP.prototype = Object.create(ZR.prototype), KP.prototype.constructor = KP, KP.prototype.lB = KP, KP.mB = {}, n.btCollisionConfiguration = KP, KP.prototype.__destroy__ = function() { + Vm(this.kB) + }, QP.prototype = Object.create(ZR.prototype), QP.prototype.constructor = QP, QP.prototype.lB = QP, QP.mB = {}, n.btDbvtBroadphase = QP, QP.prototype.__destroy__ = function() { + Nm(this.kB) + }, XP.prototype = Object.create(ZR.prototype), XP.prototype.constructor = XP, XP.prototype.lB = XP, XP.mB = {}, n.btBroadphaseProxy = XP, XP.prototype.get_m_collisionFilterGroup = XP.prototype.nB = function() { + return Um(this.kB) + }, XP.prototype.set_m_collisionFilterGroup = XP.prototype.pB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), zm(e, t) + }, Object.defineProperty(XP.prototype, "m_collisionFilterGroup", { + get: XP.prototype.nB, + set: XP.prototype.pB + }), XP.prototype.get_m_collisionFilterMask = XP.prototype.oB = function() { + return qm(this.kB) + }, XP.prototype.set_m_collisionFilterMask = XP.prototype.qB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Km(e, t) + }, Object.defineProperty(XP.prototype, "m_collisionFilterMask", { + get: XP.prototype.oB, + set: XP.prototype.qB + }), XP.prototype.__destroy__ = function() { + Qm(this.kB) + }, ZP.prototype = Object.create(ZR.prototype), ZP.prototype.constructor = ZP, ZP.prototype.lB = ZP, ZP.mB = {}, n.btRigidBodyConstructionInfo = ZP, ZP.prototype.get_m_linearDamping = ZP.prototype.DD = function() { + return Ym(this.kB) + }, ZP.prototype.set_m_linearDamping = ZP.prototype.uG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jm(e, t) + }, Object.defineProperty(ZP.prototype, "m_linearDamping", { + get: ZP.prototype.DD, + set: ZP.prototype.uG + }), ZP.prototype.get_m_angularDamping = ZP.prototype.HC = function() { + return $m(this.kB) + }, ZP.prototype.set_m_angularDamping = ZP.prototype.yF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ty(e, t) + }, Object.defineProperty(ZP.prototype, "m_angularDamping", { + get: ZP.prototype.HC, + set: ZP.prototype.yF + }), ZP.prototype.get_m_friction = ZP.prototype.kD = function() { + return ey(this.kB) + }, ZP.prototype.set_m_friction = ZP.prototype.bG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ny(e, t) + }, Object.defineProperty(ZP.prototype, "m_friction", { + get: ZP.prototype.kD, + set: ZP.prototype.bG + }), ZP.prototype.get_m_rollingFriction = ZP.prototype.dE = function() { + return oy(this.kB) + }, ZP.prototype.set_m_rollingFriction = ZP.prototype.WG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _y(e, t) + }, Object.defineProperty(ZP.prototype, "m_rollingFriction", { + get: ZP.prototype.dE, + set: ZP.prototype.WG + }), ZP.prototype.get_m_restitution = ZP.prototype.bE = function() { + return iy(this.kB) + }, ZP.prototype.set_m_restitution = ZP.prototype.UG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ry(e, t) + }, Object.defineProperty(ZP.prototype, "m_restitution", { + get: ZP.prototype.bE, + set: ZP.prototype.UG + }), ZP.prototype.get_m_linearSleepingThreshold = ZP.prototype.ED = function() { + return py(this.kB) + }, ZP.prototype.set_m_linearSleepingThreshold = ZP.prototype.vG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), sy(e, t) + }, Object.defineProperty(ZP.prototype, "m_linearSleepingThreshold", { + get: ZP.prototype.ED, + set: ZP.prototype.vG + }), ZP.prototype.get_m_angularSleepingThreshold = ZP.prototype.IC = function() { + return cy(this.kB) + }, ZP.prototype.set_m_angularSleepingThreshold = ZP.prototype.zF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ay(e, t) + }, Object.defineProperty(ZP.prototype, "m_angularSleepingThreshold", { + get: ZP.prototype.IC, + set: ZP.prototype.zF + }), ZP.prototype.get_m_additionalDamping = ZP.prototype.CC = function() { + return !!ly(this.kB) + }, ZP.prototype.set_m_additionalDamping = ZP.prototype.tF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uy(e, t) + }, Object.defineProperty(ZP.prototype, "m_additionalDamping", { + get: ZP.prototype.CC, + set: ZP.prototype.tF + }), ZP.prototype.get_m_additionalDampingFactor = ZP.prototype.DC = function() { + return by(this.kB) + }, ZP.prototype.set_m_additionalDampingFactor = ZP.prototype.uF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), my(e, t) + }, Object.defineProperty(ZP.prototype, "m_additionalDampingFactor", { + get: ZP.prototype.DC, + set: ZP.prototype.uF + }), ZP.prototype.get_m_additionalLinearDampingThresholdSqr = ZP.prototype.EC = function() { + return yy(this.kB) + }, ZP.prototype.set_m_additionalLinearDampingThresholdSqr = ZP.prototype.vF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), dy(e, t) + }, Object.defineProperty(ZP.prototype, "m_additionalLinearDampingThresholdSqr", { + get: ZP.prototype.EC, + set: ZP.prototype.vF + }), ZP.prototype.get_m_additionalAngularDampingThresholdSqr = ZP.prototype.BC = function() { + return fy(this.kB) + }, ZP.prototype.set_m_additionalAngularDampingThresholdSqr = ZP.prototype.sF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hy(e, t) + }, Object.defineProperty(ZP.prototype, "m_additionalAngularDampingThresholdSqr", { + get: ZP.prototype.BC, + set: ZP.prototype.sF + }), ZP.prototype.get_m_additionalAngularDampingFactor = ZP.prototype.AC = function() { + return By(this.kB) + }, ZP.prototype.set_m_additionalAngularDampingFactor = ZP.prototype.rF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), gy(e, t) + }, Object.defineProperty(ZP.prototype, "m_additionalAngularDampingFactor", { + get: ZP.prototype.AC, + set: ZP.prototype.rF + }), ZP.prototype.__destroy__ = function() { + ky(this.kB) + }, YP.prototype = Object.create(lD.prototype), YP.prototype.constructor = YP, YP.prototype.lB = YP, YP.mB = {}, n.btRigidBody = YP, YP.prototype.getCenterOfMassTransform = function() { + return JR(Sy(this.kB), zD) + }, YP.prototype.setCenterOfMassTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), jy(e, t) + }, YP.prototype.setSleepingThresholds = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), vy(n, t, e) + }, YP.prototype.getLinearDamping = function() { + return Iy(this.kB) + }, YP.prototype.getAngularDamping = function() { + return Ry(this.kB) + }, YP.prototype.setDamping = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Dy(n, t, e) + }, YP.prototype.setMassProps = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Py(n, t, e) + }, YP.prototype.getLinearFactor = function() { + return JR(Ty(this.kB), fD) + }, YP.prototype.setLinearFactor = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Oy(e, t) + }, YP.prototype.applyTorque = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Wy(e, t) + }, YP.prototype.applyLocalTorque = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ay(e, t) + }, YP.prototype.applyForce = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), My(n, t, e) + }, YP.prototype.applyCentralForce = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), xy(e, t) + }, YP.prototype.applyCentralLocalForce = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Fy(e, t) + }, YP.prototype.applyTorqueImpulse = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ly(e, t) + }, YP.prototype.applyImpulse = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Gy(n, t, e) + }, YP.prototype.applyCentralImpulse = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), wy(e, t) + }, YP.prototype.updateInertiaTensor = function() { + Hy(this.kB) + }, YP.prototype.getLinearVelocity = function() { + return JR(Vy(this.kB), fD) + }, YP.prototype.getAngularVelocity = function() { + return JR(Ey(this.kB), fD) + }, YP.prototype.setLinearVelocity = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ny(e, t) + }, YP.prototype.setAngularVelocity = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Uy(e, t) + }, YP.prototype.getMotionState = function() { + return JR(zy(this.kB), BD) + }, YP.prototype.setMotionState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qy(e, t) + }, YP.prototype.getAngularFactor = function() { + return JR(Ky(this.kB), fD) + }, YP.prototype.setAngularFactor = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qy(e, t) + }, YP.prototype.upcast = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Xy(e, t), YP) + }, YP.prototype.getAabb = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Zy(n, t, e) + }, YP.prototype.applyGravity = function() { + Yy(this.kB) + }, YP.prototype.getGravity = function() { + return JR(Jy(this.kB), fD) + }, YP.prototype.setGravity = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), $y(e, t) + }, YP.prototype.getBroadphaseProxy = function() { + return JR(td(this.kB), XP) + }, YP.prototype.clearForces = function() { + ed(this.kB) + }, YP.prototype.setFlags = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), nd(e, t) + }, YP.prototype.getFlags = function() { + return od(this.kB) + }, YP.prototype.setAnisotropicFriction = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), _d(n, t, e) + }, YP.prototype.getCollisionShape = function() { + return JR(id(this.kB), cD) + }, YP.prototype.setContactProcessingThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rd(e, t) + }, YP.prototype.setActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), pd(e, t) + }, YP.prototype.forceActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), sd(e, t) + }, YP.prototype.activate = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), void 0 === t ? cd(e) : ad(e, t) + }, YP.prototype.isActive = function() { + return !!ld(this.kB) + }, YP.prototype.isKinematicObject = function() { + return !!ud(this.kB) + }, YP.prototype.isStaticObject = function() { + return !!bd(this.kB) + }, YP.prototype.isStaticOrKinematicObject = function() { + return !!md(this.kB) + }, YP.prototype.getRestitution = function() { + return yd(this.kB) + }, YP.prototype.getFriction = function() { + return dd(this.kB) + }, YP.prototype.getRollingFriction = function() { + return fd(this.kB) + }, YP.prototype.setRestitution = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hd(e, t) + }, YP.prototype.setFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bd(e, t) + }, YP.prototype.setRollingFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), gd(e, t) + }, YP.prototype.getWorldTransform = function() { + return JR(kd(this.kB), zD) + }, YP.prototype.getCollisionFlags = function() { + return Cd(this.kB) + }, YP.prototype.setCollisionFlags = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Sd(e, t) + }, YP.prototype.setWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), jd(e, t) + }, YP.prototype.setCollisionShape = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), vd(e, t) + }, YP.prototype.setCcdMotionThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Id(e, t) + }, YP.prototype.setCcdSweptSphereRadius = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Rd(e, t) + }, YP.prototype.getUserIndex = function() { + return Dd(this.kB) + }, YP.prototype.setUserIndex = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Pd(e, t) + }, YP.prototype.getUserPointer = function() { + return JR(Td(this.kB), HD) + }, YP.prototype.setUserPointer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Od(e, t) + }, YP.prototype.getBroadphaseHandle = function() { + return JR(Wd(this.kB), XP) + }, YP.prototype.__destroy__ = function() { + Ad(this.kB) + }, JP.prototype = Object.create(ZR.prototype), JP.prototype.constructor = JP, JP.prototype.lB = JP, JP.mB = {}, n.btConstraintSetting = JP, JP.prototype.get_m_tau = JP.prototype.sE = function() { + return xd(this.kB) + }, JP.prototype.set_m_tau = JP.prototype.kH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Fd(e, t) + }, Object.defineProperty(JP.prototype, "m_tau", { + get: JP.prototype.sE, + set: JP.prototype.kH + }), JP.prototype.get_m_damping = JP.prototype.aD = function() { + return Ld(this.kB) + }, JP.prototype.set_m_damping = JP.prototype.SF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gd(e, t) + }, Object.defineProperty(JP.prototype, "m_damping", { + get: JP.prototype.aD, + set: JP.prototype.SF + }), JP.prototype.get_m_impulseClamp = JP.prototype.wD = function() { + return wd(this.kB) + }, JP.prototype.set_m_impulseClamp = JP.prototype.nG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Hd(e, t) + }, Object.defineProperty(JP.prototype, "m_impulseClamp", { + get: JP.prototype.wD, + set: JP.prototype.nG + }), JP.prototype.__destroy__ = function() { + Vd(this.kB) + }, $P.prototype = Object.create(mD.prototype), $P.prototype.constructor = $P, $P.prototype.lB = $P, $P.mB = {}, n.btPoint2PointConstraint = $P, $P.prototype.setPivotA = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ud(e, t) + }, $P.prototype.setPivotB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), zd(e, t) + }, $P.prototype.getPivotInA = function() { + return JR(qd(this.kB), fD) + }, $P.prototype.getPivotInB = function() { + return JR(Kd(this.kB), fD) + }, $P.prototype.enableFeedback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qd(e, t) + }, $P.prototype.getBreakingImpulseThreshold = function() { + return Xd(this.kB) + }, $P.prototype.setBreakingImpulseThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Zd(e, t) + }, $P.prototype.getParam = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Yd(n, t, e) + }, $P.prototype.setParam = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Jd(o, t, e, n) + }, $P.prototype.get_m_setting = $P.prototype.fE = function() { + return JR($d(this.kB), JP) + }, $P.prototype.set_m_setting = $P.prototype.YG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), tf(e, t) + }, Object.defineProperty($P.prototype, "m_setting", { + get: $P.prototype.fE, + set: $P.prototype.YG + }), $P.prototype.__destroy__ = function() { + ef(this.kB) + }, tT.prototype = Object.create(MD.prototype), tT.prototype.constructor = tT, tT.prototype.lB = tT, tT.mB = {}, n.btGeneric6DofSpringConstraint = tT, tT.prototype.enableSpring = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), _f(n, t, e) + }, tT.prototype.setStiffness = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), rf(n, t, e) + }, tT.prototype.setDamping = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), pf(n, t, e) + }, tT.prototype.setEquilibriumPoint = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), void 0 === t ? sf(n) : void 0 === e ? cf(n, t) : af(n, t, e) + }, tT.prototype.setLinearLowerLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lf(e, t) + }, tT.prototype.setLinearUpperLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uf(e, t) + }, tT.prototype.setAngularLowerLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bf(e, t) + }, tT.prototype.setAngularUpperLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mf(e, t) + }, tT.prototype.getFrameOffsetA = function() { + return JR(yf(this.kB), zD) + }, tT.prototype.enableFeedback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), df(e, t) + }, tT.prototype.getBreakingImpulseThreshold = function() { + return ff(this.kB) + }, tT.prototype.setBreakingImpulseThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hf(e, t) + }, tT.prototype.getParam = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Bf(n, t, e) + }, tT.prototype.setParam = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), gf(o, t, e, n) + }, tT.prototype.__destroy__ = function() { + kf(this.kB) + }, eT.prototype = Object.create(ZR.prototype), eT.prototype.constructor = eT, eT.prototype.lB = eT, eT.mB = {}, n.btSequentialImpulseConstraintSolver = eT, eT.prototype.__destroy__ = function() { + Sf(this.kB) + }, nT.prototype = Object.create(mD.prototype), nT.prototype.constructor = nT, nT.prototype.lB = nT, nT.mB = {}, n.btConeTwistConstraint = nT, nT.prototype.setLimit = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), If(n, t, e) + }, nT.prototype.setAngularOnly = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Rf(e, t) + }, nT.prototype.setDamping = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Df(e, t) + }, nT.prototype.enableMotor = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Pf(e, t) + }, nT.prototype.setMaxMotorImpulse = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Tf(e, t) + }, nT.prototype.setMaxMotorImpulseNormalized = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Of(e, t) + }, nT.prototype.setMotorTarget = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Wf(e, t) + }, nT.prototype.setMotorTargetInConstraintSpace = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Af(e, t) + }, nT.prototype.enableFeedback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Mf(e, t) + }, nT.prototype.getBreakingImpulseThreshold = function() { + return xf(this.kB) + }, nT.prototype.setBreakingImpulseThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ff(e, t) + }, nT.prototype.getParam = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Lf(n, t, e) + }, nT.prototype.setParam = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Gf(o, t, e, n) + }, nT.prototype.__destroy__ = function() { + wf(this.kB) + }, oT.prototype = Object.create(mD.prototype), oT.prototype.constructor = oT, oT.prototype.lB = oT, oT.mB = {}, n.btHingeConstraint = oT, oT.prototype.getHingeAngle = function() { + return qf(this.kB) + }, oT.prototype.setLimit = function(t, e, n, o, _) { + var i = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), void 0 === _ ? Kf(i, t, e, n, o) : Qf(i, t, e, n, o, _) + }, oT.prototype.enableAngularMotor = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Xf(o, t, e, n) + }, oT.prototype.setAngularOnly = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Zf(e, t) + }, oT.prototype.enableMotor = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Yf(e, t) + }, oT.prototype.setMaxMotorImpulse = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jf(e, t) + }, oT.prototype.setMotorTarget = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), $f(n, t, e) + }, oT.prototype.enableFeedback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), th(e, t) + }, oT.prototype.getBreakingImpulseThreshold = function() { + return eh(this.kB) + }, oT.prototype.setBreakingImpulseThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), nh(e, t) + }, oT.prototype.getParam = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), oh(n, t, e) + }, oT.prototype.setParam = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), _h(o, t, e, n) + }, oT.prototype.__destroy__ = function() { + ih(this.kB) + }, _T.prototype = Object.create(mD.prototype), _T.prototype.constructor = _T, _T.prototype.lB = _T, _T.mB = {}, n.btSliderConstraint = _T, _T.prototype.getLinearPos = function() { + return sh(this.kB) + }, _T.prototype.getAngularPos = function() { + return ch(this.kB) + }, _T.prototype.setLowerLinLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ah(e, t) + }, _T.prototype.setUpperLinLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lh(e, t) + }, _T.prototype.setLowerAngLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uh(e, t) + }, _T.prototype.setUpperAngLimit = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bh(e, t) + }, _T.prototype.setPoweredLinMotor = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mh(e, t) + }, _T.prototype.setMaxLinMotorForce = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), yh(e, t) + }, _T.prototype.setTargetLinMotorVelocity = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), dh(e, t) + }, _T.prototype.enableFeedback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), fh(e, t) + }, _T.prototype.getBreakingImpulseThreshold = function() { + return hh(this.kB) + }, _T.prototype.setBreakingImpulseThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bh(e, t) + }, _T.prototype.getParam = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), gh(n, t, e) + }, _T.prototype.setParam = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), kh(o, t, e, n) + }, _T.prototype.__destroy__ = function() { + Ch(this.kB) + }, iT.prototype = Object.create(mD.prototype), iT.prototype.constructor = iT, iT.prototype.lB = iT, iT.mB = {}, n.btFixedConstraint = iT, iT.prototype.enableFeedback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), jh(e, t) + }, iT.prototype.getBreakingImpulseThreshold = function() { + return vh(this.kB) + }, iT.prototype.setBreakingImpulseThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ih(e, t) + }, iT.prototype.getParam = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Rh(n, t, e) + }, iT.prototype.setParam = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Dh(o, t, e, n) + }, iT.prototype.__destroy__ = function() { + Ph(this.kB) + }, rT.prototype = Object.create(ZR.prototype), rT.prototype.constructor = rT, rT.prototype.lB = rT, rT.mB = {}, n.btConstraintSolver = rT, rT.prototype.__destroy__ = function() { + Th(this.kB) + }, pT.prototype = Object.create(ZR.prototype), pT.prototype.constructor = pT, pT.prototype.lB = pT, pT.mB = {}, n.btDispatcherInfo = pT, pT.prototype.get_m_timeStep = pT.prototype.uE = function() { + return Oh(this.kB) + }, pT.prototype.set_m_timeStep = pT.prototype.mH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Wh(e, t) + }, Object.defineProperty(pT.prototype, "m_timeStep", { + get: pT.prototype.uE, + set: pT.prototype.mH + }), pT.prototype.get_m_stepCount = pT.prototype.lE = function() { + return Ah(this.kB) + }, pT.prototype.set_m_stepCount = pT.prototype.dH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Mh(e, t) + }, Object.defineProperty(pT.prototype, "m_stepCount", { + get: pT.prototype.lE, + set: pT.prototype.dH + }), pT.prototype.get_m_dispatchFunc = pT.prototype.cD = function() { + return xh(this.kB) + }, pT.prototype.set_m_dispatchFunc = pT.prototype.UF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Fh(e, t) + }, Object.defineProperty(pT.prototype, "m_dispatchFunc", { + get: pT.prototype.cD, + set: pT.prototype.UF + }), pT.prototype.get_m_timeOfImpact = pT.prototype.tE = function() { + return Lh(this.kB) + }, pT.prototype.set_m_timeOfImpact = pT.prototype.lH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gh(e, t) + }, Object.defineProperty(pT.prototype, "m_timeOfImpact", { + get: pT.prototype.tE, + set: pT.prototype.lH + }), pT.prototype.get_m_useContinuous = pT.prototype.wE = function() { + return !!wh(this.kB) + }, pT.prototype.set_m_useContinuous = pT.prototype.oH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Hh(e, t) + }, Object.defineProperty(pT.prototype, "m_useContinuous", { + get: pT.prototype.wE, + set: pT.prototype.oH + }), pT.prototype.get_m_enableSatConvex = pT.prototype.hD = function() { + return !!Vh(this.kB) + }, pT.prototype.set_m_enableSatConvex = pT.prototype.ZF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Eh(e, t) + }, Object.defineProperty(pT.prototype, "m_enableSatConvex", { + get: pT.prototype.hD, + set: pT.prototype.ZF + }), pT.prototype.get_m_enableSPU = pT.prototype.gD = function() { + return !!Nh(this.kB) + }, pT.prototype.set_m_enableSPU = pT.prototype.YF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Uh(e, t) + }, Object.defineProperty(pT.prototype, "m_enableSPU", { + get: pT.prototype.gD, + set: pT.prototype.YF + }), pT.prototype.get_m_useEpa = pT.prototype.yE = function() { + return !!zh(this.kB) + }, pT.prototype.set_m_useEpa = pT.prototype.qH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qh(e, t) + }, Object.defineProperty(pT.prototype, "m_useEpa", { + get: pT.prototype.yE, + set: pT.prototype.qH + }), pT.prototype.get_m_allowedCcdPenetration = pT.prototype.FC = function() { + return Kh(this.kB) + }, pT.prototype.set_m_allowedCcdPenetration = pT.prototype.wF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qh(e, t) + }, Object.defineProperty(pT.prototype, "m_allowedCcdPenetration", { + get: pT.prototype.FC, + set: pT.prototype.wF + }), pT.prototype.get_m_useConvexConservativeDistanceUtil = pT.prototype.xE = function() { + return !!Xh(this.kB) + }, pT.prototype.set_m_useConvexConservativeDistanceUtil = pT.prototype.pH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Zh(e, t) + }, Object.defineProperty(pT.prototype, "m_useConvexConservativeDistanceUtil", { + get: pT.prototype.xE, + set: pT.prototype.pH + }), pT.prototype.get_m_convexConservativeDistanceThreshold = pT.prototype.YC = function() { + return Yh(this.kB) + }, pT.prototype.set_m_convexConservativeDistanceThreshold = pT.prototype.PF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jh(e, t) + }, Object.defineProperty(pT.prototype, "m_convexConservativeDistanceThreshold", { + get: pT.prototype.YC, + set: pT.prototype.PF + }), pT.prototype.__destroy__ = function() { + $h(this.kB) + }, sT.prototype = Object.create(ZR.prototype), sT.prototype.constructor = sT, sT.prototype.lB = sT, sT.mB = {}, n.btContactSolverInfo = sT, sT.prototype.get_m_splitImpulse = sT.prototype.iE = function() { + return !!tB(this.kB) + }, sT.prototype.set_m_splitImpulse = sT.prototype.aH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), eB(e, t) + }, Object.defineProperty(sT.prototype, "m_splitImpulse", { + get: sT.prototype.iE, + set: sT.prototype.aH + }), sT.prototype.get_m_splitImpulsePenetrationThreshold = sT.prototype.jE = function() { + return nB(this.kB) + }, sT.prototype.set_m_splitImpulsePenetrationThreshold = sT.prototype.bH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), oB(e, t) + }, Object.defineProperty(sT.prototype, "m_splitImpulsePenetrationThreshold", { + get: sT.prototype.jE, + set: sT.prototype.bH + }), sT.prototype.get_m_numIterations = sT.prototype.TD = function() { + return _B(this.kB) + }, sT.prototype.set_m_numIterations = sT.prototype.KG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), iB(e, t) + }, Object.defineProperty(sT.prototype, "m_numIterations", { + get: sT.prototype.TD, + set: sT.prototype.KG + }), sT.prototype.__destroy__ = function() { + rB(this.kB) + }, cT.prototype = Object.create(ZR.prototype), cT.prototype.constructor = cT, cT.prototype.lB = cT, cT.mB = {}, n.btVehicleTuning = cT, cT.prototype.get_m_suspensionStiffness = cT.prototype.BB = function() { + return sB(this.kB) + }, cT.prototype.set_m_suspensionStiffness = cT.prototype.IB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), cB(e, t) + }, Object.defineProperty(cT.prototype, "m_suspensionStiffness", { + get: cT.prototype.BB, + set: cT.prototype.IB + }), cT.prototype.get_m_suspensionCompression = cT.prototype.mE = function() { + return aB(this.kB) + }, cT.prototype.set_m_suspensionCompression = cT.prototype.eH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lB(e, t) + }, Object.defineProperty(cT.prototype, "m_suspensionCompression", { + get: cT.prototype.mE, + set: cT.prototype.eH + }), cT.prototype.get_m_suspensionDamping = cT.prototype.nE = function() { + return uB(this.kB) + }, cT.prototype.set_m_suspensionDamping = cT.prototype.fH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bB(e, t) + }, Object.defineProperty(cT.prototype, "m_suspensionDamping", { + get: cT.prototype.nE, + set: cT.prototype.fH + }), cT.prototype.get_m_maxSuspensionTravelCm = cT.prototype.AB = function() { + return mB(this.kB) + }, cT.prototype.set_m_maxSuspensionTravelCm = cT.prototype.HB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), yB(e, t) + }, Object.defineProperty(cT.prototype, "m_maxSuspensionTravelCm", { + get: cT.prototype.AB, + set: cT.prototype.HB + }), cT.prototype.get_m_frictionSlip = cT.prototype.wB = function() { + return dB(this.kB) + }, cT.prototype.set_m_frictionSlip = cT.prototype.DB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), fB(e, t) + }, Object.defineProperty(cT.prototype, "m_frictionSlip", { + get: cT.prototype.wB, + set: cT.prototype.DB + }), cT.prototype.get_m_maxSuspensionForce = cT.prototype.zB = function() { + return hB(this.kB) + }, cT.prototype.set_m_maxSuspensionForce = cT.prototype.GB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), BB(e, t) + }, Object.defineProperty(cT.prototype, "m_maxSuspensionForce", { + get: cT.prototype.zB, + set: cT.prototype.GB + }), aT.prototype = Object.create(ZR.prototype), aT.prototype.constructor = aT, aT.prototype.lB = aT, aT.mB = {}, n.btVehicleRaycasterResult = aT, aT.prototype.get_m_hitPointInWorld = aT.prototype.tD = function() { + return JR(gB(this.kB), fD) + }, aT.prototype.set_m_hitPointInWorld = aT.prototype.kG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kB(e, t) + }, Object.defineProperty(aT.prototype, "m_hitPointInWorld", { + get: aT.prototype.tD, + set: aT.prototype.kG + }), aT.prototype.get_m_hitNormalInWorld = aT.prototype.rD = function() { + return JR(CB(this.kB), fD) + }, aT.prototype.set_m_hitNormalInWorld = aT.prototype.iG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), SB(e, t) + }, Object.defineProperty(aT.prototype, "m_hitNormalInWorld", { + get: aT.prototype.rD, + set: aT.prototype.iG + }), aT.prototype.get_m_distFraction = aT.prototype.fD = function() { + return jB(this.kB) + }, aT.prototype.set_m_distFraction = aT.prototype.XF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), vB(e, t) + }, Object.defineProperty(aT.prototype, "m_distFraction", { + get: aT.prototype.fD, + set: aT.prototype.XF + }), aT.prototype.__destroy__ = function() { + IB(this.kB) + }, lT.prototype = Object.create(FD.prototype), lT.prototype.constructor = lT, lT.prototype.lB = lT, lT.mB = {}, n.btDefaultVehicleRaycaster = lT, lT.prototype.castRay = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), DB(o, t, e, n) + }, lT.prototype.__destroy__ = function() { + PB(this.kB) + }, uT.prototype = Object.create(ZR.prototype), uT.prototype.constructor = uT, uT.prototype.lB = uT, uT.mB = {}, n.RaycastInfo = uT, uT.prototype.get_m_contactNormalWS = uT.prototype.WC = function() { + return JR(TB(this.kB), fD) + }, uT.prototype.set_m_contactNormalWS = uT.prototype.NF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), OB(e, t) + }, Object.defineProperty(uT.prototype, "m_contactNormalWS", { + get: uT.prototype.WC, + set: uT.prototype.NF + }), uT.prototype.get_m_contactPointWS = uT.prototype.XC = function() { + return JR(WB(this.kB), fD) + }, uT.prototype.set_m_contactPointWS = uT.prototype.OF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), AB(e, t) + }, Object.defineProperty(uT.prototype, "m_contactPointWS", { + get: uT.prototype.XC, + set: uT.prototype.OF + }), uT.prototype.get_m_suspensionLength = uT.prototype.oE = function() { + return MB(this.kB) + }, uT.prototype.set_m_suspensionLength = uT.prototype.gH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), xB(e, t) + }, Object.defineProperty(uT.prototype, "m_suspensionLength", { + get: uT.prototype.oE, + set: uT.prototype.gH + }), uT.prototype.get_m_hardPointWS = uT.prototype.oD = function() { + return JR(FB(this.kB), fD) + }, uT.prototype.set_m_hardPointWS = uT.prototype.fG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), LB(e, t) + }, Object.defineProperty(uT.prototype, "m_hardPointWS", { + get: uT.prototype.oD, + set: uT.prototype.fG + }), uT.prototype.get_m_wheelDirectionWS = uT.prototype.DE = function() { + return JR(GB(this.kB), fD) + }, uT.prototype.set_m_wheelDirectionWS = uT.prototype.vH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), wB(e, t) + }, Object.defineProperty(uT.prototype, "m_wheelDirectionWS", { + get: uT.prototype.DE, + set: uT.prototype.vH + }), uT.prototype.get_m_wheelAxleWS = uT.prototype.CE = function() { + return JR(HB(this.kB), fD) + }, uT.prototype.set_m_wheelAxleWS = uT.prototype.uH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), VB(e, t) + }, Object.defineProperty(uT.prototype, "m_wheelAxleWS", { + get: uT.prototype.CE, + set: uT.prototype.uH + }), uT.prototype.get_m_isInContact = uT.prototype.zD = function() { + return !!EB(this.kB) + }, uT.prototype.set_m_isInContact = uT.prototype.qG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), NB(e, t) + }, Object.defineProperty(uT.prototype, "m_isInContact", { + get: uT.prototype.zD, + set: uT.prototype.qG + }), uT.prototype.get_m_groundObject = uT.prototype.nD = function() { + return UB(this.kB) + }, uT.prototype.set_m_groundObject = uT.prototype.eG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), zB(e, t) + }, Object.defineProperty(uT.prototype, "m_groundObject", { + get: uT.prototype.nD, + set: uT.prototype.eG + }), uT.prototype.__destroy__ = function() { + qB(this.kB) + }, bT.prototype = Object.create(ZR.prototype), bT.prototype.constructor = bT, bT.prototype.lB = bT, bT.mB = {}, n.btWheelInfoConstructionInfo = bT, bT.prototype.get_m_chassisConnectionCS = bT.prototype.RC = function() { + return JR(KB(this.kB), fD) + }, bT.prototype.set_m_chassisConnectionCS = bT.prototype.IF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), QB(e, t) + }, Object.defineProperty(bT.prototype, "m_chassisConnectionCS", { + get: bT.prototype.RC, + set: bT.prototype.IF + }), bT.prototype.get_m_wheelDirectionCS = bT.prototype.QB = function() { + return JR(XB(this.kB), fD) + }, bT.prototype.set_m_wheelDirectionCS = bT.prototype.$B = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ZB(e, t) + }, Object.defineProperty(bT.prototype, "m_wheelDirectionCS", { + get: bT.prototype.QB, + set: bT.prototype.$B + }), bT.prototype.get_m_wheelAxleCS = bT.prototype.PB = function() { + return JR(YB(this.kB), fD) + }, bT.prototype.set_m_wheelAxleCS = bT.prototype.ZB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), JB(e, t) + }, Object.defineProperty(bT.prototype, "m_wheelAxleCS", { + get: bT.prototype.PB, + set: bT.prototype.ZB + }), bT.prototype.get_m_suspensionRestLength = bT.prototype.qE = function() { + return $B(this.kB) + }, bT.prototype.set_m_suspensionRestLength = bT.prototype.iH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), tg(e, t) + }, Object.defineProperty(bT.prototype, "m_suspensionRestLength", { + get: bT.prototype.qE, + set: bT.prototype.iH + }), bT.prototype.get_m_maxSuspensionTravelCm = bT.prototype.AB = function() { + return eg(this.kB) + }, bT.prototype.set_m_maxSuspensionTravelCm = bT.prototype.HB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ng(e, t) + }, Object.defineProperty(bT.prototype, "m_maxSuspensionTravelCm", { + get: bT.prototype.AB, + set: bT.prototype.HB + }), bT.prototype.get_m_wheelRadius = bT.prototype.EE = function() { + return og(this.kB) + }, bT.prototype.set_m_wheelRadius = bT.prototype.wH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _g(e, t) + }, Object.defineProperty(bT.prototype, "m_wheelRadius", { + get: bT.prototype.EE, + set: bT.prototype.wH + }), bT.prototype.get_m_suspensionStiffness = bT.prototype.BB = function() { + return ig(this.kB) + }, bT.prototype.set_m_suspensionStiffness = bT.prototype.IB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rg(e, t) + }, Object.defineProperty(bT.prototype, "m_suspensionStiffness", { + get: bT.prototype.BB, + set: bT.prototype.IB + }), bT.prototype.get_m_wheelsDampingCompression = bT.prototype.RB = function() { + return pg(this.kB) + }, bT.prototype.set_m_wheelsDampingCompression = bT.prototype.aC = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), sg(e, t) + }, Object.defineProperty(bT.prototype, "m_wheelsDampingCompression", { + get: bT.prototype.RB, + set: bT.prototype.aC + }), bT.prototype.get_m_wheelsDampingRelaxation = bT.prototype.SB = function() { + return cg(this.kB) + }, bT.prototype.set_m_wheelsDampingRelaxation = bT.prototype.bC = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ag(e, t) + }, Object.defineProperty(bT.prototype, "m_wheelsDampingRelaxation", { + get: bT.prototype.SB, + set: bT.prototype.bC + }), bT.prototype.get_m_frictionSlip = bT.prototype.wB = function() { + return lg(this.kB) + }, bT.prototype.set_m_frictionSlip = bT.prototype.DB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ug(e, t) + }, Object.defineProperty(bT.prototype, "m_frictionSlip", { + get: bT.prototype.wB, + set: bT.prototype.DB + }), bT.prototype.get_m_maxSuspensionForce = bT.prototype.zB = function() { + return bg(this.kB) + }, bT.prototype.set_m_maxSuspensionForce = bT.prototype.GB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mg(e, t) + }, Object.defineProperty(bT.prototype, "m_maxSuspensionForce", { + get: bT.prototype.zB, + set: bT.prototype.GB + }), bT.prototype.get_m_bIsFrontWheel = bT.prototype.JB = function() { + return !!yg(this.kB) + }, bT.prototype.set_m_bIsFrontWheel = bT.prototype.TB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), dg(e, t) + }, Object.defineProperty(bT.prototype, "m_bIsFrontWheel", { + get: bT.prototype.JB, + set: bT.prototype.TB + }), bT.prototype.__destroy__ = function() { + fg(this.kB) + }, mT.prototype = Object.create(ZR.prototype), mT.prototype.constructor = mT, mT.prototype.lB = mT, mT.mB = {}, n.btWheelInfo = mT, mT.prototype.getSuspensionRestLength = function() { + return Bg(this.kB) + }, mT.prototype.updateWheel = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), gg(n, t, e) + }, mT.prototype.get_m_suspensionStiffness = mT.prototype.BB = function() { + return kg(this.kB) + }, mT.prototype.set_m_suspensionStiffness = mT.prototype.IB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Cg(e, t) + }, Object.defineProperty(mT.prototype, "m_suspensionStiffness", { + get: mT.prototype.BB, + set: mT.prototype.IB + }), mT.prototype.get_m_frictionSlip = mT.prototype.wB = function() { + return Sg(this.kB) + }, mT.prototype.set_m_frictionSlip = mT.prototype.DB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), jg(e, t) + }, Object.defineProperty(mT.prototype, "m_frictionSlip", { + get: mT.prototype.wB, + set: mT.prototype.DB + }), mT.prototype.get_m_engineForce = mT.prototype.iD = function() { + return vg(this.kB) + }, mT.prototype.set_m_engineForce = mT.prototype.$F = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ig(e, t) + }, Object.defineProperty(mT.prototype, "m_engineForce", { + get: mT.prototype.iD, + set: mT.prototype.$F + }), mT.prototype.get_m_rollInfluence = mT.prototype.cE = function() { + return Rg(this.kB) + }, mT.prototype.set_m_rollInfluence = mT.prototype.VG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Dg(e, t) + }, Object.defineProperty(mT.prototype, "m_rollInfluence", { + get: mT.prototype.cE, + set: mT.prototype.VG + }), mT.prototype.get_m_suspensionRestLength1 = mT.prototype.rE = function() { + return Pg(this.kB) + }, mT.prototype.set_m_suspensionRestLength1 = mT.prototype.jH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Tg(e, t) + }, Object.defineProperty(mT.prototype, "m_suspensionRestLength1", { + get: mT.prototype.rE, + set: mT.prototype.jH + }), mT.prototype.get_m_wheelsRadius = mT.prototype.FE = function() { + return Og(this.kB) + }, mT.prototype.set_m_wheelsRadius = mT.prototype.xH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Wg(e, t) + }, Object.defineProperty(mT.prototype, "m_wheelsRadius", { + get: mT.prototype.FE, + set: mT.prototype.xH + }), mT.prototype.get_m_wheelsDampingCompression = mT.prototype.RB = function() { + return Ag(this.kB) + }, mT.prototype.set_m_wheelsDampingCompression = mT.prototype.aC = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Mg(e, t) + }, Object.defineProperty(mT.prototype, "m_wheelsDampingCompression", { + get: mT.prototype.RB, + set: mT.prototype.aC + }), mT.prototype.get_m_wheelsDampingRelaxation = mT.prototype.SB = function() { + return xg(this.kB) + }, mT.prototype.set_m_wheelsDampingRelaxation = mT.prototype.bC = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Fg(e, t) + }, Object.defineProperty(mT.prototype, "m_wheelsDampingRelaxation", { + get: mT.prototype.SB, + set: mT.prototype.bC + }), mT.prototype.get_m_steering = mT.prototype.kE = function() { + return Lg(this.kB) + }, mT.prototype.set_m_steering = mT.prototype.cH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gg(e, t) + }, Object.defineProperty(mT.prototype, "m_steering", { + get: mT.prototype.kE, + set: mT.prototype.cH + }), mT.prototype.get_m_maxSuspensionForce = mT.prototype.zB = function() { + return wg(this.kB) + }, mT.prototype.set_m_maxSuspensionForce = mT.prototype.GB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Hg(e, t) + }, Object.defineProperty(mT.prototype, "m_maxSuspensionForce", { + get: mT.prototype.zB, + set: mT.prototype.GB + }), mT.prototype.get_m_maxSuspensionTravelCm = mT.prototype.AB = function() { + return Vg(this.kB) + }, mT.prototype.set_m_maxSuspensionTravelCm = mT.prototype.HB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Eg(e, t) + }, Object.defineProperty(mT.prototype, "m_maxSuspensionTravelCm", { + get: mT.prototype.AB, + set: mT.prototype.HB + }), mT.prototype.get_m_wheelsSuspensionForce = mT.prototype.GE = function() { + return Ng(this.kB) + }, mT.prototype.set_m_wheelsSuspensionForce = mT.prototype.yH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ug(e, t) + }, Object.defineProperty(mT.prototype, "m_wheelsSuspensionForce", { + get: mT.prototype.GE, + set: mT.prototype.yH + }), mT.prototype.get_m_bIsFrontWheel = mT.prototype.JB = function() { + return !!zg(this.kB) + }, mT.prototype.set_m_bIsFrontWheel = mT.prototype.TB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qg(e, t) + }, Object.defineProperty(mT.prototype, "m_bIsFrontWheel", { + get: mT.prototype.JB, + set: mT.prototype.TB + }), mT.prototype.get_m_raycastInfo = mT.prototype.aE = function() { + return JR(Kg(this.kB), uT) + }, mT.prototype.set_m_raycastInfo = mT.prototype.TG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qg(e, t) + }, Object.defineProperty(mT.prototype, "m_raycastInfo", { + get: mT.prototype.aE, + set: mT.prototype.TG + }), mT.prototype.get_m_chassisConnectionPointCS = mT.prototype.SC = function() { + return JR(Xg(this.kB), fD) + }, mT.prototype.set_m_chassisConnectionPointCS = mT.prototype.JF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Zg(e, t) + }, Object.defineProperty(mT.prototype, "m_chassisConnectionPointCS", { + get: mT.prototype.SC, + set: mT.prototype.JF + }), mT.prototype.get_m_worldTransform = mT.prototype.HE = function() { + return JR(Yg(this.kB), zD) + }, mT.prototype.set_m_worldTransform = mT.prototype.zH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jg(e, t) + }, Object.defineProperty(mT.prototype, "m_worldTransform", { + get: mT.prototype.HE, + set: mT.prototype.zH + }), mT.prototype.get_m_wheelDirectionCS = mT.prototype.QB = function() { + return JR($g(this.kB), fD) + }, mT.prototype.set_m_wheelDirectionCS = mT.prototype.$B = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), tk(e, t) + }, Object.defineProperty(mT.prototype, "m_wheelDirectionCS", { + get: mT.prototype.QB, + set: mT.prototype.$B + }), mT.prototype.get_m_wheelAxleCS = mT.prototype.PB = function() { + return JR(ek(this.kB), fD) + }, mT.prototype.set_m_wheelAxleCS = mT.prototype.ZB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), nk(e, t) + }, Object.defineProperty(mT.prototype, "m_wheelAxleCS", { + get: mT.prototype.PB, + set: mT.prototype.ZB + }), mT.prototype.get_m_rotation = mT.prototype.eE = function() { + return ok(this.kB) + }, mT.prototype.set_m_rotation = mT.prototype.XG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _k(e, t) + }, Object.defineProperty(mT.prototype, "m_rotation", { + get: mT.prototype.eE, + set: mT.prototype.XG + }), mT.prototype.get_m_deltaRotation = mT.prototype.bD = function() { + return ik(this.kB) + }, mT.prototype.set_m_deltaRotation = mT.prototype.TF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rk(e, t) + }, Object.defineProperty(mT.prototype, "m_deltaRotation", { + get: mT.prototype.bD, + set: mT.prototype.TF + }), mT.prototype.get_m_brake = mT.prototype.LC = function() { + return pk(this.kB) + }, mT.prototype.set_m_brake = mT.prototype.CF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), sk(e, t) + }, Object.defineProperty(mT.prototype, "m_brake", { + get: mT.prototype.LC, + set: mT.prototype.CF + }), mT.prototype.get_m_clippedInvContactDotSuspension = mT.prototype.TC = function() { + return ck(this.kB) + }, mT.prototype.set_m_clippedInvContactDotSuspension = mT.prototype.KF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ak(e, t) + }, Object.defineProperty(mT.prototype, "m_clippedInvContactDotSuspension", { + get: mT.prototype.TC, + set: mT.prototype.KF + }), mT.prototype.get_m_suspensionRelativeVelocity = mT.prototype.pE = function() { + return lk(this.kB) + }, mT.prototype.set_m_suspensionRelativeVelocity = mT.prototype.hH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uk(e, t) + }, Object.defineProperty(mT.prototype, "m_suspensionRelativeVelocity", { + get: mT.prototype.pE, + set: mT.prototype.hH + }), mT.prototype.get_m_skidInfo = mT.prototype.hE = function() { + return bk(this.kB) + }, mT.prototype.set_m_skidInfo = mT.prototype.$G = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mk(e, t) + }, Object.defineProperty(mT.prototype, "m_skidInfo", { + get: mT.prototype.hE, + set: mT.prototype.$G + }), mT.prototype.__destroy__ = function() { + yk(this.kB) + }, yT.prototype = Object.create(LD.prototype), yT.prototype.constructor = yT, yT.prototype.lB = yT, yT.mB = {}, n.btKinematicCharacterController = yT, yT.prototype.setUpAxis = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hk(e, t) + }, yT.prototype.setWalkDirection = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Bk(e, t) + }, yT.prototype.setVelocityForTimeInterval = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), gk(n, t, e) + }, yT.prototype.warp = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kk(e, t) + }, yT.prototype.preStep = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ck(e, t) + }, yT.prototype.playerStep = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Sk(n, t, e) + }, yT.prototype.setFallSpeed = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), jk(e, t) + }, yT.prototype.setJumpSpeed = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), vk(e, t) + }, yT.prototype.setMaxJumpHeight = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ik(e, t) + }, yT.prototype.canJump = function() { + return !!Rk(this.kB) + }, yT.prototype.jump = function() { + Dk(this.kB) + }, yT.prototype.setGravity = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Pk(e, t) + }, yT.prototype.getGravity = function() { + return Tk(this.kB) + }, yT.prototype.setMaxSlope = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ok(e, t) + }, yT.prototype.getMaxSlope = function() { + return Wk(this.kB) + }, yT.prototype.getGhostObject = function() { + return JR(Ak(this.kB), fT) + }, yT.prototype.setUseGhostSweepTest = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Mk(e, t) + }, yT.prototype.onGround = function() { + return !!xk(this.kB) + }, yT.prototype.setUpInterpolate = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Fk(e, t) + }, yT.prototype.updateAction = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Lk(n, t, e) + }, yT.prototype.__destroy__ = function() { + Gk(this.kB) + }, dT.prototype = Object.create(LD.prototype), dT.prototype.constructor = dT, dT.prototype.lB = dT, dT.mB = {}, n.btRaycastVehicle = dT, dT.prototype.applyEngineForce = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Hk(n, t, e) + }, dT.prototype.setSteeringValue = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Vk(n, t, e) + }, dT.prototype.getWheelTransformWS = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Ek(e, t), zD) + }, dT.prototype.updateWheelTransform = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Nk(n, t, e) + }, dT.prototype.addWheel = function(t, e, n, o, _, i, r) { + var p = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), i && "object" == typeof i && (i = i.kB), r && "object" == typeof r && (r = r.kB), JR(Uk(p, t, e, n, o, _, i, r), mT) + }, dT.prototype.getNumWheels = function() { + return zk(this.kB) + }, dT.prototype.getRigidBody = function() { + return JR(qk(this.kB), YP) + }, dT.prototype.getWheelInfo = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Kk(e, t), mT) + }, dT.prototype.setBrake = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Qk(n, t, e) + }, dT.prototype.setCoordinateSystem = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), Xk(o, t, e, n) + }, dT.prototype.getCurrentSpeedKmHour = function() { + return Zk(this.kB) + }, dT.prototype.getChassisWorldTransform = function() { + return JR(Yk(this.kB), zD) + }, dT.prototype.rayCast = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), Jk(e, t) + }, dT.prototype.updateVehicle = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), $k(e, t) + }, dT.prototype.resetSuspension = function() { + tC(this.kB) + }, dT.prototype.getSteeringValue = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), eC(e, t) + }, dT.prototype.updateWheelTransformsWS = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), void 0 === e ? nC(n, t) : oC(n, t, e) + }, dT.prototype.setPitchControl = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _C(e, t) + }, dT.prototype.updateSuspension = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), iC(e, t) + }, dT.prototype.updateFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rC(e, t) + }, dT.prototype.getRightAxis = function() { + return pC(this.kB) + }, dT.prototype.getUpAxis = function() { + return sC(this.kB) + }, dT.prototype.getForwardAxis = function() { + return cC(this.kB) + }, dT.prototype.getForwardVector = function() { + return JR(aC(this.kB), fD) + }, dT.prototype.getUserConstraintType = function() { + return lC(this.kB) + }, dT.prototype.setUserConstraintType = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uC(e, t) + }, dT.prototype.setUserConstraintId = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bC(e, t) + }, dT.prototype.getUserConstraintId = function() { + return mC(this.kB) + }, dT.prototype.updateAction = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), yC(n, t, e) + }, dT.prototype.__destroy__ = function() { + dC(this.kB) + }, fT.prototype = Object.create(GD.prototype), fT.prototype.constructor = fT, fT.prototype.lB = fT, fT.mB = {}, n.btPairCachingGhostObject = fT, fT.prototype.setAnisotropicFriction = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), hC(n, t, e) + }, fT.prototype.getCollisionShape = function() { + return JR(BC(this.kB), cD) + }, fT.prototype.setContactProcessingThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), gC(e, t) + }, fT.prototype.setActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kC(e, t) + }, fT.prototype.forceActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), CC(e, t) + }, fT.prototype.activate = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), void 0 === t ? SC(e) : jC(e, t) + }, fT.prototype.isActive = function() { + return !!vC(this.kB) + }, fT.prototype.isKinematicObject = function() { + return !!IC(this.kB) + }, fT.prototype.isStaticObject = function() { + return !!RC(this.kB) + }, fT.prototype.isStaticOrKinematicObject = function() { + return !!DC(this.kB) + }, fT.prototype.getRestitution = function() { + return PC(this.kB) + }, fT.prototype.getFriction = function() { + return TC(this.kB) + }, fT.prototype.getRollingFriction = function() { + return OC(this.kB) + }, fT.prototype.setRestitution = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), WC(e, t) + }, fT.prototype.setFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), AC(e, t) + }, fT.prototype.setRollingFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), MC(e, t) + }, fT.prototype.getWorldTransform = function() { + return JR(xC(this.kB), zD) + }, fT.prototype.getCollisionFlags = function() { + return FC(this.kB) + }, fT.prototype.setCollisionFlags = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), LC(e, t) + }, fT.prototype.setWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), GC(e, t) + }, fT.prototype.setCollisionShape = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), wC(e, t) + }, fT.prototype.setCcdMotionThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), HC(e, t) + }, fT.prototype.setCcdSweptSphereRadius = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), VC(e, t) + }, fT.prototype.getUserIndex = function() { + return EC(this.kB) + }, fT.prototype.setUserIndex = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), NC(e, t) + }, fT.prototype.getUserPointer = function() { + return JR(UC(this.kB), HD) + }, fT.prototype.setUserPointer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), zC(e, t) + }, fT.prototype.getBroadphaseHandle = function() { + return JR(qC(this.kB), XP) + }, fT.prototype.getNumOverlappingObjects = function() { + return KC(this.kB) + }, fT.prototype.getOverlappingObject = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(QC(e, t), lD) + }, fT.prototype.__destroy__ = function() { + XC(this.kB) + }, hT.prototype = Object.create(ZR.prototype), hT.prototype.constructor = hT, hT.prototype.lB = hT, hT.mB = {}, n.btGhostPairCallback = hT, hT.prototype.__destroy__ = function() { + YC(this.kB) + }, BT.prototype = Object.create(ZR.prototype), BT.prototype.constructor = BT, BT.prototype.lB = BT, BT.mB = {}, n.btSoftBodyWorldInfo = BT, BT.prototype.get_air_density = BT.prototype.cC = function() { + return $C(this.kB) + }, BT.prototype.set_air_density = BT.prototype.UE = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), tS(e, t) + }, Object.defineProperty(BT.prototype, "air_density", { + get: BT.prototype.cC, + set: BT.prototype.UE + }), BT.prototype.get_water_density = BT.prototype.RE = function() { + return eS(this.kB) + }, BT.prototype.set_water_density = BT.prototype.JH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), nS(e, t) + }, Object.defineProperty(BT.prototype, "water_density", { + get: BT.prototype.RE, + set: BT.prototype.JH + }), BT.prototype.get_water_offset = BT.prototype.TE = function() { + return oS(this.kB) + }, BT.prototype.set_water_offset = BT.prototype.LH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _S(e, t) + }, Object.defineProperty(BT.prototype, "water_offset", { + get: BT.prototype.TE, + set: BT.prototype.LH + }), BT.prototype.get_m_maxDisplacement = BT.prototype.ND = function() { + return iS(this.kB) + }, BT.prototype.set_m_maxDisplacement = BT.prototype.EG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rS(e, t) + }, Object.defineProperty(BT.prototype, "m_maxDisplacement", { + get: BT.prototype.ND, + set: BT.prototype.EG + }), BT.prototype.get_water_normal = BT.prototype.SE = function() { + return JR(pS(this.kB), fD) + }, BT.prototype.set_water_normal = BT.prototype.KH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), sS(e, t) + }, Object.defineProperty(BT.prototype, "water_normal", { + get: BT.prototype.SE, + set: BT.prototype.KH + }), BT.prototype.get_m_broadphase = BT.prototype.MC = function() { + return JR(cS(this.kB), qP) + }, BT.prototype.set_m_broadphase = BT.prototype.DF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), aS(e, t) + }, Object.defineProperty(BT.prototype, "m_broadphase", { + get: BT.prototype.MC, + set: BT.prototype.DF + }), BT.prototype.get_m_dispatcher = BT.prototype.dD = function() { + return JR(lS(this.kB), AD) + }, BT.prototype.set_m_dispatcher = BT.prototype.VF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uS(e, t) + }, Object.defineProperty(BT.prototype, "m_dispatcher", { + get: BT.prototype.dD, + set: BT.prototype.VF + }), BT.prototype.get_m_gravity = BT.prototype.mD = function() { + return JR(bS(this.kB), fD) + }, BT.prototype.set_m_gravity = BT.prototype.dG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mS(e, t) + }, Object.defineProperty(BT.prototype, "m_gravity", { + get: BT.prototype.mD, + set: BT.prototype.dG + }), BT.prototype.__destroy__ = function() { + yS(this.kB) + }, gT.prototype = Object.create(ZR.prototype), gT.prototype.constructor = gT, gT.prototype.lB = gT, gT.mB = {}, n.Face = gT, gT.prototype.get_m_n = gT.prototype.MB = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(dS(e, t), CT) + }, gT.prototype.set_m_n = gT.prototype.WB = function(t, e) { + var n = this.kB; + _D(), t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), fS(n, t, e) + }, Object.defineProperty(gT.prototype, "m_n", { + get: gT.prototype.MB, + set: gT.prototype.WB + }), gT.prototype.get_m_normal = gT.prototype.RD = function() { + return JR(hS(this.kB), fD) + }, gT.prototype.set_m_normal = gT.prototype.IG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), BS(e, t) + }, Object.defineProperty(gT.prototype, "m_normal", { + get: gT.prototype.RD, + set: gT.prototype.IG + }), gT.prototype.get_m_ra = gT.prototype.$D = function() { + return gS(this.kB) + }, gT.prototype.set_m_ra = gT.prototype.SG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kS(e, t) + }, Object.defineProperty(gT.prototype, "m_ra", { + get: gT.prototype.$D, + set: gT.prototype.SG + }), gT.prototype.__destroy__ = function() { + CS(this.kB) + }, kT.prototype = Object.create(ZR.prototype), kT.prototype.constructor = kT, kT.prototype.lB = kT, kT.mB = {}, n.tFaceArray = kT, kT.prototype.size = kT.prototype.size = function() { + return SS(this.kB) + }, kT.prototype.at = kT.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(jS(e, t), gT) + }, kT.prototype.__destroy__ = function() { + vS(this.kB) + }, CT.prototype = Object.create(ZR.prototype), CT.prototype.constructor = CT, CT.prototype.lB = CT, CT.mB = {}, n.Node = CT, CT.prototype.get_m_x = CT.prototype.IE = function() { + return JR(IS(this.kB), fD) + }, CT.prototype.set_m_x = CT.prototype.AH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), RS(e, t) + }, Object.defineProperty(CT.prototype, "m_x", { + get: CT.prototype.IE, + set: CT.prototype.AH + }), CT.prototype.get_m_q = CT.prototype.ZD = function() { + return JR(DS(this.kB), fD) + }, CT.prototype.set_m_q = CT.prototype.QG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), PS(e, t) + }, Object.defineProperty(CT.prototype, "m_q", { + get: CT.prototype.ZD, + set: CT.prototype.QG + }), CT.prototype.get_m_v = CT.prototype.AE = function() { + return JR(TS(this.kB), fD) + }, CT.prototype.set_m_v = CT.prototype.sH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), OS(e, t) + }, Object.defineProperty(CT.prototype, "m_v", { + get: CT.prototype.AE, + set: CT.prototype.sH + }), CT.prototype.get_m_f = CT.prototype.jD = function() { + return JR(WS(this.kB), fD) + }, CT.prototype.set_m_f = CT.prototype.aG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), AS(e, t) + }, Object.defineProperty(CT.prototype, "m_f", { + get: CT.prototype.jD, + set: CT.prototype.aG + }), CT.prototype.get_m_n = CT.prototype.MB = function() { + return JR(MS(this.kB), fD) + }, CT.prototype.set_m_n = CT.prototype.WB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), xS(e, t) + }, Object.defineProperty(CT.prototype, "m_n", { + get: CT.prototype.MB, + set: CT.prototype.WB + }), CT.prototype.get_m_im = CT.prototype.vD = function() { + return FS(this.kB) + }, CT.prototype.set_m_im = CT.prototype.mG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), LS(e, t) + }, Object.defineProperty(CT.prototype, "m_im", { + get: CT.prototype.vD, + set: CT.prototype.mG + }), CT.prototype.get_m_area = CT.prototype.JC = function() { + return GS(this.kB) + }, CT.prototype.set_m_area = CT.prototype.AF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), wS(e, t) + }, Object.defineProperty(CT.prototype, "m_area", { + get: CT.prototype.JC, + set: CT.prototype.AF + }), CT.prototype.__destroy__ = function() { + HS(this.kB) + }, ST.prototype = Object.create(ZR.prototype), ST.prototype.constructor = ST, ST.prototype.lB = ST, ST.mB = {}, n.tNodeArray = ST, ST.prototype.size = ST.prototype.size = function() { + return VS(this.kB) + }, ST.prototype.at = ST.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(ES(e, t), CT) + }, ST.prototype.__destroy__ = function() { + NS(this.kB) + }, jT.prototype = Object.create(ZR.prototype), jT.prototype.constructor = jT, jT.prototype.lB = jT, jT.mB = {}, n.Material = jT, jT.prototype.get_m_kLST = jT.prototype.BD = function() { + return US(this.kB) + }, jT.prototype.set_m_kLST = jT.prototype.sG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), zS(e, t) + }, Object.defineProperty(jT.prototype, "m_kLST", { + get: jT.prototype.BD, + set: jT.prototype.sG + }), jT.prototype.get_m_kAST = jT.prototype.AD = function() { + return qS(this.kB) + }, jT.prototype.set_m_kAST = jT.prototype.rG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), KS(e, t) + }, Object.defineProperty(jT.prototype, "m_kAST", { + get: jT.prototype.AD, + set: jT.prototype.rG + }), jT.prototype.get_m_kVST = jT.prototype.CD = function() { + return QS(this.kB) + }, jT.prototype.set_m_kVST = jT.prototype.tG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), XS(e, t) + }, Object.defineProperty(jT.prototype, "m_kVST", { + get: jT.prototype.CD, + set: jT.prototype.tG + }), jT.prototype.get_m_flags = jT.prototype.tB = function() { + return ZS(this.kB) + }, jT.prototype.set_m_flags = jT.prototype.uB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), YS(e, t) + }, Object.defineProperty(jT.prototype, "m_flags", { + get: jT.prototype.tB, + set: jT.prototype.uB + }), jT.prototype.__destroy__ = function() { + JS(this.kB) + }, vT.prototype = Object.create(ZR.prototype), vT.prototype.constructor = vT, vT.prototype.lB = vT, vT.mB = {}, n.tMaterialArray = vT, vT.prototype.size = vT.prototype.size = function() { + return $S(this.kB) + }, vT.prototype.at = vT.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(tj(e, t), jT) + }, vT.prototype.__destroy__ = function() { + ej(this.kB) + }, IT.prototype = Object.create(ZR.prototype), IT.prototype.constructor = IT, IT.prototype.lB = IT, IT.mB = {}, n.Anchor = IT, IT.prototype.get_m_node = IT.prototype.PD = function() { + return JR(nj(this.kB), CT) + }, IT.prototype.set_m_node = IT.prototype.GG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), oj(e, t) + }, Object.defineProperty(IT.prototype, "m_node", { + get: IT.prototype.PD, + set: IT.prototype.GG + }), IT.prototype.get_m_local = IT.prototype.FD = function() { + return JR(_j(this.kB), fD) + }, IT.prototype.set_m_local = IT.prototype.wG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), ij(e, t) + }, Object.defineProperty(IT.prototype, "m_local", { + get: IT.prototype.FD, + set: IT.prototype.wG + }), IT.prototype.get_m_body = IT.prototype.KC = function() { + return JR(rj(this.kB), YP) + }, IT.prototype.set_m_body = IT.prototype.BF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), pj(e, t) + }, Object.defineProperty(IT.prototype, "m_body", { + get: IT.prototype.KC, + set: IT.prototype.BF + }), IT.prototype.get_m_influence = IT.prototype.yD = function() { + return sj(this.kB) + }, IT.prototype.set_m_influence = IT.prototype.pG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), cj(e, t) + }, Object.defineProperty(IT.prototype, "m_influence", { + get: IT.prototype.yD, + set: IT.prototype.pG + }), IT.prototype.get_m_c0 = IT.prototype.NC = function() { + return JR(aj(this.kB), UD) + }, IT.prototype.set_m_c0 = IT.prototype.EF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lj(e, t) + }, Object.defineProperty(IT.prototype, "m_c0", { + get: IT.prototype.NC, + set: IT.prototype.EF + }), IT.prototype.get_m_c1 = IT.prototype.OC = function() { + return JR(uj(this.kB), fD) + }, IT.prototype.set_m_c1 = IT.prototype.FF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bj(e, t) + }, Object.defineProperty(IT.prototype, "m_c1", { + get: IT.prototype.OC, + set: IT.prototype.FF + }), IT.prototype.get_m_c2 = IT.prototype.PC = function() { + return mj(this.kB) + }, IT.prototype.set_m_c2 = IT.prototype.GF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), yj(e, t) + }, Object.defineProperty(IT.prototype, "m_c2", { + get: IT.prototype.PC, + set: IT.prototype.GF + }), IT.prototype.__destroy__ = function() { + dj(this.kB) + }, RT.prototype = Object.create(ZR.prototype), RT.prototype.constructor = RT, RT.prototype.lB = RT, RT.mB = {}, n.tAnchorArray = RT, RT.prototype.size = RT.prototype.size = function() { + return fj(this.kB) + }, RT.prototype.at = RT.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(hj(e, t), IT) + }, RT.prototype.clear = RT.prototype.clear = function() { + Bj(this.kB) + }, RT.prototype.push_back = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), gj(e, t) + }, RT.prototype.pop_back = function() { + kj(this.kB) + }, RT.prototype.__destroy__ = function() { + Cj(this.kB) + }, DT.prototype = Object.create(ZR.prototype), DT.prototype.constructor = DT, DT.prototype.lB = DT, DT.mB = {}, n.Config = DT, DT.prototype.get_kVCF = DT.prototype.zC = function() { + return Sj(this.kB) + }, DT.prototype.set_kVCF = DT.prototype.qF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), jj(e, t) + }, Object.defineProperty(DT.prototype, "kVCF", { + get: DT.prototype.zC, + set: DT.prototype.qF + }), DT.prototype.get_kDP = DT.prototype.mC = function() { + return vj(this.kB) + }, DT.prototype.set_kDP = DT.prototype.dF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ij(e, t) + }, Object.defineProperty(DT.prototype, "kDP", { + get: DT.prototype.mC, + set: DT.prototype.dF + }), DT.prototype.get_kDG = DT.prototype.lC = function() { + return Rj(this.kB) + }, DT.prototype.set_kDG = DT.prototype.cF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Dj(e, t) + }, Object.defineProperty(DT.prototype, "kDG", { + get: DT.prototype.lC, + set: DT.prototype.cF + }), DT.prototype.get_kLF = DT.prototype.oC = function() { + return Pj(this.kB) + }, DT.prototype.set_kLF = DT.prototype.fF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Tj(e, t) + }, Object.defineProperty(DT.prototype, "kLF", { + get: DT.prototype.oC, + set: DT.prototype.fF + }), DT.prototype.get_kPR = DT.prototype.qC = function() { + return Oj(this.kB) + }, DT.prototype.set_kPR = DT.prototype.hF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Wj(e, t) + }, Object.defineProperty(DT.prototype, "kPR", { + get: DT.prototype.qC, + set: DT.prototype.hF + }), DT.prototype.get_kVC = DT.prototype.yC = function() { + return Aj(this.kB) + }, DT.prototype.set_kVC = DT.prototype.pF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Mj(e, t) + }, Object.defineProperty(DT.prototype, "kVC", { + get: DT.prototype.yC, + set: DT.prototype.pF + }), DT.prototype.get_kDF = DT.prototype.kC = function() { + return xj(this.kB) + }, DT.prototype.set_kDF = DT.prototype.bF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Fj(e, t) + }, Object.defineProperty(DT.prototype, "kDF", { + get: DT.prototype.kC, + set: DT.prototype.bF + }), DT.prototype.get_kMT = DT.prototype.pC = function() { + return Lj(this.kB) + }, DT.prototype.set_kMT = DT.prototype.gF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gj(e, t) + }, Object.defineProperty(DT.prototype, "kMT", { + get: DT.prototype.pC, + set: DT.prototype.gF + }), DT.prototype.get_kCHR = DT.prototype.jC = function() { + return wj(this.kB) + }, DT.prototype.set_kCHR = DT.prototype.aF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Hj(e, t) + }, Object.defineProperty(DT.prototype, "kCHR", { + get: DT.prototype.jC, + set: DT.prototype.aF + }), DT.prototype.get_kKHR = DT.prototype.nC = function() { + return Vj(this.kB) + }, DT.prototype.set_kKHR = DT.prototype.eF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Ej(e, t) + }, Object.defineProperty(DT.prototype, "kKHR", { + get: DT.prototype.nC, + set: DT.prototype.eF + }), DT.prototype.get_kSHR = DT.prototype.rC = function() { + return Nj(this.kB) + }, DT.prototype.set_kSHR = DT.prototype.iF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Uj(e, t) + }, Object.defineProperty(DT.prototype, "kSHR", { + get: DT.prototype.rC, + set: DT.prototype.iF + }), DT.prototype.get_kAHR = DT.prototype.iC = function() { + return zj(this.kB) + }, DT.prototype.set_kAHR = DT.prototype.$E = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), qj(e, t) + }, Object.defineProperty(DT.prototype, "kAHR", { + get: DT.prototype.iC, + set: DT.prototype.$E + }), DT.prototype.get_kSRHR_CL = DT.prototype.uC = function() { + return Kj(this.kB) + }, DT.prototype.set_kSRHR_CL = DT.prototype.lF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qj(e, t) + }, Object.defineProperty(DT.prototype, "kSRHR_CL", { + get: DT.prototype.uC, + set: DT.prototype.lF + }), DT.prototype.get_kSKHR_CL = DT.prototype.sC = function() { + return Xj(this.kB) + }, DT.prototype.set_kSKHR_CL = DT.prototype.jF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Zj(e, t) + }, Object.defineProperty(DT.prototype, "kSKHR_CL", { + get: DT.prototype.sC, + set: DT.prototype.jF + }), DT.prototype.get_kSSHR_CL = DT.prototype.wC = function() { + return Yj(this.kB) + }, DT.prototype.set_kSSHR_CL = DT.prototype.nF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Jj(e, t) + }, Object.defineProperty(DT.prototype, "kSSHR_CL", { + get: DT.prototype.wC, + set: DT.prototype.nF + }), DT.prototype.get_kSR_SPLT_CL = DT.prototype.vC = function() { + return $j(this.kB) + }, DT.prototype.set_kSR_SPLT_CL = DT.prototype.mF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), tv(e, t) + }, Object.defineProperty(DT.prototype, "kSR_SPLT_CL", { + get: DT.prototype.vC, + set: DT.prototype.mF + }), DT.prototype.get_kSK_SPLT_CL = DT.prototype.tC = function() { + return ev(this.kB) + }, DT.prototype.set_kSK_SPLT_CL = DT.prototype.kF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), nv(e, t) + }, Object.defineProperty(DT.prototype, "kSK_SPLT_CL", { + get: DT.prototype.tC, + set: DT.prototype.kF + }), DT.prototype.get_kSS_SPLT_CL = DT.prototype.xC = function() { + return ov(this.kB) + }, DT.prototype.set_kSS_SPLT_CL = DT.prototype.oF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), _v(e, t) + }, Object.defineProperty(DT.prototype, "kSS_SPLT_CL", { + get: DT.prototype.xC, + set: DT.prototype.oF + }), DT.prototype.get_maxvolume = DT.prototype.JE = function() { + return iv(this.kB) + }, DT.prototype.set_maxvolume = DT.prototype.BH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rv(e, t) + }, Object.defineProperty(DT.prototype, "maxvolume", { + get: DT.prototype.JE, + set: DT.prototype.BH + }), DT.prototype.get_timescale = DT.prototype.OE = function() { + return pv(this.kB) + }, DT.prototype.set_timescale = DT.prototype.GH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), sv(e, t) + }, Object.defineProperty(DT.prototype, "timescale", { + get: DT.prototype.OE, + set: DT.prototype.GH + }), DT.prototype.get_viterations = DT.prototype.QE = function() { + return cv(this.kB) + }, DT.prototype.set_viterations = DT.prototype.IH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), av(e, t) + }, Object.defineProperty(DT.prototype, "viterations", { + get: DT.prototype.QE, + set: DT.prototype.IH + }), DT.prototype.get_piterations = DT.prototype.ME = function() { + return lv(this.kB) + }, DT.prototype.set_piterations = DT.prototype.EH = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uv(e, t) + }, Object.defineProperty(DT.prototype, "piterations", { + get: DT.prototype.ME, + set: DT.prototype.EH + }), DT.prototype.get_diterations = DT.prototype.fC = function() { + return bv(this.kB) + }, DT.prototype.set_diterations = DT.prototype.XE = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mv(e, t) + }, Object.defineProperty(DT.prototype, "diterations", { + get: DT.prototype.fC, + set: DT.prototype.XE + }), DT.prototype.get_citerations = DT.prototype.dC = function() { + return yv(this.kB) + }, DT.prototype.set_citerations = DT.prototype.VE = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), dv(e, t) + }, Object.defineProperty(DT.prototype, "citerations", { + get: DT.prototype.dC, + set: DT.prototype.VE + }), DT.prototype.get_collisions = DT.prototype.eC = function() { + return fv(this.kB) + }, DT.prototype.set_collisions = DT.prototype.WE = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hv(e, t) + }, Object.defineProperty(DT.prototype, "collisions", { + get: DT.prototype.eC, + set: DT.prototype.WE + }), DT.prototype.__destroy__ = function() { + Bv(this.kB) + }, PT.prototype = Object.create(lD.prototype), PT.prototype.constructor = PT, PT.prototype.lB = PT, PT.mB = {}, n.btSoftBody = PT, PT.prototype.checkLink = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), !!kv(n, t, e) + }, PT.prototype.checkFace = function(t, e, n) { + var o = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), !!Cv(o, t, e, n) + }, PT.prototype.appendMaterial = function() { + return JR(Sv(this.kB), jT) + }, PT.prototype.appendNode = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), jv(n, t, e) + }, PT.prototype.appendLink = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), vv(_, t, e, n, o) + }, PT.prototype.appendFace = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), Iv(_, t, e, n, o) + }, PT.prototype.appendTetra = function(t, e, n, o, _) { + var i = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), Rv(i, t, e, n, o, _) + }, PT.prototype.appendAnchor = function(t, e, n, o) { + var _ = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), Dv(_, t, e, n, o) + }, PT.prototype.addForce = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), void 0 === e ? Pv(n, t) : Tv(n, t, e) + }, PT.prototype.addAeroForceToNode = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Ov(n, t, e) + }, PT.prototype.getTotalMass = function() { + return Wv(this.kB) + }, PT.prototype.setTotalMass = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Av(n, t, e) + }, PT.prototype.setMass = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Mv(n, t, e) + }, PT.prototype.transform = PT.prototype.transform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), xv(e, t) + }, PT.prototype.translate = PT.prototype.translate = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Fv(e, t) + }, PT.prototype.rotate = PT.prototype.rotate = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Lv(e, t) + }, PT.prototype.scale = PT.prototype.scale = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Gv(e, t) + }, PT.prototype.generateClusters = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), void 0 === e ? wv(n, t) : Hv(n, t, e) + }, PT.prototype.generateBendingConstraints = function(t, e) { + var n = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), Vv(n, t, e) + }, PT.prototype.upcast = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(Ev(e, t), PT) + }, PT.prototype.getRestLengthScale = function() { + return Nv(this.kB) + }, PT.prototype.setRestLengthScale = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Uv(e, t) + }, PT.prototype.setAnisotropicFriction = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), zv(n, t, e) + }, PT.prototype.getCollisionShape = function() { + return JR(qv(this.kB), cD) + }, PT.prototype.setContactProcessingThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Kv(e, t) + }, PT.prototype.setActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Qv(e, t) + }, PT.prototype.forceActivationState = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), Xv(e, t) + }, PT.prototype.activate = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), void 0 === t ? Zv(e) : Yv(e, t) + }, PT.prototype.isActive = function() { + return !!Jv(this.kB) + }, PT.prototype.isKinematicObject = function() { + return !!$v(this.kB) + }, PT.prototype.isStaticObject = function() { + return !!tI(this.kB) + }, PT.prototype.isStaticOrKinematicObject = function() { + return !!eI(this.kB) + }, PT.prototype.getRestitution = function() { + return nI(this.kB) + }, PT.prototype.getFriction = function() { + return oI(this.kB) + }, PT.prototype.getRollingFriction = function() { + return _I(this.kB) + }, PT.prototype.setRestitution = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), iI(e, t) + }, PT.prototype.setFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), rI(e, t) + }, PT.prototype.setRollingFriction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), pI(e, t) + }, PT.prototype.getWorldTransform = function() { + return JR(sI(this.kB), zD) + }, PT.prototype.getCollisionFlags = function() { + return cI(this.kB) + }, PT.prototype.setCollisionFlags = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), aI(e, t) + }, PT.prototype.setWorldTransform = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lI(e, t) + }, PT.prototype.setCollisionShape = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), uI(e, t) + }, PT.prototype.setCcdMotionThreshold = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), bI(e, t) + }, PT.prototype.setCcdSweptSphereRadius = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mI(e, t) + }, PT.prototype.getUserIndex = function() { + return yI(this.kB) + }, PT.prototype.setUserIndex = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), dI(e, t) + }, PT.prototype.getUserPointer = function() { + return JR(fI(this.kB), HD) + }, PT.prototype.setUserPointer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hI(e, t) + }, PT.prototype.getBroadphaseHandle = function() { + return JR(BI(this.kB), XP) + }, PT.prototype.get_m_cfg = PT.prototype.QC = function() { + return JR(gI(this.kB), DT) + }, PT.prototype.set_m_cfg = PT.prototype.HF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kI(e, t) + }, Object.defineProperty(PT.prototype, "m_cfg", { + get: PT.prototype.QC, + set: PT.prototype.HF + }), PT.prototype.get_m_nodes = PT.prototype.QD = function() { + return JR(CI(this.kB), ST) + }, PT.prototype.set_m_nodes = PT.prototype.HG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), SI(e, t) + }, Object.defineProperty(PT.prototype, "m_nodes", { + get: PT.prototype.QD, + set: PT.prototype.HG + }), PT.prototype.get_m_faces = PT.prototype.KB = function() { + return JR(jI(this.kB), kT) + }, PT.prototype.set_m_faces = PT.prototype.UB = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), vI(e, t) + }, Object.defineProperty(PT.prototype, "m_faces", { + get: PT.prototype.KB, + set: PT.prototype.UB + }), PT.prototype.get_m_materials = PT.prototype.MD = function() { + return JR(II(this.kB), vT) + }, PT.prototype.set_m_materials = PT.prototype.DG = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), RI(e, t) + }, Object.defineProperty(PT.prototype, "m_materials", { + get: PT.prototype.MD, + set: PT.prototype.DG + }), PT.prototype.get_m_anchors = PT.prototype.GC = function() { + return JR(DI(this.kB), RT) + }, PT.prototype.set_m_anchors = PT.prototype.xF = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), PI(e, t) + }, Object.defineProperty(PT.prototype, "m_anchors", { + get: PT.prototype.GC, + set: PT.prototype.xF + }), PT.prototype.__destroy__ = function() { + TI(this.kB) + }, TT.prototype = Object.create(WD.prototype), TT.prototype.constructor = TT, TT.prototype.lB = TT, TT.mB = {}, n.btSoftBodyRigidBodyCollisionConfiguration = TT, TT.prototype.__destroy__ = function() { + AI(this.kB) + }, OT.prototype = Object.create(wD.prototype), OT.prototype.constructor = OT, OT.prototype.lB = OT, OT.mB = {}, n.btDefaultSoftBodySolver = OT, OT.prototype.__destroy__ = function() { + xI(this.kB) + }, WT.prototype = Object.create(ZR.prototype), WT.prototype.constructor = WT, WT.prototype.lB = WT, WT.mB = {}, n.btSoftBodyArray = WT, WT.prototype.size = WT.prototype.size = function() { + return FI(this.kB) + }, WT.prototype.at = WT.prototype.at = function(t) { + var e = this.kB; + return t && "object" == typeof t && (t = t.kB), JR(LI(e, t), PT) + }, WT.prototype.__destroy__ = function() { + GI(this.kB) + }, AT.prototype = Object.create(xD.prototype), AT.prototype.constructor = AT, AT.prototype.lB = AT, AT.mB = {}, n.btSoftRigidDynamicsWorld = AT, AT.prototype.addSoftBody = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), HI(o, t, e, n) + }, AT.prototype.removeSoftBody = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), VI(e, t) + }, AT.prototype.removeCollisionObject = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), EI(e, t) + }, AT.prototype.getWorldInfo = function() { + return JR(NI(this.kB), BT) + }, AT.prototype.getSoftBodyArray = function() { + return JR(UI(this.kB), WT) + }, AT.prototype.getDispatcher = function() { + return JR(zI(this.kB), AD) + }, AT.prototype.rayTest = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), qI(o, t, e, n) + }, AT.prototype.getPairCache = function() { + return JR(KI(this.kB), UP) + }, AT.prototype.getDispatchInfo = function() { + return JR(QI(this.kB), pT) + }, AT.prototype.addCollisionObject = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? XI(o, t) : void 0 === n ? ZI(o, t, e) : YI(o, t, e, n) + }, AT.prototype.getBroadphase = function() { + return JR(JI(this.kB), qP) + }, AT.prototype.convexSweepTest = function(t, e, n, o, _) { + var i = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), $I(i, t, e, n, o, _) + }, AT.prototype.contactPairTest = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), tR(o, t, e, n) + }, AT.prototype.contactTest = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), eR(n, t, e) + }, AT.prototype.updateSingleAabb = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), nR(e, t) + }, AT.prototype.setDebugDrawer = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), oR(e, t) + }, AT.prototype.getDebugDrawer = function() { + return JR(_R(this.kB), dD) + }, AT.prototype.debugDrawWorld = function() { + iR(this.kB) + }, AT.prototype.debugDrawObject = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), rR(o, t, e, n) + }, AT.prototype.setGravity = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), pR(e, t) + }, AT.prototype.getGravity = function() { + return JR(sR(this.kB), fD) + }, AT.prototype.addRigidBody = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? cR(o, t) : void 0 === n ? _emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_2(o, t, e) : aR(o, t, e, n) + }, AT.prototype.removeRigidBody = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), lR(e, t) + }, AT.prototype.addConstraint = function(t, e) { + var n = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), void 0 === e ? uR(n, t) : bR(n, t, e) + }, AT.prototype.removeConstraint = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), mR(e, t) + }, AT.prototype.stepSimulation = function(t, e, n) { + var o = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? yR(o, t) : void 0 === n ? dR(o, t, e) : fR(o, t, e, n) + }, AT.prototype.setContactAddedCallback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), hR(e, t) + }, AT.prototype.setContactProcessedCallback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), BR(e, t) + }, AT.prototype.setContactDestroyedCallback = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), gR(e, t) + }, AT.prototype.addAction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), kR(e, t) + }, AT.prototype.removeAction = function(t) { + var e = this.kB; + t && "object" == typeof t && (t = t.kB), CR(e, t) + }, AT.prototype.getSolverInfo = function() { + return JR(SR(this.kB), sT) + }, AT.prototype.setInternalTickCallback = function(t, e, n) { + var o = this.kB; + t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), void 0 === e ? jR(o, t) : void 0 === n ? vR(o, t, e) : IR(o, t, e, n) + }, AT.prototype.__destroy__ = function() { + RR(this.kB) + }, MT.prototype = Object.create(ZR.prototype), MT.prototype.constructor = MT, MT.prototype.lB = MT, MT.mB = {}, n.btSoftBodyHelpers = MT, MT.prototype.CreateRope = function(t, e, n, o, _) { + var i = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), JR(PR(i, t, e, n, o, _), PT) + }, MT.prototype.CreatePatch = function(t, e, n, o, _, i, r, p, s) { + var c = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), i && "object" == typeof i && (i = i.kB), r && "object" == typeof r && (r = r.kB), p && "object" == typeof p && (p = p.kB), s && "object" == typeof s && (s = s.kB), JR(TR(c, t, e, n, o, _, i, r, p, s), PT) + }, MT.prototype.CreatePatchUV = function(t, e, n, o, _, i, r, p, s, c) { + var a = this.kB; + return _D(), t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), i && "object" == typeof i && (i = i.kB), r && "object" == typeof r && (r = r.kB), p && "object" == typeof p && (p = p.kB), s && "object" == typeof s && (s = s.kB), "object" == typeof c && (c = sD(c)), JR(OR(a, t, e, n, o, _, i, r, p, s, c), PT) + }, MT.prototype.CreateEllipsoid = function(t, e, n, o) { + var _ = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), JR(WR(_, t, e, n, o), PT) + }, MT.prototype.CreateFromTriMesh = function(t, e, n, o, _) { + var i = this.kB; + if (_D(), t && "object" == typeof t && (t = t.kB), "object" == typeof e && (e = sD(e)), "object" == typeof n && "object" == typeof n) { + var r = iD(n, C); + rD(n, C, r), n = r + } + return o && "object" == typeof o && (o = o.kB), _ && "object" == typeof _ && (_ = _.kB), JR(AR(i, t, e, n, o, _), PT) + }, MT.prototype.CreateFromConvexHull = function(t, e, n, o) { + var _ = this.kB; + return t && "object" == typeof t && (t = t.kB), e && "object" == typeof e && (e = e.kB), n && "object" == typeof n && (n = n.kB), o && "object" == typeof o && (o = o.kB), JR(MR(_, t, e, n, o), PT) + }, MT.prototype.__destroy__ = function() { + xR(this.kB) + }, + function() { + function t() { + n.PHY_FLOAT = FR(), n.PHY_DOUBLE = LR(), n.PHY_INTEGER = GR(), n.PHY_SHORT = wR(), n.PHY_FIXEDPOINT88 = HR(), n.PHY_UCHAR = VR(), n.CONST_GIMPACT_COMPOUND_SHAPE = ER(), n.CONST_GIMPACT_TRIMESH_SHAPE_PART = NR(), n.CONST_GIMPACT_TRIMESH_SHAPE = UR(), n.BT_CONSTRAINT_ERP = zR(), n.BT_CONSTRAINT_STOP_ERP = qR(), n.BT_CONSTRAINT_CFM = KR(), n.BT_CONSTRAINT_STOP_CFM = QR() + } + P ? t() : R.unshift(t) + }(), n.CONTACT_ADDED_CALLBACK_SIGNATURE = "iiiiiiii", n.CONTACT_DESTROYED_CALLBACK_SIGNATURE = "ii", n.CONTACT_PROCESSED_CALLBACK_SIGNATURE = "iiii", n.INTERNAL_TICK_CALLBACK_SIGNATURE = "vif", this.Ammo = n, e.ready + } +})(); +"object" == typeof exports && "object" == typeof module ? module.exports = Ammo : "function" == typeof define && define.amd ? define([], (function() { + return Ammo +})) : "object" == typeof exports && (exports.Ammo = Ammo); \ No newline at end of file diff --git a/public/assets/g/polytrack/lib/draco/draco_decoder.wasm b/public/assets/g/polytrack/lib/draco/draco_decoder.wasm new file mode 100644 index 0000000000000000000000000000000000000000..e5a5e06eb51fb061a94a9682cc7e338038fae25c GIT binary patch literal 285747 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 z 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 jI`!dwO0TC5&f<9B@5#l>$GA4>>> 0, $jscomp.propertyToPolyfillSymbol[o] = $jscomp.IS_SYMBOL_NATIVE ? $jscomp.global.Symbol(o) : $jscomp.POLYFILL_PREFIX + r + "$" + o), $jscomp.defineProperty(n, $jscomp.propertyToPolyfillSymbol[o], { + configurable: !0, + writable: !0, + value: e + }))) +}, $jscomp.polyfill("Promise", (function(t) { + function e() { + this.batch_ = null + } + + function r(t) { + return t instanceof o ? t : new o((function(e, r) { + e(t) + })) + } + if (t && (!($jscomp.FORCE_POLYFILL_PROMISE || $jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION && void 0 === $jscomp.global.PromiseRejectionEvent) || !$jscomp.global.Promise || -1 === $jscomp.global.Promise.toString().indexOf("[native code]"))) return t; + e.prototype.asyncExecute = function(t) { + if (null == this.batch_) { + this.batch_ = []; + var e = this; + this.asyncExecuteFunction((function() { + e.executeBatch_() + })) + } + this.batch_.push(t) + }; + var n = $jscomp.global.setTimeout; + e.prototype.asyncExecuteFunction = function(t) { + n(t, 0) + }, e.prototype.executeBatch_ = function() { + for (; this.batch_ && this.batch_.length;) { + var t = this.batch_; + this.batch_ = []; + for (var e = 0; e < t.length; ++e) { + var r = t[e]; + t[e] = null; + try { + r() + } catch (t) { + this.asyncThrow_(t) + } + } + } + this.batch_ = null + }, e.prototype.asyncThrow_ = function(t) { + this.asyncExecuteFunction((function() { + throw t + })) + }; + var o = function(t) { + this.state_ = 0, this.result_ = void 0, this.onSettledCallbacks_ = [], this.isRejectionHandled_ = !1; + var e = this.createResolveAndReject_(); + try { + t(e.resolve, e.reject) + } catch (t) { + e.reject(t) + } + }; + o.prototype.createResolveAndReject_ = function() { + function t(t) { + return function(n) { + r || (r = !0, t.call(e, n)) + } + } + var e = this, + r = !1; + return { + resolve: t(this.resolveTo_), + reject: t(this.reject_) + } + }, o.prototype.resolveTo_ = function(t) { + if (t === this) this.reject_(new TypeError("A Promise cannot resolve to itself")); + else if (t instanceof o) this.settleSameAsPromise_(t); + else { + t: switch (typeof t) { + case "object": + var e = null != t; + break t; + case "function": + e = !0; + break t; + default: + e = !1 + } + e ? this.resolveToNonPromiseObj_(t) : this.fulfill_(t) + } + }, o.prototype.resolveToNonPromiseObj_ = function(t) { + var e = void 0; + try { + e = t.then + } catch (t) { + return void this.reject_(t) + } + "function" == typeof e ? this.settleSameAsThenable_(e, t) : this.fulfill_(t) + }, o.prototype.reject_ = function(t) { + this.settle_(2, t) + }, o.prototype.fulfill_ = function(t) { + this.settle_(1, t) + }, o.prototype.settle_ = function(t, e) { + if (0 != this.state_) throw Error("Cannot settle(" + t + ", " + e + "): Promise already settled in state" + this.state_); + this.state_ = t, this.result_ = e, 2 === this.state_ && this.scheduleUnhandledRejectionCheck_(), this.executeOnSettledCallbacks_() + }, o.prototype.scheduleUnhandledRejectionCheck_ = function() { + var t = this; + n((function() { + if (t.notifyUnhandledRejection_()) { + var e = $jscomp.global.console; + void 0 !== e && e.error(t.result_) + } + }), 1) + }, o.prototype.notifyUnhandledRejection_ = function() { + if (this.isRejectionHandled_) return !1; + var t = $jscomp.global.CustomEvent, + e = $jscomp.global.Event, + r = $jscomp.global.dispatchEvent; + return void 0 === r || ("function" == typeof t ? t = new t("unhandledrejection", { + cancelable: !0 + }) : "function" == typeof e ? t = new e("unhandledrejection", { + cancelable: !0 + }) : (t = $jscomp.global.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection", !1, !0, t), t.promise = this, t.reason = this.result_, r(t)) + }, o.prototype.executeOnSettledCallbacks_ = function() { + if (null != this.onSettledCallbacks_) { + for (var t = 0; t < this.onSettledCallbacks_.length; ++t) _.asyncExecute(this.onSettledCallbacks_[t]); + this.onSettledCallbacks_ = null + } + }; + var _ = new e; + return o.prototype.settleSameAsPromise_ = function(t) { + var e = this.createResolveAndReject_(); + t.callWhenSettled_(e.resolve, e.reject) + }, o.prototype.settleSameAsThenable_ = function(t, e) { + var r = this.createResolveAndReject_(); + try { + t.call(e, r.resolve, r.reject) + } catch (t) { + r.reject(t) + } + }, o.prototype.then = function(t, e) { + function r(t, e) { + return "function" == typeof t ? function(e) { + try { + n(t(e)) + } catch (t) { + _(t) + } + } : e + } + var n, _, i = new o((function(t, e) { + n = t, _ = e + })); + return this.callWhenSettled_(r(t, n), r(e, _)), i + }, o.prototype.catch = function(t) { + return this.then(void 0, t) + }, o.prototype.callWhenSettled_ = function(t, e) { + function r() { + switch (n.state_) { + case 1: + t(n.result_); + break; + case 2: + e(n.result_); + break; + default: + throw Error("Unexpected state: " + n.state_) + } + } + var n = this; + null == this.onSettledCallbacks_ ? _.asyncExecute(r) : this.onSettledCallbacks_.push(r), this.isRejectionHandled_ = !0 + }, o.resolve = r, o.reject = function(t) { + return new o((function(e, r) { + r(t) + })) + }, o.race = function(t) { + return new o((function(e, n) { + for (var o = $jscomp.makeIterator(t), _ = o.next(); !_.done; _ = o.next()) r(_.value).callWhenSettled_(e, n) + })) + }, o.all = function(t) { + var e = $jscomp.makeIterator(t), + n = e.next(); + return n.done ? r([]) : new o((function(t, o) { + function _(e) { + return function(r) { + i[e] = r, 0 == --p && t(i) + } + } + var i = [], + p = 0; + do { + i.push(void 0), p++, r(n.value).callWhenSettled_(_(i.length - 1), o), n = e.next() + } while (!n.done) + })) + }, o +}), "es6", "es3"), $jscomp.owns = function(t, e) { + return Object.prototype.hasOwnProperty.call(t, e) +}, $jscomp.assign = $jscomp.TRUST_ES6_POLYFILLS && "function" == typeof Object.assign ? Object.assign : function(t, e) { + for (var r = 1; r < arguments.length; r++) { + var n = arguments[r]; + if (n) + for (var o in n) $jscomp.owns(n, o) && (t[o] = n[o]) + } + return t +}, $jscomp.polyfill("Object.assign", (function(t) { + return t || $jscomp.assign +}), "es6", "es3"), $jscomp.checkStringArgs = function(t, e, r) { + if (null == t) throw new TypeError("The 'this' value for String.prototype." + r + " must not be null or undefined"); + if (e instanceof RegExp) throw new TypeError("First argument to String.prototype." + r + " must not be a regular expression"); + return t + "" +}, $jscomp.polyfill("String.prototype.startsWith", (function(t) { + return t || function(t, e) { + var r = $jscomp.checkStringArgs(this, t, "startsWith"); + t += ""; + var n = r.length, + o = t.length; + e = Math.max(0, Math.min(0 | e, r.length)); + for (var _ = 0; _ < o && e < n;) + if (r[e++] != t[_++]) return !1; + return _ >= o + } +}), "es6", "es3"), $jscomp.polyfill("Array.prototype.copyWithin", (function(t) { + function e(t) { + return 1 / 0 === (t = Number(t)) || -1 / 0 === t ? t : 0 | t + } + return t || function(t, r, n) { + var o = this.length; + if (t = e(t), r = e(r), n = void 0 === n ? o : e(n), t = 0 > t ? Math.max(o + t, 0) : Math.min(t, o), r = 0 > r ? Math.max(o + r, 0) : Math.min(r, o), n = 0 > n ? Math.max(o + n, 0) : Math.min(n, o), t < r) + for (; r < n;) r in this ? this[t++] = this[r++] : (delete this[t++], r++); + else + for (t += (n = Math.min(n, o + r - t)) - r; n > r;) --n in this ? this[--t] = this[n] : delete this[--t]; + return this + } +}), "es6", "es3"), $jscomp.typedArrayCopyWithin = function(t) { + return t || Array.prototype.copyWithin +}, $jscomp.polyfill("Int8Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"), $jscomp.polyfill("Uint8Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"), $jscomp.polyfill("Uint8ClampedArray.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"), $jscomp.polyfill("Int16Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"), $jscomp.polyfill("Uint16Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"), $jscomp.polyfill("Int32Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"), $jscomp.polyfill("Uint32Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"), $jscomp.polyfill("Float32Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"), $jscomp.polyfill("Float64Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); +var DracoDecoderModule = function() { + var t = "undefined" != typeof document && document.currentScript ? document.currentScript.src : void 0; + return "undefined" != typeof __filename && (t = t || __filename), + function(e) { + function r(t, e, r) { + var n = e + r; + for (r = e; t[r] && !(r >= n);) ++r; + if (16 < r - e && t.buffer && it) return it.decode(t.subarray(e, r)); + for (n = ""; e < r;) { + var o = t[e++]; + if (128 & o) { + var _ = 63 & t[e++]; + if (192 == (224 & o)) n += String.fromCharCode((31 & o) << 6 | _); + else { + var i = 63 & t[e++]; + 65536 > (o = 224 == (240 & o) ? (15 & o) << 12 | _ << 6 | i : (7 & o) << 18 | _ << 12 | i << 6 | 63 & t[e++]) ? n += String.fromCharCode(o) : (o -= 65536, n += String.fromCharCode(55296 | o >> 10, 56320 | 1023 & o)) + } + } else n += String.fromCharCode(o) + } + return n + } + + function n(t, e) { + return t ? r(et, t, e) : "" + } + + function o() { + var t = Z.buffer; + C.HEAP8 = tt = new Int8Array(t), C.HEAP16 = new Int16Array(t), C.HEAP32 = rt = new Int32Array(t), C.HEAPU8 = et = new Uint8Array(t), C.HEAPU16 = new Uint16Array(t), C.HEAPU32 = nt = new Uint32Array(t), C.HEAPF32 = new Float32Array(t), C.HEAPF64 = new Float64Array(t) + } + + function _(t) { + throw C.onAbort && C.onAbort(t), J(t = "Aborted(" + t + ")"), _t = !0, t = new WebAssembly.RuntimeError(t + ". Build with -sASSERTIONS for more info."), L(t), t + } + + function i(t) { + try { + if (t == ft && X) return new Uint8Array(X); + if (H) return H(t); + throw "both async and sync fetching of the wasm failed" + } catch (t) { + _(t) + } + } + + function p(t) { + for (; 0 < t.length;) t.shift()(C) + } + + function a(t) { + this.excPtr = t, this.ptr = t - 24, this.set_type = function(t) { + nt[this.ptr + 4 >> 2] = t + }, this.get_type = function() { + return nt[this.ptr + 4 >> 2] + }, this.set_destructor = function(t) { + nt[this.ptr + 8 >> 2] = t + }, this.get_destructor = function() { + return nt[this.ptr + 8 >> 2] + }, this.set_refcount = function(t) { + rt[this.ptr >> 2] = t + }, this.set_caught = function(t) { + tt[this.ptr + 12 | 0] = t ? 1 : 0 + }, this.get_caught = function() { + return 0 != tt[this.ptr + 12 | 0] + }, this.set_rethrown = function(t) { + tt[this.ptr + 13 | 0] = t ? 1 : 0 + }, this.get_rethrown = function() { + return 0 != tt[this.ptr + 13 | 0] + }, this.init = function(t, e) { + this.set_adjusted_ptr(0), this.set_type(t), this.set_destructor(e), this.set_refcount(0), this.set_caught(!1), this.set_rethrown(!1) + }, this.add_ref = function() { + rt[this.ptr >> 2] += 1 + }, this.release_ref = function() { + var t = rt[this.ptr >> 2]; + return rt[this.ptr >> 2] = t - 1, 1 === t + }, this.set_adjusted_ptr = function(t) { + nt[this.ptr + 16 >> 2] = t + }, this.get_adjusted_ptr = function() { + return nt[this.ptr + 16 >> 2] + }, this.get_exception_ptr = function() { + if (Zr(this.get_type())) return nt[this.excPtr >> 2]; + var t = this.get_adjusted_ptr(); + return 0 !== t ? t : this.excPtr + } + } + + function c() { + function t() { + if (!Jr && (Jr = !0, C.calledRun = !0, !_t)) { + if (st = !0, p(at), F(C), C.onRuntimeInitialized && C.onRuntimeInitialized(), C.postRun) + for ("function" == typeof C.postRun && (C.postRun = [C.postRun]); C.postRun.length;) ct.unshift(C.postRun.shift()); + p(ct) + } + } + if (!(0 < ut)) { + if (C.preRun) + for ("function" == typeof C.preRun && (C.preRun = [C.preRun]); C.preRun.length;) pt.unshift(C.preRun.shift()); + p(pt), 0 < ut || (C.setStatus ? (C.setStatus("Running..."), setTimeout((function() { + setTimeout((function() { + C.setStatus("") + }), 1), t() + }), 1)) : t()) + } + } + + function s() {} + + function u(t) { + return (t || s).__cache__ + } + + function y(t, e) { + var r = u(e), + n = r[t]; + return n || ((n = Object.create((e || s).prototype)).ptr = t, r[t] = n) + } + + function l(t) { + if ("string" == typeof t) { + for (var e = 0, r = 0; r < t.length; ++r) { + var n = t.charCodeAt(r); + 127 >= n ? e++ : 2047 >= n ? e += 2 : 55296 <= n && 57343 >= n ? (e += 4, ++r) : e += 3 + } + if (r = 0, 0 < (n = (e = Array(e + 1)).length)) { + n = r + n - 1; + for (var o = 0; o < t.length; ++o) { + var _ = t.charCodeAt(o); + if (55296 <= _ && 57343 >= _) _ = 65536 + ((1023 & _) << 10) | 1023 & t.charCodeAt(++o); + if (127 >= _) { + if (r >= n) break; + e[r++] = _ + } else { + if (2047 >= _) { + if (r + 1 >= n) break; + e[r++] = 192 | _ >> 6 + } else { + if (65535 >= _) { + if (r + 2 >= n) break; + e[r++] = 224 | _ >> 12 + } else { + if (r + 3 >= n) break; + e[r++] = 240 | _ >> 18, e[r++] = 128 | _ >> 12 & 63 + } + e[r++] = 128 | _ >> 6 & 63 + } + e[r++] = 128 | 63 & _ + } + } + e[r] = 0 + } + return t = tn.alloc(e, tt), tn.copy(e, tt, t), t + } + return t + } + + function f(t) { + if ("object" == typeof t) { + var e = tn.alloc(t, tt); + return tn.copy(t, tt, e), e + } + return t + } + + function m() { + throw "cannot construct a VoidPtr, no constructor in IDL" + } + + function d() { + this.ptr = ht(), u(d)[this.ptr] = this + } + + function b() { + this.ptr = Dt(), u(b)[this.ptr] = this + } + + function h() { + this.ptr = Et(), u(h)[this.ptr] = this + } + + function A() { + this.ptr = vt(), u(A)[this.ptr] = this + } + + function T() { + this.ptr = Ct(), u(T)[this.ptr] = this + } + + function D() { + this.ptr = Wt(), u(D)[this.ptr] = this + } + + function I() { + this.ptr = Yt(), u(I)[this.ptr] = this + } + + function j() { + this.ptr = Kt(), u(j)[this.ptr] = this + } + + function E() { + this.ptr = re(), u(E)[this.ptr] = this + } + + function G() { + throw "cannot construct a Status, no constructor in IDL" + } + + function v() { + this.ptr = ae(), u(v)[this.ptr] = this + } + + function O() { + this.ptr = ye(), u(O)[this.ptr] = this + } + + function P() { + this.ptr = de(), u(P)[this.ptr] = this + } + + function R() { + this.ptr = Te(), u(R)[this.ptr] = this + } + + function S() { + this.ptr = Ee(), u(S)[this.ptr] = this + } + + function M() { + this.ptr = Pe(), u(M)[this.ptr] = this + } + + function N() { + this.ptr = Ne(), u(N)[this.ptr] = this + } + + function U() { + this.ptr = Le(), u(U)[this.ptr] = this + } + + function g() { + this.ptr = xe(), u(g)[this.ptr] = this + } + var F, L, C = void 0 !== (e = void 0 === e ? {} : e) ? e : {}; + C.ready = new Promise((function(t, e) { + F = t, L = e + })); + var $ = !1, + w = !1; + C.onRuntimeInitialized = function() { + $ = !0, w && "function" == typeof C.onModuleLoaded && C.onModuleLoaded(C) + }, C.onModuleParsed = function() { + w = !0, $ && "function" == typeof C.onModuleLoaded && C.onModuleLoaded(C) + }, C.isVersionSupported = function(t) { + return "string" == typeof t && (!(2 > (t = t.split(".")).length || 3 < t.length) && (1 == t[0] && 0 <= t[1] && 5 >= t[1] || !(0 != t[0] || 10 < t[1]))) + }; + var z = Object.assign({}, C), + V = "object" == typeof window, + B = "function" == typeof importScripts, + W = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, + k = ""; + if (W) { + var x = require("fs"), + Q = require("path"); + k = B ? Q.dirname(k) + "/" : __dirname + "/"; + var Y = function(t, e) { + return t = t.startsWith("file://") ? new URL(t) : Q.normalize(t), x.readFileSync(t, e ? void 0 : "utf8") + }, + H = function(t) { + return (t = Y(t, !0)).buffer || (t = new Uint8Array(t)), t + }, + q = function(t, e, r) { + t = t.startsWith("file://") ? new URL(t) : Q.normalize(t), x.readFile(t, (function(t, n) { + t ? r(t) : e(n.buffer) + })) + }; + 1 < process.argv.length && process.argv[1].replace(/\\/g, "/"), process.argv.slice(2), C.inspect = function() { + return "[Emscripten Module object]" + } + } else(V || B) && (B ? k = self.location.href : "undefined" != typeof document && document.currentScript && (k = document.currentScript.src), t && (k = t), k = 0 !== k.indexOf("blob:") ? k.substr(0, k.replace(/[?#].*/, "").lastIndexOf("/") + 1) : "", Y = function(t) { + var e = new XMLHttpRequest; + return e.open("GET", t, !1), e.send(null), e.responseText + }, B && (H = function(t) { + var e = new XMLHttpRequest; + return e.open("GET", t, !1), e.responseType = "arraybuffer", e.send(null), new Uint8Array(e.response) + }), q = function(t, e, r) { + var n = new XMLHttpRequest; + n.open("GET", t, !0), n.responseType = "arraybuffer", n.onload = function() { + 200 == n.status || 0 == n.status && n.response ? e(n.response) : r() + }, n.onerror = r, n.send(null) + }); + var X, K = C.print || console.log.bind(console), + J = C.printErr || console.warn.bind(console); + Object.assign(C, z), z = null, C.wasmBinary && (X = C.wasmBinary), "object" != typeof WebAssembly && _("no native wasm support detected"); + var Z, tt, et, rt, nt, ot, _t = !1, + it = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, + pt = [], + at = [], + ct = [], + st = !1, + ut = 0, + yt = null, + lt = null, + ft = "draco_decoder.wasm"; + ft.startsWith("data:application/octet-stream;base64,") || (ot = ft, ft = C.locateFile ? C.locateFile(ot, k) : k + ot); + var mt = [null, [], + [] + ], + dt = { + b: function(t, e, r) { + throw new a(t).init(e, r), t + }, + a: function() { + _("") + }, + g: function(t, e, r) { + et.copyWithin(t, e, e + r) + }, + e: function(t) { + var e = et.length; + if (2147483648 < (t >>>= 0)) return !1; + for (var r = 1; 4 >= r; r *= 2) { + var n = e * (1 + .2 / r); + n = Math.min(n, t + 100663296); + var _ = Math; + n = Math.max(t, n), _ = _.min.call(_, 2147483648, n + (65536 - n % 65536) % 65536); + t: { + n = Z.buffer; + try { + Z.grow(_ - n.byteLength + 65535 >>> 16), o(); + var i = 1; + break t + } catch (t) {} + i = void 0 + } + if (i) return !0 + } + return !1 + }, + f: function(t) { + return 52 + }, + d: function(t, e, r, n, o) { + return 70 + }, + c: function(t, e, n, o) { + for (var _ = 0, i = 0; i < n; i++) { + var p = nt[e >> 2], + a = nt[e + 4 >> 2]; + e += 8; + for (var c = 0; c < a; c++) { + var s = et[p + c], + u = mt[t]; + 0 === s || 10 === s ? ((1 === t ? K : J)(r(u, 0)), u.length = 0) : u.push(s) + } + _ += a + } + return nt[o >> 2] = _, 0 + } + }; + ! function() { + function t(t, e) { + C.asm = t.exports, Z = C.asm.h, o(), at.unshift(C.asm.i), ut--, C.monitorRunDependencies && C.monitorRunDependencies(ut), 0 == ut && (null !== yt && (clearInterval(yt), yt = null), lt && (t = lt, lt = null, t())) + } + + function e(e) { + t(e.instance) + } + + function r(t) { + return function() { + if (!X && (V || B)) { + if ("function" == typeof fetch && !ft.startsWith("file://")) return fetch(ft, { + credentials: "same-origin" + }).then((function(t) { + if (!t.ok) throw "failed to load wasm binary file at '" + ft + "'"; + return t.arrayBuffer() + })).catch((function() { + return i(ft) + })); + if (q) return new Promise((function(t, e) { + q(ft, (function(e) { + t(new Uint8Array(e)) + }), e) + })) + } + return Promise.resolve().then((function() { + return i(ft) + })) + }().then((function(t) { + return WebAssembly.instantiate(t, n) + })).then((function(t) { + return t + })).then(t, (function(t) { + J("failed to asynchronously prepare wasm: " + t), _(t) + })) + } + var n = { + a: dt + }; + if (ut++, C.monitorRunDependencies && C.monitorRunDependencies(ut), C.instantiateWasm) try { + return C.instantiateWasm(n, t) + } catch (t) { + J("Module.instantiateWasm callback failed with error: " + t), L(t) + }(X || "function" != typeof WebAssembly.instantiateStreaming || ft.startsWith("data:application/octet-stream;base64,") || ft.startsWith("file://") || W || "function" != typeof fetch ? r(e) : fetch(ft, { + credentials: "same-origin" + }).then((function(t) { + return WebAssembly.instantiateStreaming(t, n).then(e, (function(t) { + return J("wasm streaming compile failed: " + t), J("falling back to ArrayBuffer instantiation"), r(e) + })) + }))).catch(L) + }(); + var bt = C._emscripten_bind_VoidPtr___destroy___0 = function() { + return (bt = C._emscripten_bind_VoidPtr___destroy___0 = C.asm.k).apply(null, arguments) + }, + ht = C._emscripten_bind_DecoderBuffer_DecoderBuffer_0 = function() { + return (ht = C._emscripten_bind_DecoderBuffer_DecoderBuffer_0 = C.asm.l).apply(null, arguments) + }, + At = C._emscripten_bind_DecoderBuffer_Init_2 = function() { + return (At = C._emscripten_bind_DecoderBuffer_Init_2 = C.asm.m).apply(null, arguments) + }, + Tt = C._emscripten_bind_DecoderBuffer___destroy___0 = function() { + return (Tt = C._emscripten_bind_DecoderBuffer___destroy___0 = C.asm.n).apply(null, arguments) + }, + Dt = C._emscripten_bind_AttributeTransformData_AttributeTransformData_0 = function() { + return (Dt = C._emscripten_bind_AttributeTransformData_AttributeTransformData_0 = C.asm.o).apply(null, arguments) + }, + It = C._emscripten_bind_AttributeTransformData_transform_type_0 = function() { + return (It = C._emscripten_bind_AttributeTransformData_transform_type_0 = C.asm.p).apply(null, arguments) + }, + jt = C._emscripten_bind_AttributeTransformData___destroy___0 = function() { + return (jt = C._emscripten_bind_AttributeTransformData___destroy___0 = C.asm.q).apply(null, arguments) + }, + Et = C._emscripten_bind_GeometryAttribute_GeometryAttribute_0 = function() { + return (Et = C._emscripten_bind_GeometryAttribute_GeometryAttribute_0 = C.asm.r).apply(null, arguments) + }, + Gt = C._emscripten_bind_GeometryAttribute___destroy___0 = function() { + return (Gt = C._emscripten_bind_GeometryAttribute___destroy___0 = C.asm.s).apply(null, arguments) + }, + vt = C._emscripten_bind_PointAttribute_PointAttribute_0 = function() { + return (vt = C._emscripten_bind_PointAttribute_PointAttribute_0 = C.asm.t).apply(null, arguments) + }, + Ot = C._emscripten_bind_PointAttribute_size_0 = function() { + return (Ot = C._emscripten_bind_PointAttribute_size_0 = C.asm.u).apply(null, arguments) + }, + Pt = C._emscripten_bind_PointAttribute_GetAttributeTransformData_0 = function() { + return (Pt = C._emscripten_bind_PointAttribute_GetAttributeTransformData_0 = C.asm.v).apply(null, arguments) + }, + Rt = C._emscripten_bind_PointAttribute_attribute_type_0 = function() { + return (Rt = C._emscripten_bind_PointAttribute_attribute_type_0 = C.asm.w).apply(null, arguments) + }, + St = C._emscripten_bind_PointAttribute_data_type_0 = function() { + return (St = C._emscripten_bind_PointAttribute_data_type_0 = C.asm.x).apply(null, arguments) + }, + Mt = C._emscripten_bind_PointAttribute_num_components_0 = function() { + return (Mt = C._emscripten_bind_PointAttribute_num_components_0 = C.asm.y).apply(null, arguments) + }, + Nt = C._emscripten_bind_PointAttribute_normalized_0 = function() { + return (Nt = C._emscripten_bind_PointAttribute_normalized_0 = C.asm.z).apply(null, arguments) + }, + Ut = C._emscripten_bind_PointAttribute_byte_stride_0 = function() { + return (Ut = C._emscripten_bind_PointAttribute_byte_stride_0 = C.asm.A).apply(null, arguments) + }, + gt = C._emscripten_bind_PointAttribute_byte_offset_0 = function() { + return (gt = C._emscripten_bind_PointAttribute_byte_offset_0 = C.asm.B).apply(null, arguments) + }, + Ft = C._emscripten_bind_PointAttribute_unique_id_0 = function() { + return (Ft = C._emscripten_bind_PointAttribute_unique_id_0 = C.asm.C).apply(null, arguments) + }, + Lt = C._emscripten_bind_PointAttribute___destroy___0 = function() { + return (Lt = C._emscripten_bind_PointAttribute___destroy___0 = C.asm.D).apply(null, arguments) + }, + Ct = C._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0 = function() { + return (Ct = C._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0 = C.asm.E).apply(null, arguments) + }, + $t = C._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1 = function() { + return ($t = C._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1 = C.asm.F).apply(null, arguments) + }, + wt = C._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0 = function() { + return (wt = C._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0 = C.asm.G).apply(null, arguments) + }, + zt = C._emscripten_bind_AttributeQuantizationTransform_min_value_1 = function() { + return (zt = C._emscripten_bind_AttributeQuantizationTransform_min_value_1 = C.asm.H).apply(null, arguments) + }, + Vt = C._emscripten_bind_AttributeQuantizationTransform_range_0 = function() { + return (Vt = C._emscripten_bind_AttributeQuantizationTransform_range_0 = C.asm.I).apply(null, arguments) + }, + Bt = C._emscripten_bind_AttributeQuantizationTransform___destroy___0 = function() { + return (Bt = C._emscripten_bind_AttributeQuantizationTransform___destroy___0 = C.asm.J).apply(null, arguments) + }, + Wt = C._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0 = function() { + return (Wt = C._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0 = C.asm.K).apply(null, arguments) + }, + kt = C._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1 = function() { + return (kt = C._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1 = C.asm.L).apply(null, arguments) + }, + xt = C._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0 = function() { + return (xt = C._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0 = C.asm.M).apply(null, arguments) + }, + Qt = C._emscripten_bind_AttributeOctahedronTransform___destroy___0 = function() { + return (Qt = C._emscripten_bind_AttributeOctahedronTransform___destroy___0 = C.asm.N).apply(null, arguments) + }, + Yt = C._emscripten_bind_PointCloud_PointCloud_0 = function() { + return (Yt = C._emscripten_bind_PointCloud_PointCloud_0 = C.asm.O).apply(null, arguments) + }, + Ht = C._emscripten_bind_PointCloud_num_attributes_0 = function() { + return (Ht = C._emscripten_bind_PointCloud_num_attributes_0 = C.asm.P).apply(null, arguments) + }, + qt = C._emscripten_bind_PointCloud_num_points_0 = function() { + return (qt = C._emscripten_bind_PointCloud_num_points_0 = C.asm.Q).apply(null, arguments) + }, + Xt = C._emscripten_bind_PointCloud___destroy___0 = function() { + return (Xt = C._emscripten_bind_PointCloud___destroy___0 = C.asm.R).apply(null, arguments) + }, + Kt = C._emscripten_bind_Mesh_Mesh_0 = function() { + return (Kt = C._emscripten_bind_Mesh_Mesh_0 = C.asm.S).apply(null, arguments) + }, + Jt = C._emscripten_bind_Mesh_num_faces_0 = function() { + return (Jt = C._emscripten_bind_Mesh_num_faces_0 = C.asm.T).apply(null, arguments) + }, + Zt = C._emscripten_bind_Mesh_num_attributes_0 = function() { + return (Zt = C._emscripten_bind_Mesh_num_attributes_0 = C.asm.U).apply(null, arguments) + }, + te = C._emscripten_bind_Mesh_num_points_0 = function() { + return (te = C._emscripten_bind_Mesh_num_points_0 = C.asm.V).apply(null, arguments) + }, + ee = C._emscripten_bind_Mesh___destroy___0 = function() { + return (ee = C._emscripten_bind_Mesh___destroy___0 = C.asm.W).apply(null, arguments) + }, + re = C._emscripten_bind_Metadata_Metadata_0 = function() { + return (re = C._emscripten_bind_Metadata_Metadata_0 = C.asm.X).apply(null, arguments) + }, + ne = C._emscripten_bind_Metadata___destroy___0 = function() { + return (ne = C._emscripten_bind_Metadata___destroy___0 = C.asm.Y).apply(null, arguments) + }, + oe = C._emscripten_bind_Status_code_0 = function() { + return (oe = C._emscripten_bind_Status_code_0 = C.asm.Z).apply(null, arguments) + }, + _e = C._emscripten_bind_Status_ok_0 = function() { + return (_e = C._emscripten_bind_Status_ok_0 = C.asm._).apply(null, arguments) + }, + ie = C._emscripten_bind_Status_error_msg_0 = function() { + return (ie = C._emscripten_bind_Status_error_msg_0 = C.asm.$).apply(null, arguments) + }, + pe = C._emscripten_bind_Status___destroy___0 = function() { + return (pe = C._emscripten_bind_Status___destroy___0 = C.asm.aa).apply(null, arguments) + }, + ae = C._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0 = function() { + return (ae = C._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0 = C.asm.ba).apply(null, arguments) + }, + ce = C._emscripten_bind_DracoFloat32Array_GetValue_1 = function() { + return (ce = C._emscripten_bind_DracoFloat32Array_GetValue_1 = C.asm.ca).apply(null, arguments) + }, + se = C._emscripten_bind_DracoFloat32Array_size_0 = function() { + return (se = C._emscripten_bind_DracoFloat32Array_size_0 = C.asm.da).apply(null, arguments) + }, + ue = C._emscripten_bind_DracoFloat32Array___destroy___0 = function() { + return (ue = C._emscripten_bind_DracoFloat32Array___destroy___0 = C.asm.ea).apply(null, arguments) + }, + ye = C._emscripten_bind_DracoInt8Array_DracoInt8Array_0 = function() { + return (ye = C._emscripten_bind_DracoInt8Array_DracoInt8Array_0 = C.asm.fa).apply(null, arguments) + }, + le = C._emscripten_bind_DracoInt8Array_GetValue_1 = function() { + return (le = C._emscripten_bind_DracoInt8Array_GetValue_1 = C.asm.ga).apply(null, arguments) + }, + fe = C._emscripten_bind_DracoInt8Array_size_0 = function() { + return (fe = C._emscripten_bind_DracoInt8Array_size_0 = C.asm.ha).apply(null, arguments) + }, + me = C._emscripten_bind_DracoInt8Array___destroy___0 = function() { + return (me = C._emscripten_bind_DracoInt8Array___destroy___0 = C.asm.ia).apply(null, arguments) + }, + de = C._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0 = function() { + return (de = C._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0 = C.asm.ja).apply(null, arguments) + }, + be = C._emscripten_bind_DracoUInt8Array_GetValue_1 = function() { + return (be = C._emscripten_bind_DracoUInt8Array_GetValue_1 = C.asm.ka).apply(null, arguments) + }, + he = C._emscripten_bind_DracoUInt8Array_size_0 = function() { + return (he = C._emscripten_bind_DracoUInt8Array_size_0 = C.asm.la).apply(null, arguments) + }, + Ae = C._emscripten_bind_DracoUInt8Array___destroy___0 = function() { + return (Ae = C._emscripten_bind_DracoUInt8Array___destroy___0 = C.asm.ma).apply(null, arguments) + }, + Te = C._emscripten_bind_DracoInt16Array_DracoInt16Array_0 = function() { + return (Te = C._emscripten_bind_DracoInt16Array_DracoInt16Array_0 = C.asm.na).apply(null, arguments) + }, + De = C._emscripten_bind_DracoInt16Array_GetValue_1 = function() { + return (De = C._emscripten_bind_DracoInt16Array_GetValue_1 = C.asm.oa).apply(null, arguments) + }, + Ie = C._emscripten_bind_DracoInt16Array_size_0 = function() { + return (Ie = C._emscripten_bind_DracoInt16Array_size_0 = C.asm.pa).apply(null, arguments) + }, + je = C._emscripten_bind_DracoInt16Array___destroy___0 = function() { + return (je = C._emscripten_bind_DracoInt16Array___destroy___0 = C.asm.qa).apply(null, arguments) + }, + Ee = C._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0 = function() { + return (Ee = C._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0 = C.asm.ra).apply(null, arguments) + }, + Ge = C._emscripten_bind_DracoUInt16Array_GetValue_1 = function() { + return (Ge = C._emscripten_bind_DracoUInt16Array_GetValue_1 = C.asm.sa).apply(null, arguments) + }, + ve = C._emscripten_bind_DracoUInt16Array_size_0 = function() { + return (ve = C._emscripten_bind_DracoUInt16Array_size_0 = C.asm.ta).apply(null, arguments) + }, + Oe = C._emscripten_bind_DracoUInt16Array___destroy___0 = function() { + return (Oe = C._emscripten_bind_DracoUInt16Array___destroy___0 = C.asm.ua).apply(null, arguments) + }, + Pe = C._emscripten_bind_DracoInt32Array_DracoInt32Array_0 = function() { + return (Pe = C._emscripten_bind_DracoInt32Array_DracoInt32Array_0 = C.asm.va).apply(null, arguments) + }, + Re = C._emscripten_bind_DracoInt32Array_GetValue_1 = function() { + return (Re = C._emscripten_bind_DracoInt32Array_GetValue_1 = C.asm.wa).apply(null, arguments) + }, + Se = C._emscripten_bind_DracoInt32Array_size_0 = function() { + return (Se = C._emscripten_bind_DracoInt32Array_size_0 = C.asm.xa).apply(null, arguments) + }, + Me = C._emscripten_bind_DracoInt32Array___destroy___0 = function() { + return (Me = C._emscripten_bind_DracoInt32Array___destroy___0 = C.asm.ya).apply(null, arguments) + }, + Ne = C._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0 = function() { + return (Ne = C._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0 = C.asm.za).apply(null, arguments) + }, + Ue = C._emscripten_bind_DracoUInt32Array_GetValue_1 = function() { + return (Ue = C._emscripten_bind_DracoUInt32Array_GetValue_1 = C.asm.Aa).apply(null, arguments) + }, + ge = C._emscripten_bind_DracoUInt32Array_size_0 = function() { + return (ge = C._emscripten_bind_DracoUInt32Array_size_0 = C.asm.Ba).apply(null, arguments) + }, + Fe = C._emscripten_bind_DracoUInt32Array___destroy___0 = function() { + return (Fe = C._emscripten_bind_DracoUInt32Array___destroy___0 = C.asm.Ca).apply(null, arguments) + }, + Le = C._emscripten_bind_MetadataQuerier_MetadataQuerier_0 = function() { + return (Le = C._emscripten_bind_MetadataQuerier_MetadataQuerier_0 = C.asm.Da).apply(null, arguments) + }, + Ce = C._emscripten_bind_MetadataQuerier_HasEntry_2 = function() { + return (Ce = C._emscripten_bind_MetadataQuerier_HasEntry_2 = C.asm.Ea).apply(null, arguments) + }, + $e = C._emscripten_bind_MetadataQuerier_GetIntEntry_2 = function() { + return ($e = C._emscripten_bind_MetadataQuerier_GetIntEntry_2 = C.asm.Fa).apply(null, arguments) + }, + we = C._emscripten_bind_MetadataQuerier_GetIntEntryArray_3 = function() { + return (we = C._emscripten_bind_MetadataQuerier_GetIntEntryArray_3 = C.asm.Ga).apply(null, arguments) + }, + ze = C._emscripten_bind_MetadataQuerier_GetDoubleEntry_2 = function() { + return (ze = C._emscripten_bind_MetadataQuerier_GetDoubleEntry_2 = C.asm.Ha).apply(null, arguments) + }, + Ve = C._emscripten_bind_MetadataQuerier_GetStringEntry_2 = function() { + return (Ve = C._emscripten_bind_MetadataQuerier_GetStringEntry_2 = C.asm.Ia).apply(null, arguments) + }, + Be = C._emscripten_bind_MetadataQuerier_NumEntries_1 = function() { + return (Be = C._emscripten_bind_MetadataQuerier_NumEntries_1 = C.asm.Ja).apply(null, arguments) + }, + We = C._emscripten_bind_MetadataQuerier_GetEntryName_2 = function() { + return (We = C._emscripten_bind_MetadataQuerier_GetEntryName_2 = C.asm.Ka).apply(null, arguments) + }, + ke = C._emscripten_bind_MetadataQuerier___destroy___0 = function() { + return (ke = C._emscripten_bind_MetadataQuerier___destroy___0 = C.asm.La).apply(null, arguments) + }, + xe = C._emscripten_bind_Decoder_Decoder_0 = function() { + return (xe = C._emscripten_bind_Decoder_Decoder_0 = C.asm.Ma).apply(null, arguments) + }, + Qe = C._emscripten_bind_Decoder_DecodeArrayToPointCloud_3 = function() { + return (Qe = C._emscripten_bind_Decoder_DecodeArrayToPointCloud_3 = C.asm.Na).apply(null, arguments) + }, + Ye = C._emscripten_bind_Decoder_DecodeArrayToMesh_3 = function() { + return (Ye = C._emscripten_bind_Decoder_DecodeArrayToMesh_3 = C.asm.Oa).apply(null, arguments) + }, + He = C._emscripten_bind_Decoder_GetAttributeId_2 = function() { + return (He = C._emscripten_bind_Decoder_GetAttributeId_2 = C.asm.Pa).apply(null, arguments) + }, + qe = C._emscripten_bind_Decoder_GetAttributeIdByName_2 = function() { + return (qe = C._emscripten_bind_Decoder_GetAttributeIdByName_2 = C.asm.Qa).apply(null, arguments) + }, + Xe = C._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3 = function() { + return (Xe = C._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3 = C.asm.Ra).apply(null, arguments) + }, + Ke = C._emscripten_bind_Decoder_GetAttribute_2 = function() { + return (Ke = C._emscripten_bind_Decoder_GetAttribute_2 = C.asm.Sa).apply(null, arguments) + }, + Je = C._emscripten_bind_Decoder_GetAttributeByUniqueId_2 = function() { + return (Je = C._emscripten_bind_Decoder_GetAttributeByUniqueId_2 = C.asm.Ta).apply(null, arguments) + }, + Ze = C._emscripten_bind_Decoder_GetMetadata_1 = function() { + return (Ze = C._emscripten_bind_Decoder_GetMetadata_1 = C.asm.Ua).apply(null, arguments) + }, + tr = C._emscripten_bind_Decoder_GetAttributeMetadata_2 = function() { + return (tr = C._emscripten_bind_Decoder_GetAttributeMetadata_2 = C.asm.Va).apply(null, arguments) + }, + er = C._emscripten_bind_Decoder_GetFaceFromMesh_3 = function() { + return (er = C._emscripten_bind_Decoder_GetFaceFromMesh_3 = C.asm.Wa).apply(null, arguments) + }, + rr = C._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2 = function() { + return (rr = C._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2 = C.asm.Xa).apply(null, arguments) + }, + nr = C._emscripten_bind_Decoder_GetTrianglesUInt16Array_3 = function() { + return (nr = C._emscripten_bind_Decoder_GetTrianglesUInt16Array_3 = C.asm.Ya).apply(null, arguments) + }, + or = C._emscripten_bind_Decoder_GetTrianglesUInt32Array_3 = function() { + return (or = C._emscripten_bind_Decoder_GetTrianglesUInt32Array_3 = C.asm.Za).apply(null, arguments) + }, + _r = C._emscripten_bind_Decoder_GetAttributeFloat_3 = function() { + return (_r = C._emscripten_bind_Decoder_GetAttributeFloat_3 = C.asm._a).apply(null, arguments) + }, + ir = C._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3 = function() { + return (ir = C._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3 = C.asm.$a).apply(null, arguments) + }, + pr = C._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3 = function() { + return (pr = C._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3 = C.asm.ab).apply(null, arguments) + }, + ar = C._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3 = function() { + return (ar = C._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3 = C.asm.bb).apply(null, arguments) + }, + cr = C._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3 = function() { + return (cr = C._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3 = C.asm.cb).apply(null, arguments) + }, + sr = C._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3 = function() { + return (sr = C._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3 = C.asm.db).apply(null, arguments) + }, + ur = C._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3 = function() { + return (ur = C._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3 = C.asm.eb).apply(null, arguments) + }, + yr = C._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3 = function() { + return (yr = C._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3 = C.asm.fb).apply(null, arguments) + }, + lr = C._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3 = function() { + return (lr = C._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3 = C.asm.gb).apply(null, arguments) + }, + fr = C._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5 = function() { + return (fr = C._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5 = C.asm.hb).apply(null, arguments) + }, + mr = C._emscripten_bind_Decoder_SkipAttributeTransform_1 = function() { + return (mr = C._emscripten_bind_Decoder_SkipAttributeTransform_1 = C.asm.ib).apply(null, arguments) + }, + dr = C._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1 = function() { + return (dr = C._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1 = C.asm.jb).apply(null, arguments) + }, + br = C._emscripten_bind_Decoder_DecodeBufferToPointCloud_2 = function() { + return (br = C._emscripten_bind_Decoder_DecodeBufferToPointCloud_2 = C.asm.kb).apply(null, arguments) + }, + hr = C._emscripten_bind_Decoder_DecodeBufferToMesh_2 = function() { + return (hr = C._emscripten_bind_Decoder_DecodeBufferToMesh_2 = C.asm.lb).apply(null, arguments) + }, + Ar = C._emscripten_bind_Decoder___destroy___0 = function() { + return (Ar = C._emscripten_bind_Decoder___destroy___0 = C.asm.mb).apply(null, arguments) + }, + Tr = C._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM = function() { + return (Tr = C._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM = C.asm.nb).apply(null, arguments) + }, + Dr = C._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM = function() { + return (Dr = C._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM = C.asm.ob).apply(null, arguments) + }, + Ir = C._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM = function() { + return (Ir = C._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM = C.asm.pb).apply(null, arguments) + }, + jr = C._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM = function() { + return (jr = C._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM = C.asm.qb).apply(null, arguments) + }, + Er = C._emscripten_enum_draco_GeometryAttribute_Type_INVALID = function() { + return (Er = C._emscripten_enum_draco_GeometryAttribute_Type_INVALID = C.asm.rb).apply(null, arguments) + }, + Gr = C._emscripten_enum_draco_GeometryAttribute_Type_POSITION = function() { + return (Gr = C._emscripten_enum_draco_GeometryAttribute_Type_POSITION = C.asm.sb).apply(null, arguments) + }, + vr = C._emscripten_enum_draco_GeometryAttribute_Type_NORMAL = function() { + return (vr = C._emscripten_enum_draco_GeometryAttribute_Type_NORMAL = C.asm.tb).apply(null, arguments) + }, + Or = C._emscripten_enum_draco_GeometryAttribute_Type_COLOR = function() { + return (Or = C._emscripten_enum_draco_GeometryAttribute_Type_COLOR = C.asm.ub).apply(null, arguments) + }, + Pr = C._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD = function() { + return (Pr = C._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD = C.asm.vb).apply(null, arguments) + }, + Rr = C._emscripten_enum_draco_GeometryAttribute_Type_GENERIC = function() { + return (Rr = C._emscripten_enum_draco_GeometryAttribute_Type_GENERIC = C.asm.wb).apply(null, arguments) + }, + Sr = C._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE = function() { + return (Sr = C._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE = C.asm.xb).apply(null, arguments) + }, + Mr = C._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD = function() { + return (Mr = C._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD = C.asm.yb).apply(null, arguments) + }, + Nr = C._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH = function() { + return (Nr = C._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH = C.asm.zb).apply(null, arguments) + }, + Ur = C._emscripten_enum_draco_DataType_DT_INVALID = function() { + return (Ur = C._emscripten_enum_draco_DataType_DT_INVALID = C.asm.Ab).apply(null, arguments) + }, + gr = C._emscripten_enum_draco_DataType_DT_INT8 = function() { + return (gr = C._emscripten_enum_draco_DataType_DT_INT8 = C.asm.Bb).apply(null, arguments) + }, + Fr = C._emscripten_enum_draco_DataType_DT_UINT8 = function() { + return (Fr = C._emscripten_enum_draco_DataType_DT_UINT8 = C.asm.Cb).apply(null, arguments) + }, + Lr = C._emscripten_enum_draco_DataType_DT_INT16 = function() { + return (Lr = C._emscripten_enum_draco_DataType_DT_INT16 = C.asm.Db).apply(null, arguments) + }, + Cr = C._emscripten_enum_draco_DataType_DT_UINT16 = function() { + return (Cr = C._emscripten_enum_draco_DataType_DT_UINT16 = C.asm.Eb).apply(null, arguments) + }, + $r = C._emscripten_enum_draco_DataType_DT_INT32 = function() { + return ($r = C._emscripten_enum_draco_DataType_DT_INT32 = C.asm.Fb).apply(null, arguments) + }, + wr = C._emscripten_enum_draco_DataType_DT_UINT32 = function() { + return (wr = C._emscripten_enum_draco_DataType_DT_UINT32 = C.asm.Gb).apply(null, arguments) + }, + zr = C._emscripten_enum_draco_DataType_DT_INT64 = function() { + return (zr = C._emscripten_enum_draco_DataType_DT_INT64 = C.asm.Hb).apply(null, arguments) + }, + Vr = C._emscripten_enum_draco_DataType_DT_UINT64 = function() { + return (Vr = C._emscripten_enum_draco_DataType_DT_UINT64 = C.asm.Ib).apply(null, arguments) + }, + Br = C._emscripten_enum_draco_DataType_DT_FLOAT32 = function() { + return (Br = C._emscripten_enum_draco_DataType_DT_FLOAT32 = C.asm.Jb).apply(null, arguments) + }, + Wr = C._emscripten_enum_draco_DataType_DT_FLOAT64 = function() { + return (Wr = C._emscripten_enum_draco_DataType_DT_FLOAT64 = C.asm.Kb).apply(null, arguments) + }, + kr = C._emscripten_enum_draco_DataType_DT_BOOL = function() { + return (kr = C._emscripten_enum_draco_DataType_DT_BOOL = C.asm.Lb).apply(null, arguments) + }, + xr = C._emscripten_enum_draco_DataType_DT_TYPES_COUNT = function() { + return (xr = C._emscripten_enum_draco_DataType_DT_TYPES_COUNT = C.asm.Mb).apply(null, arguments) + }, + Qr = C._emscripten_enum_draco_StatusCode_OK = function() { + return (Qr = C._emscripten_enum_draco_StatusCode_OK = C.asm.Nb).apply(null, arguments) + }, + Yr = C._emscripten_enum_draco_StatusCode_DRACO_ERROR = function() { + return (Yr = C._emscripten_enum_draco_StatusCode_DRACO_ERROR = C.asm.Ob).apply(null, arguments) + }, + Hr = C._emscripten_enum_draco_StatusCode_IO_ERROR = function() { + return (Hr = C._emscripten_enum_draco_StatusCode_IO_ERROR = C.asm.Pb).apply(null, arguments) + }, + qr = C._emscripten_enum_draco_StatusCode_INVALID_PARAMETER = function() { + return (qr = C._emscripten_enum_draco_StatusCode_INVALID_PARAMETER = C.asm.Qb).apply(null, arguments) + }, + Xr = C._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION = function() { + return (Xr = C._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION = C.asm.Rb).apply(null, arguments) + }, + Kr = C._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION = function() { + return (Kr = C._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION = C.asm.Sb).apply(null, arguments) + }; + C._malloc = function() { + return (C._malloc = C.asm.Tb).apply(null, arguments) + }, C._free = function() { + return (C._free = C.asm.Ub).apply(null, arguments) + }; + var Jr, Zr = function() { + return (Zr = C.asm.Vb).apply(null, arguments) + }; + if (C.___start_em_js = 15856, C.___stop_em_js = 15954, lt = function t() { + Jr || c(), Jr || (lt = t) + }, C.preInit) + for ("function" == typeof C.preInit && (C.preInit = [C.preInit]); 0 < C.preInit.length;) C.preInit.pop()(); + c(), s.prototype = Object.create(s.prototype), s.prototype.constructor = s, s.prototype.__class__ = s, s.__cache__ = {}, C.WrapperObject = s, C.getCache = u, C.wrapPointer = y, C.castObject = function(t, e) { + return y(t.ptr, e) + }, C.NULL = y(0), C.destroy = function(t) { + if (!t.__destroy__) throw "Error: Cannot destroy object. (Did you create it yourself?)"; + t.__destroy__(), delete u(t.__class__)[t.ptr] + }, C.compare = function(t, e) { + return t.ptr === e.ptr + }, C.getPointer = function(t) { + return t.ptr + }, C.getClass = function(t) { + return t.__class__ + }; + var tn = { + buffer: 0, + size: 0, + pos: 0, + temps: [], + needed: 0, + prepare: function() { + if (tn.needed) { + for (var t = 0; t < tn.temps.length; t++) C._free(tn.temps[t]); + tn.temps.length = 0, C._free(tn.buffer), tn.buffer = 0, tn.size += tn.needed, tn.needed = 0 + } + tn.buffer || (tn.size += 128, tn.buffer = C._malloc(tn.size), tn.buffer || _(void 0)), tn.pos = 0 + }, + alloc: function(t, e) { + return tn.buffer || _(void 0), t = (t = t.length * e.BYTES_PER_ELEMENT) + 7 & -8, tn.pos + t >= tn.size ? (0 < t || _(void 0), tn.needed += t, e = C._malloc(t), tn.temps.push(e)) : (e = tn.buffer + tn.pos, tn.pos += t), e + }, + copy: function(t, e, r) { + switch (r >>>= 0, e.BYTES_PER_ELEMENT) { + case 2: + r >>>= 1; + break; + case 4: + r >>>= 2; + break; + case 8: + r >>>= 3 + } + for (var n = 0; n < t.length; n++) e[r + n] = t[n] + } + }; + return m.prototype = Object.create(s.prototype), m.prototype.constructor = m, m.prototype.__class__ = m, m.__cache__ = {}, C.VoidPtr = m, m.prototype.__destroy__ = m.prototype.__destroy__ = function() { + bt(this.ptr) + }, d.prototype = Object.create(s.prototype), d.prototype.constructor = d, d.prototype.__class__ = d, d.__cache__ = {}, C.DecoderBuffer = d, d.prototype.Init = d.prototype.Init = function(t, e) { + var r = this.ptr; + tn.prepare(), "object" == typeof t && (t = f(t)), e && "object" == typeof e && (e = e.ptr), At(r, t, e) + }, d.prototype.__destroy__ = d.prototype.__destroy__ = function() { + Tt(this.ptr) + }, b.prototype = Object.create(s.prototype), b.prototype.constructor = b, b.prototype.__class__ = b, b.__cache__ = {}, C.AttributeTransformData = b, b.prototype.transform_type = b.prototype.transform_type = function() { + return It(this.ptr) + }, b.prototype.__destroy__ = b.prototype.__destroy__ = function() { + jt(this.ptr) + }, h.prototype = Object.create(s.prototype), h.prototype.constructor = h, h.prototype.__class__ = h, h.__cache__ = {}, C.GeometryAttribute = h, h.prototype.__destroy__ = h.prototype.__destroy__ = function() { + Gt(this.ptr) + }, A.prototype = Object.create(s.prototype), A.prototype.constructor = A, A.prototype.__class__ = A, A.__cache__ = {}, C.PointAttribute = A, A.prototype.size = A.prototype.size = function() { + return Ot(this.ptr) + }, A.prototype.GetAttributeTransformData = A.prototype.GetAttributeTransformData = function() { + return y(Pt(this.ptr), b) + }, A.prototype.attribute_type = A.prototype.attribute_type = function() { + return Rt(this.ptr) + }, A.prototype.data_type = A.prototype.data_type = function() { + return St(this.ptr) + }, A.prototype.num_components = A.prototype.num_components = function() { + return Mt(this.ptr) + }, A.prototype.normalized = A.prototype.normalized = function() { + return !!Nt(this.ptr) + }, A.prototype.byte_stride = A.prototype.byte_stride = function() { + return Ut(this.ptr) + }, A.prototype.byte_offset = A.prototype.byte_offset = function() { + return gt(this.ptr) + }, A.prototype.unique_id = A.prototype.unique_id = function() { + return Ft(this.ptr) + }, A.prototype.__destroy__ = A.prototype.__destroy__ = function() { + Lt(this.ptr) + }, T.prototype = Object.create(s.prototype), T.prototype.constructor = T, T.prototype.__class__ = T, T.__cache__ = {}, C.AttributeQuantizationTransform = T, T.prototype.InitFromAttribute = T.prototype.InitFromAttribute = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), !!$t(e, t) + }, T.prototype.quantization_bits = T.prototype.quantization_bits = function() { + return wt(this.ptr) + }, T.prototype.min_value = T.prototype.min_value = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), zt(e, t) + }, T.prototype.range = T.prototype.range = function() { + return Vt(this.ptr) + }, T.prototype.__destroy__ = T.prototype.__destroy__ = function() { + Bt(this.ptr) + }, D.prototype = Object.create(s.prototype), D.prototype.constructor = D, D.prototype.__class__ = D, D.__cache__ = {}, C.AttributeOctahedronTransform = D, D.prototype.InitFromAttribute = D.prototype.InitFromAttribute = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), !!kt(e, t) + }, D.prototype.quantization_bits = D.prototype.quantization_bits = function() { + return xt(this.ptr) + }, D.prototype.__destroy__ = D.prototype.__destroy__ = function() { + Qt(this.ptr) + }, I.prototype = Object.create(s.prototype), I.prototype.constructor = I, I.prototype.__class__ = I, I.__cache__ = {}, C.PointCloud = I, I.prototype.num_attributes = I.prototype.num_attributes = function() { + return Ht(this.ptr) + }, I.prototype.num_points = I.prototype.num_points = function() { + return qt(this.ptr) + }, I.prototype.__destroy__ = I.prototype.__destroy__ = function() { + Xt(this.ptr) + }, j.prototype = Object.create(s.prototype), j.prototype.constructor = j, j.prototype.__class__ = j, j.__cache__ = {}, C.Mesh = j, j.prototype.num_faces = j.prototype.num_faces = function() { + return Jt(this.ptr) + }, j.prototype.num_attributes = j.prototype.num_attributes = function() { + return Zt(this.ptr) + }, j.prototype.num_points = j.prototype.num_points = function() { + return te(this.ptr) + }, j.prototype.__destroy__ = j.prototype.__destroy__ = function() { + ee(this.ptr) + }, E.prototype = Object.create(s.prototype), E.prototype.constructor = E, E.prototype.__class__ = E, E.__cache__ = {}, C.Metadata = E, E.prototype.__destroy__ = E.prototype.__destroy__ = function() { + ne(this.ptr) + }, G.prototype = Object.create(s.prototype), G.prototype.constructor = G, G.prototype.__class__ = G, G.__cache__ = {}, C.Status = G, G.prototype.code = G.prototype.code = function() { + return oe(this.ptr) + }, G.prototype.ok = G.prototype.ok = function() { + return !!_e(this.ptr) + }, G.prototype.error_msg = G.prototype.error_msg = function() { + return n(ie(this.ptr)) + }, G.prototype.__destroy__ = G.prototype.__destroy__ = function() { + pe(this.ptr) + }, v.prototype = Object.create(s.prototype), v.prototype.constructor = v, v.prototype.__class__ = v, v.__cache__ = {}, C.DracoFloat32Array = v, v.prototype.GetValue = v.prototype.GetValue = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), ce(e, t) + }, v.prototype.size = v.prototype.size = function() { + return se(this.ptr) + }, v.prototype.__destroy__ = v.prototype.__destroy__ = function() { + ue(this.ptr) + }, O.prototype = Object.create(s.prototype), O.prototype.constructor = O, O.prototype.__class__ = O, O.__cache__ = {}, C.DracoInt8Array = O, O.prototype.GetValue = O.prototype.GetValue = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), le(e, t) + }, O.prototype.size = O.prototype.size = function() { + return fe(this.ptr) + }, O.prototype.__destroy__ = O.prototype.__destroy__ = function() { + me(this.ptr) + }, P.prototype = Object.create(s.prototype), P.prototype.constructor = P, P.prototype.__class__ = P, P.__cache__ = {}, C.DracoUInt8Array = P, P.prototype.GetValue = P.prototype.GetValue = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), be(e, t) + }, P.prototype.size = P.prototype.size = function() { + return he(this.ptr) + }, P.prototype.__destroy__ = P.prototype.__destroy__ = function() { + Ae(this.ptr) + }, R.prototype = Object.create(s.prototype), R.prototype.constructor = R, R.prototype.__class__ = R, R.__cache__ = {}, C.DracoInt16Array = R, R.prototype.GetValue = R.prototype.GetValue = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), De(e, t) + }, R.prototype.size = R.prototype.size = function() { + return Ie(this.ptr) + }, R.prototype.__destroy__ = R.prototype.__destroy__ = function() { + je(this.ptr) + }, S.prototype = Object.create(s.prototype), S.prototype.constructor = S, S.prototype.__class__ = S, S.__cache__ = {}, C.DracoUInt16Array = S, S.prototype.GetValue = S.prototype.GetValue = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), Ge(e, t) + }, S.prototype.size = S.prototype.size = function() { + return ve(this.ptr) + }, S.prototype.__destroy__ = S.prototype.__destroy__ = function() { + Oe(this.ptr) + }, M.prototype = Object.create(s.prototype), M.prototype.constructor = M, M.prototype.__class__ = M, M.__cache__ = {}, C.DracoInt32Array = M, M.prototype.GetValue = M.prototype.GetValue = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), Re(e, t) + }, M.prototype.size = M.prototype.size = function() { + return Se(this.ptr) + }, M.prototype.__destroy__ = M.prototype.__destroy__ = function() { + Me(this.ptr) + }, N.prototype = Object.create(s.prototype), N.prototype.constructor = N, N.prototype.__class__ = N, N.__cache__ = {}, C.DracoUInt32Array = N, N.prototype.GetValue = N.prototype.GetValue = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), Ue(e, t) + }, N.prototype.size = N.prototype.size = function() { + return ge(this.ptr) + }, N.prototype.__destroy__ = N.prototype.__destroy__ = function() { + Fe(this.ptr) + }, U.prototype = Object.create(s.prototype), U.prototype.constructor = U, U.prototype.__class__ = U, U.__cache__ = {}, C.MetadataQuerier = U, U.prototype.HasEntry = U.prototype.HasEntry = function(t, e) { + var r = this.ptr; + return tn.prepare(), t && "object" == typeof t && (t = t.ptr), e = e && "object" == typeof e ? e.ptr : l(e), !!Ce(r, t, e) + }, U.prototype.GetIntEntry = U.prototype.GetIntEntry = function(t, e) { + var r = this.ptr; + return tn.prepare(), t && "object" == typeof t && (t = t.ptr), e = e && "object" == typeof e ? e.ptr : l(e), $e(r, t, e) + }, U.prototype.GetIntEntryArray = U.prototype.GetIntEntryArray = function(t, e, r) { + var n = this.ptr; + tn.prepare(), t && "object" == typeof t && (t = t.ptr), e = e && "object" == typeof e ? e.ptr : l(e), r && "object" == typeof r && (r = r.ptr), we(n, t, e, r) + }, U.prototype.GetDoubleEntry = U.prototype.GetDoubleEntry = function(t, e) { + var r = this.ptr; + return tn.prepare(), t && "object" == typeof t && (t = t.ptr), e = e && "object" == typeof e ? e.ptr : l(e), ze(r, t, e) + }, U.prototype.GetStringEntry = U.prototype.GetStringEntry = function(t, e) { + var r = this.ptr; + return tn.prepare(), t && "object" == typeof t && (t = t.ptr), e = e && "object" == typeof e ? e.ptr : l(e), n(Ve(r, t, e)) + }, U.prototype.NumEntries = U.prototype.NumEntries = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), Be(e, t) + }, U.prototype.GetEntryName = U.prototype.GetEntryName = function(t, e) { + var r = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), n(We(r, t, e)) + }, U.prototype.__destroy__ = U.prototype.__destroy__ = function() { + ke(this.ptr) + }, g.prototype = Object.create(s.prototype), g.prototype.constructor = g, g.prototype.__class__ = g, g.__cache__ = {}, C.Decoder = g, g.prototype.DecodeArrayToPointCloud = g.prototype.DecodeArrayToPointCloud = function(t, e, r) { + var n = this.ptr; + return tn.prepare(), "object" == typeof t && (t = f(t)), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), y(Qe(n, t, e, r), G) + }, g.prototype.DecodeArrayToMesh = g.prototype.DecodeArrayToMesh = function(t, e, r) { + var n = this.ptr; + return tn.prepare(), "object" == typeof t && (t = f(t)), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), y(Ye(n, t, e, r), G) + }, g.prototype.GetAttributeId = g.prototype.GetAttributeId = function(t, e) { + var r = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), He(r, t, e) + }, g.prototype.GetAttributeIdByName = g.prototype.GetAttributeIdByName = function(t, e) { + var r = this.ptr; + return tn.prepare(), t && "object" == typeof t && (t = t.ptr), e = e && "object" == typeof e ? e.ptr : l(e), qe(r, t, e) + }, g.prototype.GetAttributeIdByMetadataEntry = g.prototype.GetAttributeIdByMetadataEntry = function(t, e, r) { + var n = this.ptr; + return tn.prepare(), t && "object" == typeof t && (t = t.ptr), e = e && "object" == typeof e ? e.ptr : l(e), r = r && "object" == typeof r ? r.ptr : l(r), Xe(n, t, e, r) + }, g.prototype.GetAttribute = g.prototype.GetAttribute = function(t, e) { + var r = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), y(Ke(r, t, e), A) + }, g.prototype.GetAttributeByUniqueId = g.prototype.GetAttributeByUniqueId = function(t, e) { + var r = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), y(Je(r, t, e), A) + }, g.prototype.GetMetadata = g.prototype.GetMetadata = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), y(Ze(e, t), E) + }, g.prototype.GetAttributeMetadata = g.prototype.GetAttributeMetadata = function(t, e) { + var r = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), y(tr(r, t, e), E) + }, g.prototype.GetFaceFromMesh = g.prototype.GetFaceFromMesh = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!er(n, t, e, r) + }, g.prototype.GetTriangleStripsFromMesh = g.prototype.GetTriangleStripsFromMesh = function(t, e) { + var r = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), rr(r, t, e) + }, g.prototype.GetTrianglesUInt16Array = g.prototype.GetTrianglesUInt16Array = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!nr(n, t, e, r) + }, g.prototype.GetTrianglesUInt32Array = g.prototype.GetTrianglesUInt32Array = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!or(n, t, e, r) + }, g.prototype.GetAttributeFloat = g.prototype.GetAttributeFloat = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!_r(n, t, e, r) + }, g.prototype.GetAttributeFloatForAllPoints = g.prototype.GetAttributeFloatForAllPoints = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!ir(n, t, e, r) + }, g.prototype.GetAttributeIntForAllPoints = g.prototype.GetAttributeIntForAllPoints = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!pr(n, t, e, r) + }, g.prototype.GetAttributeInt8ForAllPoints = g.prototype.GetAttributeInt8ForAllPoints = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!ar(n, t, e, r) + }, g.prototype.GetAttributeUInt8ForAllPoints = g.prototype.GetAttributeUInt8ForAllPoints = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!cr(n, t, e, r) + }, g.prototype.GetAttributeInt16ForAllPoints = g.prototype.GetAttributeInt16ForAllPoints = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!sr(n, t, e, r) + }, g.prototype.GetAttributeUInt16ForAllPoints = g.prototype.GetAttributeUInt16ForAllPoints = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!ur(n, t, e, r) + }, g.prototype.GetAttributeInt32ForAllPoints = g.prototype.GetAttributeInt32ForAllPoints = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!yr(n, t, e, r) + }, g.prototype.GetAttributeUInt32ForAllPoints = g.prototype.GetAttributeUInt32ForAllPoints = function(t, e, r) { + var n = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), !!lr(n, t, e, r) + }, g.prototype.GetAttributeDataArrayForAllPoints = g.prototype.GetAttributeDataArrayForAllPoints = function(t, e, r, n, o) { + var _ = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), r && "object" == typeof r && (r = r.ptr), n && "object" == typeof n && (n = n.ptr), o && "object" == typeof o && (o = o.ptr), !!fr(_, t, e, r, n, o) + }, g.prototype.SkipAttributeTransform = g.prototype.SkipAttributeTransform = function(t) { + var e = this.ptr; + t && "object" == typeof t && (t = t.ptr), mr(e, t) + }, g.prototype.GetEncodedGeometryType_Deprecated = g.prototype.GetEncodedGeometryType_Deprecated = function(t) { + var e = this.ptr; + return t && "object" == typeof t && (t = t.ptr), dr(e, t) + }, g.prototype.DecodeBufferToPointCloud = g.prototype.DecodeBufferToPointCloud = function(t, e) { + var r = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), y(br(r, t, e), G) + }, g.prototype.DecodeBufferToMesh = g.prototype.DecodeBufferToMesh = function(t, e) { + var r = this.ptr; + return t && "object" == typeof t && (t = t.ptr), e && "object" == typeof e && (e = e.ptr), y(hr(r, t, e), G) + }, g.prototype.__destroy__ = g.prototype.__destroy__ = function() { + Ar(this.ptr) + }, + function() { + function t() { + C.ATTRIBUTE_INVALID_TRANSFORM = Tr(), C.ATTRIBUTE_NO_TRANSFORM = Dr(), C.ATTRIBUTE_QUANTIZATION_TRANSFORM = Ir(), C.ATTRIBUTE_OCTAHEDRON_TRANSFORM = jr(), C.INVALID = Er(), C.POSITION = Gr(), C.NORMAL = vr(), C.COLOR = Or(), C.TEX_COORD = Pr(), C.GENERIC = Rr(), C.INVALID_GEOMETRY_TYPE = Sr(), C.POINT_CLOUD = Mr(), C.TRIANGULAR_MESH = Nr(), C.DT_INVALID = Ur(), C.DT_INT8 = gr(), C.DT_UINT8 = Fr(), C.DT_INT16 = Lr(), C.DT_UINT16 = Cr(), C.DT_INT32 = $r(), C.DT_UINT32 = wr(), C.DT_INT64 = zr(), C.DT_UINT64 = Vr(), C.DT_FLOAT32 = Br(), C.DT_FLOAT64 = Wr(), C.DT_BOOL = kr(), C.DT_TYPES_COUNT = xr(), C.OK = Qr(), C.DRACO_ERROR = Yr(), C.IO_ERROR = Hr(), C.INVALID_PARAMETER = qr(), C.UNSUPPORTED_VERSION = Xr(), C.UNKNOWN_VERSION = Kr() + } + st ? t() : at.unshift(t) + }(), "function" == typeof C.onModuleParsed && C.onModuleParsed(), C.Decoder.prototype.GetEncodedGeometryType = function(t) { + if (t.__class__ && t.__class__ === C.DecoderBuffer) return C.Decoder.prototype.GetEncodedGeometryType_Deprecated(t); + if (8 > t.byteLength) return C.INVALID_GEOMETRY_TYPE; + switch (t[7]) { + case 0: + return C.POINT_CLOUD; + case 1: + return C.TRIANGULAR_MESH; + default: + return C.INVALID_GEOMETRY_TYPE + } + }, e.ready + } +}(); +"object" == typeof exports && "object" == typeof module ? module.exports = DracoDecoderModule : "function" == typeof define && define.amd ? define([], (function() { + return DracoDecoderModule +})) : "object" == typeof exports && (exports.DracoDecoderModule = DracoDecoderModule); \ No newline at end of file diff --git a/public/assets/g/polytrack/main.bundle.js b/public/assets/g/polytrack/main.bundle.js index 89ffea46..0a7c468d 100644 --- a/public/assets/g/polytrack/main.bundle.js +++ b/public/assets/g/polytrack/main.bundle.js @@ -1,14 +1,35333 @@ -(()=>{var e={811:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.checkpoint {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\tmargin: 0;\n\tpadding: 8px 10px 8px 8px;\n\tline-height: 0;\n\tfont-size: 40px;\n\tcolor: var(--text-color);\n\ttext-align: left;\n\topacity: 0.9;\n\tclip-path: polygon(0 0, calc(100% - 8px) 0, 100% 100%, 0 100%);\n\tbackground-color: var(--surface-color);\n}\n.checkpoint.up {\n\tposition: absolute;\n\tbottom: auto;\n\ttop: 0;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n\n.checkpoint > div {\n\tmargin: 0;\n\tpadding: 0 16px 0 16px;\n\tclip-path: polygon(0 0, calc(100% - 6px) 0, 100% 100%, 0 100%);\n\tbackground-color: var(--surface-tertiary-color);\n}\n.checkpoint.up > div {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 6px) 100%, 0 100%);\n}\n\n.checkpoint > div > img {\n\tmargin: 0 12px 5px 0;\n\tpadding: 0;\n\twidth: 24px;\n\theight: 24px;\n\tvertical-align: middle;\n}\n",""]);const s=o},848:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.color-picker {\n\tmargin: 8px;\n}\n\n.color-picker > .value-saturation-picker {\n\tposition: relative;\n\tmargin: 0 0 8px 0;\n\twidth: 140px;\n\theight: 140px;\n\tbackground-color: #fff;\n\toverflow: hidden;\n}\n\n.color-picker > .value-saturation-picker > .marker {\n\tposition: absolute;\n\twidth: 12px;\n\theight: 12px;\n\tbackground-image: radial-gradient(closest-side, transparent, #000, #fff, #000, transparent);\n}\n\n.color-picker > .hue-picker {\n\tposition: relative;\n\twidth: 140px;\n\theight: 30px;\n\tbackground-image: linear-gradient(to right, \n\t\thsl(0, 100%, 50%),\n\t\thsl(60, 100%, 50%),\n\t\thsl(120, 100%, 50%),\n\t\thsl(180, 100%, 50%),\n\t\thsl(240, 100%, 50%),\n\t\thsl(300, 100%, 50%),\n\t\thsl(0, 100%, 50%)\n\t);\n\toverflow: hidden;\n}\n\n.color-picker > .hue-picker > .marker {\n\tposition: absolute;\n\ttop: 0;\n\theight: 100%;\n\twidth: 3px;\n\tbackground-image: linear-gradient(to right, #000, #fff, #000);\n}\n",""]);const s=o},959:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.customization {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.customization > .top {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\tbackground-color: var(--surface-color);\n}\n.customization > .top > .button {\n\tdisplay: inline-block;\n\tmargin: 8px 0;\n}\n.customization > .top > .button:first-of-type {\n\tmargin-left: 8px;\n}\n\n.customization > .colors {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\twidth: 100%;\n\ttext-align: center;\n\twhite-space: nowrap;\n}\n\n.customization > .colors > div {\n\tdisplay: inline-block;\n\tmargin: 0 10px;\n\tpadding: 0;\n\ttext-align: center;\n\tbackground: var(--surface-color);\n\tpointer-events: auto;\n}\n.customization > .colors > div > h2 {\n\tmargin: 0;\n\tpadding: 2px;\n\tfont-size: 26px;\n\tfont-weight: normal;\n\tbackground-color: var(--surface-secondary-color);\n\tcolor: var(--text-color);\n}\n.customization > .colors > div > input {\n\tmargin: 8px 8px 0 8px;\n\twidth: calc(140px - 8px * 2);\n\tfont-weight: normal;\n\tclip-path: none;\n\ttext-align: center;\n}\n",""]);const s=o},344:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.debug {\n\tmargin: 0.25em;\n\tpadding: 0;\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tfont-size: 28px;\n\ttext-shadow: 0 0 5px #000;\n\tcolor: #fff;\n\tz-index: 10;\n}\n",""]);const s=o},57:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.editor {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.editor > .top {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.editor > .top > .button-bar {\n\tdisplay: flex;\n\tmargin: 0;\n\tpadding: 0 8px;\n\theight: 68px;\n\tbackground-color: var(--surface-color);\n\twhite-space: nowrap;\n}\n.editor > .top > .button-bar > .button {\n\tmargin: 8px 0;\n\tmin-width: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.editor > .top > .trackname-input {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 6px 7px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 10px) 100%, 0 100%);\n\tfont-size: 30px;\n\tcolor: var(--text-color);\n\tbackground: var(--surface-secondary-color);\n}\n.editor > .top > .trackname-input > input {\n\tfont-weight: normal;\n\tfont-size: 30px;\n}\n\n.editor > .side {\n\tposition: absolute;\n\ttop: 68px;\n\tright: 0;\n\tmargin: 0;\n\tpadding: 0;\n\theight: calc(100% - 68px);\n\tdisplay: flex;\n\talign-items: end;\n}\n\n.editor > .side > .side-panel {\n\theight: 100%;\n\tbackground-color: var(--surface-secondary-color);\n\tpointer-events: auto;\n}\n\n.editor > .side > .side-panel > .category-panel, .editor > .side > .side-panel > .part-panel {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding: 2px 2px 0 2px;\n\theight: 100%;\n\tbox-sizing: border-box;\n\toverflow-x: hidden;\n\toverflow-y: scroll;\n\tscrollbar-width: thin;\n}\n.editor > .side > .side-panel > .category-panel > button > img {\n\twidth: 96px;\n}\n.editor > .side > .side-panel > .part-panel.hidden {\n\tdisplay: none;\n}\n\n.editor > .side > .side-panel button {\n\tdisplay: block;\n\tmargin: 0 0 2px 0;\n\tpadding: 5px;\n\tbackground-color: var(--button-color);\n\tborder: 2px solid rgb(38, 31, 88);\n\tcursor: pointer;\n}\n.editor > .side > .side-panel button:hover {\n\tbackground-color: var(--button-hover-color);\n}\n@media (hover: none) {\n\t.editor > .side > .side-panel button:hover {\n\t\tbackground-color: var(--button-color);\n\t}\n}\n.editor > .side > .side-panel button:active {\n\tbackground-color: var(--button-active-color);\n}\n.editor > .side > .side-panel button.selected {\n\tbackground-color: var(--button-hover-color);\n\tbox-shadow: inset 0 0 5px #fff;\n\tborder: 2px solid #fff;\n}\n.editor > .side > .side-panel button > img {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 64px;\n\t-webkit-filter: drop-shadow(0 0 2px #000);\n\tfilter: drop-shadow(0 0 2px #000);\n\tpointer-events: none;\n}\n\n.editor > .message-box {\n\tmargin: 10px;\n\tpadding: 0;\n\tposition: absolute;\n\tfont-size: 30px;\n\tcolor: #ff9696;\n\ttext-shadow: 0 0 5px #000;\n\tpointer-events: none;\n\n\tleft: -10px;\n\topacity: 0;\n}\n.editor > .message-box.green {\n\tcolor: #96ff96;\n}\n.editor > .message-box.show {\n\tleft: 0;\n\topacity: 1;\n\ttransition: opacity 0.25s ease-in-out, left 0.25s ease-in-out;\n}\n.editor > .message-box.hide {\n\tleft: 0;\n\topacity: 0;\n\ttransition: opacity 0.25s ease-in-out, left 0.25s ease-in-out;\n}\n",""]);const s=o},909:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.editor-checkpoint-order > .buttons {\n\tdisplay: inline-block;\n\tvertical-align: bottom;\n}\n.editor-checkpoint-order > .buttons > button {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: var(--button-color);\n\tpointer-events: auto;\n\tcursor: pointer;\n}\n.editor-checkpoint-order > .buttons > button:hover {\n\tbackground-color: var(--button-hover-color);\n}\n@media (hover: none) {\n\t.editor-checkpoint-order > .buttons > button:hover {\n\t\tbackground-color: var(--button-color);\n\t}\n}\n.editor-checkpoint-order > .buttons > button:active {\n\tbackground-color: var(--button-active-color);\n}\n\n.editor-checkpoint-order > .buttons > button > img {\n\tmargin: 0;\n\tpadding: 0 6px;\n\twidth: 20px;\n\theight: 20px;\n\tvertical-align: bottom;\n\tpointer-events: none;\n}\n.editor-checkpoint-order.touch > .buttons > button > img {\n\tpadding: 24px;\n\twidth: 40px;\n\theight: 40px;\n}\n\n.editor-checkpoint-order > p {\n\tmargin: 0;\n\tpadding: 0 10px;\n\tdisplay: inline-block;\n\tvertical-align: bottom;\n\tline-height: 40px;\n\tmin-width: 275px;\n\tfont-size: 26px;\n\ttext-align: center;\n\tbackground-color: var(--surface-transparent-color);\n\tcolor: var(--text-color);\n}\n.editor-checkpoint-order.touch > p {\n\tline-height: calc((40px + 2 * 24px) * 2);\n}\n",""]);const s=o},7:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.editor-height-selector {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.editor-height-selector > .buttons {\n\tdisplay: inline-block;\n\tvertical-align: bottom;\n}\n.editor-height-selector > .buttons > button {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: var(--button-color);\n\tpointer-events: auto;\n\tcursor: pointer;\n}\n.editor-height-selector > .buttons > button:hover {\n\tbackground-color: var(--button-hover-color);\n}\n@media (hover: none) {\n\t.editor-height-selector > .buttons > button:hover {\n\t\tbackground-color: var(--button-color);\n\t}\n}\n.editor-height-selector > .buttons > button:active {\n\tbackground-color: var(--button-active-color);\n}\n\n.editor-height-selector > .buttons > button > img { \n\tmargin: 0;\n\tpadding: 0 6px;\n\twidth: 20px;\n\theight: 20px;\n\tvertical-align: bottom;\n\tpointer-events: none;\n}\n.editor-height-selector.touch > .buttons > button > img {\n\tpadding: 24px;\n\twidth: 40px;\n\theight: 40px;\n}\n\n.editor-height-selector > p {\n\tmargin: 0;\n\tpadding: 0 10px;\n\tdisplay: inline-block;\n\tvertical-align: bottom;\n\tline-height: 40px;\n\tmin-width: 140px;\n\tfont-size: 26px;\n\ttext-align: center;\n\tbackground-color: var(--surface-transparent-color);\n\tcolor: var(--text-color);\n}\n.editor-height-selector.touch > p {\n\tline-height: calc((40px + 2 * 24px) * 2);\n}\n",""]);const s=o},242:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.editor-help > .background {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(20, 20, 30, 0.5);\n\tpointer-events: auto;\n}\n\n.editor-help > .container {\n\tposition: absolute;\n\tleft: calc(50% - 80% / 2);\n\ttop: 0;\n\tz-index: 2;\n\tdisplay: flex;\n\tflex-direction: column;\n\tbox-sizing: border-box;\n\twidth: 80%;\n\theight: 100%;\n\tbackground-color: var(--surface-color);\n}\n\n.editor-help > .container > h1 {\n\tmargin: 10px;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.editor-help > .container > .content {\n\tflex-grow: 1;\n\tpadding: 40px;\n\tbackground-color: var(--surface-secondary-color);\n\toverflow-y: auto;\n\tpointer-events: auto;\n}\n\n.editor-help > .container > .content > h2 {\n\tmargin: 32px 0 16px 0;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 30px;\n\tcolor: var(--text-color);\n\tborder-bottom: 2px solid var(--text-color);\n}\n.editor-help > .container > .content > h2:first-of-type {\n\tmargin-top: 0;\n}\n\n.editor-help > .container > .content > p {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 20px;\n\tcolor: var(--text-color);\n\twhite-space: pre-wrap;\n}\n\n.editor-help > .container > .content > .part-images {\n\tdisplay: flex;\n\tjustify-content: space-around;\n}\n\n.editor-help > .container > .content > .part-images > div {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.editor-help > .container > .content > .part-images > div > img {\n\twidth: 128px;\n\theight: 128px;\n\tfilter: drop-shadow(0 4px 5px rgba(0, 0, 0, 0.4));\n\tpointer-events: none;\n}\n\n.editor-help > .container > .content > .part-images > div > span {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 20px;\n\tcolor: var(--text-color);\n\ttext-align: center;\n}\n\n.editor-help > .container > .button-wrapper > button {\n\tmargin: 10px;\n}\n",""]);const s=o},51:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.editor-touch-controls > button {\n\tposition: absolute;\n\tbottom: 176px;\n\tleft: 0;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 160px;\n\theight: 160px;\n\tbackground-color: var(--button-color);\n\tborder: none;\n\topacity: 0.6;\n\tpointer-events: auto;\n}\n.editor-touch-controls > button > img {\n\tmargin: 0;\n\tpadding: 30px;\n\tvertical-align: top;\n\twidth: 100%;\n height: 100%;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n\ttransition: padding 0.25s ease-out;\n}\n.editor-touch-controls > button.active > img {\n padding: 40px;\n}\n",""]);const s=o},804:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.game-toolbar {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tpadding: 8px 10px 8px 8px;\n\tbackground-color: var(--surface-color);\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\topacity: 0;\n\ttransform: translateX(-10px);\n\ttransition: opacity ease-in-out 0.2s, transform ease-in-out 0.2s;\n}\n.game-toolbar.up {\n\tposition: absolute;\n\tbottom: auto;\n\ttop: 0;\n}\n\n.game-toolbar.visible {\n\topacity: 1;\n\ttransform: translateX(0);\n\ttransition: opacity 0.2s ease-in-out 0.5s, transform 0.2s ease-in-out 0.5s;\n}\n",""]);const s=o},229:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.hint {\n\tmargin: 10px;\n\tpadding: 0;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 90px;\n\twidth: 100%;\n\ttext-align: center;\n\tfont-size: 40px;\n\tcolor: #fff;\n\ttext-shadow: 0 0 5px #000;\n\tpointer-events: none;\n\n\topacity: 0;\n}\n.hint.show {\n\ttop: 100px;\n\topacity: 1;\n\ttransition: opacity 0.25s ease-in-out, top 0.25s ease-in-out;\n}\n.hint.hide {\n\ttop: 90px;\n\topacity: 0;\n\ttransition: opacity 0.25s ease-in-out, top 0.25s ease-in-out;\n}\n",""]);const s=o},465:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.input-visualizer {\n position: absolute;\n left: 0;\n bottom: 64px;\n margin: 10px;\n padding: 0;\n --size: 96px;\n width: calc(var(--size) * 3);\n height: calc(var(--size) * 2);\n opacity: 0.9;\n}\n\n.input-visualizer > div {\n position: absolute;\n margin: 0;\n padding: 0;\n width: var(--size);\n height: var(--size);\n background-color: var(--surface-color);\n}\n\n.input-visualizer > .arrow-up {\n left: var(--size);\n top: 0;\n}\n\n.input-visualizer > .arrow-right {\n left: calc(var(--size) * 2);\n top: var(--size);\n}\n\n.input-visualizer > .arrow-down {\n left: var(--size);\n top: var(--size);\n}\n\n.input-visualizer > .arrow-left {\n left: 0;\n top: var(--size);\n}\n\n.input-visualizer > div.active {\n background-color: var(--surface-tertiary-color);\n}\n\n.input-visualizer > div > img {\n margin: 0;\n padding: 20px;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n}\n.input-visualizer > div.active > img {\n padding: 25px;\n}",""]);const s=o},657:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.leaderboard {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 600px;\n\theight: 100%;\n\ttext-align: left;\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground-color: var(--surface-color);\n}\n\n.leaderboard > h2 {\n\tmargin: 10px;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.leaderboard > .container {\n\tmargin: 0;\n\tpadding: 0;\n\tflex-grow: 1;\n\tbackground-color: var(--surface-secondary-color);\n\toverflow-y: scroll;\n\tpointer-events: auto;\n}\n\n.leaderboard > .container > .loading-spinner {\n\tmargin: 50% auto;\n}\n\n.leaderboard > .container > .error-message {\n\tfont-size: 20px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.leaderboard > .container > .buttons {\n\tposition: relative;\n\tmargin: 10px 10px 0 10px;\n\tpadding: 0;\n}\n\n.leaderboard > .container > .buttons:last-of-type {\n\tmargin-bottom: 10px;\n}\n\n.leaderboard > .container > .buttons > button.main {\n\tmargin: 0;\n\tpadding: 0;\n\tvertical-align: top;\n\twidth: 100%;\n\theight: 100px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\ttext-align: left;\n\twhite-space: nowrap;\n}\n\n.leaderboard > .container > .buttons > button.main:disabled {\n\tbackground-color: var(--button-hover-color);\n}\n\n.leaderboard > .container > .buttons > button.main > img {\n\tbackground-color: rgba(0, 0, 0, 0.1);\n\twidth: 100px;\n\theight: 100px;\n}\n\n.leaderboard > .container > .buttons > button.main > .left, .leaderboard > .container > .buttons > button.main > .right {\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n\n.leaderboard > .container > .buttons > button.main > div > p {\n\tmargin: 0;\n\tpadding: 12px;\n\tfont-size: 28px;\n\tcolor: var(--text-color);\n}\n\n.leaderboard > .container > .buttons > button.main > div > .name {\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\twidth: 260px;\n}\n\n.leaderboard > .container > .buttons > button.main > div > .verified-state {\n\topacity: 0.8;\n\tposition: absolute;\n\tright: 6px;\n\tmargin: 6px 0 0 0;\n\tfont-size: 18px;\n}\n.leaderboard > .container > .buttons > button.main > div > .verified-state > img {\n\tmargin: 0 0 0 2px;\n\tpadding: 0;\n\theight: 12px;\n\tvertical-align: middle;\n}\n.leaderboard > .container > .buttons > button.main > div > .verified-state.verified {\n\tcolor: #5f5;\n}\n.leaderboard > .container > .buttons > button.main > div > .verified-state.invalid {\n\tcolor: #f55;\n}\n.leaderboard > .container > .buttons > button.main > div > .verified-state.pending {\n\tcolor: #ff5;\n}\n\n.leaderboard > .container > .buttons > button.preview {\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n\tmargin: 8px;\n\tpadding: 0 9px;\n\tbackground-color: var(--surface-color);\n\tclip-path: polygon(3px 0, 100% 0, calc(100% - 3px) 100%, 0 100%);\n}\n.leaderboard > .container > .buttons > button.preview > img {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 16px;\n\tpointer-events: none;\n}\n\n.leaderboard > .pages {\n\tmargin: 10px 10px 0 10px;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n.leaderboard > .pages > button.page {\n\tpadding: 0;\n\twidth: 0;\n\tflex-grow: 1;\n}\n.leaderboard > .pages > button.selected {\n\tbackground-color: var(--button-hover-color);\n}\n\n.leaderboard > .button-wrapper > .back {\n\tmargin: 10px;\n}\n\n.leaderboard > .button-wrapper > .icon-button {\n\tmargin: 10px 0;\n\tfloat: right;\n}\n.leaderboard > .button-wrapper > .icon-button.first {\n\tmargin: 10px 10px 10px 0;\n}\n\n.leaderboard > .button-wrapper > .icon-button > img {\n\twidth: 28px;\n}\n.leaderboard > .button-wrapper > .icon-button.disabled > img, .leaderboard > .button-wrapper > .icon-button:disabled > img {\n\topacity: 0.25;\n}\n",""]);const s=o},86:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.loading-spinner {\n\twidth: 40px;\n\theight: 40px;\n\tborder-radius: 50%;\n\tborder: 5px solid var(--surface-tertiary-color);\n\tborder-left-color: var(--text-color);\n\n\tanimation: 1s linear infinite forwards loading-spinner-spin;\n}\n\n@keyframes loading-spinner-spin {\n\tfrom {\n\t\ttransform: rotate(0);\n\t}\n\tto {\n\t\ttransform: rotate(360deg);\n\t}\n}\n",""]);const s=o},927:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.loading {\n\tmargin: 200px 0 0 0;\n\tpadding: 0;\n}\n\n.loading > p {\n\tmargin: 5px;\n\tpadding: 0;\n\tcolor: var(--text-color);\n\tfont-size: 32px;\n}\n\n.loading > div {\n\tmargin: 0 auto;\n\tpadding: 0;\n\twidth: 600px;\n\theight: 50px;\n\tbackground-color: var(--surface-color);\n\tclip-path: polygon(9px 0, 100% 0, calc(100% - 9px) 100%, 0 100%);\n\toverflow: hidden;\n}\n\n.loading > div > div {\n\tmargin: 15px 20px;\n\tpadding: 0;\n\twidth: 560px;\n\theight: 20px;\n\tclip-path: polygon(3px 0, 100% 0, calc(100% - 3px) 100%, 0 100%);\n\tbackground-color: #224;\n\tbox-shadow: inset 0 0 6px #000;\n}\n\n.loading > div > div > div {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 0;\n\theight: 100%;\n\tclip-path: polygon(2px 0, 100% 0, calc(100% - 2px) 100%, 0 100%);\n\tbackground-color: #fff;\n\tbox-shadow: inset 0 0 6px #000;\n}\n",""]);const s=o},915:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.menu {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(10,10,20,0.8);\n\ttext-align: center;\n}\n\n.menu > .logo {\n\tdisplay: block;\n\tmargin: 80px auto 180px auto;\n\tpadding: 0;\n\twidth: 1000px;\n\theight: 200px;\n\t-webkit-filter: drop-shadow(0 0 3px #000);\n\tfilter: drop-shadow(0 0 3px #000);\n}\n\n.menu .button-image {\n\tdisplay: inline-block;\n\tmargin: 10px 0;\n\tpadding: 0;\n\twidth: 200px;\n\theight: 200px;\n\tpointer-events: auto;\n}\n.menu .button-image > img {\n\tmargin: 40px 40px 0 40px;\n\tpadding: 0;\n\twidth: 96px;\n\ttransition: transform 0.2s ease-in-out;\n\tpointer-events: none;\n}\n.menu .button-image:not(:disabled):hover > img {\n\ttransform: translateY(-10px);\n}\n@media (hover: none) {\n\t.menu .button-image:not(:disabled):hover > img {\n\t\ttransform: none;\n\t}\n}\n.menu .button-image > p {\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: var(--text-color);\n\tfont-size: 27px;\n}\n\n.menu > .bottom-buttons {\n\tmargin: 4px;\n\tpadding: 0;\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.menu > .bottom-buttons > .small {\n\tpadding: 6px 12px;\n\tclip-path: polygon(4px 0, 100% 0, calc(100% - 4px) 100%, 0 100%);\n\tfont-size: 22px;\n}\n.menu > .bottom-buttons > .small > img {\n\tvertical-align: middle;\n}\n\n.menu > .discord-link {\n\tdisplay: block;\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n\tmargin: 0;\n\tpadding: 0;\n\tpointer-events: auto;\n}\n.menu > .discord-link > img {\n\tmargin: 8px 16px;\n\tpadding: 0;\n\theight: 40px;\n}\n\n.menu > .info {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\twidth: 100%;\n}\n.menu > .info > a {\n\tdisplay: block;\n\tmargin: 0 auto;\n\tpadding: 5px;\n\twidth: fit-content;\n\tcolor: var(--text-color);\n\ttext-decoration: none;\n\tfont-size: 20px;\n\tpointer-events: auto;\n}\n.menu > .info > a:hover, .menu > .info > a:focus-visible {\n\ttext-decoration: underline;\n\toutline: none;\n}\n",""]);const s=o},437:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.message-box > .background {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(20, 20, 30, 0.5);\n\tpointer-events: auto;\n}\n\n.message-box > .box {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 30%;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 16px;\n\twidth: 500px;\n\tbox-sizing: border-box;\n\tbackground-color: var(--surface-color);\n\ttext-align: center;\n}\n\n.message-box > .box > p {\n\tmargin: 5px 0 20px 0;\n\tpadding: 0;\n\tmin-height: 50px;\n\tline-height: 0.9;\n\tfont-size: 32px;\n\toverflow-wrap: break-word;\n\twhite-space: pre-wrap;\n\tcolor: var(--text-color);\n}\n\n.message-box.message > .box > button:first-of-type {\n\tdisplay: none;\n}\n\n.message-box.confirm > .box > button:first-of-type {\n\tfloat: left;\n}\n.message-box.confirm > .box > button:last-of-type {\n\tfloat: right;\n}\n\n.message-box > .box > button {\n\tmin-width: 140px;\n}\n",""]);const s=o},474:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.nickname {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 40%;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 16px;\n\twidth: 500px;\n\tbox-sizing: border-box;\n\tbackground-color: var(--surface-color);\n}\n\n.nickname > h1 {\n\tmargin: 0 4px 0 4px;\n\tpadding: 0;\n\tfont-size: 35px;\n\tfont-weight: normal;\n\tcolor: var(--text-color);\n}\n\n.nickname > input[type=text] {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0.25em;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tfont-size: 36px;\n\tfont-weight: normal;\n}\n\n.nickname > p {\n\tmargin: 16px 4px 0 4px;\n\tpadding: 0;\n\tfont-size: 20px;\n\tcolor: var(--text-color);\n}\n\n.nickname > button {\n\tdisplay: inline-block;\n\tmargin: 16px 0 0 0;\n}\n.nickname > button:last-of-type {\n\tfloat: right;\n}\n\n.nickname > button.delete {\n\tposition: absolute;\n\tright: 8px;\n\ttop: 0;\n\tfont-size: 16px;\n\tpadding: 8px 16px;\n}\n\n.nickname > button.delete > img.button-icon {\n\tmargin: -5px 0 -2px -3px;\n\theight: 16px;\n}\n\nbutton.nickname-verifier-button {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 22px;\n\tmargin: 0 4px;\n}\n\n.nickname-user-token {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tmargin: 0 4px;\n\ttext-align: left;\n\tfont-size: 18px;\n\topacity: 0.5;\n\tcolor: var(--text-color);\n\tpointer-events: all;\n\t-webkit-user-select: all;\n\t-moz-user-select: all;\n\t-ms-user-select: all;\n\tuser-select: all;\n}\n",""]);const s=o},768:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.preview-toolbar {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tpadding: 8px 10px 8px 8px;\n\tbackground-color: var(--surface-color);\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n",""]);const s=o},140:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.profile-selection {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 40%;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 500px;\n\tbox-sizing: border-box;\n\tbackground-color: var(--surface-secondary-color);\n}\n\n.profile-selection > .top-bar {\n\tmargin: 0;\n\tpadding: 10px;\n\tbackground-color: var(--surface-color);\n}\n\n.profile-selection > .top-bar > h2 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.profile-selection > .slot {\n\tposition: relative;\n\tmargin: 10px 10px 0 10px;\n\tpadding: 0;\n}\n\n.profile-selection > .slot > button.main {\n\tmargin: 0;\n\tpadding: 0;\n\tvertical-align: top;\n\twidth: 100%;\n\theight: 100px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\ttext-align: left;\n\twhite-space: nowrap;\n}\n\n.profile-selection > .slot > button.main.selected {\n\tbackground-color: var(--button-hover-color);\n}\n\n.profile-selection > .slot > button.main > img {\n\tbackground-color: rgba(0, 0, 0, 0.1);\n\twidth: 100px;\n\theight: 100px;\n\tpointer-events: none;\n}\n\n.profile-selection > .slot > button.main > .name {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tmargin: 0;\n\tpadding: 12px;\n\tfont-size: 28px;\n\tcolor: var(--text-color);\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\twidth: 320px;\n}\n\n.profile-selection > .bottom-bar {\n\tmargin: 10px 0 0 0;\n\tpadding: 10px;\n\tbackground-color: var(--surface-color);\n}\n\n.profile-selection > .bottom-bar > .button.right {\n\tfloat: right;\n}\n",""]);const s=o},643:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,'\n.settings-menu {\n\tposition: absolute;\n\tleft: calc(50% - 800px / 2);\n\ttop: 0;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 800px;\n\theight: 100%;\n\ttext-align: left;\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground-color: var(--surface-color);\n}\n\n.settings-menu > h2 {\n\tmargin: 10px;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.settings-menu > .container {\n\tmargin: 0;\n\tpadding: 0;\n\tflex-grow: 1;\n\tbackground-color: var(--surface-secondary-color);\n\toverflow-y: scroll;\n\tpointer-events: auto;\n}\n\n.settings-menu > .container > h2 {\n\tmargin: 10px;\n\tpadding: 4px;\n\tfont-weight: normal;\n\tfont-size: 24px;\n\tcolor: var(--text-color);\n\tborder-bottom: 2px solid var(--text-color);\n}\n\n.settings-menu > .container > .setting {\n\tmargin: 10px;\n\tdisplay: flex;\n}\n\n.settings-menu > .container > .setting > p {\n\tdisplay: inline-block;\n\tmargin: 10px;\n\tpadding: 0;\n\tmin-width: 0;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tflex-grow: 1;\n\tfont-size: 28px;\n\ttext-align: left;\n\tcolor: var(--text-color);\n}\n\n.settings-menu > .container > .setting > .button-wrapper {\n\twhite-space: nowrap;\n}\n.settings-menu > .container > .setting.wrappable > .button-wrapper {\n\twhite-space: normal;\n}\n.settings-menu > .container > .setting.wrappable > .button-wrapper > button {\n\tmargin-bottom: 8px;\n\twidth: calc(100% / 4);\n\tfont-size: 23px;\n}\n\n.settings-menu > .container > .setting > .button-wrapper > button {\n\theight: 48px;\n\twhite-space: nowrap;\n}\n.settings-menu > .container > .setting > .button-wrapper > button.selected {\n\tbackground-color: var(--button-hover-color);\n}\n.settings-menu > .container > .setting > .button-wrapper > button.key-binding {\n\twidth: 210px;\n\tfont-size: 22px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tvertical-align: top;\n}\n\n.settings-menu > .container > .setting > input[type="range"] {\n\tmargin: 0 20px;\n\tpadding: 0;\n\twidth: 390px;\n\t-webkit-appearance: none;\n\tappearance: none;\n\tbackground: transparent;\n\tcursor: pointer;\n\taccent-color: var(--text-color);\n}\n.settings-menu > .container > .setting > input[type="range"]::-webkit-slider-runnable-track {\n\tbackground-color: var(--surface-tertiary-color);\n\theight: 10px;\n}\n.settings-menu > .container > .setting > input[type="range"]::-moz-range-track {\n\tbackground-color: var(--surface-tertiary-color);\n\theight: 10px;\n}\n.settings-menu > .container > .setting > input[type="range"]::-webkit-slider-thumb {\n\t-webkit-appearance: none;\n\tappearance: none;\n\tborder-radius: 0;\n\tbackground: var(--text-color);\n\twidth: 32px;\n\theight: 32px;\n\tmargin: -13px 0 0 0;\n\tborder: 4px solid var(--button-color);\n\toutline: 2px solid var(--text-color);\n}\n.settings-menu > .container > .setting > input[type="range"]::-webkit-slider-thumb:hover {\n\tborder: 4px solid var(--button-hover-color);\n}\n@media (hover: none) {\n\t.settings-menu > .container > .setting > input[type="range"]::-webkit-slider-thumb:hover {\n\t\tborder: 4px solid var(--button-color);\n\t}\n}\n.settings-menu > .container > .setting > input[type="range"]::-webkit-slider-thumb:active {\n\tborder: 4px solid var(--button-active-color);\n}\n.settings-menu > .container > .setting > input[type="range"]::-moz-range-thumb {\n\t-webkit-appearance: none;\n\tappearance: none;\n\tborder-radius: 0;\n\tbackground: var(--text-color);\n\twidth: 24px;\n\theight: 24px;\n\tborder: 4px solid var(--button-color);\n\toutline: 2px solid var(--text-color);\n}\n.settings-menu > .container > .setting > input[type="range"]::-moz-range-thumb:hover {\n\tborder: 4px solid var(--button-hover-color);\n}\n@media (hover: none) {\n\t.settings-menu > .container > .setting > input[type="range"]::-moz-range-thumb:hover {\n\t\tborder: 4px solid var(--button-color);\n\t}\n}\n.settings-menu > .container > .setting > input[type="range"]::-moz-range-thumb:active {\n\tborder: 4px solid var(--button-active-color);\n}\n\n.settings-menu > .button-wrapper > .button {\n\tmargin: 10px 0;\n}\n\n.settings-menu > .button-wrapper > .button:first-of-type {\n\tmargin-left: 10px;\n}\n\n.settings-menu > .button-wrapper > .button:last-of-type {\n\tmargin-right: 10px;\n}\n\n.settings-menu > .button-wrapper > .button > img {\n\tmargin-top: -3px;\n}\n\n.settings-menu > .button-wrapper > .apply {\n\tfloat: right;\n}\n',""]);const s=o},151:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.speedometer {\n\tposition: absolute;\n\tbottom: 0;\n\tright: 0;\n\tmargin: 0;\n\tpadding: 8px 8px 8px 10px;\n\tmin-width: 140px;\n\tline-height: 0;\n\tfont-size: 40px;\n\tcolor: var(--text-color);\n\ttext-align: right;\n\topacity: 0.9;\n\tclip-path: polygon(8px 0, 100% 0, 100% 100%, 0 100%);\n\tbackground-color: var(--surface-color);\n}\n.speedometer.up {\n\tbottom: auto;\n\ttop: 0;\n\tclip-path: polygon(0 0, 100% 0, 100% 100%, 8px 100%);\n}\n\n.speedometer > div {\n\tmargin: 0;\n\tpadding: 0 0 0 16px;\n\tclip-path: polygon(6px 0, 100% 0, 100% 100%, 0 100%);\n\tbackground-color: var(--surface-tertiary-color);\n}\n.speedometer.up > div {\n\tclip-path: polygon(0 0, 100% 0, 100% 100%, 6px 100%);\n}\n\n.speedometer > div > span:last-of-type {\n\topacity: 0.5;\n\tmargin: 0 0.3em 0 0.25em;\n\tpadding: 0;\n\tfont-size: 0.5em;\n}\n.speedometer > div > span > span {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n\ttext-align: center;\n}\n",""]);const s=o},419:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var i=n(601),r=n.n(i),a=n(314),o=n.n(a),s=n(417),l=n.n(s),c=new URL(n(682),n.b),h=new URL(n(208),n.b),d=new URL(n(832),n.b),u=o()(r()),p=l()(c),f=l()(h),m=l()(d);u.push([e.id,`\n:root {\n\t--text-color: #fff;\n\t--text-disabled-color: #5d6a7c;\n\t--surface-color: #28346a;\n\t--surface-secondary-color: #212b58;\n\t--surface-tertiary-color: #192042;\n\t--surface-transparent-color: rgba(40, 52, 106, 0.5);\n\t--button-color: #112052;\n\t--button-hover-color: #334b77;\n\t--button-active-color: #151f41;\n\t--button-disabled-color: #313d53;\n}\n\n@font-face {\n\tfont-family: ForcedSquare;\n\tsrc:\n\t\turl(${p}) format("woff2"),\n\t\turl(${f}) format("woff"),\n\t\turl(${m}) format("truetype");\n}\n\nhtml, body {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\n\tbackground: #000;\n}\n\n* {\n\tfont-family: ForcedSquare, Arial, sans-serif;\n\tline-height: 1;\n}\n\n#screen {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n\t-webkit-tap-highlight-color: transparent;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\ttouch-action: none;\n}\n\n#ui {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\ttransform-origin: 0 0;\n\tpointer-events: none;\n\t-webkit-tap-highlight-color: transparent;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n::-webkit-scrollbar {\n\twidth: 8px;\n\tbackground-color: #223;\n}\n::-webkit-scrollbar-thumb {\n\tborder-radius: 4px;\n\tbackground-color: #7272c2;\n}\n\n::selection {\n\tbackground-color: #5936d6;\n\tcolor: #fff;\n}\n\nbody {\n\tscrollbar-color: #7272c2 #223;\n}\n\n.hide-cursor {\n\tcursor: none;\n}\n\n.hidden {\n\tdisplay: none;\n}\n\ninput[type="text"] {\n\tmargin: 0;\n\tpadding: 4px 8px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\tfont-size: 24px;\n\tfont-weight: bold;\n\tcolor: var(--text-color);\n\tbackground-color: var(--surface-tertiary-color);\n\tborder: none;\n\tpointer-events:auto;\n}\ninput[type="text"]:focus-visible {\n\toutline: none;\n}\n\n.button {\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 8px 18px;\n\tbackground-color: var(--button-color);\n\tborder: none;\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\tcolor: var(--text-color);\n\tfont-size: 32px;\n\n\tpointer-events: auto;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\tcursor: pointer;\n}\n.button::after {\n\tcontent: "";\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tz-index: -1;\n\twidth: 0;\n\theight: 100%;\n\tbackground-color: var(--button-hover-color);\n\tborder-bottom: 2px solid var(--text-color);\n\ttransition: width 0.1s ease-in-out;\n}\n.button:hover::after {\n\twidth: 100%;\n}\n@media (hover: none) {\n\t.button::after {\n\t\tbackground-color: var(--button-active-color);\n\t}\n\n\t.button:hover::after {\n\t\twidth: 0;\n\t}\n}\n.button:active::after {\n\tbackground-color: var(--button-active-color);\n\twidth: 100%;\n}\n.button:focus-visible {\n\tbackground-color: var(--button-hover-color);\n\ttext-decoration: underline;\n\toutline: none;\n}\n.button > img.button-icon {\n\tmargin: -6px -4px 0 -4px;\n\tpadding: 0;\n\theight: 32px;\n\tvertical-align: middle;\n\tpointer-events: none;\n}\n.button:disabled {\n\tbackground-color: var(--button-disabled-color);\n\tcolor: var(--text-disabled-color);\n\tcursor: default;\n}\n.button:disabled:after {\n\tcontent: none;\n}\n`,""]);const g=u},817:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.time-announcer {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 35%;\n\twidth: 100%;\n\toverflow: hidden;\n}\n\n.time-announcer > .record {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 48px;\n\ttext-shadow: 0 0 5px #000;\n\tcolor: #5f5;\n\ttext-align: center;\n\topacity: 0;\n\tanimation: 0.3s ease-out 0.8s 1 normal forwards running time-announcer-record-animation;\n}\n\n.time-announcer > .track-name {\n\tmargin: 0 0 10px 0;\n\tpadding: 4px 20px;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tbackground-color: var(--surface-secondary-color);\n\tfont-size: 60px;\n\tcolor: var(--text-color);\n\ttext-align: center;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tanimation: 0.3s ease-out 0s 1 normal forwards running time-announcer-animation;\n}\n\n.time-announcer > .current {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 0;\n\tbackground-color: var(--surface-color);\n\tfont-size: 48px;\n\tcolor: var(--text-color);\n\ttext-align: center;\n\tanimation: 0.5s ease-out 0s 1 normal forwards running time-announcer-animation;\n}\n.time-announcer > .difference > p {\n\tmargin: 0 0 0 auto;\n\tpadding: 0;\n\twidth: 0;\n\tbackground-color: var(--surface-secondary-color);\n\tcolor: #5f5;\n\tfont-size: 30px;\n\ttext-align: center;\n\tanimation: 0.4s ease-out 0.5s 1 normal forwards running time-announcer-animation;\n}\n.time-announcer > .difference.red > p {\n\tcolor: #f55;\n}\n.time-announcer > .difference > p.title {\n\tmargin-top: 30px;\n\tbackground-color: transparent;\n\ttext-shadow: 0 0 3px #000;\n}\n\n@keyframes time-announcer-record-animation {\n\tfrom {\n\t\topacity: 0;\n\t\ttransform: translateY(10px);\n\t}\n\n\tto {\n\t\topacity: 1;\n\t}\n}\n\n@keyframes time-announcer-animation {\n\tfrom {\n\t\twidth: 0;\n\t\topacity: 0;\n\t}\n\n\tto {\n\t\twidth: 100%;\n\t\topacity: 1;\n\t}\n}\n",""]);const s=o},543:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.time-bar {\n\tdisplay: flex;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\tbackground-color: var(--surface-color);\n}\n\n.time-bar > button {\n\tmargin: 6px;\n\tpadding: 4px 12px;\n}\n.time-bar > button > img {\n\tmargin: 0 0 2px 0;\n\tpadding: 0;\n\tvertical-align: middle;\n\twidth: 28px;\n\theight: 28px;\n\tpointer-events: none;\n}\n\n.time-bar > .bar {\n\tposition: relative;\n\tmargin: 6px 6px 6px -8px;\n\tpadding: 0;\n\tflex-grow: 1;\n\theight: 40px;\n\tbackground-color: var(--surface-secondary-color);\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\ttouch-action: none;\n\tpointer-events: auto;\n}\n.time-bar > .bar > div {\n\tposition: relative;\n\twidth: calc(100% - 8px);\n\theight: 100%;\n}\n.time-bar > .bar > div > .unloaded-fill {\n\tposition: absolute;\n\tright: -8px;\n\ttop: 0;\n\tmargin: 0;\n\tpadding: 0;\n\theight: 100%;\n\tbackground-color: rgba(255, 255, 255, 0.1);\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\twill-change: width;\n}\n.time-bar > .bar > div > .fill {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmargin: 0;\n\tpadding: 0;\n\theight: 100%;\n\tbackground-color: #7272c2;\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\twill-change: width;\n}\n.time-bar > .bar > div > .dash {\n\tposition: absolute;\n\tz-index: 1;\n\tbottom: 0;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 2px;\n\theight: 25%;\n\tbackground-color: rgba(0,0,0,0.25);\n}\n.time-bar > .bar > div > .dash.long {\n\theight: 50%;\n\tbackground-color: rgba(0,0,0,0.35);\n}\n",""]);const s=o},479:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.timer {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\twidth: 100%;\n\ttext-align: center;\n\topacity: 0.9;\n}\n.timer.up {\n\tbottom: auto;\n\ttop: 0;\n}\n\n.timer > div {\n\tmargin: 0;\n\tpadding: 0;\n\tdisplay: inline-flex;\n\tflex-direction: column;\n\twidth: 240px;\n\tvertical-align: bottom;\n}\n.timer.up > div {\n\tflex-direction: column-reverse;\n\tvertical-align: top;\n}\n.timer > div > h2 {\n\tmargin: 0 auto;\n\tpadding: 0;\n\twidth: 220px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tcolor: var(--text-color);\n\tfont-size: 26px;\n\tfont-weight: normal;\n\ttext-shadow: 1px 1px 1px var(--surface-color), -1px 1px 1px var(--surface-color), -1px -1px 1px var(--surface-color), 1px -1px 1px var(--surface-color);\n}\n\n.timer > div > div {\n\tmargin: 0;\n\tpadding: 0;\n\tbackground-color: var(--surface-color);\n}\n.timer > .left > div {\n\tpadding: 8px 4px 8px 10px;\n\tclip-path: polygon(8px 0, 100% 0, 100% 100%, 0 100%);\n}\n.timer.up > .left > div {\n\tclip-path: polygon(0 0, 100% 0, 100% 100%, 8px 100%);\n}\n.timer > .center > div {\n\tposition: relative;\n\tz-index: 1;\n\tmargin: 0 -12px;\n\tpadding: 8px 10px;\n\tclip-path: polygon(8px 0, calc(100% - 8px) 0, 100% 100%, 0 100%);\n}\n.timer.up > .center > div {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 8px 100%);\n}\n.timer > .right > div {\n\tpadding: 8px 10px 8px 4px;\n\tclip-path: polygon(0 0, calc(100% - 8px) 0, 100% 100%, 0 100%);\n}\n.timer.up > .right > div {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n\n.timer > div > div > p {\n\tmargin: 0;\n\tpadding: 0;\n\tbackground-color: var(--surface-tertiary-color);\n\tcolor: var(--text-color);\n\tfont-size: 34px;\n}\n.timer > .left > div > p {\n\tclip-path: polygon(6px 0, 100% 0, 100% 100%, 0 100%);\n}\n.timer.up > .left > div > p {\n\tclip-path: polygon(0 0, 100% 0, 100% 100%, 6px 100%);\n}\n.timer > .center > div > p {\n\tfont-size: 46px;\n\tclip-path: polygon(6px 0, calc(100% - 6px) 0, 100% 100%, 0 100%);\n}\n.timer.up > .center > div > p {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 6px) 100%, 6px 100%);\n}\n.timer > .right > div > p {\n\tclip-path: polygon(0 0, calc(100% - 6px) 0, 100% 100%, 0 100%);\n}\n.timer.up > .right > div > p {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 6px) 100%, 0 100%);\n}\n\n.timer > div > div > p.green {\n\tcolor: #5f5;\n}\n.timer > div > div > p.red {\n\tcolor:#f55;\n}\n\n.timer > div > div > p > span {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n\ttext-align: center;\n}\n.timer > div > div > p > span.sign {\n\tmargin-left: -4px;\n\twidth: 0.7em;\n}\n",""]);const s=o},571:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.touch-controls > button {\n\tposition: absolute;\n\ttop: calc(1.5cm + 50px);\n\tmargin: 10px;\n\tpadding: 0;\n\twidth: 160px;\n\theight: 160px;\n\tbackground-color: var(--button-color);\n\tborder: none;\n\topacity: 0.6;\n\tpointer-events: auto;\n}\n.touch-controls > button > img {\n\tmargin: 0;\n\tpadding: 30px;\n\tvertical-align: top;\n\twidth: 100%;\n height: 100%;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n\ttransition: padding 0.25s ease-out;\n}\n.touch-controls > button.active > img {\n padding: 40px;\n}\n\n.touch-controls > .quit {\n\tleft: 1.5cm;\n}\n\n.touch-controls > .reset {\n\tright: 1.5cm;\n}\n\n.touch-controls > .left-container {\n\tposition: absolute;\n\tleft: 1.5cm;\n\tbottom: 1.5cm;\n}\n\n.touch-controls > .right-container {\n\tposition: absolute;\n\tright: 1.5cm;\n\tbottom: 1.5cm;\n}\n.touch-controls > .right-container > div {\n\tdisplay: inline-block;\n}\n\n.touch-controls > div > div {\n\tmargin: 10px;\n\tpadding: 0;\n\twidth: 160px;\n\theight: 160px;\n\tbackground-color: var(--button-color);\n\topacity: 0.5;\n\tpointer-events: auto;\n}\n.touch-controls > div > div.active {\n\tbackground-color: var(--button-active-color);\n\topacity: 0.6;\n}\n\n.touch-controls > div > div > img {\n\tmargin: 0;\n\tpadding: 40px;\n\tvertical-align: top;\n\twidth: 100%;\n height: 100%;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n}\n.touch-controls > div > div.active > img {\n padding: 50px;\n}\n",""]);const s=o},687:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.track-export > .background {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(20, 20, 30, 0.5);\n\tpointer-events: auto;\n}\n\n.track-export > .box {\n\tposition: absolute;\n\tleft: calc(50% - 80% / 2);\n\ttop: 20px;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 10px;\n\tbox-sizing: border-box;\n\twidth: 80%;\n\theight: calc(100% - 20px * 2);\n\tbackground-color: var(--surface-color);\n}\n\n.track-export > .box > .bar {\n\ttext-align: left;\n\tpointer-events: auto;\n}\n.track-export > .box > .bar > .button.right {\n\tfloat: right;\n}\n\n.track-export > .box > textarea {\n\tmargin: 10px 0 0 0;\n\tpadding: 10px;\n\tbox-sizing: border-box;\n\tmin-width: 100%;\n\tmax-width: 100%;\n\tmin-height: calc(100% - 52px - 10px);\n\tmax-height: calc(100% - 52px - 10px);\n\tpointer-events: auto;\n\tbackground-color: var(--surface-tertiary-color);\n\tborder: none;\n\tresize: none;\n\tcolor: var(--text-color);\n\tword-break: break-all;\n\tfont-size: 20px;\n}\n.track-export > .box > textarea:focus-visible {\n\toutline: none;\n}\n",""]);const s=o},586:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.track-info {\n\tposition: absolute;\n\tleft: calc(50% - 1050px / 2);\n\ttop: 0;\n\tz-index: 2;\n\tdisplay: flex;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 1000px;\n\theight: 100%;\n}\n\n.track-info > .side-panel {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-left: 50px;\n\twidth: 400px;\n\t\n\tbackground-color: var(--surface-color);\n}\n\n.track-info > .side-panel > h2 {\n\tmargin: 10px 10px 0 10px;\n\tpadding: 0;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n\n.track-info > .side-panel > .thumbnail {\n\tmargin: 10px 0 0 0;\n\tpadding: 40px;\n\tbackground-color: var(--surface-secondary-color);\n}\n\n.track-info > .side-panel > .thumbnail > canvas {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 300px;\n\theight: 300px;\n\tobject-fit: contain;\n\t-webkit-filter: drop-shadow(0 0 3px #000);\n\tfilter: drop-shadow(0 0 3px #000);\n\timage-rendering: pixelated;\n}\n\n.track-info > .side-panel > p {\n\tmargin: 16px 0;\n\tpadding: 0;\n\tfont-size: 32px;\n\tcolor: var(--text-color);\n}\n\n.track-info > .side-panel > .button.play {\n\tposition: absolute;\n\tbottom: 10px;\n\tleft: 0;\n\tmargin: 10px 10px 0 10px;\n\tpadding: 0 0 0 30px;\n\tbox-sizing: border-box;\n\twidth: calc(100% - 2 * 10px);\n\theight: 100px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\ttext-align: center;\n\tfont-size: 50px;\n}\n\n.track-info > .side-panel > .button.play > img {\n\tmargin: 0 0 0 10px;\n\tpadding: 0;\n\tvertical-align: middle;\n\twidth: 48px;\n\ttransition: transform 0.2s ease-in-out;\n\tpointer-events: none;\n}\n\n.track-info > .side-panel > .button.play:hover > img {\n\ttransform: translateX(10px);\n}\n\n@media (hover: none) {\n\t.track-info > .side-panel > .button.play:hover > img {\n\t\ttransform: none;\n\t}\n}\n\n.track-info > .side-panel > .back {\n\tmargin: 10px;\n}\n\n.track-info > .side-panel > .leaderboard-button {\n\tmargin: 10px;\n\tfloat: right;\n}\n",""]);const s=o},353:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.track-selection {\n\tposition: absolute;\n\tbottom: 0;\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: center;\n}\n\n.track-selection > .bar {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\tbackground-color: var(--surface-color);\n\ttext-align: left;\n\n\tpointer-events:auto;\n}\n.track-selection > .bar > .button {\n\tmargin: 8px 12px;\n}\n.track-selection > .bar > .button.right {\n\tfloat: right;\n}\n\n.track-selection .tracks-container {\n\tmargin: 0;\n\tpadding: 20px 0;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\theight: calc(100% - 64px);\n\toverflow-y: auto;\n\tpointer-events: auto;\n}\n.track-selection.editor-track-selection .tracks-container {\n\tbackground-color: rgba(20, 20, 45, 0.8);\n}\n\n.track-selection h2 {\n\tmargin: 0.5em 0.75em;\n\tpadding: 0;\n\tcolor: var(--text-color);\n\tfont-size: 50px;\n\tfont-weight: normal;\n\tborder-bottom: 2px solid var(--text-color);\n}\n\n.track-selection .tracks-container .track {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n\n.track-selection .tracks-container .track button {\n\tmargin: 10px;\n\tpadding: 0;\n\tcolor: var(--text-color);\n\tfont-size: 32px;\n}\n.track-selection .tracks-container .track button:after {\n\tborder-bottom: none;\n}\n.track-selection .tracks-container .track button:focus-visible {\n\ttext-decoration: none;\n}\n\n.track-selection .track-title {\n\tmargin: 0;\n\tpadding: 4px;\n\tfont-size: 25px;\n\tbackground-color: var(--surface-secondary-color);\n}\n.track-selection .tracks-container .track button:focus-visible .track-title {\n\ttext-decoration: underline;\n}\n.track-selection .track-title > p {\n\tmargin: 0;\n\tpadding: 0 22px;\n\twidth: 208px;\n\tbox-sizing: border-box;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.track-selection .track canvas {\n\tmargin: 0;\n\tpadding: 20px 40px;\n\twidth: 128px;\n\theight: 128px;\n\tobject-fit: contain;\n\t-webkit-filter: drop-shadow(0 0 3px #000);\n\tfilter: drop-shadow(0 0 3px #000);\n\timage-rendering: pixelated;\n}\n\n.track-selection .record {\n\tmargin: 0;\n\tpadding: 4px;\n\tfont-size: 24px;\n\tbackground-color: var(--surface-secondary-color);\n\tcolor: var(--text-color);\n}\n\n.track-selection .delete-button {\n\tposition: absolute;\n\ttop: 7px;\n\tright: 6px;\n\tmargin: 0;\n\tpadding: 0;\n\tline-height: 0;\n\tborder-radius: 2px;\n\tborder: none;\n\tbackground-color: var(--button-color);\n\n\tpointer-events: auto;\n\tcursor: pointer;\n}\n.track-selection .delete-button:hover {\n\tbackground-color: var(--button-hover-color);\n}\n@media (hover: none) {\n\t.track-selection .delete-button:hover {\n\t\tbackground-color: var(--button-color);\n\t}\n}\n.track-selection .delete-button:active {\n\tbackground-color: var(--button-active-color);\n}\n.track-selection .delete-button > img {\n\tmargin: 0;\n\tpadding: 0;\n\theight: 20px;\n\tvertical-align: top;\n\tpointer-events: none;\n}\n\n",""]);const s=o},207:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n#transition-layer {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: #000;\n\tpointer-events: none;\n\n\topacity: 0;\n\ttransition: 0.25s ease-in-out opacity;\n}\n",""]);const s=o},818:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.user-export {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 35%;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 10px;\n\tbox-sizing: border-box;\n\twidth: 500px;\n\theight: 150px;\n\tbackground-color: var(--surface-color);\n}\n\n.user-export > textarea {\n\tmargin: 0;\n\tpadding: 10px;\n\tbox-sizing: border-box;\n\tmin-width: 100%;\n\tmax-width: 100%;\n\tmin-height: calc(100% - 52px - 10px);\n\tmax-height: calc(100% - 52px - 10px);\n\tpointer-events: auto;\n\tbackground-color: var(--surface-tertiary-color);\n\tborder: none;\n\tresize: none;\n\tcolor: var(--text-color);\n\tword-break: break-all;\n\tfont-size: 20px;\n}\n.user-export > textarea:focus-visible {\n\toutline: none;\n}\n\n.user-export > .bar {\n\tmargin: 8px 0 0 0;\n}\n\n.user-export > .bar > .button.right {\n\tfloat: right;\n}\n",""]);const s=o},796:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var i=n(601),r=n.n(i),a=n(314),o=n.n(a)()(r());o.push([e.id,"\n.verifier-ui {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 0;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 16px;\n\twidth: 500px;\n\theight: 100%;\n\toverflow-y: scroll;\n\tbox-sizing: border-box;\n\tbackground-color: var(--surface-color);\n\tpointer-events: auto;\n}\n\n.verifier-ui > p {\n\tmargin: 16px 4px 0 4px;\n\tpadding: 0;\n\tfont-size: 20px;\n\tcolor: var(--text-color);\n\twhite-space: pre-wrap;\n}\n\n.verifier-ui > button {\n\tdisplay: inline-block;\n\tmargin: 16px 0 0 0;\n}\n",""]);const s=o},314:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",i=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),i&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),i&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,i,r,a){"string"==typeof e&&(e=[[null,e,void 0]]);var o={};if(i)for(var s=0;s0?" ".concat(h[5]):""," {").concat(h[1],"}")),h[5]=a),n&&(h[2]?(h[1]="@media ".concat(h[2]," {").concat(h[1],"}"),h[2]=n):h[2]=n),r&&(h[4]?(h[1]="@supports (".concat(h[4],") {").concat(h[1],"}"),h[4]=r):h[4]="".concat(r)),t.push(h))}},t}},417:e=>{"use strict";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},601:e=>{"use strict";e.exports=function(e){return e[1]}},312:(e,t,n)=>{var i; -/** - * [js-sha256]{@link https://github.com/emn178/js-sha256} - * - * @version 0.11.0 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2014-2024 - * @license MIT - */!function(){"use strict";var t="input is invalid type",r="object"==typeof window,a=r?window:{};a.JS_SHA256_NO_WINDOW&&(r=!1);var o=!r&&"object"==typeof self,s=!a.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;s?a=n.g:o&&(a=self);var l=!a.JS_SHA256_NO_COMMON_JS&&e.exports,c=n.amdO,h=!a.JS_SHA256_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,d="0123456789abcdef".split(""),u=[-2147483648,8388608,32768,128],p=[24,16,8,0],f=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],m=["hex","array","digest","arrayBuffer"],g=[];!a.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!h||!a.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var v=function(e,t){return function(n){return new _(t,!0).update(n)[e]()}},w=function(e){var t=v("hex",e);s&&(t=y(t,e)),t.create=function(){return new _(e)},t.update=function(e){return t.create().update(e)};for(var n=0;n>>6,s[c++]=128|63&o):o<55296||o>=57344?(s[c++]=224|o>>>12,s[c++]=128|o>>>6&63,s[c++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++r)),s[c++]=240|o>>>18,s[c++]=128|o>>>12&63,s[c++]=128|o>>>6&63,s[c++]=128|63&o);e=s}else{if("object"!==a)throw new Error(t);if(null===e)throw new Error(t);if(h&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||h&&ArrayBuffer.isView(e)))throw new Error(t)}e.length>64&&(e=new _(n,!0).update(e).array());var d=[],u=[];for(r=0;r<64;++r){var p=e[r]||0;d[r]=92^p,u[r]=54^p}_.call(this,n,i),this.update(u),this.oKeyPad=d,this.inner=!0,this.sharedMemory=i}_.prototype.update=function(e){if(!this.finalized){var n,i=typeof e;if("string"!==i){if("object"!==i)throw new Error(t);if(null===e)throw new Error(t);if(h&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||h&&ArrayBuffer.isView(e)))throw new Error(t);n=!0}for(var r,a,o=0,s=e.length,l=this.blocks;o>>2]|=e[o]<>>2]|=r<>>2]|=(192|r>>>6)<>>2]|=(128|63&r)<=57344?(l[a>>>2]|=(224|r>>>12)<>>2]|=(128|r>>>6&63)<>>2]|=(128|63&r)<>>2]|=(240|r>>>18)<>>2]|=(128|r>>>12&63)<>>2]|=(128|r>>>6&63)<>>2]|=(128|63&r)<=64?(this.block=l[16],this.start=a-64,this.hash(),this.hashed=!0):this.start=a}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},_.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[16]=this.block,e[t>>>2]|=u[3&t],this.block=e[16],t>=56&&(this.hashed||this.hash(),e[0]=this.block,e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.hBytes<<3|this.bytes>>>29,e[15]=this.bytes<<3,this.hash()}},_.prototype.hash=function(){var e,t,n,i,r,a,o,s,l,c=this.h0,h=this.h1,d=this.h2,u=this.h3,p=this.h4,m=this.h5,g=this.h6,v=this.h7,w=this.blocks;for(e=16;e<64;++e)t=((r=w[e-15])>>>7|r<<25)^(r>>>18|r<<14)^r>>>3,n=((r=w[e-2])>>>17|r<<15)^(r>>>19|r<<13)^r>>>10,w[e]=w[e-16]+t+w[e-7]+n|0;for(l=h&d,e=0;e<64;e+=4)this.first?(this.is224?(a=300032,v=(r=w[0]-1413257819)-150054599|0,u=r+24177077|0):(a=704751109,v=(r=w[0]-210244248)-1521486534|0,u=r+143694565|0),this.first=!1):(t=(c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10),i=(a=c&h)^c&d^l,v=u+(r=v+(n=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+(p&m^~p&g)+f[e]+w[e])|0,u=r+(t+i)|0),t=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),i=(o=u&c)^u&h^a,g=d+(r=g+(n=(v>>>6|v<<26)^(v>>>11|v<<21)^(v>>>25|v<<7))+(v&p^~v&m)+f[e+1]+w[e+1])|0,t=((d=r+(t+i)|0)>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),i=(s=d&u)^d&c^o,m=h+(r=m+(n=(g>>>6|g<<26)^(g>>>11|g<<21)^(g>>>25|g<<7))+(g&v^~g&p)+f[e+2]+w[e+2])|0,t=((h=r+(t+i)|0)>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),i=(l=h&d)^h&u^s,p=c+(r=p+(n=(m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+(m&g^~m&v)+f[e+3]+w[e+3])|0,c=r+(t+i)|0,this.chromeBugWorkAround=!0;this.h0=this.h0+c|0,this.h1=this.h1+h|0,this.h2=this.h2+d|0,this.h3=this.h3+u|0,this.h4=this.h4+p|0,this.h5=this.h5+m|0,this.h6=this.h6+g|0,this.h7=this.h7+v|0},_.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,i=this.h3,r=this.h4,a=this.h5,o=this.h6,s=this.h7,l=d[e>>>28&15]+d[e>>>24&15]+d[e>>>20&15]+d[e>>>16&15]+d[e>>>12&15]+d[e>>>8&15]+d[e>>>4&15]+d[15&e]+d[t>>>28&15]+d[t>>>24&15]+d[t>>>20&15]+d[t>>>16&15]+d[t>>>12&15]+d[t>>>8&15]+d[t>>>4&15]+d[15&t]+d[n>>>28&15]+d[n>>>24&15]+d[n>>>20&15]+d[n>>>16&15]+d[n>>>12&15]+d[n>>>8&15]+d[n>>>4&15]+d[15&n]+d[i>>>28&15]+d[i>>>24&15]+d[i>>>20&15]+d[i>>>16&15]+d[i>>>12&15]+d[i>>>8&15]+d[i>>>4&15]+d[15&i]+d[r>>>28&15]+d[r>>>24&15]+d[r>>>20&15]+d[r>>>16&15]+d[r>>>12&15]+d[r>>>8&15]+d[r>>>4&15]+d[15&r]+d[a>>>28&15]+d[a>>>24&15]+d[a>>>20&15]+d[a>>>16&15]+d[a>>>12&15]+d[a>>>8&15]+d[a>>>4&15]+d[15&a]+d[o>>>28&15]+d[o>>>24&15]+d[o>>>20&15]+d[o>>>16&15]+d[o>>>12&15]+d[o>>>8&15]+d[o>>>4&15]+d[15&o];return this.is224||(l+=d[s>>>28&15]+d[s>>>24&15]+d[s>>>20&15]+d[s>>>16&15]+d[s>>>12&15]+d[s>>>8&15]+d[s>>>4&15]+d[15&s]),l},_.prototype.toString=_.prototype.hex,_.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,i=this.h3,r=this.h4,a=this.h5,o=this.h6,s=this.h7,l=[e>>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t,n>>>24&255,n>>>16&255,n>>>8&255,255&n,i>>>24&255,i>>>16&255,i>>>8&255,255&i,r>>>24&255,r>>>16&255,r>>>8&255,255&r,a>>>24&255,a>>>16&255,a>>>8&255,255&a,o>>>24&255,o>>>16&255,o>>>8&255,255&o];return this.is224||l.push(s>>>24&255,s>>>16&255,s>>>8&255,255&s),l},_.prototype.array=_.prototype.digest,_.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(this.is224?28:32),t=new DataView(e);return t.setUint32(0,this.h0),t.setUint32(4,this.h1),t.setUint32(8,this.h2),t.setUint32(12,this.h3),t.setUint32(16,this.h4),t.setUint32(20,this.h5),t.setUint32(24,this.h6),this.is224||t.setUint32(28,this.h7),e},k.prototype=new _,k.prototype.finalize=function(){if(_.prototype.finalize.call(this),this.inner){this.inner=!1;var e=this.array();_.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(e),_.prototype.finalize.call(this)}};var E=w();E.sha256=E,E.sha224=w(!0),E.sha256.hmac=x(),E.sha224.hmac=x(!0),l?e.exports=E:(a.sha256=E.sha256,a.sha224=E.sha224,c&&(void 0===(i=function(){return E}.call(E,n,E,e))||(e.exports=i)))}()},72:e=>{"use strict";var t=[];function n(e){for(var n=-1,i=0;i{"use strict";var t={};e.exports=function(e,n){var i=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},540:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},56:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},825:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,r&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var a=n.sourceMap;a&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),t.styleTagTransform(i,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},113:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},832:(e,t,n)=>{"use strict";e.exports=n.p+"4e75ed8189c5a7b6fbf8.ttf"},208:(e,t,n)=>{"use strict";e.exports=n.p+"2e5b7bff10d7782e539c.woff"},682:(e,t,n)=>{"use strict";e.exports=n.p+"a82f15d48dbc61b6edeb.woff2"},903:()=>{},394:()=>{}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var a=t[i]={id:i,exports:{}};return e[i](a,a.exports,n),a.exports}n.m=e,n.amdO={},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.p="./",n.b=document.baseURI||self.location.href,n.nc=void 0,(()=>{"use strict";var e=n(72),t=n.n(e),i=n(825),r=n.n(i),a=n(659),o=n.n(a),s=n(56),l=n.n(s),c=n(540),h=n.n(c),d=n(113),u=n.n(d),p=n(419),f={};f.styleTagTransform=u(),f.setAttributes=l(),f.insert=o().bind(null,"head"),f.domAPI=r(),f.insertStyleElement=h();t()(p.A,f);p.A&&p.A.locals&&p.A.locals;const m="166",g=0,v=1,w=2,y=0,b=1,x=2,_=3,k=1,E=2,S=3,M=0,T=1,A=2,C=100,P=101,R=102,L=200,I=201,N=202,D=203,U=204,B=205,O=206,z=207,F=208,W=209,H=210,V=211,G=212,j=213,q=214,X=0,Y=1,K=2,Z=0,J=1,Q=2,$=3,ee=4,te=5,ne=6,ie=7,re="attached",ae=301,oe=302,se=303,le=304,ce=306,he=1e3,de=1001,ue=1002,pe=1003,fe=1004,me=1005,ge=1006,ve=1007,we=1008,ye=1009,be=1010,xe=1011,_e=1012,ke=1013,Ee=1014,Se=1015,Me=1016,Te=1017,Ae=1018,Ce=1020,Pe=35902,Re=1021,Le=1022,Ie=1023,Ne=1024,De=1025,Ue=1026,Be=1027,Oe=1028,ze=1029,Fe=1030,We=1031,He=1033,Ve=33776,Ge=33777,je=33778,qe=33779,Xe=35840,Ye=35841,Ke=35842,Ze=35843,Je=36196,Qe=37492,$e=37496,et=37808,tt=37809,nt=37810,it=37811,rt=37812,at=37813,ot=37814,st=37815,lt=37816,ct=37817,ht=37818,dt=37819,ut=37820,pt=37821,ft=36492,mt=36494,gt=36495,vt=36283,wt=36284,yt=36285,bt=36286,xt=2300,_t=2301,kt=2302,Et=2400,St=2401,Mt=2402,Tt="",At="srgb",Ct="srgb-linear",Pt="display-p3",Rt="display-p3-linear",Lt="linear",It="srgb",Nt="rec709",Dt="p3",Ut=7680,Bt=512,Ot=513,zt=514,Ft=515,Wt=516,Ht=517,Vt=518,Gt=519,jt=35044,qt="300 es",Xt=2e3,Yt=2001;class Kt{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[e]&&(n[e]=[]),-1===n[e].indexOf(t)&&n[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[e]&&-1!==n[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;const n=this._listeners[e];if(void 0!==n){const e=n.indexOf(t);-1!==e&&n.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;const t=this._listeners[e.type];if(void 0!==t){e.target=this;const n=t.slice(0);for(let t=0,i=n.length;t>8&255]+Zt[e>>16&255]+Zt[e>>24&255]+"-"+Zt[255&t]+Zt[t>>8&255]+"-"+Zt[t>>16&15|64]+Zt[t>>24&255]+"-"+Zt[63&n|128]+Zt[n>>8&255]+"-"+Zt[n>>16&255]+Zt[n>>24&255]+Zt[255&i]+Zt[i>>8&255]+Zt[i>>16&255]+Zt[i>>24&255]).toLowerCase()}function tn(e,t,n){return Math.max(t,Math.min(n,e))}function nn(e,t){return(e%t+t)%t}function rn(e,t,n){return(1-n)*e+n*t}function an(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw new Error("Invalid component type.")}}function on(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(4294967295*e);case Uint16Array:return Math.round(65535*e);case Uint8Array:return Math.round(255*e);case Int32Array:return Math.round(2147483647*e);case Int16Array:return Math.round(32767*e);case Int8Array:return Math.round(127*e);default:throw new Error("Invalid component type.")}}const sn={DEG2RAD:Qt,RAD2DEG:$t,generateUUID:en,clamp:tn,euclideanModulo:nn,mapLinear:function(e,t,n,i,r){return i+(e-t)*(r-i)/(n-t)},inverseLerp:function(e,t,n){return e!==t?(n-e)/(t-e):0},lerp:rn,damp:function(e,t,n,i){return rn(e,t,1-Math.exp(-n*i))},pingpong:function(e,t=1){return t-Math.abs(nn(e,2*t)-t)},smoothstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*(3-2*e)},smootherstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*e*(e*(6*e-15)+10)},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},seededRandom:function(e){void 0!==e&&(Jt=e);let t=Jt+=1831565813;return t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),((t^t>>>14)>>>0)/4294967296},degToRad:function(e){return e*Qt},radToDeg:function(e){return e*$t},isPowerOfTwo:function(e){return!(e&e-1)&&0!==e},ceilPowerOfTwo:function(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))},floorPowerOfTwo:function(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))},setQuaternionFromProperEuler:function(e,t,n,i,r){const a=Math.cos,o=Math.sin,s=a(n/2),l=o(n/2),c=a((t+i)/2),h=o((t+i)/2),d=a((t-i)/2),u=o((t-i)/2),p=a((i-t)/2),f=o((i-t)/2);switch(r){case"XYX":e.set(s*h,l*d,l*u,s*c);break;case"YZY":e.set(l*u,s*h,l*d,s*c);break;case"ZXZ":e.set(l*d,l*u,s*h,s*c);break;case"XZX":e.set(s*h,l*f,l*p,s*c);break;case"YXY":e.set(l*p,s*h,l*f,s*c);break;case"ZYZ":e.set(l*f,l*p,s*h,s*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:on,denormalize:an};class ln{constructor(e=0,t=0){ln.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,n=this.y,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6],this.y=i[1]*t+i[4]*n+i[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(0===t)return Math.PI/2;const n=this.dot(e)/t;return Math.acos(tn(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const n=Math.cos(t),i=Math.sin(t),r=this.x-e.x,a=this.y-e.y;return this.x=r*n-a*i+e.x,this.y=r*i+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class cn{constructor(e,t,n,i,r,a,o,s,l){cn.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==e&&this.set(e,t,n,i,r,a,o,s,l)}set(e,t,n,i,r,a,o,s,l){const c=this.elements;return c[0]=e,c[1]=i,c[2]=o,c[3]=t,c[4]=r,c[5]=s,c[6]=n,c[7]=a,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const n=e.elements,i=t.elements,r=this.elements,a=n[0],o=n[3],s=n[6],l=n[1],c=n[4],h=n[7],d=n[2],u=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],w=i[4],y=i[7],b=i[2],x=i[5],_=i[8];return r[0]=a*f+o*v+s*b,r[3]=a*m+o*w+s*x,r[6]=a*g+o*y+s*_,r[1]=l*f+c*v+h*b,r[4]=l*m+c*w+h*x,r[7]=l*g+c*y+h*_,r[2]=d*f+u*v+p*b,r[5]=d*m+u*w+p*x,r[8]=d*g+u*y+p*_,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],o=e[5],s=e[6],l=e[7],c=e[8];return t*a*c-t*o*l-n*r*c+n*o*s+i*r*l-i*a*s}invert(){const e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],o=e[5],s=e[6],l=e[7],c=e[8],h=c*a-o*l,d=o*s-c*r,u=l*r-a*s,p=t*h+n*d+i*u;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return e[0]=h*f,e[1]=(i*l-c*n)*f,e[2]=(o*n-i*a)*f,e[3]=d*f,e[4]=(c*t-i*s)*f,e[5]=(i*r-o*t)*f,e[6]=u*f,e[7]=(n*s-l*t)*f,e[8]=(a*t-n*r)*f,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,i,r,a,o){const s=Math.cos(r),l=Math.sin(r);return this.set(n*s,n*l,-n*(s*a+l*o)+a+e,-i*l,i*s,-i*(-l*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(hn.makeScale(e,t)),this}rotate(e){return this.premultiply(hn.makeRotation(-e)),this}translate(e,t){return this.premultiply(hn.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){const n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return(new this.constructor).fromArray(this.elements)}}const hn=new cn;function dn(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array;function un(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function pn(){const e=un("canvas");return e.style.display="block",e}const fn={};function mn(e){e in fn||(fn[e]=!0,console.warn(e))}const gn=(new cn).set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),vn=(new cn).set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),wn={[Ct]:{transfer:Lt,primaries:Nt,toReference:e=>e,fromReference:e=>e},[At]:{transfer:It,primaries:Nt,toReference:e=>e.convertSRGBToLinear(),fromReference:e=>e.convertLinearToSRGB()},[Rt]:{transfer:Lt,primaries:Dt,toReference:e=>e.applyMatrix3(vn),fromReference:e=>e.applyMatrix3(gn)},[Pt]:{transfer:It,primaries:Dt,toReference:e=>e.convertSRGBToLinear().applyMatrix3(vn),fromReference:e=>e.applyMatrix3(gn).convertLinearToSRGB()}},yn=new Set([Ct,Rt]),bn={enabled:!0,_workingColorSpace:Ct,get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(e){if(!yn.has(e))throw new Error(`Unsupported working color space, "${e}".`);this._workingColorSpace=e},convert:function(e,t,n){if(!1===this.enabled||t===n||!t||!n)return e;const i=wn[t].toReference;return(0,wn[n].fromReference)(i(e))},fromWorkingColorSpace:function(e,t){return this.convert(e,this._workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this._workingColorSpace)},getPrimaries:function(e){return wn[e].primaries},getTransfer:function(e){return e===Tt?Lt:wn[e].transfer}};function xn(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function _n(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}let kn;class En{static getDataURL(e){if(/^data:/i.test(e.src))return e.src;if("undefined"==typeof HTMLCanvasElement)return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{void 0===kn&&(kn=un("canvas")),kn.width=e.width,kn.height=e.height;const n=kn.getContext("2d");e instanceof ImageData?n.putImageData(e,0,0):n.drawImage(e,0,0,e.width,e.height),t=kn}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}static sRGBToLinear(e){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap){const t=un("canvas");t.width=e.width,t.height=e.height;const n=t.getContext("2d");n.drawImage(e,0,0,e.width,e.height);const i=n.getImageData(0,0,e.width,e.height),r=i.data;for(let e=0;e0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(300!==this.mapping)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case he:e.x=e.x-Math.floor(e.x);break;case de:e.x=e.x<0?0:1;break;case ue:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case he:e.y=e.y-Math.floor(e.y);break;case de:e.y=e.y<0?0:1;break;case ue:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){!0===e&&this.pmremVersion++}}Cn.DEFAULT_IMAGE=null,Cn.DEFAULT_MAPPING=300,Cn.DEFAULT_ANISOTROPY=1;class Pn{constructor(e=0,t=0,n=0,i=1){Pn.prototype.isVector4=!0,this.x=e,this.y=t,this.z=n,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,i){return this.x=e,this.y=t,this.z=n,this.w=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,n=this.y,i=this.z,r=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*i+a[12]*r,this.y=a[1]*t+a[5]*n+a[9]*i+a[13]*r,this.z=a[2]*t+a[6]*n+a[10]*i+a[14]*r,this.w=a[3]*t+a[7]*n+a[11]*i+a[15]*r,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,i,r;const a=.01,o=.1,s=e.elements,l=s[0],c=s[4],h=s[8],d=s[1],u=s[5],p=s[9],f=s[2],m=s[6],g=s[10];if(Math.abs(c-d)s&&e>v?ev?s=0?1:-1,i=1-t*t;if(i>Number.EPSILON){const r=Math.sqrt(i),a=Math.atan2(r,t*n);e=Math.sin(e*a)/r,o=Math.sin(o*a)/r}const r=o*n;if(s=s*e+d*r,l=l*e+u*r,c=c*e+p*r,h=h*e+f*r,e===1-o){const e=1/Math.sqrt(s*s+l*l+c*c+h*h);s*=e,l*=e,c*=e,h*=e}}e[t]=s,e[t+1]=l,e[t+2]=c,e[t+3]=h}static multiplyQuaternionsFlat(e,t,n,i,r,a){const o=n[i],s=n[i+1],l=n[i+2],c=n[i+3],h=r[a],d=r[a+1],u=r[a+2],p=r[a+3];return e[t]=o*p+c*h+s*u-l*d,e[t+1]=s*p+c*d+l*h-o*u,e[t+2]=l*p+c*u+o*d-s*h,e[t+3]=c*p-o*h-s*d-l*u,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,i){return this._x=e,this._y=t,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){const n=e._x,i=e._y,r=e._z,a=e._order,o=Math.cos,s=Math.sin,l=o(n/2),c=o(i/2),h=o(r/2),d=s(n/2),u=s(i/2),p=s(r/2);switch(a){case"XYZ":this._x=d*c*h+l*u*p,this._y=l*u*h-d*c*p,this._z=l*c*p+d*u*h,this._w=l*c*h-d*u*p;break;case"YXZ":this._x=d*c*h+l*u*p,this._y=l*u*h-d*c*p,this._z=l*c*p-d*u*h,this._w=l*c*h+d*u*p;break;case"ZXY":this._x=d*c*h-l*u*p,this._y=l*u*h+d*c*p,this._z=l*c*p+d*u*h,this._w=l*c*h-d*u*p;break;case"ZYX":this._x=d*c*h-l*u*p,this._y=l*u*h+d*c*p,this._z=l*c*p-d*u*h,this._w=l*c*h+d*u*p;break;case"YZX":this._x=d*c*h+l*u*p,this._y=l*u*h+d*c*p,this._z=l*c*p-d*u*h,this._w=l*c*h-d*u*p;break;case"XZY":this._x=d*c*h-l*u*p,this._y=l*u*h-d*c*p,this._z=l*c*p+d*u*h,this._w=l*c*h+d*u*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!0===t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const n=t/2,i=Math.sin(n);return this._x=e.x*i,this._y=e.y*i,this._z=e.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,n=t[0],i=t[4],r=t[8],a=t[1],o=t[5],s=t[9],l=t[2],c=t[6],h=t[10],d=n+o+h;if(d>0){const e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(c-s)*e,this._y=(r-l)*e,this._z=(a-i)*e}else if(n>o&&n>h){const e=2*Math.sqrt(1+n-o-h);this._w=(c-s)/e,this._x=.25*e,this._y=(i+a)/e,this._z=(r+l)/e}else if(o>h){const e=2*Math.sqrt(1+o-n-h);this._w=(r-l)/e,this._x=(i+a)/e,this._y=.25*e,this._z=(s+c)/e}else{const e=2*Math.sqrt(1+h-n-o);this._w=(a-i)/e,this._x=(r+l)/e,this._y=(s+c)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return nMath.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(tn(this.dot(e),-1,1)))}rotateTowards(e,t){const n=this.angleTo(e);if(0===n)return this;const i=Math.min(1,t/n);return this.slerp(e,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const n=e._x,i=e._y,r=e._z,a=e._w,o=t._x,s=t._y,l=t._z,c=t._w;return this._x=n*c+a*o+i*l-r*s,this._y=i*c+a*s+r*o-n*l,this._z=r*c+a*l+n*s-i*o,this._w=a*c-n*o-i*s-r*l,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);const n=this._x,i=this._y,r=this._z,a=this._w;let o=a*e._w+n*e._x+i*e._y+r*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=n,this._y=i,this._z=r,this;const s=1-o*o;if(s<=Number.EPSILON){const e=1-t;return this._w=e*a+t*this._w,this._x=e*n+t*this._x,this._y=e*i+t*this._y,this._z=e*r+t*this._z,this.normalize(),this}const l=Math.sqrt(s),c=Math.atan2(l,o),h=Math.sin((1-t)*c)/l,d=Math.sin(t*c)/l;return this._w=a*h+this._w*d,this._x=n*h+this._x*d,this._y=i*h+this._y*d,this._z=r*h+this._z*d,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){const e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),i=Math.sqrt(1-n),r=Math.sqrt(n);return this.set(i*Math.sin(e),i*Math.cos(e),r*Math.sin(t),r*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class Un{constructor(e=0,t=0,n=0){Un.prototype.isVector3=!0,this.x=e,this.y=t,this.z=n}set(e,t,n){return void 0===n&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(On.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(On.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6]*i,this.y=r[1]*t+r[4]*n+r[7]*i,this.z=r[2]*t+r[5]*n+r[8]*i,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,n=this.y,i=this.z,r=e.elements,a=1/(r[3]*t+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*t+r[4]*n+r[8]*i+r[12])*a,this.y=(r[1]*t+r[5]*n+r[9]*i+r[13])*a,this.z=(r[2]*t+r[6]*n+r[10]*i+r[14])*a,this}applyQuaternion(e){const t=this.x,n=this.y,i=this.z,r=e.x,a=e.y,o=e.z,s=e.w,l=2*(a*i-o*n),c=2*(o*t-r*i),h=2*(r*n-a*t);return this.x=t+s*l+a*h-o*c,this.y=n+s*c+o*l-r*h,this.z=i+s*h+r*c-a*l,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[4]*n+r[8]*i,this.y=r[1]*t+r[5]*n+r[9]*i,this.z=r[2]*t+r[6]*n+r[10]*i,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const n=e.x,i=e.y,r=e.z,a=t.x,o=t.y,s=t.z;return this.x=i*s-r*o,this.y=r*a-n*s,this.z=n*o-i*a,this}projectOnVector(e){const t=e.lengthSq();if(0===t)return this.set(0,0,0);const n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Bn.copy(this).projectOnVector(e),this.sub(Bn)}reflect(e){return this.sub(Bn.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(0===t)return Math.PI/2;const n=this.dot(e)/t;return Math.acos(tn(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,n=this.y-e.y,i=this.z-e.z;return t*t+n*n+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){const i=Math.sin(t)*e;return this.x=i*Math.sin(n),this.y=Math.cos(t)*e,this.z=i*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),i=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=i,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,t=2*Math.random()-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Bn=new Un,On=new Dn;class zn{constructor(e=new Un(1/0,1/0,1/0),t=new Un(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;tthis.max.x||e.ythis.max.y||e.zthis.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.xthis.max.x||e.max.ythis.max.y||e.max.zthis.max.z)}intersectsSphere(e){return this.clampPoint(e.center,Wn),Wn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Kn),Zn.subVectors(this.max,Kn),Vn.subVectors(e.a,Kn),Gn.subVectors(e.b,Kn),jn.subVectors(e.c,Kn),qn.subVectors(Gn,Vn),Xn.subVectors(jn,Gn),Yn.subVectors(Vn,jn);let t=[0,-qn.z,qn.y,0,-Xn.z,Xn.y,0,-Yn.z,Yn.y,qn.z,0,-qn.x,Xn.z,0,-Xn.x,Yn.z,0,-Yn.x,-qn.y,qn.x,0,-Xn.y,Xn.x,0,-Yn.y,Yn.x,0];return!!$n(t,Vn,Gn,jn,Zn)&&(t=[1,0,0,0,1,0,0,0,1],!!$n(t,Vn,Gn,jn,Zn)&&(Jn.crossVectors(qn,Xn),t=[Jn.x,Jn.y,Jn.z],$n(t,Vn,Gn,jn,Zn)))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Wn).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=.5*this.getSize(Wn).length()),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(Fn[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),Fn[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),Fn[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),Fn[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),Fn[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),Fn[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),Fn[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),Fn[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(Fn)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const Fn=[new Un,new Un,new Un,new Un,new Un,new Un,new Un,new Un],Wn=new Un,Hn=new zn,Vn=new Un,Gn=new Un,jn=new Un,qn=new Un,Xn=new Un,Yn=new Un,Kn=new Un,Zn=new Un,Jn=new Un,Qn=new Un;function $n(e,t,n,i,r){for(let a=0,o=e.length-3;a<=o;a+=3){Qn.fromArray(e,a);const o=r.x*Math.abs(Qn.x)+r.y*Math.abs(Qn.y)+r.z*Math.abs(Qn.z),s=t.dot(Qn),l=n.dot(Qn),c=i.dot(Qn);if(Math.max(-Math.max(s,l,c),Math.min(s,l,c))>o)return!1}return!0}const ei=new zn,ti=new Un,ni=new Un;class ii{constructor(e=new Un,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const n=this.center;void 0!==t?n.copy(t):ei.setFromPoints(e).getCenter(n);let i=0;for(let t=0,r=e.length;tthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;ti.subVectors(e,this.center);const t=ti.lengthSq();if(t>this.radius*this.radius){const e=Math.sqrt(t),n=.5*(e-this.radius);this.center.addScaledVector(ti,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(ni.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(ti.copy(e.center).add(ni)),this.expandByPoint(ti.copy(e.center).sub(ni))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const ri=new Un,ai=new Un,oi=new Un,si=new Un,li=new Un,ci=new Un,hi=new Un;class di{constructor(e=new Un,t=new Un(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,ri)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=ri.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(ri.copy(this.origin).addScaledVector(this.direction,t),ri.distanceToSquared(e))}distanceSqToSegment(e,t,n,i){ai.copy(e).add(t).multiplyScalar(.5),oi.copy(t).sub(e).normalize(),si.copy(this.origin).sub(ai);const r=.5*e.distanceTo(t),a=-this.direction.dot(oi),o=si.dot(this.direction),s=-si.dot(oi),l=si.lengthSq(),c=Math.abs(1-a*a);let h,d,u,p;if(c>0)if(h=a*s-o,d=a*o-s,p=r*c,h>=0)if(d>=-p)if(d<=p){const e=1/c;h*=e,d*=e,u=h*(h+a*d+2*o)+d*(a*h+d+2*s)+l}else d=r,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*s)+l;else d=-r,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*s)+l;else d<=-p?(h=Math.max(0,-(-a*r+o)),d=h>0?-r:Math.min(Math.max(-r,-s),r),u=-h*h+d*(d+2*s)+l):d<=p?(h=0,d=Math.min(Math.max(-r,-s),r),u=d*(d+2*s)+l):(h=Math.max(0,-(a*r+o)),d=h>0?r:Math.min(Math.max(-r,-s),r),u=-h*h+d*(d+2*s)+l);else d=a>0?-r:r,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*s)+l;return n&&n.copy(this.origin).addScaledVector(this.direction,h),i&&i.copy(ai).addScaledVector(oi,d),u}intersectSphere(e,t){ri.subVectors(e.center,this.origin);const n=ri.dot(this.direction),i=ri.dot(ri)-n*n,r=e.radius*e.radius;if(i>r)return null;const a=Math.sqrt(r-i),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){const n=this.distanceToPlane(e);return null===n?null:this.at(n,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);if(0===t)return!0;return e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,i,r,a,o,s;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,d=this.origin;return l>=0?(n=(e.min.x-d.x)*l,i=(e.max.x-d.x)*l):(n=(e.max.x-d.x)*l,i=(e.min.x-d.x)*l),c>=0?(r=(e.min.y-d.y)*c,a=(e.max.y-d.y)*c):(r=(e.max.y-d.y)*c,a=(e.min.y-d.y)*c),n>a||r>i?null:((r>n||isNaN(n))&&(n=r),(a=0?(o=(e.min.z-d.z)*h,s=(e.max.z-d.z)*h):(o=(e.max.z-d.z)*h,s=(e.min.z-d.z)*h),n>s||o>i?null:((o>n||n!=n)&&(n=o),(s=0?n:i,t)))}intersectsBox(e){return null!==this.intersectBox(e,ri)}intersectTriangle(e,t,n,i,r){li.subVectors(t,e),ci.subVectors(n,e),hi.crossVectors(li,ci);let a,o=this.direction.dot(hi);if(o>0){if(i)return null;a=1}else{if(!(o<0))return null;a=-1,o=-o}si.subVectors(this.origin,e);const s=a*this.direction.dot(ci.crossVectors(si,ci));if(s<0)return null;const l=a*this.direction.dot(li.cross(si));if(l<0)return null;if(s+l>o)return null;const c=-a*si.dot(hi);return c<0?null:this.at(c/o,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class ui{constructor(e,t,n,i,r,a,o,s,l,c,h,d,u,p,f,m){ui.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==e&&this.set(e,t,n,i,r,a,o,s,l,c,h,d,u,p,f,m)}set(e,t,n,i,r,a,o,s,l,c,h,d,u,p,f,m){const g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=i,g[1]=r,g[5]=a,g[9]=o,g[13]=s,g[2]=l,g[6]=c,g[10]=h,g[14]=d,g[3]=u,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new ui).fromArray(this.elements)}copy(e){const t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){const t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,n=e.elements,i=1/pi.setFromMatrixColumn(e,0).length(),r=1/pi.setFromMatrixColumn(e,1).length(),a=1/pi.setFromMatrixColumn(e,2).length();return t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=0,t[4]=n[4]*r,t[5]=n[5]*r,t[6]=n[6]*r,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){const t=this.elements,n=e.x,i=e.y,r=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===e.order){const e=a*c,n=a*h,i=o*c,r=o*h;t[0]=s*c,t[4]=-s*h,t[8]=l,t[1]=n+i*l,t[5]=e-r*l,t[9]=-o*s,t[2]=r-e*l,t[6]=i+n*l,t[10]=a*s}else if("YXZ"===e.order){const e=s*c,n=s*h,i=l*c,r=l*h;t[0]=e+r*o,t[4]=i*o-n,t[8]=a*l,t[1]=a*h,t[5]=a*c,t[9]=-o,t[2]=n*o-i,t[6]=r+e*o,t[10]=a*s}else if("ZXY"===e.order){const e=s*c,n=s*h,i=l*c,r=l*h;t[0]=e-r*o,t[4]=-a*h,t[8]=i+n*o,t[1]=n+i*o,t[5]=a*c,t[9]=r-e*o,t[2]=-a*l,t[6]=o,t[10]=a*s}else if("ZYX"===e.order){const e=a*c,n=a*h,i=o*c,r=o*h;t[0]=s*c,t[4]=i*l-n,t[8]=e*l+r,t[1]=s*h,t[5]=r*l+e,t[9]=n*l-i,t[2]=-l,t[6]=o*s,t[10]=a*s}else if("YZX"===e.order){const e=a*s,n=a*l,i=o*s,r=o*l;t[0]=s*c,t[4]=r-e*h,t[8]=i*h+n,t[1]=h,t[5]=a*c,t[9]=-o*c,t[2]=-l*c,t[6]=n*h+i,t[10]=e-r*h}else if("XZY"===e.order){const e=a*s,n=a*l,i=o*s,r=o*l;t[0]=s*c,t[4]=-h,t[8]=l*c,t[1]=e*h+r,t[5]=a*c,t[9]=n*h-i,t[2]=i*h-n,t[6]=o*c,t[10]=r*h+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(mi,e,gi)}lookAt(e,t,n){const i=this.elements;return yi.subVectors(e,t),0===yi.lengthSq()&&(yi.z=1),yi.normalize(),vi.crossVectors(n,yi),0===vi.lengthSq()&&(1===Math.abs(n.z)?yi.x+=1e-4:yi.z+=1e-4,yi.normalize(),vi.crossVectors(n,yi)),vi.normalize(),wi.crossVectors(yi,vi),i[0]=vi.x,i[4]=wi.x,i[8]=yi.x,i[1]=vi.y,i[5]=wi.y,i[9]=yi.y,i[2]=vi.z,i[6]=wi.z,i[10]=yi.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const n=e.elements,i=t.elements,r=this.elements,a=n[0],o=n[4],s=n[8],l=n[12],c=n[1],h=n[5],d=n[9],u=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],w=n[7],y=n[11],b=n[15],x=i[0],_=i[4],k=i[8],E=i[12],S=i[1],M=i[5],T=i[9],A=i[13],C=i[2],P=i[6],R=i[10],L=i[14],I=i[3],N=i[7],D=i[11],U=i[15];return r[0]=a*x+o*S+s*C+l*I,r[4]=a*_+o*M+s*P+l*N,r[8]=a*k+o*T+s*R+l*D,r[12]=a*E+o*A+s*L+l*U,r[1]=c*x+h*S+d*C+u*I,r[5]=c*_+h*M+d*P+u*N,r[9]=c*k+h*T+d*R+u*D,r[13]=c*E+h*A+d*L+u*U,r[2]=p*x+f*S+m*C+g*I,r[6]=p*_+f*M+m*P+g*N,r[10]=p*k+f*T+m*R+g*D,r[14]=p*E+f*A+m*L+g*U,r[3]=v*x+w*S+y*C+b*I,r[7]=v*_+w*M+y*P+b*N,r[11]=v*k+w*T+y*R+b*D,r[15]=v*E+w*A+y*L+b*U,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],n=e[4],i=e[8],r=e[12],a=e[1],o=e[5],s=e[9],l=e[13],c=e[2],h=e[6],d=e[10],u=e[14];return e[3]*(+r*s*h-i*l*h-r*o*d+n*l*d+i*o*u-n*s*u)+e[7]*(+t*s*u-t*l*d+r*a*d-i*a*u+i*l*c-r*s*c)+e[11]*(+t*l*h-t*o*u-r*a*h+n*a*u+r*o*c-n*l*c)+e[15]*(-i*o*c-t*s*h+t*o*d+i*a*h-n*a*d+n*s*c)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){const i=this.elements;return e.isVector3?(i[12]=e.x,i[13]=e.y,i[14]=e.z):(i[12]=e,i[13]=t,i[14]=n),this}invert(){const e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],o=e[5],s=e[6],l=e[7],c=e[8],h=e[9],d=e[10],u=e[11],p=e[12],f=e[13],m=e[14],g=e[15],v=h*m*l-f*d*l+f*s*u-o*m*u-h*s*g+o*d*g,w=p*d*l-c*m*l-p*s*u+a*m*u+c*s*g-a*d*g,y=c*f*l-p*h*l+p*o*u-a*f*u-c*o*g+a*h*g,b=p*h*s-c*f*s-p*o*d+a*f*d+c*o*m-a*h*m,x=t*v+n*w+i*y+r*b;if(0===x)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const _=1/x;return e[0]=v*_,e[1]=(f*d*r-h*m*r-f*i*u+n*m*u+h*i*g-n*d*g)*_,e[2]=(o*m*r-f*s*r+f*i*l-n*m*l-o*i*g+n*s*g)*_,e[3]=(h*s*r-o*d*r-h*i*l+n*d*l+o*i*u-n*s*u)*_,e[4]=w*_,e[5]=(c*m*r-p*d*r+p*i*u-t*m*u-c*i*g+t*d*g)*_,e[6]=(p*s*r-a*m*r-p*i*l+t*m*l+a*i*g-t*s*g)*_,e[7]=(a*d*r-c*s*r+c*i*l-t*d*l-a*i*u+t*s*u)*_,e[8]=y*_,e[9]=(p*h*r-c*f*r-p*n*u+t*f*u+c*n*g-t*h*g)*_,e[10]=(a*f*r-p*o*r+p*n*l-t*f*l-a*n*g+t*o*g)*_,e[11]=(c*o*r-a*h*r-c*n*l+t*h*l+a*n*u-t*o*u)*_,e[12]=b*_,e[13]=(c*f*i-p*h*i+p*n*d-t*f*d-c*n*m+t*h*m)*_,e[14]=(p*o*i-a*f*i-p*n*s+t*f*s+a*n*m-t*o*m)*_,e[15]=(a*h*i-c*o*i+c*n*s-t*h*s-a*n*d+t*o*d)*_,this}scale(e){const t=this.elements,n=e.x,i=e.y,r=e.z;return t[0]*=n,t[4]*=i,t[8]*=r,t[1]*=n,t[5]*=i,t[9]*=r,t[2]*=n,t[6]*=i,t[10]*=r,t[3]*=n,t[7]*=i,t[11]*=r,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],i=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,i))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const n=Math.cos(t),i=Math.sin(t),r=1-n,a=e.x,o=e.y,s=e.z,l=r*a,c=r*o;return this.set(l*a+n,l*o-i*s,l*s+i*o,0,l*o+i*s,c*o+n,c*s-i*a,0,l*s-i*o,c*s+i*a,r*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,i,r,a){return this.set(1,n,r,0,e,1,a,0,t,i,1,0,0,0,0,1),this}compose(e,t,n){const i=this.elements,r=t._x,a=t._y,o=t._z,s=t._w,l=r+r,c=a+a,h=o+o,d=r*l,u=r*c,p=r*h,f=a*c,m=a*h,g=o*h,v=s*l,w=s*c,y=s*h,b=n.x,x=n.y,_=n.z;return i[0]=(1-(f+g))*b,i[1]=(u+y)*b,i[2]=(p-w)*b,i[3]=0,i[4]=(u-y)*x,i[5]=(1-(d+g))*x,i[6]=(m+v)*x,i[7]=0,i[8]=(p+w)*_,i[9]=(m-v)*_,i[10]=(1-(d+f))*_,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}decompose(e,t,n){const i=this.elements;let r=pi.set(i[0],i[1],i[2]).length();const a=pi.set(i[4],i[5],i[6]).length(),o=pi.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),e.x=i[12],e.y=i[13],e.z=i[14],fi.copy(this);const s=1/r,l=1/a,c=1/o;return fi.elements[0]*=s,fi.elements[1]*=s,fi.elements[2]*=s,fi.elements[4]*=l,fi.elements[5]*=l,fi.elements[6]*=l,fi.elements[8]*=c,fi.elements[9]*=c,fi.elements[10]*=c,t.setFromRotationMatrix(fi),n.x=r,n.y=a,n.z=o,this}makePerspective(e,t,n,i,r,a,o=2e3){const s=this.elements,l=2*r/(t-e),c=2*r/(n-i),h=(t+e)/(t-e),d=(n+i)/(n-i);let u,p;if(o===Xt)u=-(a+r)/(a-r),p=-2*a*r/(a-r);else{if(o!==Yt)throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);u=-a/(a-r),p=-a*r/(a-r)}return s[0]=l,s[4]=0,s[8]=h,s[12]=0,s[1]=0,s[5]=c,s[9]=d,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=p,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(e,t,n,i,r,a,o=2e3){const s=this.elements,l=1/(t-e),c=1/(n-i),h=1/(a-r),d=(t+e)*l,u=(n+i)*c;let p,f;if(o===Xt)p=(a+r)*h,f=-2*h;else{if(o!==Yt)throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);p=r*h,f=-1*h}return s[0]=2*l,s[4]=0,s[8]=0,s[12]=-d,s[1]=0,s[5]=2*c,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=f,s[14]=-p,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(e){const t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){const n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}}const pi=new Un,fi=new ui,mi=new Un(0,0,0),gi=new Un(1,1,1),vi=new Un,wi=new Un,yi=new Un,bi=new ui,xi=new Dn;class _i{constructor(e=0,t=0,n=0,i=_i.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=n,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,i=this._order){return this._x=e,this._y=t,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){const i=e.elements,r=i[0],a=i[4],o=i[8],s=i[1],l=i[5],c=i[9],h=i[2],d=i[6],u=i[10];switch(t){case"XYZ":this._y=Math.asin(tn(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,u),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(d,l),this._z=0);break;case"YXZ":this._x=Math.asin(-tn(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(o,u),this._z=Math.atan2(s,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(tn(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-h,u),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(s,r));break;case"ZYX":this._y=Math.asin(-tn(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(d,u),this._z=Math.atan2(s,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(tn(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(o,u));break;case"XZY":this._z=Math.asin(-tn(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-c,u),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,!0===n&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return bi.makeRotationFromQuaternion(e),this.setFromRotationMatrix(bi,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return xi.setFromEuler(this),this.setFromQuaternion(xi,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}_i.DEFAULT_ORDER="XYZ";class ki{constructor(){this.mask=1}set(e){this.mask=1<>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.visibility=this._visibility,i.active=this._active,i.bounds=this._bounds.map((e=>({boxInitialized:e.boxInitialized,boxMin:e.box.min.toArray(),boxMax:e.box.max.toArray(),sphereInitialized:e.sphereInitialized,sphereRadius:e.sphere.radius,sphereCenter:e.sphere.center.toArray()}))),i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.geometryCount=this._geometryCount,i.matricesTexture=this._matricesTexture.toJSON(e),null!==this._colorsTexture&&(i.colorsTexture=this._colorsTexture.toJSON(e)),null!==this.boundingSphere&&(i.boundingSphere={center:i.boundingSphere.center.toArray(),radius:i.boundingSphere.radius}),null!==this.boundingBox&&(i.boundingBox={min:i.boundingBox.min.toArray(),max:i.boundingBox.max.toArray()})),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(i.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(e.geometries,this.geometry);const t=this.geometry.parameters;if(void 0!==t&&void 0!==t.shapes){const n=t.shapes;if(Array.isArray(n))for(let t=0,i=n.length;t0){i.children=[];for(let t=0;t0){i.animations=[];for(let t=0;t0&&(n.geometries=t),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c),h.length>0&&(n.nodes=h)}return n.object=i,n;function a(e){const t=[];for(const n in e){const i=e[n];delete i.metadata,t.push(i)}return t}}clone(e){return(new this.constructor).copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(e,t,n,i,r){Fi.subVectors(i,t),Wi.subVectors(n,t),Hi.subVectors(e,t);const a=Fi.dot(Fi),o=Fi.dot(Wi),s=Fi.dot(Hi),l=Wi.dot(Wi),c=Wi.dot(Hi),h=a*l-o*o;if(0===h)return r.set(0,0,0),null;const d=1/h,u=(l*s-o*c)*d,p=(a*c-o*s)*d;return r.set(1-u-p,p,u)}static containsPoint(e,t,n,i){return null!==this.getBarycoord(e,t,n,i,Vi)&&(Vi.x>=0&&Vi.y>=0&&Vi.x+Vi.y<=1)}static getInterpolation(e,t,n,i,r,a,o,s){return null===this.getBarycoord(e,t,n,i,Vi)?(s.x=0,s.y=0,"z"in s&&(s.z=0),"w"in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(r,Vi.x),s.addScaledVector(a,Vi.y),s.addScaledVector(o,Vi.z),s)}static isFrontFacing(e,t,n,i){return Fi.subVectors(n,t),Wi.subVectors(e,t),Fi.cross(Wi).dot(i)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,i){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[i]),this}setFromAttributeAndIndices(e,t,n,i){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,i),this}clone(){return(new this.constructor).copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Fi.subVectors(this.c,this.b),Wi.subVectors(this.a,this.b),.5*Fi.cross(Wi).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Zi.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return Zi.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,n,i,r){return Zi.getInterpolation(e,this.a,this.b,this.c,t,n,i,r)}containsPoint(e){return Zi.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Zi.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const n=this.a,i=this.b,r=this.c;let a,o;Gi.subVectors(i,n),ji.subVectors(r,n),Xi.subVectors(e,n);const s=Gi.dot(Xi),l=ji.dot(Xi);if(s<=0&&l<=0)return t.copy(n);Yi.subVectors(e,i);const c=Gi.dot(Yi),h=ji.dot(Yi);if(c>=0&&h<=c)return t.copy(i);const d=s*h-c*l;if(d<=0&&s>=0&&c<=0)return a=s/(s-c),t.copy(n).addScaledVector(Gi,a);Ki.subVectors(e,r);const u=Gi.dot(Ki),p=ji.dot(Ki);if(p>=0&&u<=p)return t.copy(r);const f=u*l-s*p;if(f<=0&&l>=0&&p<=0)return o=l/(l-p),t.copy(n).addScaledVector(ji,o);const m=c*p-u*h;if(m<=0&&h-c>=0&&u-p>=0)return qi.subVectors(r,i),o=(h-c)/(h-c+(u-p)),t.copy(i).addScaledVector(qi,o);const g=1/(m+f+d);return a=f*g,o=d*g,t.copy(n).addScaledVector(Gi,a).addScaledVector(ji,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}const Ji={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Qi={h:0,s:0,l:0},$i={h:0,s:0,l:0};function er(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+6*(t-e)*(2/3-n):e}class tr{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(void 0===t&&void 0===n){const t=e;t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=At){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,bn.toWorkingColorSpace(this,t),this}setRGB(e,t,n,i=bn.workingColorSpace){return this.r=e,this.g=t,this.b=n,bn.toWorkingColorSpace(this,i),this}setHSL(e,t,n,i=bn.workingColorSpace){if(e=nn(e,1),t=tn(t,0,1),n=tn(n,0,1),0===t)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+t):n+t-n*t,r=2*n-i;this.r=er(r,i,e+1/3),this.g=er(r,i,e),this.b=er(r,i,e-1/3)}return bn.toWorkingColorSpace(this,i),this}setStyle(e,t=At){function n(t){void 0!==t&&parseFloat(t)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let i;if(i=/^(\w+)\(([^\)]*)\)/.exec(e)){let r;const a=i[1],o=i[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,t);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){const n=i[1],r=n.length;if(3===r)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(6===r)return this.setHex(parseInt(n,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=At){const n=Ji[e.toLowerCase()];return void 0!==n?this.setHex(n,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=xn(e.r),this.g=xn(e.g),this.b=xn(e.b),this}copyLinearToSRGB(e){return this.r=_n(e.r),this.g=_n(e.g),this.b=_n(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=At){return bn.fromWorkingColorSpace(nr.copy(this),e),65536*Math.round(tn(255*nr.r,0,255))+256*Math.round(tn(255*nr.g,0,255))+Math.round(tn(255*nr.b,0,255))}getHexString(e=At){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=bn.workingColorSpace){bn.fromWorkingColorSpace(nr.copy(this),t);const n=nr.r,i=nr.g,r=nr.b,a=Math.max(n,i,r),o=Math.min(n,i,r);let s,l;const c=(o+a)/2;if(o===a)s=0,l=0;else{const e=a-o;switch(l=c<=.5?e/(a+o):e/(2-a-o),a){case n:s=(i-r)/e+(i0!=e>0&&this.version++,this._alphaTest=e}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(const t in e){const n=e[t];if(void 0===n){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}const i=this[t];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[t]=n:console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`)}}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});const n={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};function i(e){const t=[];for(const n in e){const i=e[n];delete i.metadata,t.push(i)}return t}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.dispersion&&(n.dispersion=this.dispersion),void 0!==this.iridescence&&(n.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(n.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),void 0!==this.anisotropy&&(n.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapRotation&&(n.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),this.side!==M&&(n.side=this.side),!0===this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=!0),204!==this.blendSrc&&(n.blendSrc=this.blendSrc),205!==this.blendDst&&(n.blendDst=this.blendDst),this.blendEquation!==C&&(n.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(n.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(n.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(n.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(n.depthFunc=this.depthFunc),!1===this.depthTest&&(n.depthTest=this.depthTest),!1===this.depthWrite&&(n.depthWrite=this.depthWrite),!1===this.colorWrite&&(n.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(n.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(n.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(n.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Ut&&(n.stencilFail=this.stencilFail),this.stencilZFail!==Ut&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==Ut&&(n.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(n.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaHash&&(n.alphaHash=!0),!0===this.alphaToCoverage&&(n.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=!0),!0===this.forceSinglePass&&(n.forceSinglePass=!0),!0===this.wireframe&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData),t){const t=i(e.textures),r=i(e.images);t.length>0&&(n.textures=t),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let n=null;if(null!==t){const e=t.length;n=new Array(e);for(let i=0;i!==e;++i)n[i]=t[i].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}onBuild(){console.warn("Material: onBuild() has been removed.")}onBeforeRender(){console.warn("Material: onBeforeRender() has been removed.")}}class ar extends rr{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new tr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new _i,this.combine=X,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const or=new Un,sr=new ln;class lr{constructor(e,t,n=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=n,this.usage=jt,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.gpuType=Se,this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}get updateRange(){return mn("THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let i=0,r=this.itemSize;i0&&(e.userData=this.userData),void 0!==this.parameters){const t=this.parameters;for(const n in t)void 0!==t[n]&&(e[n]=t[n]);return e}e.data={attributes:{}};const t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const n=this.attributes;for(const t in n){const i=n[t];e.data.attributes[t]=i.toJSON(e.data)}const i={};let r=!1;for(const t in this.morphAttributes){const n=this.morphAttributes[t],a=[];for(let t=0,i=n.length;t0&&(i[t]=a,r=!0)}r&&(e.data.morphAttributes=i,e.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return null!==o&&(e.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),e}clone(){return(new this.constructor).copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const n=e.index;null!==n&&this.setIndex(n.clone(t));const i=e.attributes;for(const e in i){const n=i[e];this.setAttribute(e,n.clone(t))}const r=e.morphAttributes;for(const e in r){const n=[],i=r[e];for(let e=0,r=i.length;e0){const n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2)return}br.copy(r).invert(),xr.copy(e.ray).applyMatrix4(br),null!==n.boundingBox&&!1===xr.intersectsBox(n.boundingBox)||this._computeIntersections(e,t,xr)}}_computeIntersections(e,t,n){let i;const r=this.geometry,a=this.material,o=r.index,s=r.attributes.position,l=r.attributes.uv,c=r.attributes.uv1,h=r.attributes.normal,d=r.groups,u=r.drawRange;if(null!==o)if(Array.isArray(a))for(let r=0,s=d.length;rn.far?null:{distance:c,point:Ur.clone(),object:e}}(e,t,n,i,Er,Sr,Mr,Dr);if(h){r&&(Cr.fromBufferAttribute(r,s),Pr.fromBufferAttribute(r,l),Rr.fromBufferAttribute(r,c),h.uv=Zi.getInterpolation(Dr,Er,Sr,Mr,Cr,Pr,Rr,new ln)),a&&(Cr.fromBufferAttribute(a,s),Pr.fromBufferAttribute(a,l),Rr.fromBufferAttribute(a,c),h.uv1=Zi.getInterpolation(Dr,Er,Sr,Mr,Cr,Pr,Rr,new ln)),o&&(Lr.fromBufferAttribute(o,s),Ir.fromBufferAttribute(o,l),Nr.fromBufferAttribute(o,c),h.normal=Zi.getInterpolation(Dr,Er,Sr,Mr,Lr,Ir,Nr,new Un),h.normal.dot(i.direction)>0&&h.normal.multiplyScalar(-1));const e={a:s,b:l,c,normal:new Un,materialIndex:0};Zi.getNormal(Er,Sr,Mr,e.normal),h.face=e}return h}class zr extends yr{constructor(e=1,t=1,n=1,i=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:n,widthSegments:i,heightSegments:r,depthSegments:a};const o=this;i=Math.floor(i),r=Math.floor(r),a=Math.floor(a);const s=[],l=[],c=[],h=[];let d=0,u=0;function p(e,t,n,i,r,a,p,f,m,g,v){const w=a/m,y=p/g,b=a/2,x=p/2,_=f/2,k=m+1,E=g+1;let S=0,M=0;const T=new Un;for(let a=0;a0?1:-1,c.push(T.x,T.y,T.z),h.push(s/m),h.push(1-a/g),S+=1}}for(let e=0;e0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const n={};for(const e in this.extensions)!0===this.extensions[e]&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}}class jr extends zi{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new ui,this.projectionMatrix=new ui,this.projectionMatrixInverse=new ui,this.coordinateSystem=Xt}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}const qr=new Un,Xr=new ln,Yr=new ln;class Kr extends jr{constructor(e=50,t=1,n=.1,i=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=2*$t*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(.5*Qt*this.fov);return.5*this.getFilmHeight()/e}getEffectiveFOV(){return 2*$t*Math.atan(Math.tan(.5*Qt*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){qr.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(qr.x,qr.y).multiplyScalar(-e/qr.z),qr.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(qr.x,qr.y).multiplyScalar(-e/qr.z)}getViewSize(e,t){return this.getViewBounds(e,Xr,Yr),t.subVectors(Yr,Xr)}setViewOffset(e,t,n,i,r,a){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(.5*Qt*this.fov)/this.zoom,n=2*t,i=this.aspect*n,r=-.5*i;const a=this.view;if(null!==this.view&&this.view.enabled){const e=a.fullWidth,o=a.fullHeight;r+=a.offsetX*i/e,t-=a.offsetY*n/o,i*=a.width/e,n*=a.height/o}const o=this.filmOffset;0!==o&&(r+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,t,t-n,e,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const Zr=-90;class Jr extends zi{constructor(e,t,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const i=new Kr(Zr,1,e,t);i.layers=this.layers,this.add(i);const r=new Kr(Zr,1,e,t);r.layers=this.layers,this.add(r);const a=new Kr(Zr,1,e,t);a.layers=this.layers,this.add(a);const o=new Kr(Zr,1,e,t);o.layers=this.layers,this.add(o);const s=new Kr(Zr,1,e,t);s.layers=this.layers,this.add(s);const l=new Kr(Zr,1,e,t);l.layers=this.layers,this.add(l)}updateCoordinateSystem(){const e=this.coordinateSystem,t=this.children.concat(),[n,i,r,a,o,s]=t;for(const e of t)this.remove(e);if(e===Xt)n.up.set(0,1,0),n.lookAt(1,0,0),i.up.set(0,1,0),i.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),s.up.set(0,1,0),s.lookAt(0,0,-1);else{if(e!==Yt)throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);n.up.set(0,-1,0),n.lookAt(-1,0,0),i.up.set(0,-1,0),i.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),s.up.set(0,-1,0),s.lookAt(0,0,-1)}for(const e of t)this.add(e),e.updateMatrixWorld()}update(e,t){null===this.parent&&this.updateMatrixWorld();const{renderTarget:n,activeMipmapLevel:i}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());const[r,a,o,s,l,c]=this.children,h=e.getRenderTarget(),d=e.getActiveCubeFace(),u=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;const f=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0,i),e.render(t,r),e.setRenderTarget(n,1,i),e.render(t,a),e.setRenderTarget(n,2,i),e.render(t,o),e.setRenderTarget(n,3,i),e.render(t,s),e.setRenderTarget(n,4,i),e.render(t,l),n.texture.generateMipmaps=f,e.setRenderTarget(n,5,i),e.render(t,c),e.setRenderTarget(h,d,u),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}}class Qr extends Cn{constructor(e,t,n,i,r,a,o,s,l,c){super(e=void 0!==e?e:[],t=void 0!==t?t:ae,n,i,r,a,o,s,l,c),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class $r extends Ln{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const n={width:e,height:e,depth:1},i=[n,n,n,n,n,n];this.texture=new Qr(i,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:ge}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new zr(5,5,5),r=new Gr({name:"CubemapFromEquirect",uniforms:Fr(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:T,blending:0});r.uniforms.tEquirect.value=t;const a=new Br(i,r),o=t.minFilter;t.minFilter===we&&(t.minFilter=ge);return new Jr(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t,n,i){const r=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,n,i);e.setRenderTarget(r)}}const ea=new Un,ta=new Un,na=new cn;class ia{constructor(e=new Un(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,n,i){return this.normal.set(e,t,n),this.constant=i,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,n){const i=ea.subVectors(n,t).cross(ta.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(i,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t){const n=e.delta(ea),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(e.start)?t.copy(e.start):null;const r=-(e.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:t.copy(e.start).addScaledVector(n,r)}intersectsLine(e){const t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const n=t||na.getNormalMatrix(e),i=this.coplanarPoint(ea).applyMatrix4(e),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const ra=new ii,aa=new Un;class oa{constructor(e=new ia,t=new ia,n=new ia,i=new ia,r=new ia,a=new ia){this.planes=[e,t,n,i,r,a]}set(e,t,n,i,r,a){const o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(n),o[3].copy(i),o[4].copy(r),o[5].copy(a),this}copy(e){const t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=2e3){const n=this.planes,i=e.elements,r=i[0],a=i[1],o=i[2],s=i[3],l=i[4],c=i[5],h=i[6],d=i[7],u=i[8],p=i[9],f=i[10],m=i[11],g=i[12],v=i[13],w=i[14],y=i[15];if(n[0].setComponents(s-r,d-l,m-u,y-g).normalize(),n[1].setComponents(s+r,d+l,m+u,y+g).normalize(),n[2].setComponents(s+a,d+c,m+p,y+v).normalize(),n[3].setComponents(s-a,d-c,m-p,y-v).normalize(),n[4].setComponents(s-o,d-h,m-f,y-w).normalize(),t===Xt)n[5].setComponents(s+o,d+h,m+f,y+w).normalize();else{if(t!==Yt)throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);n[5].setComponents(o,h,f,w).normalize()}return this}intersectsObject(e){if(void 0!==e.boundingSphere)null===e.boundingSphere&&e.computeBoundingSphere(),ra.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;null===t.boundingSphere&&t.computeBoundingSphere(),ra.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(ra)}intersectsSprite(e){return ra.center.set(0,0,0),ra.radius=.7071067811865476,ra.applyMatrix4(e.matrixWorld),this.intersectsSphere(ra)}intersectsSphere(e){const t=this.planes,n=e.center,i=-e.radius;for(let e=0;e<6;e++){if(t[e].distanceToPoint(n)0?e.max.x:e.min.x,aa.y=i.normal.y>0?e.max.y:e.min.y,aa.z=i.normal.z>0?e.max.z:e.min.z,i.distanceToPoint(aa)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function sa(){let e=null,t=!1,n=null,i=null;function r(t,a){n(t,a),i=e.requestAnimationFrame(r)}return{start:function(){!0!==t&&null!==n&&(i=e.requestAnimationFrame(r),t=!0)},stop:function(){e.cancelAnimationFrame(i),t=!1},setAnimationLoop:function(e){n=e},setContext:function(t){e=t}}}function la(e){const t=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),t.get(e)},remove:function(n){n.isInterleavedBufferAttribute&&(n=n.data);const i=t.get(n);i&&(e.deleteBuffer(i.buffer),t.delete(n))},update:function(n,i){if(n.isGLBufferAttribute){const e=t.get(n);return void((!e||e.version 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n\tvColor.xyz *= batchingColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\n\tvec3( 0.8224621, 0.177538, 0.0 ),\n\tvec3( 0.0331941, 0.9668058, 0.0 ),\n\tvec3( 0.0170827, 0.0723974, 0.9105199 )\n);\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.2249401, - 0.2249404, 0.0 ),\n\tvec3( - 0.0420569, 1.0420571, 0.0 ),\n\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\n);\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\n\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\n}\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\n\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\n}\nvec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn sRGBTransferOETF( value );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t\n\t\t#else\n\t\t\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},da={common:{diffuse:{value:new tr(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new cn},alphaMap:{value:null},alphaMapTransform:{value:new cn},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new cn}},envmap:{envMap:{value:null},envMapRotation:{value:new cn},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new cn}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new cn}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new cn},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new cn},normalScale:{value:new ln(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new cn},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new cn}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new cn}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new cn}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new tr(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new tr(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new cn},alphaTest:{value:0},uvTransform:{value:new cn}},sprite:{diffuse:{value:new tr(16777215)},opacity:{value:1},center:{value:new ln(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new cn},alphaMap:{value:null},alphaMapTransform:{value:new cn},alphaTest:{value:0}}},ua={basic:{uniforms:Wr([da.common,da.specularmap,da.envmap,da.aomap,da.lightmap,da.fog]),vertexShader:ha.meshbasic_vert,fragmentShader:ha.meshbasic_frag},lambert:{uniforms:Wr([da.common,da.specularmap,da.envmap,da.aomap,da.lightmap,da.emissivemap,da.bumpmap,da.normalmap,da.displacementmap,da.fog,da.lights,{emissive:{value:new tr(0)}}]),vertexShader:ha.meshlambert_vert,fragmentShader:ha.meshlambert_frag},phong:{uniforms:Wr([da.common,da.specularmap,da.envmap,da.aomap,da.lightmap,da.emissivemap,da.bumpmap,da.normalmap,da.displacementmap,da.fog,da.lights,{emissive:{value:new tr(0)},specular:{value:new tr(1118481)},shininess:{value:30}}]),vertexShader:ha.meshphong_vert,fragmentShader:ha.meshphong_frag},standard:{uniforms:Wr([da.common,da.envmap,da.aomap,da.lightmap,da.emissivemap,da.bumpmap,da.normalmap,da.displacementmap,da.roughnessmap,da.metalnessmap,da.fog,da.lights,{emissive:{value:new tr(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:ha.meshphysical_vert,fragmentShader:ha.meshphysical_frag},toon:{uniforms:Wr([da.common,da.aomap,da.lightmap,da.emissivemap,da.bumpmap,da.normalmap,da.displacementmap,da.gradientmap,da.fog,da.lights,{emissive:{value:new tr(0)}}]),vertexShader:ha.meshtoon_vert,fragmentShader:ha.meshtoon_frag},matcap:{uniforms:Wr([da.common,da.bumpmap,da.normalmap,da.displacementmap,da.fog,{matcap:{value:null}}]),vertexShader:ha.meshmatcap_vert,fragmentShader:ha.meshmatcap_frag},points:{uniforms:Wr([da.points,da.fog]),vertexShader:ha.points_vert,fragmentShader:ha.points_frag},dashed:{uniforms:Wr([da.common,da.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:ha.linedashed_vert,fragmentShader:ha.linedashed_frag},depth:{uniforms:Wr([da.common,da.displacementmap]),vertexShader:ha.depth_vert,fragmentShader:ha.depth_frag},normal:{uniforms:Wr([da.common,da.bumpmap,da.normalmap,da.displacementmap,{opacity:{value:1}}]),vertexShader:ha.meshnormal_vert,fragmentShader:ha.meshnormal_frag},sprite:{uniforms:Wr([da.sprite,da.fog]),vertexShader:ha.sprite_vert,fragmentShader:ha.sprite_frag},background:{uniforms:{uvTransform:{value:new cn},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:ha.background_vert,fragmentShader:ha.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new cn}},vertexShader:ha.backgroundCube_vert,fragmentShader:ha.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:ha.cube_vert,fragmentShader:ha.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:ha.equirect_vert,fragmentShader:ha.equirect_frag},distanceRGBA:{uniforms:Wr([da.common,da.displacementmap,{referencePosition:{value:new Un},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:ha.distanceRGBA_vert,fragmentShader:ha.distanceRGBA_frag},shadow:{uniforms:Wr([da.lights,da.fog,{color:{value:new tr(0)},opacity:{value:1}}]),vertexShader:ha.shadow_vert,fragmentShader:ha.shadow_frag}};ua.physical={uniforms:Wr([ua.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new cn},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new cn},clearcoatNormalScale:{value:new ln(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new cn},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new cn},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new cn},sheen:{value:0},sheenColor:{value:new tr(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new cn},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new cn},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new cn},transmissionSamplerSize:{value:new ln},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new cn},attenuationDistance:{value:0},attenuationColor:{value:new tr(0)},specularColor:{value:new tr(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new cn},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new cn},anisotropyVector:{value:new ln},anisotropyMap:{value:null},anisotropyMapTransform:{value:new cn}}]),vertexShader:ha.meshphysical_vert,fragmentShader:ha.meshphysical_frag};const pa={r:0,b:0,g:0},fa=new _i,ma=new ui;function ga(e,t,n,i,r,a,o){const s=new tr(0);let l,c,h=!0===a?0:1,d=null,u=0,p=null;function f(e){let i=!0===e.isScene?e.background:null;if(i&&i.isTexture){i=(e.backgroundBlurriness>0?n:t).get(i)}return i}function m(t,n){t.getRGB(pa,Hr(e)),i.buffers.color.setClear(pa.r,pa.g,pa.b,n,o)}return{getClearColor:function(){return s},setClearColor:function(e,t=1){s.set(e),h=t,m(s,h)},getClearAlpha:function(){return h},setClearAlpha:function(e){h=e,m(s,h)},render:function(t){let n=!1;const r=f(t);null===r?m(s,h):r&&r.isColor&&(m(r,1),n=!0);const a=e.xr.getEnvironmentBlendMode();"additive"===a?i.buffers.color.setClear(0,0,0,1,o):"alpha-blend"===a&&i.buffers.color.setClear(0,0,0,0,o),(e.autoClear||n)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))},addToRenderList:function(t,n){const i=f(n);i&&(i.isCubeTexture||i.mapping===ce)?(void 0===c&&(c=new Br(new zr(1,1,1),new Gr({name:"BackgroundCubeMaterial",uniforms:Fr(ua.backgroundCube.uniforms),vertexShader:ua.backgroundCube.vertexShader,fragmentShader:ua.backgroundCube.fragmentShader,side:T,depthTest:!1,depthWrite:!1,fog:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(c.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(c)),fa.copy(n.backgroundRotation),fa.x*=-1,fa.y*=-1,fa.z*=-1,i.isCubeTexture&&!1===i.isRenderTargetTexture&&(fa.y*=-1,fa.z*=-1),c.material.uniforms.envMap.value=i,c.material.uniforms.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,c.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,c.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,c.material.uniforms.backgroundRotation.value.setFromMatrix4(ma.makeRotationFromEuler(fa)),c.material.toneMapped=bn.getTransfer(i.colorSpace)!==It,d===i&&u===i.version&&p===e.toneMapping||(c.material.needsUpdate=!0,d=i,u=i.version,p=e.toneMapping),c.layers.enableAll(),t.unshift(c,c.geometry,c.material,0,0,null)):i&&i.isTexture&&(void 0===l&&(l=new Br(new ca(2,2),new Gr({name:"BackgroundMaterial",uniforms:Fr(ua.background.uniforms),vertexShader:ua.background.vertexShader,fragmentShader:ua.background.fragmentShader,side:M,depthTest:!1,depthWrite:!1,fog:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(l)),l.material.uniforms.t2D.value=i,l.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,l.material.toneMapped=bn.getTransfer(i.colorSpace)!==It,!0===i.matrixAutoUpdate&&i.updateMatrix(),l.material.uniforms.uvTransform.value.copy(i.matrix),d===i&&u===i.version&&p===e.toneMapping||(l.material.needsUpdate=!0,d=i,u=i.version,p=e.toneMapping),l.layers.enableAll(),t.unshift(l,l.geometry,l.material,0,0,null))}}}function va(e,t){const n=e.getParameter(e.MAX_VERTEX_ATTRIBS),i={},r=c(null);let a=r,o=!1;function s(t){return e.bindVertexArray(t)}function l(t){return e.deleteVertexArray(t)}function c(e){const t=[],i=[],r=[];for(let e=0;e=0){const n=r[t];let i=o[t];if(void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor)),void 0===n)return!0;if(n.attribute!==i)return!0;if(i&&n.data!==i.data)return!0;s++}}return a.attributesNum!==s||a.index!==i}(n,m,l,g),v&&function(e,t,n,i){const r={},o=t.attributes;let s=0;const l=n.getAttributes();for(const t in l){if(l[t].location>=0){let n=o[t];void 0===n&&("instanceMatrix"===t&&e.instanceMatrix&&(n=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(n=e.instanceColor));const i={};i.attribute=n,n&&n.data&&(i.data=n.data),r[t]=i,s++}}a.attributes=r,a.attributesNum=s,a.index=i}(n,m,l,g),null!==g&&t.update(g,e.ELEMENT_ARRAY_BUFFER),(v||o)&&(o=!1,function(n,i,r,a){h();const o=a.attributes,s=r.getAttributes(),l=i.defaultAttributeValues;for(const i in s){const r=s[i];if(r.location>=0){let s=o[i];if(void 0===s&&("instanceMatrix"===i&&n.instanceMatrix&&(s=n.instanceMatrix),"instanceColor"===i&&n.instanceColor&&(s=n.instanceColor)),void 0!==s){const i=s.normalized,o=s.itemSize,l=t.get(s);if(void 0===l)continue;const c=l.buffer,h=l.type,p=l.bytesPerElement,m=h===e.INT||h===e.UNSIGNED_INT||s.gpuType===ke;if(s.isInterleavedBufferAttribute){const t=s.data,l=t.stride,g=s.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let o=void 0!==n.precision?n.precision:"highp";const s=a(o);s!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",s,"instead."),o=s);const l=!0===n.logarithmicDepthBuffer,c=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){const n=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:a,textureFormatReadable:function(t){return t===Ie||i.convert(t)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(n){const r=n===Me&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(n!==ye&&i.convert(n)!==e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)&&n!==Se&&!r)},precision:o,logarithmicDepthBuffer:l,maxTextures:c,maxVertexTextures:h,maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),maxCubemapSize:e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:e.getParameter(e.MAX_VERTEX_ATTRIBS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),vertexTextures:h>0,maxSamples:e.getParameter(e.MAX_SAMPLES)}}function ba(e){const t=this;let n=null,i=0,r=!1,a=!1;const o=new ia,s=new cn,l={value:null,needsUpdate:!1};function c(e,n,i,r){const a=null!==e?e.length:0;let c=null;if(0!==a){if(c=l.value,!0!==r||null===c){const t=i+4*a,r=n.matrixWorldInverse;s.getNormalMatrix(r),(null===c||c.length0);t.numPlanes=i,t.numIntersection=0}();else{const e=a?0:i,t=4*e;let r=f.clippingState||null;l.value=r,r=c(d,s,t,h);for(let e=0;e!==t;++e)r[e]=n[e];f.clippingState=r,this.numIntersection=u?this.numPlanes:0,this.numPlanes+=e}}}function xa(e){let t=new WeakMap;function n(e,t){return t===se?e.mapping=ae:t===le&&(e.mapping=oe),e}function i(e){const n=e.target;n.removeEventListener("dispose",i);const r=t.get(n);void 0!==r&&(t.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){const a=r.mapping;if(a===se||a===le){if(t.has(r)){return n(t.get(r).texture,r.mapping)}{const a=r.image;if(a&&a.height>0){const o=new $r(a.height);return o.fromEquirectangularTexture(e,r),t.set(r,o),r.addEventListener("dispose",i),n(o.texture,r.mapping)}return null}}}return r},dispose:function(){t=new WeakMap}}}class _a extends jr{constructor(e=-1,t=1,n=1,i=-1,r=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=n,this.bottom=i,this.near=r,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=null===e.view?null:Object.assign({},e.view),this}setViewOffset(e,t,n,i,r,a){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-e,a=n+e,o=i+t,s=i-t;if(null!==this.view&&this.view.enabled){const e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=e*this.view.offsetX,a=r+e*this.view.width,o-=t*this.view.offsetY,s=o-t*this.view.height}this.projectionMatrix.makeOrthographic(r,a,o,s,this.near,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}}const ka=[.125,.215,.35,.446,.526,.582],Ea=20,Sa=new _a,Ma=new tr;let Ta=null,Aa=0,Ca=0,Pa=!1;const Ra=(1+Math.sqrt(5))/2,La=1/Ra,Ia=[new Un(-Ra,La,0),new Un(Ra,La,0),new Un(-La,0,Ra),new Un(La,0,Ra),new Un(0,Ra,-La),new Un(0,Ra,La),new Un(-1,1,-1),new Un(1,1,-1),new Un(-1,1,1),new Un(1,1,1)];class Na{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=.1,i=100){Ta=this._renderer.getRenderTarget(),Aa=this._renderer.getActiveCubeFace(),Ca=this._renderer.getActiveMipmapLevel(),Pa=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(e,n,i,r),t>0&&this._blur(r,0,0,t),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=Oa(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Ba(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?s=ka[o-e+4-1]:0===o&&(s=0),i.push(s);const l=1/(a-2),c=-l,h=1+l,d=[c,c,h,c,h,h,c,c,h,h,c,h],u=6,p=6,f=3,m=2,g=1,v=new Float32Array(f*p*u),w=new Float32Array(m*p*u),y=new Float32Array(g*p*u);for(let e=0;e2?0:-1,i=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];v.set(i,f*p*e),w.set(d,m*p*e);const r=[e,e,e,e,e,e];y.set(r,g*p*e)}const b=new yr;b.setAttribute("position",new lr(v,f)),b.setAttribute("uv",new lr(w,m)),b.setAttribute("faceIndex",new lr(y,g)),t.push(b),r>4&&r--}return{lodPlanes:t,sizeLods:n,sigmas:i}}(i)),this._blurMaterial=function(e,t,n){const i=new Float32Array(Ea),r=new Un(0,1,0),a=new Gr({name:"SphericalGaussianBlur",defines:{n:Ea,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:za(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1});return a}(i,e,t)}return i}_compileMaterial(e){const t=new Br(this._lodPlanes[0],e);this._renderer.compile(t,Sa)}_sceneToCubeUV(e,t,n,i){const r=new Kr(90,1,t,n),a=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],s=this._renderer,l=s.autoClear,c=s.toneMapping;s.getClearColor(Ma),s.toneMapping=Z,s.autoClear=!1;const h=new ar({name:"PMREM.Background",side:T,depthWrite:!1,depthTest:!1}),d=new Br(new zr,h);let u=!1;const p=e.background;p?p.isColor&&(h.color.copy(p),e.background=null,u=!0):(h.color.copy(Ma),u=!0);for(let t=0;t<6;t++){const n=t%3;0===n?(r.up.set(0,a[t],0),r.lookAt(o[t],0,0)):1===n?(r.up.set(0,0,a[t]),r.lookAt(0,o[t],0)):(r.up.set(0,a[t],0),r.lookAt(0,0,o[t]));const l=this._cubeSize;Ua(i,n*l,t>2?l:0,l,l),s.setRenderTarget(i),u&&s.render(d,r),s.render(e,r)}d.geometry.dispose(),d.material.dispose(),s.toneMapping=c,s.autoClear=l,e.background=p}_textureToCubeUV(e,t){const n=this._renderer,i=e.mapping===ae||e.mapping===oe;i?(null===this._cubemapMaterial&&(this._cubemapMaterial=Oa()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=Ba());const r=i?this._cubemapMaterial:this._equirectMaterial,a=new Br(this._lodPlanes[0],r);r.uniforms.envMap.value=e;const o=this._cubeSize;Ua(t,0,0,3*o,2*o),n.setRenderTarget(t),n.render(a,Sa)}_applyPMREM(e){const t=this._renderer,n=t.autoClear;t.autoClear=!1;const i=this._lodPlanes.length;for(let t=1;tEa&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const m=[];let g=0;for(let e=0;ev-4?i-v+4:0),4*(this._cubeSize-w),3*w,2*w),s.setRenderTarget(t),s.render(c,Sa)}}function Da(e,t,n){const i=new Ln(e,t,n);return i.texture.mapping=ce,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Ua(e,t,n,i,r){e.viewport.set(t,n,i,r),e.scissor.set(t,n,i,r)}function Ba(){return new Gr({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:za(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function Oa(){return new Gr({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:za(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function za(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function Fa(e){let t=new WeakMap,n=null;function i(e){const n=e.target;n.removeEventListener("dispose",i);const r=t.get(n);void 0!==r&&(t.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){const a=r.mapping,o=a===se||a===le,s=a===ae||a===oe;if(o||s){let a=t.get(r);const l=void 0!==a?a.texture.pmremVersion:0;if(r.isRenderTargetTexture&&r.pmremVersion!==l)return null===n&&(n=new Na(e)),a=o?n.fromEquirectangular(r,a):n.fromCubemap(r,a),a.texture.pmremVersion=r.pmremVersion,t.set(r,a),a.texture;if(void 0!==a)return a.texture;{const l=r.image;return o&&l&&l.height>0||s&&l&&function(e){let t=0;const n=6;for(let i=0;it.maxTextureSize&&(b=Math.ceil(y/t.maxTextureSize),y=t.maxTextureSize);const x=new Float32Array(y*b*4*h),_=new In(x,y,b,h);_.type=Se,_.needsUpdate=!0;const k=4*w;for(let S=0;S0)return e;const r=t*n;let a=$a[r];if(void 0===a&&(a=new Float32Array(r),$a[r]=a),0!==t){i.toArray(a,0);for(let i=1,r=0;i!==t;++i)r+=n,e[i].toArray(a,r)}return a}function ao(e,t){if(e.length!==t.length)return!1;for(let n=0,i=e.length;n":" "} ${r}: ${n[e]}`)}return i.join("\n")}(e.getShaderSource(t),i)}return r}function rs(e,t){const n=function(e){const t=bn.getPrimaries(bn.workingColorSpace),n=bn.getPrimaries(e);let i;switch(t===n?i="":t===Dt&&n===Nt?i="LinearDisplayP3ToLinearSRGB":t===Nt&&n===Dt&&(i="LinearSRGBToLinearDisplayP3"),e){case Ct:case Rt:return[i,"LinearTransferOETF"];case At:case Pt:return[i,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space:",e),[i,"LinearTransferOETF"]}}(t);return`vec4 ${e}( vec4 value ) { return ${n[0]}( ${n[1]}( value ) ); }`}function as(e,t){let n;switch(t){case J:n="Linear";break;case Q:n="Reinhard";break;case $:n="OptimizedCineon";break;case ee:n="ACESFilmic";break;case ne:n="AgX";break;case ie:n="Neutral";break;case te:n="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),n="Linear"}return"vec3 "+e+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}function os(e){return""!==e}function ss(e,t){const n=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function ls(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}const cs=/^[ \t]*#include +<([\w\d./]+)>/gm;function hs(e){return e.replace(cs,us)}const ds=new Map;function us(e,t){let n=ha[t];if(void 0===n){const e=ds.get(t);if(void 0===e)throw new Error("Can not resolve #include <"+t+">");n=ha[e],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,e)}return hs(n)}const ps=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function fs(e){return e.replace(ps,ms)}function ms(e,t,n,i){let r="";for(let e=parseInt(t);e0&&(g+="\n"),v=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,f].filter(os).join("\n"),v.length>0&&(v+="\n")):(g=[gs(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,f,n.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",n.batching?"#define USE_BATCHING":"",n.batchingColor?"#define USE_BATCHING_COLOR":"",n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.instancingMorph?"#define USE_INSTANCING_MORPH":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.displacementMap?"#define USE_DISPLACEMENTMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.mapUv?"#define MAP_UV "+n.mapUv:"",n.alphaMapUv?"#define ALPHAMAP_UV "+n.alphaMapUv:"",n.lightMapUv?"#define LIGHTMAP_UV "+n.lightMapUv:"",n.aoMapUv?"#define AOMAP_UV "+n.aoMapUv:"",n.emissiveMapUv?"#define EMISSIVEMAP_UV "+n.emissiveMapUv:"",n.bumpMapUv?"#define BUMPMAP_UV "+n.bumpMapUv:"",n.normalMapUv?"#define NORMALMAP_UV "+n.normalMapUv:"",n.displacementMapUv?"#define DISPLACEMENTMAP_UV "+n.displacementMapUv:"",n.metalnessMapUv?"#define METALNESSMAP_UV "+n.metalnessMapUv:"",n.roughnessMapUv?"#define ROUGHNESSMAP_UV "+n.roughnessMapUv:"",n.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+n.anisotropyMapUv:"",n.clearcoatMapUv?"#define CLEARCOATMAP_UV "+n.clearcoatMapUv:"",n.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+n.clearcoatNormalMapUv:"",n.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+n.clearcoatRoughnessMapUv:"",n.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+n.iridescenceMapUv:"",n.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+n.iridescenceThicknessMapUv:"",n.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+n.sheenColorMapUv:"",n.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+n.sheenRoughnessMapUv:"",n.specularMapUv?"#define SPECULARMAP_UV "+n.specularMapUv:"",n.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+n.specularColorMapUv:"",n.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+n.specularIntensityMapUv:"",n.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+n.transmissionMapUv:"",n.thicknessMapUv?"#define THICKNESSMAP_UV "+n.thicknessMapUv:"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH","\tuniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(os).join("\n"),v=[gs(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,f,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+d:"",u?"#define CUBEUV_TEXEL_WIDTH "+u.texelWidth:"",u?"#define CUBEUV_TEXEL_HEIGHT "+u.texelHeight:"",u?"#define CUBEUV_MAX_MIP "+u.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.dispersion?"#define USE_DISPERSION":"",n.iridescence?"#define USE_IRIDESCENCE":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor||n.batchingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",n.toneMapping!==Z?"#define TONE_MAPPING":"",n.toneMapping!==Z?ha.tonemapping_pars_fragment:"",n.toneMapping!==Z?as("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",ha.colorspace_pars_fragment,rs("linearToOutputTexel",n.outputColorSpace),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(os).join("\n")),o=hs(o),o=ss(o,n),o=ls(o,n),s=hs(s),s=ss(s,n),s=ls(s,n),o=fs(o),s=fs(s),!0!==n.isRawShaderMaterial&&(w="#version 300 es\n",g=[p,"#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in",n.glslVersion===qt?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===qt?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const y=w+g+o,b=w+v+s,x=es(r,r.VERTEX_SHADER,y),_=es(r,r.FRAGMENT_SHADER,b);function M(t){if(e.debug.checkShaderErrors){const n=r.getProgramInfoLog(m).trim(),i=r.getShaderInfoLog(x).trim(),a=r.getShaderInfoLog(_).trim();let o=!0,s=!0;if(!1===r.getProgramParameter(m,r.LINK_STATUS))if(o=!1,"function"==typeof e.debug.onShaderError)e.debug.onShaderError(r,m,x,_);else{const e=is(r,x,"vertex"),i=is(r,_,"fragment");console.error("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(m,r.VALIDATE_STATUS)+"\n\nMaterial Name: "+t.name+"\nMaterial Type: "+t.type+"\n\nProgram Info Log: "+n+"\n"+e+"\n"+i)}else""!==n?console.warn("THREE.WebGLProgram: Program Info Log:",n):""!==i&&""!==a||(s=!1);s&&(t.diagnostics={runnable:o,programLog:n,vertexShader:{log:i,prefix:g},fragmentShader:{log:a,prefix:v}})}r.deleteShader(x),r.deleteShader(_),T=new $o(r,m),A=function(e,t){const n={},i=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let r=0;r0,X=a.clearcoat>0,Y=a.dispersion>0,K=a.iridescence>0,J=a.sheen>0,Q=a.transmission>0,$=q&&!!a.anisotropyMap,ee=X&&!!a.clearcoatMap,te=X&&!!a.clearcoatNormalMap,ne=X&&!!a.clearcoatRoughnessMap,ie=K&&!!a.iridescenceMap,re=K&&!!a.iridescenceThicknessMap,ae=J&&!!a.sheenColorMap,oe=J&&!!a.sheenRoughnessMap,se=!!a.specularMap,le=!!a.specularColorMap,he=!!a.specularIntensityMap,de=Q&&!!a.transmissionMap,ue=Q&&!!a.thicknessMap,pe=!!a.gradientMap,fe=!!a.alphaMap,me=a.alphaTest>0,ge=!!a.alphaHash,ve=!!a.extensions;let we=Z;a.toneMapped&&(null!==L&&!0!==L.isXRRenderTarget||(we=e.toneMapping));const ye={shaderID:k,shaderType:a.type,shaderName:a.name,vertexShader:M,fragmentShader:A,defines:a.defines,customVertexShaderID:C,customFragmentShaderID:P,isRawShaderMaterial:!0===a.isRawShaderMaterial,glslVersion:a.glslVersion,precision:p,batching:N,batchingColor:N&&null!==v._colorsTexture,instancing:I,instancingColor:I&&null!==v.instanceColor,instancingMorph:I&&null!==v.morphTexture,supportsVertexTextures:u,outputColorSpace:null===L?e.outputColorSpace:!0===L.isXRRenderTarget?L.texture.colorSpace:Ct,alphaToCoverage:!!a.alphaToCoverage,map:D,matcap:U,envMap:B,envMapMode:B&&x.mapping,envMapCubeUVHeight:_,aoMap:O,lightMap:z,bumpMap:F,normalMap:W,displacementMap:u&&H,emissiveMap:V,normalMapObjectSpace:W&&1===a.normalMapType,normalMapTangentSpace:W&&0===a.normalMapType,metalnessMap:G,roughnessMap:j,anisotropy:q,anisotropyMap:$,clearcoat:X,clearcoatMap:ee,clearcoatNormalMap:te,clearcoatRoughnessMap:ne,dispersion:Y,iridescence:K,iridescenceMap:ie,iridescenceThicknessMap:re,sheen:J,sheenColorMap:ae,sheenRoughnessMap:oe,specularMap:se,specularColorMap:le,specularIntensityMap:he,transmission:Q,transmissionMap:de,thicknessMap:ue,gradientMap:pe,opaque:!1===a.transparent&&1===a.blending&&!1===a.alphaToCoverage,alphaMap:fe,alphaTest:me,alphaHash:ge,combine:a.combine,mapUv:D&&m(a.map.channel),aoMapUv:O&&m(a.aoMap.channel),lightMapUv:z&&m(a.lightMap.channel),bumpMapUv:F&&m(a.bumpMap.channel),normalMapUv:W&&m(a.normalMap.channel),displacementMapUv:H&&m(a.displacementMap.channel),emissiveMapUv:V&&m(a.emissiveMap.channel),metalnessMapUv:G&&m(a.metalnessMap.channel),roughnessMapUv:j&&m(a.roughnessMap.channel),anisotropyMapUv:$&&m(a.anisotropyMap.channel),clearcoatMapUv:ee&&m(a.clearcoatMap.channel),clearcoatNormalMapUv:te&&m(a.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:ne&&m(a.clearcoatRoughnessMap.channel),iridescenceMapUv:ie&&m(a.iridescenceMap.channel),iridescenceThicknessMapUv:re&&m(a.iridescenceThicknessMap.channel),sheenColorMapUv:ae&&m(a.sheenColorMap.channel),sheenRoughnessMapUv:oe&&m(a.sheenRoughnessMap.channel),specularMapUv:se&&m(a.specularMap.channel),specularColorMapUv:le&&m(a.specularColorMap.channel),specularIntensityMapUv:he&&m(a.specularIntensityMap.channel),transmissionMapUv:de&&m(a.transmissionMap.channel),thicknessMapUv:ue&&m(a.thicknessMap.channel),alphaMapUv:fe&&m(a.alphaMap.channel),vertexTangents:!!y.attributes.tangent&&(W||q),vertexColors:a.vertexColors,vertexAlphas:!0===a.vertexColors&&!!y.attributes.color&&4===y.attributes.color.itemSize,pointsUvs:!0===v.isPoints&&!!y.attributes.uv&&(D||fe),fog:!!w,useFog:!0===a.fog,fogExp2:!!w&&w.isFogExp2,flatShading:!0===a.flatShading,sizeAttenuation:!0===a.sizeAttenuation,logarithmicDepthBuffer:d,skinning:!0===v.isSkinnedMesh,morphTargets:void 0!==y.morphAttributes.position,morphNormals:void 0!==y.morphAttributes.normal,morphColors:void 0!==y.morphAttributes.color,morphTargetsCount:S,morphTextureStride:R,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numSpotLightMaps:s.spotLightMap.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numSpotLightShadowsWithMaps:s.numSpotLightShadowsWithMaps,numLightProbes:s.numLightProbes,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:a.dithering,shadowMapEnabled:e.shadowMap.enabled&&h.length>0,shadowMapType:e.shadowMap.type,toneMapping:we,decodeVideoTexture:D&&!0===a.map.isVideoTexture&&bn.getTransfer(a.map.colorSpace)===It,premultipliedAlpha:a.premultipliedAlpha,doubleSided:2===a.side,flipSided:a.side===T,useDepthPacking:a.depthPacking>=0,depthPacking:a.depthPacking||0,index0AttributeName:a.index0AttributeName,extensionClipCullDistance:ve&&!0===a.extensions.clipCullDistance&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(ve&&!0===a.extensions.multiDraw||N)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:a.customProgramCacheKey()};return ye.vertexUv1s=c.has(1),ye.vertexUv2s=c.has(2),ye.vertexUv3s=c.has(3),c.clear(),ye},getProgramCacheKey:function(t){const n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),void 0!==t.defines)for(const e in t.defines)n.push(e),n.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(!function(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}(n,t),function(e,t){s.disableAll(),t.supportsVertexTextures&&s.enable(0);t.instancing&&s.enable(1);t.instancingColor&&s.enable(2);t.instancingMorph&&s.enable(3);t.matcap&&s.enable(4);t.envMap&&s.enable(5);t.normalMapObjectSpace&&s.enable(6);t.normalMapTangentSpace&&s.enable(7);t.clearcoat&&s.enable(8);t.iridescence&&s.enable(9);t.alphaTest&&s.enable(10);t.vertexColors&&s.enable(11);t.vertexAlphas&&s.enable(12);t.vertexUv1s&&s.enable(13);t.vertexUv2s&&s.enable(14);t.vertexUv3s&&s.enable(15);t.vertexTangents&&s.enable(16);t.anisotropy&&s.enable(17);t.alphaHash&&s.enable(18);t.batching&&s.enable(19);t.dispersion&&s.enable(20);t.batchingColor&&s.enable(21);e.push(s.mask),s.disableAll(),t.fog&&s.enable(0);t.useFog&&s.enable(1);t.flatShading&&s.enable(2);t.logarithmicDepthBuffer&&s.enable(3);t.skinning&&s.enable(4);t.morphTargets&&s.enable(5);t.morphNormals&&s.enable(6);t.morphColors&&s.enable(7);t.premultipliedAlpha&&s.enable(8);t.shadowMapEnabled&&s.enable(9);t.doubleSided&&s.enable(10);t.flipSided&&s.enable(11);t.useDepthPacking&&s.enable(12);t.dithering&&s.enable(13);t.transmission&&s.enable(14);t.sheen&&s.enable(15);t.opaque&&s.enable(16);t.pointsUvs&&s.enable(17);t.decodeVideoTexture&&s.enable(18);t.alphaToCoverage&&s.enable(19);e.push(s.mask)}(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()},getUniforms:function(e){const t=f[e.type];let n;if(t){const e=ua[t];n=Vr.clone(e.uniforms)}else n=e.uniforms;return n},acquireProgram:function(t,n){let i;for(let e=0,t=h.length;e0?i.push(h):!0===o.transparent?r.push(h):n.push(h)},unshift:function(e,t,o,s,l,c){const h=a(e,t,o,s,l,c);o.transmission>0?i.unshift(h):!0===o.transparent?r.unshift(h):n.unshift(h)},finish:function(){for(let n=t,i=e.length;n1&&n.sort(e||ks),i.length>1&&i.sort(t||Es),r.length>1&&r.sort(t||Es)}}}function Ms(){let e=new WeakMap;return{get:function(t,n){const i=e.get(t);let r;return void 0===i?(r=new Ss,e.set(t,[r])):n>=i.length?(r=new Ss,i.push(r)):r=i[n],r},dispose:function(){e=new WeakMap}}}function Ts(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let n;switch(t.type){case"DirectionalLight":n={direction:new Un,color:new tr};break;case"SpotLight":n={position:new Un,direction:new Un,color:new tr,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new Un,color:new tr,distance:0,decay:0};break;case"HemisphereLight":n={direction:new Un,skyColor:new tr,groundColor:new tr};break;case"RectAreaLight":n={color:new tr,position:new Un,halfWidth:new Un,halfHeight:new Un}}return e[t.id]=n,n}}}let As=0;function Cs(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function Ps(e){const t=new Ts,n=function(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let n;switch(t.type){case"DirectionalLight":case"SpotLight":n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ln};break;case"PointLight":n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ln,shadowCameraNear:1,shadowCameraFar:1e3}}return e[t.id]=n,n}}}(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let e=0;e<9;e++)i.probe.push(new Un);const r=new Un,a=new ui,o=new ui;return{setup:function(r){let a=0,o=0,s=0;for(let e=0;e<9;e++)i.probe[e].set(0,0,0);let l=0,c=0,h=0,d=0,u=0,p=0,f=0,m=0,g=0,v=0,w=0;r.sort(Cs);for(let e=0,y=r.length;e0&&(!0===e.has("OES_texture_float_linear")?(i.rectAreaLTC1=da.LTC_FLOAT_1,i.rectAreaLTC2=da.LTC_FLOAT_2):(i.rectAreaLTC1=da.LTC_HALF_1,i.rectAreaLTC2=da.LTC_HALF_2)),i.ambient[0]=a,i.ambient[1]=o,i.ambient[2]=s;const y=i.hash;y.directionalLength===l&&y.pointLength===c&&y.spotLength===h&&y.rectAreaLength===d&&y.hemiLength===u&&y.numDirectionalShadows===p&&y.numPointShadows===f&&y.numSpotShadows===m&&y.numSpotMaps===g&&y.numLightProbes===w||(i.directional.length=l,i.spot.length=h,i.rectArea.length=d,i.point.length=c,i.hemi.length=u,i.directionalShadow.length=p,i.directionalShadowMap.length=p,i.pointShadow.length=f,i.pointShadowMap.length=f,i.spotShadow.length=m,i.spotShadowMap.length=m,i.directionalShadowMatrix.length=p,i.pointShadowMatrix.length=f,i.spotLightMatrix.length=m+g-v,i.spotLightMap.length=g,i.numSpotLightShadowsWithMaps=v,i.numLightProbes=w,y.directionalLength=l,y.pointLength=c,y.spotLength=h,y.rectAreaLength=d,y.hemiLength=u,y.numDirectionalShadows=p,y.numPointShadows=f,y.numSpotShadows=m,y.numSpotMaps=g,y.numLightProbes=w,i.version=As++)},setupView:function(e,t){let n=0,s=0,l=0,c=0,h=0;const d=t.matrixWorldInverse;for(let t=0,u=e.length;t=r.length?(a=new Rs(e),r.push(a)):a=r[i],a},dispose:function(){t=new WeakMap}}}class Is extends rr{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class Ns extends rr{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}function Ds(e,t,n){let i=new oa;const r=new ln,a=new ln,o=new Pn,s=new Is({depthPacking:3201}),l=new Ns,c={},h=n.maxTextureSize,d={[M]:T,[T]:M,[A]:2},u=new Gr({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ln},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),p=u.clone();p.defines.HORIZONTAL_PASS=1;const f=new yr;f.setAttribute("position",new lr(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const m=new Br(f,u),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=k;let v=this.type;function w(n,i){const a=t.update(m);u.defines.VSM_SAMPLES!==n.blurSamples&&(u.defines.VSM_SAMPLES=n.blurSamples,p.defines.VSM_SAMPLES=n.blurSamples,u.needsUpdate=!0,p.needsUpdate=!0),null===n.mapPass&&(n.mapPass=new Ln(r.x,r.y)),u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,e.setRenderTarget(n.mapPass),e.clear(),e.renderBufferDirect(i,null,a,u,m,null),p.uniforms.shadow_pass.value=n.mapPass.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,e.setRenderTarget(n.map),e.clear(),e.renderBufferDirect(i,null,a,p,m,null)}function y(t,n,i,r){let a=null;const o=!0===i.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==o)a=o;else if(a=!0===i.isPointLight?l:s,e.localClippingEnabled&&!0===n.clipShadows&&Array.isArray(n.clippingPlanes)&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0){const e=a.uuid,t=n.uuid;let i=c[e];void 0===i&&(i={},c[e]=i);let r=i[t];void 0===r&&(r=a.clone(),i[t]=r,n.addEventListener("dispose",x)),a=r}if(a.visible=n.visible,a.wireframe=n.wireframe,a.side=r===S?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:d[n.side],a.alphaMap=n.alphaMap,a.alphaTest=n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,!0===i.isPointLight&&!0===a.isMeshDistanceMaterial){e.properties.get(a).light=i}return a}function b(n,r,a,o,s){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&s===S)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);const i=t.update(n),l=n.material;if(Array.isArray(l)){const t=i.groups;for(let c=0,h=t.length;ch||r.y>h)&&(r.x>h&&(a.x=Math.floor(h/m.x),r.x=a.x*m.x,d.mapSize.x=a.x),r.y>h&&(a.y=Math.floor(h/m.y),r.y=a.y*m.y,d.mapSize.y=a.y)),null===d.map||!0===p||!0===f){const e=this.type!==S?{minFilter:pe,magFilter:pe}:{};null!==d.map&&d.map.dispose(),d.map=new Ln(r.x,r.y,e),d.map.texture.name=c.name+".shadowMap",d.camera.updateProjectionMatrix()}e.setRenderTarget(d.map),e.clear();const g=d.getViewportCount();for(let e=0;e=1):-1!==K.indexOf("OpenGL ES")&&(Y=parseFloat(/^OpenGL ES (\d)/.exec(K)[1]),X=Y>=2);let Z=null,J={};const Q=e.getParameter(e.SCISSOR_BOX),$=e.getParameter(e.VIEWPORT),ee=(new Pn).fromArray(Q),te=(new Pn).fromArray($);function ne(t,n,i,r){const a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let o=0;on||r.height>n)&&(i=n/Math.max(r.width,r.height)),i<1){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof VideoFrame&&e instanceof VideoFrame){const n=Math.floor(i*r.width),a=Math.floor(i*r.height);void 0===d&&(d=f(n,a));const o=t?f(n,a):d;o.width=n,o.height=a;return o.getContext("2d").drawImage(e,0,0,n,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+r.width+"x"+r.height+") to ("+n+"x"+a+")."),o}return"data"in e&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+r.width+"x"+r.height+")."),e}return e}function g(e){return e.generateMipmaps&&e.minFilter!==pe&&e.minFilter!==ge}function v(t){e.generateMipmap(t)}function w(n,i,r,a,o=!1){if(null!==n){if(void 0!==e[n])return e[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let s=i;if(i===e.RED&&(r===e.FLOAT&&(s=e.R32F),r===e.HALF_FLOAT&&(s=e.R16F),r===e.UNSIGNED_BYTE&&(s=e.R8)),i===e.RED_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.R8UI),r===e.UNSIGNED_SHORT&&(s=e.R16UI),r===e.UNSIGNED_INT&&(s=e.R32UI),r===e.BYTE&&(s=e.R8I),r===e.SHORT&&(s=e.R16I),r===e.INT&&(s=e.R32I)),i===e.RG&&(r===e.FLOAT&&(s=e.RG32F),r===e.HALF_FLOAT&&(s=e.RG16F),r===e.UNSIGNED_BYTE&&(s=e.RG8)),i===e.RG_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.RG8UI),r===e.UNSIGNED_SHORT&&(s=e.RG16UI),r===e.UNSIGNED_INT&&(s=e.RG32UI),r===e.BYTE&&(s=e.RG8I),r===e.SHORT&&(s=e.RG16I),r===e.INT&&(s=e.RG32I)),i===e.RGB&&r===e.UNSIGNED_INT_5_9_9_9_REV&&(s=e.RGB9_E5),i===e.RGBA){const t=o?Lt:bn.getTransfer(a);r===e.FLOAT&&(s=e.RGBA32F),r===e.HALF_FLOAT&&(s=e.RGBA16F),r===e.UNSIGNED_BYTE&&(s=t===It?e.SRGB8_ALPHA8:e.RGBA8),r===e.UNSIGNED_SHORT_4_4_4_4&&(s=e.RGBA4),r===e.UNSIGNED_SHORT_5_5_5_1&&(s=e.RGB5_A1)}return s!==e.R16F&&s!==e.R32F&&s!==e.RG16F&&s!==e.RG32F&&s!==e.RGBA16F&&s!==e.RGBA32F||t.get("EXT_color_buffer_float"),s}function y(t,n){let i;return t?null===n||n===Ee||n===Ce?i=e.DEPTH24_STENCIL8:n===Se?i=e.DEPTH32F_STENCIL8:n===_e&&(i=e.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===n||n===Ee||n===Ce?i=e.DEPTH_COMPONENT24:n===Se?i=e.DEPTH_COMPONENT32F:n===_e&&(i=e.DEPTH_COMPONENT16),i}function b(e,t){return!0===g(e)||e.isFramebufferTexture&&e.minFilter!==pe&&e.minFilter!==ge?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function x(e){const t=e.target;t.removeEventListener("dispose",x),function(e){const t=i.get(e);if(void 0===t.__webglInit)return;const n=e.source,r=u.get(n);if(r){const i=r[t.__cacheKey];i.usedTimes--,0===i.usedTimes&&k(e),0===Object.keys(r).length&&u.delete(n)}i.remove(e)}(t),t.isVideoTexture&&h.delete(t)}function _(t){const n=t.target;n.removeEventListener("dispose",_),function(t){const n=i.get(t);t.depthTexture&&t.depthTexture.dispose();if(t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let i=0;i0&&a.__version!==t.version){const e=t.image;if(null===e)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==e.complete)return void R(a,t,r);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.bindTexture(e.TEXTURE_2D,a.__webglTexture,e.TEXTURE0+r)}const M={[he]:e.REPEAT,[de]:e.CLAMP_TO_EDGE,[ue]:e.MIRRORED_REPEAT},T={[pe]:e.NEAREST,[fe]:e.NEAREST_MIPMAP_NEAREST,[me]:e.NEAREST_MIPMAP_LINEAR,[ge]:e.LINEAR,[ve]:e.LINEAR_MIPMAP_NEAREST,[we]:e.LINEAR_MIPMAP_LINEAR},A={[Bt]:e.NEVER,[Gt]:e.ALWAYS,[Ot]:e.LESS,[Ft]:e.LEQUAL,[zt]:e.EQUAL,[Vt]:e.GEQUAL,[Wt]:e.GREATER,[Ht]:e.NOTEQUAL};function C(n,a){if(a.type!==Se||!1!==t.has("OES_texture_float_linear")||a.magFilter!==ge&&a.magFilter!==ve&&a.magFilter!==me&&a.magFilter!==we&&a.minFilter!==ge&&a.minFilter!==ve&&a.minFilter!==me&&a.minFilter!==we||console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),e.texParameteri(n,e.TEXTURE_WRAP_S,M[a.wrapS]),e.texParameteri(n,e.TEXTURE_WRAP_T,M[a.wrapT]),n!==e.TEXTURE_3D&&n!==e.TEXTURE_2D_ARRAY||e.texParameteri(n,e.TEXTURE_WRAP_R,M[a.wrapR]),e.texParameteri(n,e.TEXTURE_MAG_FILTER,T[a.magFilter]),e.texParameteri(n,e.TEXTURE_MIN_FILTER,T[a.minFilter]),a.compareFunction&&(e.texParameteri(n,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(n,e.TEXTURE_COMPARE_FUNC,A[a.compareFunction])),!0===t.has("EXT_texture_filter_anisotropic")){if(a.magFilter===pe)return;if(a.minFilter!==me&&a.minFilter!==we)return;if(a.type===Se&&!1===t.has("OES_texture_float_linear"))return;if(a.anisotropy>1||i.get(a).__currentAnisotropy){const o=t.get("EXT_texture_filter_anisotropic");e.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,r.getMaxAnisotropy())),i.get(a).__currentAnisotropy=a.anisotropy}}}function P(t,n){let i=!1;void 0===t.__webglInit&&(t.__webglInit=!0,n.addEventListener("dispose",x));const r=n.source;let a=u.get(r);void 0===a&&(a={},u.set(r,a));const s=function(e){const t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}(n);if(s!==t.__cacheKey){void 0===a[s]&&(a[s]={texture:e.createTexture(),usedTimes:0},o.memory.textures++,i=!0),a[s].usedTimes++;const r=a[t.__cacheKey];void 0!==r&&(a[t.__cacheKey].usedTimes--,0===r.usedTimes&&k(n)),t.__cacheKey=s,t.__webglTexture=a[s].texture}return i}function R(t,o,s){let l=e.TEXTURE_2D;(o.isDataArrayTexture||o.isCompressedArrayTexture)&&(l=e.TEXTURE_2D_ARRAY),o.isData3DTexture&&(l=e.TEXTURE_3D);const c=P(t,o),h=o.source;n.bindTexture(l,t.__webglTexture,e.TEXTURE0+s);const d=i.get(h);if(h.version!==d.__version||!0===c){n.activeTexture(e.TEXTURE0+s);const t=bn.getPrimaries(bn.workingColorSpace),i=o.colorSpace===Tt?null:bn.getPrimaries(o.colorSpace),u=o.colorSpace===Tt||t===i?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,o.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,o.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,o.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,u);let p=m(o.image,!1,r.maxTextureSize);p=z(o,p);const f=a.convert(o.format,o.colorSpace),x=a.convert(o.type);let _,k=w(o.internalFormat,f,x,o.colorSpace,o.isVideoTexture);C(l,o);const E=o.mipmaps,S=!0!==o.isVideoTexture,M=void 0===d.__version||!0===c,T=h.dataReady,A=b(o,p);if(o.isDepthTexture)k=y(o.format===Be,o.type),M&&(S?n.texStorage2D(e.TEXTURE_2D,1,k,p.width,p.height):n.texImage2D(e.TEXTURE_2D,0,k,p.width,p.height,0,f,x,null));else if(o.isDataTexture)if(E.length>0){S&&M&&n.texStorage2D(e.TEXTURE_2D,A,k,E[0].width,E[0].height);for(let t=0,i=E.length;t0){const i=Bs(_.width,_.height,o.format,o.type);for(const r of o.layerUpdates){const a=_.data.subarray(r*i/_.data.BYTES_PER_ELEMENT,(r+1)*i/_.data.BYTES_PER_ELEMENT);n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,r,_.width,_.height,1,f,a,0,0)}o.clearLayerUpdates()}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,_.width,_.height,p.depth,f,_.data,0,0)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,t,k,_.width,_.height,p.depth,0,_.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else S?T&&n.texSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,_.width,_.height,p.depth,f,x,_.data):n.texImage3D(e.TEXTURE_2D_ARRAY,t,k,_.width,_.height,p.depth,0,f,x,_.data)}else{S&&M&&n.texStorage2D(e.TEXTURE_2D,A,k,E[0].width,E[0].height);for(let t=0,i=E.length;t0){const t=Bs(p.width,p.height,o.format,o.type);for(const i of o.layerUpdates){const r=p.data.subarray(i*t/p.data.BYTES_PER_ELEMENT,(i+1)*t/p.data.BYTES_PER_ELEMENT);n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,i,p.width,p.height,1,f,x,r)}o.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,p.width,p.height,p.depth,f,x,p.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,k,p.width,p.height,p.depth,0,f,x,p.data);else if(o.isData3DTexture)S?(M&&n.texStorage3D(e.TEXTURE_3D,A,k,p.width,p.height,p.depth),T&&n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,p.width,p.height,p.depth,f,x,p.data)):n.texImage3D(e.TEXTURE_3D,0,k,p.width,p.height,p.depth,0,f,x,p.data);else if(o.isFramebufferTexture){if(M)if(S)n.texStorage2D(e.TEXTURE_2D,A,k,p.width,p.height);else{let t=p.width,i=p.height;for(let r=0;r>=1,i>>=1}}else if(E.length>0){if(S&&M){const t=F(E[0]);n.texStorage2D(e.TEXTURE_2D,A,k,t.width,t.height)}for(let t=0,i=E.length;t>h),i=Math.max(1,r.height>>h);c===e.TEXTURE_3D||c===e.TEXTURE_2D_ARRAY?n.texImage3D(c,h,p,t,i,r.depth,0,d,u,null):n.texImage2D(c,h,p,t,i,0,d,u,null)}n.bindFramebuffer(e.FRAMEBUFFER,t),O(r)?s.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,l,c,i.get(o).__webglTexture,0,B(r)):(c===e.TEXTURE_2D||c>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&c<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,l,c,i.get(o).__webglTexture,h),n.bindFramebuffer(e.FRAMEBUFFER,null)}function I(t,n,i){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){const r=n.depthTexture,a=r&&r.isDepthTexture?r.type:null,o=y(n.stencilBuffer,a),l=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,c=B(n);O(n)?s.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,c,o,n.width,n.height):i?e.renderbufferStorageMultisample(e.RENDERBUFFER,c,o,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,o,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,l,e.RENDERBUFFER,t)}else{const t=n.textures;for(let r=0;r0&&!0===t.has("WEBGL_multisampled_render_to_texture")&&!1!==n.__useRenderToTexture}function z(e,t){const n=e.colorSpace,i=e.format,r=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||n!==Ct&&n!==Tt&&(bn.getTransfer(n)===It?i===Ie&&r===ye||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",n)),t}function F(e){return"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement?(c.width=e.naturalWidth||e.width,c.height=e.naturalHeight||e.height):"undefined"!=typeof VideoFrame&&e instanceof VideoFrame?(c.width=e.displayWidth,c.height=e.displayHeight):(c.width=e.width,c.height=e.height),c}this.allocateTextureUnit=function(){const e=E;return e>=r.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+r.maxTextures),E+=1,e},this.resetTextureUnits=function(){E=0},this.setTexture2D=S,this.setTexture2DArray=function(t,r){const a=i.get(t);t.version>0&&a.__version!==t.version?R(a,t,r):n.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+r)},this.setTexture3D=function(t,r){const a=i.get(t);t.version>0&&a.__version!==t.version?R(a,t,r):n.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+r)},this.setTextureCube=function(t,o){const s=i.get(t);t.version>0&&s.__version!==t.version?function(t,o,s){if(6!==o.image.length)return;const l=P(t,o),c=o.source;n.bindTexture(e.TEXTURE_CUBE_MAP,t.__webglTexture,e.TEXTURE0+s);const h=i.get(c);if(c.version!==h.__version||!0===l){n.activeTexture(e.TEXTURE0+s);const t=bn.getPrimaries(bn.workingColorSpace),i=o.colorSpace===Tt?null:bn.getPrimaries(o.colorSpace),d=o.colorSpace===Tt||t===i?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,o.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,o.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,o.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,d);const u=o.isCompressedTexture||o.image[0].isCompressedTexture,p=o.image[0]&&o.image[0].isDataTexture,f=[];for(let e=0;e<6;e++)f[e]=u||p?p?o.image[e].image:o.image[e]:m(o.image[e],!0,r.maxCubemapSize),f[e]=z(o,f[e]);const y=f[0],x=a.convert(o.format,o.colorSpace),_=a.convert(o.type),k=w(o.internalFormat,x,_,o.colorSpace),E=!0!==o.isVideoTexture,S=void 0===h.__version||!0===l,M=c.dataReady;let T,A=b(o,y);if(C(e.TEXTURE_CUBE_MAP,o),u){E&&S&&n.texStorage2D(e.TEXTURE_CUBE_MAP,A,k,y.width,y.height);for(let t=0;t<6;t++){T=f[t].mipmaps;for(let i=0;i0&&A++;const t=F(f[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,A,k,t.width,t.height)}for(let t=0;t<6;t++)if(p){E?M&&n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,f[t].width,f[t].height,x,_,f[t].data):n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,k,f[t].width,f[t].height,0,x,_,f[t].data);for(let i=0;i1;if(d||(void 0===l.__webglTexture&&(l.__webglTexture=e.createTexture()),l.__version=r.version,o.memory.textures++),h){s.__webglFramebuffer=[];for(let t=0;t<6;t++)if(r.mipmaps&&r.mipmaps.length>0){s.__webglFramebuffer[t]=[];for(let n=0;n0){s.__webglFramebuffer=[];for(let t=0;t0&&!1===O(t)){s.__webglMultisampledFramebuffer=e.createFramebuffer(),s.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,s.__webglMultisampledFramebuffer);for(let n=0;n0)for(let i=0;i0)for(let n=0;n0)if(!1===O(t)){const r=t.textures,a=t.width,o=t.height;let s=e.COLOR_BUFFER_BIT;const c=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,h=i.get(t),d=r.length>1;if(d)for(let t=0;ts+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!l.inputState.pinching&&o<=s-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==s&&e.gripSpace&&(r=t.getPose(e.gripSpace,n),null!==r&&(s.matrix.fromArray(r.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,r.linearVelocity?(s.hasLinearVelocity=!0,s.linearVelocity.copy(r.linearVelocity)):s.hasLinearVelocity=!1,r.angularVelocity?(s.hasAngularVelocity=!0,s.angularVelocity.copy(r.angularVelocity)):s.hasAngularVelocity=!1));null!==o&&(i=t.getPose(e.targetRaySpace,n),null===i&&null!==r&&(i=r),null!==i&&(o.matrix.fromArray(i.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,i.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(i.linearVelocity)):o.hasLinearVelocity=!1,i.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(i.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Hs)))}return null!==o&&(o.visible=null!==i),null!==s&&(s.visible=null!==r),null!==l&&(l.visible=null!==a),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){const n=new Ws;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}}class Gs{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t,n){if(null===this.texture){const i=new Cn;e.properties.get(i).__webglTexture=t.texture,t.depthNear==n.depthNear&&t.depthFar==n.depthFar||(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=i}}getMesh(e){if(null!==this.texture&&null===this.mesh){const t=e.cameras[0].viewport,n=new Gr({vertexShader:"\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}",fragmentShader:"\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}",uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Br(new ca(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class js extends Kt{constructor(e,t){super();const n=this;let i=null,r=1,a=null,o="local-floor",s=1,l=null,c=null,h=null,d=null,u=null,p=null;const f=new Gs,m=t.getContextAttributes();let g=null,v=null;const w=[],y=[],b=new ln;let x=null;const _=new Kr;_.layers.enable(1),_.viewport=new Pn;const k=new Kr;k.layers.enable(2),k.viewport=new Pn;const E=[_,k],S=new Fs;S.layers.enable(1),S.layers.enable(2);let M=null,T=null;function A(e){const t=y.indexOf(e.inputSource);if(-1===t)return;const n=w[t];void 0!==n&&(n.update(e.inputSource,e.frame,l||a),n.dispatchEvent({type:e.type,data:e.inputSource}))}function C(){i.removeEventListener("select",A),i.removeEventListener("selectstart",A),i.removeEventListener("selectend",A),i.removeEventListener("squeeze",A),i.removeEventListener("squeezestart",A),i.removeEventListener("squeezeend",A),i.removeEventListener("end",C),i.removeEventListener("inputsourceschange",P);for(let e=0;e=0&&(y[i]=null,w[i].disconnect(n))}for(let t=0;t=y.length){y.push(n),i=e;break}if(null===y[e]){y[e]=n,i=e;break}}if(-1===i)break}const r=w[i];r&&r.connect(n)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=w[e];return void 0===t&&(t=new Vs,w[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=w[e];return void 0===t&&(t=new Vs,w[e]=t),t.getGripSpace()},this.getHand=function(e){let t=w[e];return void 0===t&&(t=new Vs,w[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){r=e,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){o=e,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||a},this.setReferenceSpace=function(e){l=e},this.getBaseLayer=function(){return null!==d?d:u},this.getBinding=function(){return h},this.getFrame=function(){return p},this.getSession=function(){return i},this.setSession=async function(c){if(i=c,null!==i){if(g=e.getRenderTarget(),i.addEventListener("select",A),i.addEventListener("selectstart",A),i.addEventListener("selectend",A),i.addEventListener("squeeze",A),i.addEventListener("squeezestart",A),i.addEventListener("squeezeend",A),i.addEventListener("end",C),i.addEventListener("inputsourceschange",P),!0!==m.xrCompatible&&await t.makeXRCompatible(),x=e.getPixelRatio(),e.getSize(b),void 0===i.renderState.layers){const n={antialias:m.antialias,alpha:!0,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:r};u=new XRWebGLLayer(i,t,n),i.updateRenderState({baseLayer:u}),e.setPixelRatio(1),e.setSize(u.framebufferWidth,u.framebufferHeight,!1),v=new Ln(u.framebufferWidth,u.framebufferHeight,{format:Ie,type:ye,colorSpace:e.outputColorSpace,stencilBuffer:m.stencil})}else{let n=null,a=null,o=null;m.depth&&(o=m.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,n=m.stencil?Be:Ue,a=m.stencil?Ce:Ee);const s={colorFormat:t.RGBA8,depthFormat:o,scaleFactor:r};h=new XRWebGLBinding(i,t),d=h.createProjectionLayer(s),i.updateRenderState({layers:[d]}),e.setPixelRatio(1),e.setSize(d.textureWidth,d.textureHeight,!1),v=new Ln(d.textureWidth,d.textureHeight,{format:Ie,type:ye,depthTexture:new Xa(d.textureWidth,d.textureHeight,a,void 0,void 0,void 0,void 0,void 0,void 0,n),stencilBuffer:m.stencil,colorSpace:e.outputColorSpace,samples:m.antialias?4:0,resolveDepthBuffer:!1===d.ignoreDepthValues})}v.isXRRenderTarget=!0,this.setFoveation(s),l=null,a=await i.requestReferenceSpace(o),D.setContext(i),D.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==i)return i.environmentBlendMode},this.getDepthTexture=function(){return f.getDepthTexture()};const R=new Un,L=new Un;function I(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(null===i)return;null!==f.texture&&(e.near=f.depthNear,e.far=f.depthFar),S.near=k.near=_.near=e.near,S.far=k.far=_.far=e.far,M===S.near&&T===S.far||(i.updateRenderState({depthNear:S.near,depthFar:S.far}),M=S.near,T=S.far,_.near=M,_.far=T,k.near=M,k.far=T,_.updateProjectionMatrix(),k.updateProjectionMatrix(),e.updateProjectionMatrix());const t=e.parent,n=S.cameras;I(S,t);for(let e=0;e0&&(e.alphaTest.value=i.alphaTest);const r=t.get(i),a=r.envMap,o=r.envMapRotation;a&&(e.envMap.value=a,qs.copy(o),qs.x*=-1,qs.y*=-1,qs.z*=-1,a.isCubeTexture&&!1===a.isRenderTargetTexture&&(qs.y*=-1,qs.z*=-1),e.envMapRotation.value.setFromMatrix4(Xs.makeRotationFromEuler(qs)),e.flipEnvMap.value=a.isCubeTexture&&!1===a.isRenderTargetTexture?-1:1,e.reflectivity.value=i.reflectivity,e.ior.value=i.ior,e.refractionRatio.value=i.refractionRatio),i.lightMap&&(e.lightMap.value=i.lightMap,e.lightMapIntensity.value=i.lightMapIntensity,n(i.lightMap,e.lightMapTransform)),i.aoMap&&(e.aoMap.value=i.aoMap,e.aoMapIntensity.value=i.aoMapIntensity,n(i.aoMap,e.aoMapTransform))}return{refreshFogUniforms:function(t,n){n.color.getRGB(t.fogColor.value,Hr(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)},refreshMaterialUniforms:function(e,r,a,o,s){r.isMeshBasicMaterial||r.isMeshLambertMaterial?i(e,r):r.isMeshToonMaterial?(i(e,r),function(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}(e,r)):r.isMeshPhongMaterial?(i(e,r),function(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}(e,r)):r.isMeshStandardMaterial?(i(e,r),function(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform));e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform));t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}(e,r),r.isMeshPhysicalMaterial&&function(e,t,i){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform)));t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===T&&e.clearcoatNormalScale.value.negate()));t.dispersion>0&&(e.dispersion.value=t.dispersion);t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform)));t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=i.texture,e.transmissionSamplerSize.value.set(i.width,i.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor));t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform)));e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform));t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}(e,r,s)):r.isMeshMatcapMaterial?(i(e,r),function(e,t){t.matcap&&(e.matcap.value=t.matcap)}(e,r)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),function(e,n){const i=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(i.matrixWorld),e.nearDistance.value=i.shadow.camera.near,e.farDistance.value=i.shadow.camera.far}(e,r)):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}(e,r),r.isLineDashedMaterial&&function(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}(e,r)):r.isPointsMaterial?function(e,t,i,r){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*i,e.scale.value=.5*r,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,r,a,o):r.isSpriteMaterial?function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,r):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function Ks(e,t,n,i){let r={},a={},o=[];const s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function l(e,t,n,i){const r=e.value,a=t+"_"+n;if(void 0===i[a])return i[a]="number"==typeof r||"boolean"==typeof r?r:r.clone(),!0;{const e=i[a];if("number"==typeof r||"boolean"==typeof r){if(e!==r)return i[a]=r,!0}else if(!1===e.equals(r))return e.copy(r),!0}return!1}function c(e){const t={boundary:0,storage:0};return"number"==typeof e||"boolean"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",e),t}function h(t){const n=t.target;n.removeEventListener("dispose",h);const i=o.indexOf(n.__bindingPointIndex);o.splice(i,1),e.deleteBuffer(r[n.id]),delete r[n.id],delete a[n.id]}return{bind:function(e,t){const n=t.program;i.uniformBlockBinding(e,n)},update:function(n,d){let u=r[n.id];void 0===u&&(!function(e){const t=e.uniforms;let n=0;const i=16;for(let e=0,r=t.length;e0&&(n+=i-r);e.__size=n,e.__cache={}}(n),u=function(t){const n=function(){for(let e=0;e0),d=!!n.morphAttributes.position,u=!!n.morphAttributes.normal,p=!!n.morphAttributes.color;let f=Z;i.toneMapped&&(null!==k&&!0!==k.isXRRenderTarget||(f=y.toneMapping));const m=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,v=void 0!==m?m.length:0,w=te.get(i),b=g.state.lights;if(!0===H&&(!0===V||e!==S)){const t=e===S&&i.id===E;ue.setState(i,e,t)}let x=!1;i.version===w.__version?w.needsLights&&w.lightsStateVersion!==b.state.version||w.outputColorSpace!==s||r.isBatchedMesh&&!1===w.batching?x=!0:r.isBatchedMesh||!0!==w.batching?r.isBatchedMesh&&!0===w.batchingColor&&null===r.colorTexture||r.isBatchedMesh&&!1===w.batchingColor&&null!==r.colorTexture||r.isInstancedMesh&&!1===w.instancing?x=!0:r.isInstancedMesh||!0!==w.instancing?r.isSkinnedMesh&&!1===w.skinning?x=!0:r.isSkinnedMesh||!0!==w.skinning?r.isInstancedMesh&&!0===w.instancingColor&&null===r.instanceColor||r.isInstancedMesh&&!1===w.instancingColor&&null!==r.instanceColor||r.isInstancedMesh&&!0===w.instancingMorph&&null===r.morphTexture||r.isInstancedMesh&&!1===w.instancingMorph&&null!==r.morphTexture||w.envMap!==l||!0===i.fog&&w.fog!==a?x=!0:void 0===w.numClippingPlanes||w.numClippingPlanes===ue.numPlanes&&w.numIntersection===ue.numIntersection?(w.vertexAlphas!==c||w.vertexTangents!==h||w.morphTargets!==d||w.morphNormals!==u||w.morphColors!==p||w.toneMapping!==f||w.morphTargetsCount!==v)&&(x=!0):x=!0:x=!0:x=!0:x=!0:(x=!0,w.__version=i.version);let _=w.currentProgram;!0===x&&(_=Ze(i,t,r));let M=!1,T=!1,A=!1;const C=_.getUniforms(),P=w.uniforms;$.useProgram(_.program)&&(M=!0,T=!0,A=!0);i.id!==E&&(E=i.id,T=!0);if(M||S!==e){C.setValue(Se,"projectionMatrix",e.projectionMatrix),C.setValue(Se,"viewMatrix",e.matrixWorldInverse);const t=C.map.cameraPosition;void 0!==t&&t.setValue(Se,j.setFromMatrixPosition(e.matrixWorld)),Q.logarithmicDepthBuffer&&C.setValue(Se,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)&&C.setValue(Se,"isOrthographic",!0===e.isOrthographicCamera),S!==e&&(S=e,T=!0,A=!0)}if(r.isSkinnedMesh){C.setOptional(Se,r,"bindMatrix"),C.setOptional(Se,r,"bindMatrixInverse");const e=r.skeleton;e&&(null===e.boneTexture&&e.computeBoneTexture(),C.setValue(Se,"boneTexture",e.boneTexture,ne))}r.isBatchedMesh&&(C.setOptional(Se,r,"batchingTexture"),C.setValue(Se,"batchingTexture",r._matricesTexture,ne),C.setOptional(Se,r,"batchingIdTexture"),C.setValue(Se,"batchingIdTexture",r._indirectTexture,ne),C.setOptional(Se,r,"batchingColorTexture"),null!==r._colorsTexture&&C.setValue(Se,"batchingColorTexture",r._colorsTexture,ne));const R=n.morphAttributes;void 0===R.position&&void 0===R.normal&&void 0===R.color||me.update(r,n,_);(T||w.receiveShadow!==r.receiveShadow)&&(w.receiveShadow=r.receiveShadow,C.setValue(Se,"receiveShadow",r.receiveShadow));i.isMeshGouraudMaterial&&null!==i.envMap&&(P.envMap.value=l,P.flipEnvMap.value=l.isCubeTexture&&!1===l.isRenderTargetTexture?-1:1);i.isMeshStandardMaterial&&null===i.envMap&&null!==t.environment&&(P.envMapIntensity.value=t.environmentIntensity);T&&(C.setValue(Se,"toneMappingExposure",y.toneMappingExposure),w.needsLights&&(I=A,(L=P).ambientLightColor.needsUpdate=I,L.lightProbe.needsUpdate=I,L.directionalLights.needsUpdate=I,L.directionalLightShadows.needsUpdate=I,L.pointLights.needsUpdate=I,L.pointLightShadows.needsUpdate=I,L.spotLights.needsUpdate=I,L.spotLightShadows.needsUpdate=I,L.rectAreaLights.needsUpdate=I,L.hemisphereLights.needsUpdate=I),a&&!0===i.fog&&ce.refreshFogUniforms(P,a),ce.refreshMaterialUniforms(P,i,D,N,g.state.transmissionRenderTarget[e.id]),$o.upload(Se,Je(w),P,ne));var L,I;i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&($o.upload(Se,Je(w),P,ne),i.uniformsNeedUpdate=!1);i.isSpriteMaterial&&C.setValue(Se,"center",r.center);if(C.setValue(Se,"modelViewMatrix",r.modelViewMatrix),C.setValue(Se,"normalMatrix",r.normalMatrix),C.setValue(Se,"modelMatrix",r.matrixWorld),i.isShaderMaterial||i.isRawShaderMaterial){const e=i.uniformsGroups;for(let t=0,n=e.length;t{function n(){i.forEach((function(e){te.get(e).currentProgram.isReady()&&i.delete(e)})),0!==i.size?setTimeout(n,10):t(e)}null!==J.get("KHR_parallel_shader_compile")?n():setTimeout(n,10)}))};let Oe=null;function Fe(){Ge.stop()}function Ve(){Ge.start()}const Ge=new sa;function je(e,t,n,i){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)n=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)g.pushLight(e),e.castShadow&&g.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||W.intersectsSprite(e)){i&&q.setFromMatrixPosition(e.matrixWorld).applyMatrix4(G);const t=se.update(e),r=e.material;r.visible&&f.push(e,t,r,n,q.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||W.intersectsObject(e))){const t=se.update(e),r=e.material;if(i&&(void 0!==e.boundingSphere?(null===e.boundingSphere&&e.computeBoundingSphere(),q.copy(e.boundingSphere.center)):(null===t.boundingSphere&&t.computeBoundingSphere(),q.copy(t.boundingSphere.center)),q.applyMatrix4(e.matrixWorld).applyMatrix4(G)),Array.isArray(r)){const i=t.groups;for(let a=0,o=i.length;a0&&Ye(r,t,n),a.length>0&&Ye(a,t,n),o.length>0&&Ye(o,t,n),$.buffers.depth.setTest(!0),$.buffers.depth.setMask(!0),$.buffers.color.setMask(!0),$.setPolygonOffset(!1)}function Xe(e,t,n,i){if(null!==(!0===n.isScene?n.overrideMaterial:null))return;void 0===g.state.transmissionRenderTarget[i.id]&&(g.state.transmissionRenderTarget[i.id]=new Ln(1,1,{generateMipmaps:!0,type:J.has("EXT_color_buffer_half_float")||J.has("EXT_color_buffer_float")?Me:ye,minFilter:we,samples:4,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:bn.workingColorSpace}));const a=g.state.transmissionRenderTarget[i.id],o=i.viewport||A;a.setSize(o.z,o.w);const s=y.getRenderTarget();y.setRenderTarget(a),y.getClearColor(R),L=y.getClearAlpha(),L<1&&y.setClearColor(16777215,.5),Y?fe.render(n):y.clear();const l=y.toneMapping;y.toneMapping=Z;const c=i.viewport;if(void 0!==i.viewport&&(i.viewport=void 0),g.setupLightsView(i),!0===H&&ue.setGlobalState(y.clippingPlanes,i),Ye(e,n,i),ne.updateMultisampleRenderTarget(a),ne.updateRenderTargetMipmap(a),!1===J.has("WEBGL_multisampled_render_to_texture")){let e=!1;for(let r=0,a=t.length;r0)for(let t=0,a=n.length;t0&&Xe(i,r,e,t),Y&&fe.render(e),qe(f,e,t);null!==k&&(ne.updateMultisampleRenderTarget(k),ne.updateRenderTargetMipmap(k)),!0===e.isScene&&e.onAfterRender(y,e,t),xe.resetDefaultState(),E=-1,S=null,w.pop(),w.length>0?(g=w[w.length-1],!0===H&&ue.setGlobalState(y.clippingPlanes,g.state.camera)):g=null,v.pop(),f=v.length>0?v[v.length-1]:null},this.getActiveCubeFace=function(){return x},this.getActiveMipmapLevel=function(){return _},this.getRenderTarget=function(){return k},this.setRenderTargetTextures=function(e,t,n){te.get(e.texture).__webglTexture=t,te.get(e.depthTexture).__webglTexture=n;const i=te.get(e);i.__hasExternalTextures=!0,i.__autoAllocateDepthBuffer=void 0===n,i.__autoAllocateDepthBuffer||!0===J.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),i.__useRenderToTexture=!1)},this.setRenderTargetFramebuffer=function(e,t){const n=te.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=void 0===t},this.setRenderTarget=function(e,t=0,n=0){k=e,x=t,_=n;let i=!0,r=null,a=!1,o=!1;if(e){const s=te.get(e);void 0!==s.__useDefaultFramebuffer?($.bindFramebuffer(Se.FRAMEBUFFER,null),i=!1):void 0===s.__webglFramebuffer?ne.setupRenderTarget(e):s.__hasExternalTextures&&ne.rebindTextures(e,te.get(e.texture).__webglTexture,te.get(e.depthTexture).__webglTexture);const l=e.texture;(l.isData3DTexture||l.isDataArrayTexture||l.isCompressedArrayTexture)&&(o=!0);const c=te.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(r=Array.isArray(c[t])?c[t][n]:c[t],a=!0):r=e.samples>0&&!1===ne.useMultisampledRTT(e)?te.get(e).__webglMultisampledFramebuffer:Array.isArray(c)?c[n]:c,A.copy(e.viewport),C.copy(e.scissor),P=e.scissorTest}else A.copy(O).multiplyScalar(D).floor(),C.copy(z).multiplyScalar(D).floor(),P=F;if($.bindFramebuffer(Se.FRAMEBUFFER,r)&&i&&$.drawBuffers(e,r),$.viewport(A),$.scissor(C),$.setScissorTest(P),a){const i=te.get(e.texture);Se.framebufferTexture2D(Se.FRAMEBUFFER,Se.COLOR_ATTACHMENT0,Se.TEXTURE_CUBE_MAP_POSITIVE_X+t,i.__webglTexture,n)}else if(o){const i=te.get(e.texture),r=t||0;Se.framebufferTextureLayer(Se.FRAMEBUFFER,Se.COLOR_ATTACHMENT0,i.__webglTexture,n||0,r)}E=-1},this.readRenderTargetPixels=function(e,t,n,i,r,a,o){if(!e||!e.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let s=te.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==o&&(s=s[o]),s){$.bindFramebuffer(Se.FRAMEBUFFER,s);try{const o=e.texture,s=o.format,l=o.type;if(!Q.textureFormatReadable(s))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!Q.textureTypeReadable(l))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");t>=0&&t<=e.width-i&&n>=0&&n<=e.height-r&&Se.readPixels(t,n,i,r,be.convert(s),be.convert(l),a)}finally{const e=null!==k?te.get(k).__webglFramebuffer:null;$.bindFramebuffer(Se.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,i,r,a,o){if(!e||!e.isWebGLRenderTarget)throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let s=te.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==o&&(s=s[o]),s){$.bindFramebuffer(Se.FRAMEBUFFER,s);try{const o=e.texture,s=o.format,l=o.type;if(!Q.textureFormatReadable(s))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Q.textureTypeReadable(l))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");if(t>=0&&t<=e.width-i&&n>=0&&n<=e.height-r){const e=Se.createBuffer();Se.bindBuffer(Se.PIXEL_PACK_BUFFER,e),Se.bufferData(Se.PIXEL_PACK_BUFFER,a.byteLength,Se.STREAM_READ),Se.readPixels(t,n,i,r,be.convert(s),be.convert(l),0),Se.flush();const o=Se.fenceSync(Se.SYNC_GPU_COMMANDS_COMPLETE,0);await function(e,t,n){return new Promise((function(i,r){setTimeout((function a(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:r();break;case e.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:i()}}),n)}))}(Se,o,4);try{Se.bindBuffer(Se.PIXEL_PACK_BUFFER,e),Se.getBufferSubData(Se.PIXEL_PACK_BUFFER,0,a)}finally{Se.deleteBuffer(e),Se.deleteSync(o)}return a}}finally{const e=null!==k?te.get(k).__webglFramebuffer:null;$.bindFramebuffer(Se.FRAMEBUFFER,e)}}},this.copyFramebufferToTexture=function(e,t=null,n=0){!0!==e.isTexture&&(console.warn("WebGLRenderer: copyFramebufferToTexture function signature has changed."),t=arguments[0]||null,e=arguments[1]);const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),a=Math.floor(e.image.height*i),o=null!==t?t.x:0,s=null!==t?t.y:0;ne.setTexture2D(e,0),Se.copyTexSubImage2D(Se.TEXTURE_2D,n,0,0,o,s,r,a),$.unbindTexture()},this.copyTextureToTexture=function(e,t,n=null,i=null,r=0){let a,o,s,l,c,h;!0!==e.isTexture&&(console.warn("WebGLRenderer: copyTextureToTexture function signature has changed."),i=arguments[0]||null,e=arguments[1],t=arguments[2],r=arguments[3]||0,n=null),null!==n?(a=n.max.x-n.min.x,o=n.max.y-n.min.y,s=n.min.x,l=n.min.y):(a=e.image.width,o=e.image.height,s=0,l=0),null!==i?(c=i.x,h=i.y):(c=0,h=0);const d=be.convert(t.format),u=be.convert(t.type);ne.setTexture2D(t,0),Se.pixelStorei(Se.UNPACK_FLIP_Y_WEBGL,t.flipY),Se.pixelStorei(Se.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),Se.pixelStorei(Se.UNPACK_ALIGNMENT,t.unpackAlignment);const p=Se.getParameter(Se.UNPACK_ROW_LENGTH),f=Se.getParameter(Se.UNPACK_IMAGE_HEIGHT),m=Se.getParameter(Se.UNPACK_SKIP_PIXELS),g=Se.getParameter(Se.UNPACK_SKIP_ROWS),v=Se.getParameter(Se.UNPACK_SKIP_IMAGES),w=e.isCompressedTexture?e.mipmaps[r]:e.image;Se.pixelStorei(Se.UNPACK_ROW_LENGTH,w.width),Se.pixelStorei(Se.UNPACK_IMAGE_HEIGHT,w.height),Se.pixelStorei(Se.UNPACK_SKIP_PIXELS,s),Se.pixelStorei(Se.UNPACK_SKIP_ROWS,l),e.isDataTexture?Se.texSubImage2D(Se.TEXTURE_2D,r,c,h,a,o,d,u,w.data):e.isCompressedTexture?Se.compressedTexSubImage2D(Se.TEXTURE_2D,r,c,h,w.width,w.height,d,w.data):Se.texSubImage2D(Se.TEXTURE_2D,r,c,h,a,o,d,u,w),Se.pixelStorei(Se.UNPACK_ROW_LENGTH,p),Se.pixelStorei(Se.UNPACK_IMAGE_HEIGHT,f),Se.pixelStorei(Se.UNPACK_SKIP_PIXELS,m),Se.pixelStorei(Se.UNPACK_SKIP_ROWS,g),Se.pixelStorei(Se.UNPACK_SKIP_IMAGES,v),0===r&&t.generateMipmaps&&Se.generateMipmap(Se.TEXTURE_2D),$.unbindTexture()},this.copyTextureToTexture3D=function(e,t,n=null,i=null,r=0){let a,o,s,l,c,h,d,u,p;!0!==e.isTexture&&(console.warn("WebGLRenderer: copyTextureToTexture3D function signature has changed."),n=arguments[0]||null,i=arguments[1]||null,e=arguments[2],t=arguments[3],r=arguments[4]||0);const f=e.isCompressedTexture?e.mipmaps[r]:e.image;null!==n?(a=n.max.x-n.min.x,o=n.max.y-n.min.y,s=n.max.z-n.min.z,l=n.min.x,c=n.min.y,h=n.min.z):(a=f.width,o=f.height,s=f.depth,l=0,c=0,h=0),null!==i?(d=i.x,u=i.y,p=i.z):(d=0,u=0,p=0);const m=be.convert(t.format),g=be.convert(t.type);let v;if(t.isData3DTexture)ne.setTexture3D(t,0),v=Se.TEXTURE_3D;else{if(!t.isDataArrayTexture&&!t.isCompressedArrayTexture)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");ne.setTexture2DArray(t,0),v=Se.TEXTURE_2D_ARRAY}Se.pixelStorei(Se.UNPACK_FLIP_Y_WEBGL,t.flipY),Se.pixelStorei(Se.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),Se.pixelStorei(Se.UNPACK_ALIGNMENT,t.unpackAlignment);const w=Se.getParameter(Se.UNPACK_ROW_LENGTH),y=Se.getParameter(Se.UNPACK_IMAGE_HEIGHT),b=Se.getParameter(Se.UNPACK_SKIP_PIXELS),x=Se.getParameter(Se.UNPACK_SKIP_ROWS),_=Se.getParameter(Se.UNPACK_SKIP_IMAGES);Se.pixelStorei(Se.UNPACK_ROW_LENGTH,f.width),Se.pixelStorei(Se.UNPACK_IMAGE_HEIGHT,f.height),Se.pixelStorei(Se.UNPACK_SKIP_PIXELS,l),Se.pixelStorei(Se.UNPACK_SKIP_ROWS,c),Se.pixelStorei(Se.UNPACK_SKIP_IMAGES,h),e.isDataTexture||e.isData3DTexture?Se.texSubImage3D(v,r,d,u,p,a,o,s,m,g,f.data):t.isCompressedArrayTexture?Se.compressedTexSubImage3D(v,r,d,u,p,a,o,s,m,f.data):Se.texSubImage3D(v,r,d,u,p,a,o,s,m,g,f),Se.pixelStorei(Se.UNPACK_ROW_LENGTH,w),Se.pixelStorei(Se.UNPACK_IMAGE_HEIGHT,y),Se.pixelStorei(Se.UNPACK_SKIP_PIXELS,b),Se.pixelStorei(Se.UNPACK_SKIP_ROWS,x),Se.pixelStorei(Se.UNPACK_SKIP_IMAGES,_),0===r&&t.generateMipmaps&&Se.generateMipmap(v),$.unbindTexture()},this.initRenderTarget=function(e){void 0===te.get(e).__webglFramebuffer&&ne.setupRenderTarget(e)},this.initTexture=function(e){e.isCubeTexture?ne.setTextureCube(e,0):e.isData3DTexture?ne.setTexture3D(e,0):e.isDataArrayTexture||e.isCompressedArrayTexture?ne.setTexture2DArray(e,0):ne.setTexture2D(e,0),$.unbindTexture()},this.resetState=function(){x=0,_=0,k=null,$.reset(),xe.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return Xt}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;const t=this.getContext();t.drawingBufferColorSpace=e===Pt?"display-p3":"srgb",t.unpackColorSpace=bn.workingColorSpace===Rt?"display-p3":"srgb"}}class Js{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new tr(e),this.density=t}clone(){return new Js(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class Qs extends zi{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new _i,this.environmentIntensity=1,this.environmentRotation=new _i,this.overrideMaterial=null,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),1!==this.environmentIntensity&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class $s{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=jt,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.version=0,this.uuid=en()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}get updateRange(){return mn("THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let i=0,r=this.stride;i0){const n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;ei)return;Ll.applyMatrix4(e.matrixWorld);const s=t.ray.origin.distanceTo(Ll);return st.far?void 0:{distance:s,point:Il.clone().applyMatrix4(e.matrixWorld),index:r,face:null,faceIndex:null,object:e}}const Ul=new Un,Bl=new Un;class Ol extends Nl{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const e=this.geometry;if(null===e.index){const t=e.attributes.position,n=[];for(let e=0,i=t.count;e0){const n=e[t[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;er.far)return;a.push({distance:l,distanceToRay:Math.sqrt(s),point:n,index:t,face:null,object:o})}}class Xl{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){const n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){const t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){const t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const t=[];let n,i=this.getPoint(0),r=0;t.push(0);for(let a=1;a<=e;a++)n=this.getPoint(a/e),r+=n.distanceTo(i),t.push(r),i=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const n=this.getLengths();let i=0;const r=n.length;let a;a=t||e*n[r-1];let o,s=0,l=r-1;for(;s<=l;)if(i=Math.floor(s+(l-s)/2),o=n[i]-a,o<0)s=i+1;else{if(!(o>0)){l=i;break}l=i-1}if(i=l,n[i]===a)return i/(r-1);const c=n[i];return(i+(a-c)/(n[i+1]-c))/(r-1)}getTangent(e,t){const n=1e-4;let i=e-n,r=e+n;i<0&&(i=0),r>1&&(r=1);const a=this.getPoint(i),o=this.getPoint(r),s=t||(a.isVector2?new ln:new Un);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){const n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t){const n=new Un,i=[],r=[],a=[],o=new Un,s=new ui;for(let t=0;t<=e;t++){const n=t/e;i[t]=this.getTangentAt(n,new Un)}r[0]=new Un,a[0]=new Un;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),d=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),d<=l&&n.set(0,0,1),o.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],o),a[0].crossVectors(i[0],r[0]);for(let t=1;t<=e;t++){if(r[t]=r[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(i[t-1],i[t]),o.length()>Number.EPSILON){o.normalize();const e=Math.acos(tn(i[t-1].dot(i[t]),-1,1));r[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(i[t],r[t])}if(!0===t){let t=Math.acos(tn(r[0].dot(r[e]),-1,1));t/=e,i[0].dot(o.crossVectors(r[0],r[e]))>0&&(t=-t);for(let n=1;n<=e;n++)r[n].applyMatrix4(s.makeRotationAxis(i[n],t*n)),a[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:a}}clone(){return(new this.constructor).copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.6,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class Yl extends Xl{constructor(e=0,t=0,n=1,i=1,r=0,a=2*Math.PI,o=!1,s=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=a,this.aClockwise=o,this.aRotation=s}getPoint(e,t=new ln){const n=t,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const a=Math.abs(r)i;)r-=i;ri.length-2?i.length-1:a+1],h=i[a>i.length-3?i.length-1:a+2];return n.set(ec(o,s.x,l.x,c.x,h.x),ec(o,s.y,l.y,c.y,h.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?o=i[(l-1)%r]:(Zl.subVectors(i[0],i[1]).add(i[0]),o=Zl);const h=i[l%r],d=i[(l+1)%r];if(this.closed||l+2=n){const e=i[r]-n,a=this.curves[r],o=a.getLength(),s=0===o?0:1-e/o;return a.getPointAt(s,t)}r++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let n=0,i=this.curves.length;n1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t0){const e=l.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class dc extends yr{constructor(e=1,t=32,n=0,i=2*Math.PI){super(),this.type="CircleGeometry",this.parameters={radius:e,segments:t,thetaStart:n,thetaLength:i},t=Math.max(3,t);const r=[],a=[],o=[],s=[],l=new Un,c=new ln;a.push(0,0,0),o.push(0,0,1),s.push(.5,.5);for(let r=0,h=3;r<=t;r++,h+=3){const d=n+r/t*i;l.x=e*Math.cos(d),l.y=e*Math.sin(d),a.push(l.x,l.y,l.z),o.push(0,0,1),c.x=(a[h]/e+1)/2,c.y=(a[h+1]/e+1)/2,s.push(c.x,c.y)}for(let e=1;e<=t;e++)r.push(e,e+1,0);this.setIndex(r),this.setAttribute("position",new dr(a,3)),this.setAttribute("normal",new dr(o,3)),this.setAttribute("uv",new dr(s,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new dc(e.radius,e.segments,e.thetaStart,e.thetaLength)}}class uc extends hc{constructor(e){super(e),this.uuid=en(),this.type="Shape",this.holes=[]}getPointsHoles(e){const t=[];for(let n=0,i=this.holes.length;n80*n){s=c=e[0],l=h=e[1];for(let t=n;tc&&(c=d),u>h&&(h=u);p=Math.max(c-s,h-l),p=0!==p?32767/p:0}return gc(a,o,n,s,l,p,0),o};function fc(e,t,n,i,r){let a,o;if(r===function(e,t,n,i){let r=0;for(let a=t,o=n-i;a0)for(a=t;a=t;a-=i)o=Dc(a,e[a],e[a+1],o);return o&&Cc(o,o.next)&&(Uc(o),o=o.next),o}function mc(e,t){if(!e)return e;t||(t=e);let n,i=e;do{if(n=!1,i.steiner||!Cc(i,i.next)&&0!==Ac(i.prev,i,i.next))i=i.next;else{if(Uc(i),i=t=i.prev,i===i.next)break;n=!0}}while(n||i!==t);return t}function gc(e,t,n,i,r,a,o){if(!e)return;!o&&a&&function(e,t,n,i){let r=e;do{0===r.z&&(r.z=Ec(r.x,r.y,t,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,function(e){let t,n,i,r,a,o,s,l,c=1;do{for(n=e,e=null,a=null,o=0;n;){for(o++,i=n,s=0,t=0;t0||l>0&&i;)0!==s&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,s--):(r=i,i=i.nextZ,l--),a?a.nextZ=r:e=r,r.prevZ=a,a=r;n=i}a.nextZ=null,c*=2}while(o>1)}(r)}(e,i,r,a);let s,l,c=e;for(;e.prev!==e.next;)if(s=e.prev,l=e.next,a?wc(e,i,r,a):vc(e))t.push(s.i/n|0),t.push(e.i/n|0),t.push(l.i/n|0),Uc(e),e=l.next,c=l.next;else if((e=l)===c){o?1===o?gc(e=yc(mc(e),t,n),t,n,i,r,a,2):2===o&&bc(e,t,n,i,r,a):gc(mc(e),t,n,i,r,a,1);break}}function vc(e){const t=e.prev,n=e,i=e.next;if(Ac(t,n,i)>=0)return!1;const r=t.x,a=n.x,o=i.x,s=t.y,l=n.y,c=i.y,h=ra?r>o?r:o:a>o?a:o,p=s>l?s>c?s:c:l>c?l:c;let f=i.next;for(;f!==t;){if(f.x>=h&&f.x<=u&&f.y>=d&&f.y<=p&&Mc(r,s,a,l,o,c,f.x,f.y)&&Ac(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function wc(e,t,n,i){const r=e.prev,a=e,o=e.next;if(Ac(r,a,o)>=0)return!1;const s=r.x,l=a.x,c=o.x,h=r.y,d=a.y,u=o.y,p=sl?s>c?s:c:l>c?l:c,g=h>d?h>u?h:u:d>u?d:u,v=Ec(p,f,t,n,i),w=Ec(m,g,t,n,i);let y=e.prevZ,b=e.nextZ;for(;y&&y.z>=v&&b&&b.z<=w;){if(y.x>=p&&y.x<=m&&y.y>=f&&y.y<=g&&y!==r&&y!==o&&Mc(s,h,l,d,c,u,y.x,y.y)&&Ac(y.prev,y,y.next)>=0)return!1;if(y=y.prevZ,b.x>=p&&b.x<=m&&b.y>=f&&b.y<=g&&b!==r&&b!==o&&Mc(s,h,l,d,c,u,b.x,b.y)&&Ac(b.prev,b,b.next)>=0)return!1;b=b.nextZ}for(;y&&y.z>=v;){if(y.x>=p&&y.x<=m&&y.y>=f&&y.y<=g&&y!==r&&y!==o&&Mc(s,h,l,d,c,u,y.x,y.y)&&Ac(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=w;){if(b.x>=p&&b.x<=m&&b.y>=f&&b.y<=g&&b!==r&&b!==o&&Mc(s,h,l,d,c,u,b.x,b.y)&&Ac(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function yc(e,t,n){let i=e;do{const r=i.prev,a=i.next.next;!Cc(r,a)&&Pc(r,i,i.next,a)&&Ic(r,a)&&Ic(a,r)&&(t.push(r.i/n|0),t.push(i.i/n|0),t.push(a.i/n|0),Uc(i),Uc(i.next),i=e=a),i=i.next}while(i!==e);return mc(i)}function bc(e,t,n,i,r,a){let o=e;do{let e=o.next.next;for(;e!==o.prev;){if(o.i!==e.i&&Tc(o,e)){let s=Nc(o,e);return o=mc(o,o.next),s=mc(s,s.next),gc(o,t,n,i,r,a,0),void gc(s,t,n,i,r,a,0)}e=e.next}o=o.next}while(o!==e)}function xc(e,t){return e.x-t.x}function _c(e,t){const n=function(e,t){let n,i=t,r=-1/0;const a=e.x,o=e.y;do{if(o<=i.y&&o>=i.next.y&&i.next.y!==i.y){const e=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=a&&e>r&&(r=e,n=i.x=i.x&&i.x>=l&&a!==i.x&&Mc(on.x||i.x===n.x&&kc(n,i)))&&(n=i,d=h)),i=i.next}while(i!==s);return n}(e,t);if(!n)return t;const i=Nc(n,e);return mc(i,i.next),mc(n,n.next)}function kc(e,t){return Ac(e.prev,e,t.prev)<0&&Ac(t.next,e,e.next)<0}function Ec(e,t,n,i,r){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-n)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-i)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function Sc(e){let t=e,n=e;do{(t.x=(e-o)*(a-s)&&(e-o)*(i-s)>=(n-o)*(t-s)&&(n-o)*(a-s)>=(r-o)*(i-s)}function Tc(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&Pc(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&(Ic(e,t)&&Ic(t,e)&&function(e,t){let n=e,i=!1;const r=(e.x+t.x)/2,a=(e.y+t.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&r<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==e);return i}(e,t)&&(Ac(e.prev,e,t.prev)||Ac(e,t.prev,t))||Cc(e,t)&&Ac(e.prev,e,e.next)>0&&Ac(t.prev,t,t.next)>0)}function Ac(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function Cc(e,t){return e.x===t.x&&e.y===t.y}function Pc(e,t,n,i){const r=Lc(Ac(e,t,n)),a=Lc(Ac(e,t,i)),o=Lc(Ac(n,i,e)),s=Lc(Ac(n,i,t));return r!==a&&o!==s||(!(0!==r||!Rc(e,n,t))||(!(0!==a||!Rc(e,i,t))||(!(0!==o||!Rc(n,e,i))||!(0!==s||!Rc(n,t,i)))))}function Rc(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function Lc(e){return e>0?1:e<0?-1:0}function Ic(e,t){return Ac(e.prev,e,e.next)<0?Ac(e,t,e.next)>=0&&Ac(e,e.prev,t)>=0:Ac(e,t,e.prev)<0||Ac(e,e.next,t)<0}function Nc(e,t){const n=new Bc(e.i,e.x,e.y),i=new Bc(t.i,t.x,t.y),r=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=r,r.prev=n,i.next=n,n.prev=i,a.next=i,i.prev=a,i}function Dc(e,t,n,i){const r=new Bc(e,t,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Uc(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Bc(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Oc{static area(e){const t=e.length;let n=0;for(let i=t-1,r=0;r2&&e[t-1].equals(e[0])&&e.pop()}function Fc(e,t){for(let n=0;n0)&&u.push(t,r,l),(e!==n-1||s0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class jc extends rr{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new tr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new tr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ln(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new _i,this.combine=X,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}function qc(e,t,n){return!e||!n&&e.constructor===t?e:"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e)}function Xc(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Yc(e){const t=e.length,n=new Array(t);for(let e=0;e!==t;++e)n[e]=e;return n.sort((function(t,n){return e[t]-e[n]})),n}function Kc(e,t,n){const i=e.length,r=new e.constructor(i);for(let a=0,o=0;o!==i;++a){const i=n[a]*t;for(let n=0;n!==t;++n)r[o++]=e[i+n]}return r}function Zc(e,t,n,i){let r=1,a=e[0];for(;void 0!==a&&void 0===a[i];)a=e[r++];if(void 0===a)return;let o=a[i];if(void 0!==o)if(Array.isArray(o))do{o=a[i],void 0!==o&&(t.push(a.time),n.push.apply(n,o)),a=e[r++]}while(void 0!==a);else if(void 0!==o.toArray)do{o=a[i],void 0!==o&&(t.push(a.time),o.toArray(n,n.length)),a=e[r++]}while(void 0!==a);else do{o=a[i],void 0!==o&&(t.push(a.time),n.push(o)),a=e[r++]}while(void 0!==a)}class Jc{constructor(e,t,n,i){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new t.constructor(n),this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){const t=this.parameterPositions;let n=this._cachedIndex,i=t[n],r=t[n-1];e:{t:{let a;n:{i:if(!(e=r)break e;{const o=t[1];e=r)break t}a=n,n=0}}for(;n>>1;et;)--a;if(++a,0!==r||a!==i){r>=a&&(a=Math.max(a,1),r=a-1);const e=this.getValueSize();this.times=n.slice(r,a),this.values=this.values.slice(r*e,a*e)}return this}validate(){let e=!0;const t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let t=0;t!==r;t++){const i=n[t];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,t,i),e=!1;break}if(null!==a&&a>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,t,i,a),e=!1;break}a=i}if(void 0!==i&&Xc(i))for(let t=0,n=i.length;t!==n;++t){const n=i[t];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,t,n),e=!1;break}}return e}optimize(){const e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),i=this.getInterpolation()===kt,r=e.length-1;let a=1;for(let o=1;o0){e[a]=e[r];for(let e=r*n,i=a*n,o=0;o!==n;++o)t[i+o]=t[e+o];++a}return a!==e.length?(this.times=e.slice(0,a),this.values=t.slice(0,a*n)):(this.times=e,this.values=t),this}clone(){const e=this.times.slice(),t=this.values.slice(),n=new(0,this.constructor)(this.name,e,t);return n.createInterpolant=this.createInterpolant,n}}th.prototype.TimeBufferType=Float32Array,th.prototype.ValueBufferType=Float32Array,th.prototype.DefaultInterpolation=_t;class nh extends th{constructor(e,t,n){super(e,t,n)}}nh.prototype.ValueTypeName="bool",nh.prototype.ValueBufferType=Array,nh.prototype.DefaultInterpolation=xt,nh.prototype.InterpolantFactoryMethodLinear=void 0,nh.prototype.InterpolantFactoryMethodSmooth=void 0;class ih extends th{}ih.prototype.ValueTypeName="color";class rh extends th{}rh.prototype.ValueTypeName="number";class ah extends Jc{constructor(e,t,n,i){super(e,t,n,i)}interpolate_(e,t,n,i){const r=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(i-t);let l=e*o;for(let e=l+o;l!==e;l+=4)Dn.slerpFlat(r,0,a,l-o,a,l,s);return r}}class oh extends th{InterpolantFactoryMethodLinear(e){return new ah(this.times,this.values,this.getValueSize(),e)}}oh.prototype.ValueTypeName="quaternion",oh.prototype.InterpolantFactoryMethodSmooth=void 0;class sh extends th{constructor(e,t,n){super(e,t,n)}}sh.prototype.ValueTypeName="string",sh.prototype.ValueBufferType=Array,sh.prototype.DefaultInterpolation=xt,sh.prototype.InterpolantFactoryMethodLinear=void 0,sh.prototype.InterpolantFactoryMethodSmooth=void 0;class lh extends th{}lh.prototype.ValueTypeName="vector";class ch{constructor(e="",t=-1,n=[],i=2500){this.name=e,this.tracks=n,this.duration=t,this.blendMode=i,this.uuid=en(),this.duration<0&&this.resetDuration()}static parse(e){const t=[],n=e.tracks,i=1/(e.fps||1);for(let e=0,r=n.length;e!==r;++e)t.push(hh(n[e]).scale(i));const r=new this(e.name,e.duration,t,e.blendMode);return r.uuid=e.uuid,r}static toJSON(e){const t=[],n=e.tracks,i={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,i=n.length;e!==i;++e)t.push(th.toJSON(n[e]));return i}static CreateFromMorphTargetSequence(e,t,n,i){const r=t.length,a=[];for(let e=0;e1){const e=a[1];let t=i[e];t||(i[e]=t=[]),t.push(n)}}const a=[];for(const e in i)a.push(this.CreateFromMorphTargetSequence(e,i[e],t,n));return a}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(e,t,n,i,r){if(0!==n.length){const a=[],o=[];Zc(n,a,o,i),0!==a.length&&r.push(new e(t,a,o))}},i=[],r=e.name||"default",a=e.fps||30,o=e.blendMode;let s=e.length||-1;const l=e.hierarchy||[];for(let e=0;e{t&&t(r),this.manager.itemEnd(e)}),0),r;if(void 0!==mh[e])return void mh[e].push({onLoad:t,onProgress:n,onError:i});mh[e]=[],mh[e].push({onLoad:t,onProgress:n,onError:i});const a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),o=this.mimeType,s=this.responseType;fetch(a).then((t=>{if(200===t.status||0===t.status){if(0===t.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===t.body||void 0===t.body.getReader)return t;const n=mh[e],i=t.body.getReader(),r=t.headers.get("X-File-Size")||t.headers.get("Content-Length"),a=r?parseInt(r):0,o=0!==a;let s=0;const l=new ReadableStream({start(e){!function t(){i.read().then((({done:i,value:r})=>{if(i)e.close();else{s+=r.byteLength;const i=new ProgressEvent("progress",{lengthComputable:o,loaded:s,total:a});for(let e=0,t=n.length;e{e.error(t)}))}()}});return new Response(l)}throw new gh(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)})).then((e=>{switch(s){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then((e=>(new DOMParser).parseFromString(e,o)));case"json":return e.json();default:if(void 0===o)return e.text();{const t=/charset="?([^;"\s]*)"?/i.exec(o),n=t&&t[1]?t[1].toLowerCase():void 0,i=new TextDecoder(n);return e.arrayBuffer().then((e=>i.decode(e)))}}})).then((t=>{dh.add(e,t);const n=mh[e];delete mh[e];for(let e=0,i=n.length;e{const n=mh[e];if(void 0===n)throw this.manager.itemError(e),t;delete mh[e];for(let e=0,i=n.length;e{this.manager.itemEnd(e)})),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}}class wh extends fh{constructor(e){super(e)}load(e,t,n,i){void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);const r=this,a=dh.get(e);if(void 0!==a)return r.manager.itemStart(e),setTimeout((function(){t&&t(a),r.manager.itemEnd(e)}),0),a;const o=un("img");function s(){c(),dh.add(e,this),t&&t(this),r.manager.itemEnd(e)}function l(t){c(),i&&i(t),r.manager.itemError(e),r.manager.itemEnd(e)}function c(){o.removeEventListener("load",s,!1),o.removeEventListener("error",l,!1)}return o.addEventListener("load",s,!1),o.addEventListener("error",l,!1),"data:"!==e.slice(0,5)&&void 0!==this.crossOrigin&&(o.crossOrigin=this.crossOrigin),r.manager.itemStart(e),o.src=e,o}}class yh extends fh{constructor(e){super(e)}load(e,t,n,i){const r=new Cn,a=new wh(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(e,(function(e){r.image=e,r.needsUpdate=!0,void 0!==t&&t(r)}),n,i),r}}class bh extends zi{constructor(e,t=1){super(),this.isLight=!0,this.type="Light",this.color=new tr(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){const t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,void 0!==this.groundColor&&(t.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(t.object.distance=this.distance),void 0!==this.angle&&(t.object.angle=this.angle),void 0!==this.decay&&(t.object.decay=this.decay),void 0!==this.penumbra&&(t.object.penumbra=this.penumbra),void 0!==this.shadow&&(t.object.shadow=this.shadow.toJSON()),void 0!==this.target&&(t.object.target=this.target.uuid),t}}class xh extends bh{constructor(e,t,n){super(e,n),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(zi.DEFAULT_UP),this.updateMatrix(),this.groundColor=new tr(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}}const _h=new ui,kh=new Un,Eh=new Un;class Sh{constructor(e){this.camera=e,this.intensity=1,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new ln(512,512),this.map=null,this.mapPass=null,this.matrix=new ui,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new oa,this._frameExtents=new ln(1,1),this._viewportCount=1,this._viewports=[new Pn(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){const t=this.camera,n=this.matrix;kh.setFromMatrixPosition(e.matrixWorld),t.position.copy(kh),Eh.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(Eh),t.updateMatrixWorld(),_h.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(_h),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(_h)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.intensity=e.intensity,this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const e={};return 1!==this.intensity&&(e.intensity=this.intensity),0!==this.bias&&(e.bias=this.bias),0!==this.normalBias&&(e.normalBias=this.normalBias),1!==this.radius&&(e.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}}class Mh extends Sh{constructor(){super(new Kr(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){const t=this.camera,n=2*$t*e.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=e.distance||t.far;n===t.fov&&i===t.aspect&&r===t.far||(t.fov=n,t.aspect=i,t.far=r,t.updateProjectionMatrix()),super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}}class Th extends bh{constructor(e,t,n=0,i=Math.PI/3,r=0,a=2){super(e,t),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(zi.DEFAULT_UP),this.updateMatrix(),this.target=new zi,this.distance=n,this.angle=i,this.penumbra=r,this.decay=a,this.map=null,this.shadow=new Mh}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}}const Ah=new ui,Ch=new Un,Ph=new Un;class Rh extends Sh{constructor(){super(new Kr(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new ln(4,2),this._viewportCount=6,this._viewports=[new Pn(2,1,1,1),new Pn(0,1,1,1),new Pn(3,1,1,1),new Pn(1,1,1,1),new Pn(3,0,1,1),new Pn(1,0,1,1)],this._cubeDirections=[new Un(1,0,0),new Un(-1,0,0),new Un(0,0,1),new Un(0,0,-1),new Un(0,1,0),new Un(0,-1,0)],this._cubeUps=[new Un(0,1,0),new Un(0,1,0),new Un(0,1,0),new Un(0,1,0),new Un(0,0,1),new Un(0,0,-1)]}updateMatrices(e,t=0){const n=this.camera,i=this.matrix,r=e.distance||n.far;r!==n.far&&(n.far=r,n.updateProjectionMatrix()),Ch.setFromMatrixPosition(e.matrixWorld),n.position.copy(Ch),Ph.copy(n.position),Ph.add(this._cubeDirections[t]),n.up.copy(this._cubeUps[t]),n.lookAt(Ph),n.updateMatrixWorld(),i.makeTranslation(-Ch.x,-Ch.y,-Ch.z),Ah.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Ah)}}class Lh extends bh{constructor(e,t,n=0,i=2){super(e,t),this.isPointLight=!0,this.type="PointLight",this.distance=n,this.decay=i,this.shadow=new Rh}get power(){return 4*this.intensity*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}}class Ih extends Sh{constructor(){super(new _a(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class Nh extends bh{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(zi.DEFAULT_UP),this.updateMatrix(),this.target=new zi,this.shadow=new Ih}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}}class Dh{static decodeText(e){if(console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."),"undefined"!=typeof TextDecoder)return(new TextDecoder).decode(e);let t="";for(let n=0,i=e.length;n{t&&t(n),r.manager.itemEnd(e)})).catch((e=>{i&&i(e)})):(setTimeout((function(){t&&t(a),r.manager.itemEnd(e)}),0),a);const o={};o.credentials="anonymous"===this.crossOrigin?"same-origin":"include",o.headers=this.requestHeader;const s=fetch(e,o).then((function(e){return e.blob()})).then((function(e){return createImageBitmap(e,Object.assign(r.options,{colorSpaceConversion:"none"}))})).then((function(n){return dh.add(e,n),t&&t(n),r.manager.itemEnd(e),n})).catch((function(t){i&&i(t),dh.remove(e),r.manager.itemError(e),r.manager.itemEnd(e)}));dh.add(e,s),r.manager.itemStart(e)}}const Bh="\\[\\]\\.:\\/",Oh=new RegExp("["+Bh+"]","g"),zh="[^"+Bh+"]",Fh="[^"+Bh.replace("\\.","")+"]",Wh=new RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",zh)+/(WCOD+)?/.source.replace("WCOD",Fh)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",zh)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",zh)+"$"),Hh=["material","materials","bones","map"];class Vh{constructor(e,t,n){this.path=t,this.parsedPath=n||Vh.parseTrackName(t),this.node=Vh.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,n){return e&&e.isAnimationObjectGroup?new Vh.Composite(e,t,n):new Vh(e,t,n)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(Oh,"")}static parseTrackName(e){const t=Wh.exec(e);if(null===t)throw new Error("PropertyBinding: Cannot parse trackName: "+e);const n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const e=n.nodeName.substring(i+1);-1!==Hh.indexOf(e)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=e)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return n}static findNode(e,t){if(void 0===t||""===t||"."===t||-1===t||t===e.name||t===e.uuid)return e;if(e.skeleton){const n=e.skeleton.getBoneByName(t);if(void 0!==n)return n}if(e.children){const n=function(e){for(let i=0;iNumber.EPSILON){if(l<0&&(n=t[a],s=-s,o=t[r],l=-l),e.yo.y)continue;if(e.y===n.y){if(e.x===n.x)return!0}else{const t=l*(e.x-n.x)-s*(e.y-n.y);if(0===t)return!0;if(t<0)continue;i=!i}}else{if(e.y!==n.y)continue;if(o.x<=e.x&&e.x<=n.x||n.x<=e.x&&e.x<=o.x)return!0}}return i}const n=Oc.isClockWise,i=this.subPaths;if(0===i.length)return[];let r,a,o;const s=[];if(1===i.length)return a=i[0],o=new uc,o.curves=a.curves,s.push(o),s;let l=!n(i[0].getPoints());l=e?!l:l;const c=[],h=[];let d,u,p=[],f=0;h[f]=void 0,p[f]=[];for(let t=0,o=i.length;t1){let e=!1,n=0;for(let e=0,t=h.length;e0&&!1===e&&(p=c)}for(let e=0,t=h.length;e{this.context.decodeAudioData(r.response,(e=>{n(e)}),(()=>{cd(this,Qh,"m",e).call(this,t.slice(1),n)}))},r.send()}},od=function(e){var t;let n=Math.min(Math.max(e.getSettingFloat(Jh.SoundEffectVolume),0),1);Number.isNaN(n)&&(n=0),null==cd(this,id,"f")&&null!=this.context&&null!=this.destinationMaster?(ld(this,id,this.context.createGain(),"f"),cd(this,id,"f").gain.value=n,cd(this,id,"f").connect(this.destinationMaster)):null===(t=cd(this,id,"f"))||void 0===t||t.gain.setTargetAtTime(n,0,.1)},sd=function(e,t,n){if(t){if(null==cd(this,td,"f")){const e=this.getBuffer("music");if(null!=e&&null!=this.context&&null!=this.destinationMaster){const t=this.context.createBufferSource();t.buffer=e,t.loop=!0;const n=this.context.createGain();n.gain.value=0,t.connect(n),n.connect(this.destinationMaster),t.start(0),ld(this,td,{source:t,gain:n},"f")}}else{let e=Math.min(Math.max(n.getSettingFloat(Jh.MusicVolume),0),1);Number.isNaN(e)&&(e=0),cd(this,td,"f").gain.gain.setTargetAtTime(.25*e,0,.5)}ld(this,nd,0,"f")}else null!=cd(this,td,"f")&&(cd(this,td,"f").gain.gain.setTargetAtTime(0,0,.5),cd(this,nd,"f")>=5?(cd(this,td,"f").source.stop(),ld(this,td,null,"f")):ld(this,nd,cd(this,nd,"f")+e,"f"))};const hd=class{constructor(e){Qh.add(this),$h.set(this,void 0),this.context=null,ed.set(this,new Map),td.set(this,null),nd.set(this,0),id.set(this,null),rd.set(this,null),ld(this,$h,e,"f");try{const e=new(window.AudioContext||window.webkitAudioContext);if("running"!=e.state){const t=["click","contextmenu","auxclick","dblclick","mousedown","mouseup","pointerup","touchend","keydown","keyup"],n=()=>{e.resume();for(let e=0;e{cd(this,$h,"f").loadedResource(),null==t?(console.warn('Audio "'+e+'" failed to load'),cd(this,ed,"f").set(e,null)):cd(this,ed,"f").set(e,t)}))}getBuffer(e){return null==this.context?null:cd(this,ed,"f").has(e)?cd(this,ed,"f").get(e):null}playUIClick(){const e=this.getBuffer("click");if(null!=e&&null!=this.context&&null!=this.destinationSfx){const t=this.context.createBufferSource();t.buffer=e;const n=this.context.createGain();n.gain.value=.0075,t.connect(n),n.connect(this.destinationSfx),t.start(0)}}refreshListener(e){if(null!=this.context){const t=new Un,n=new Dn,i=new Un;e.camera.matrix.decompose(t,n,i);const r=this.context.listener;r.positionX&&r.positionY&&r.positionZ?(r.positionX.value=t.x,r.positionY.value=t.y,r.positionZ.value=t.z):r.setPosition(t.x,t.y,t.z);const a=new Un(0,0,-1);a.applyQuaternion(n);const o=new Un(0,1,0);o.applyQuaternion(n),r.forwardX&&r.forwardY&&r.forwardZ&&r.upX&&r.upY&&r.upZ?(r.forwardX.value=a.x,r.forwardY.value=a.y,r.forwardZ.value=a.z,r.upX.value=o.x,r.upY.value=o.y,r.upZ.value=o.z):r.setOrientation(a.x,a.y,a.z,o.x,o.y,o.z)}}update(e,t,n,i){this.refreshListener(n),cd(this,Qh,"m",od).call(this,i),cd(this,Qh,"m",sd).call(this,e,t,i)}};function dd(e,t=!1){const n=null!==e[0].index,i=new Set(Object.keys(e[0].attributes)),r=new Set(Object.keys(e[0].morphAttributes)),a={},o={},s=e[0].morphTargetsRelative,l=new yr;let c=0;for(let h=0;h=2.0 are supported.")));const l=new cu(r,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&void 0===o[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}l.setExtensions(a),l.setPlugins(o),l.parse(n,i)}parseAsync(e,t){const n=this;return new Promise((function(i,r){n.parse(e,t,i,r)}))}}function md(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}const gd={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class vd{constructor(e){this.parser=e,this.name=gd.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let n=0,i=t.length;n=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,r.source,a)}}class Rd{constructor(e){this.parser=e,this.name=gd.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,i=n.json,r=i.textures[e];if(!r.extensions||!r.extensions[t])return null;const a=r.extensions[t],o=i.images[a.source];let s=n.textureLoader;if(o.uri){const e=n.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then((function(r){if(r)return n.loadTextureImage(e,a.source,s);if(i.extensionsRequired&&i.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return n.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class Ld{constructor(e){this.parser=e,this.name=gd.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,i=n.json,r=i.textures[e];if(!r.extensions||!r.extensions[t])return null;const a=r.extensions[t],o=i.images[a.source];let s=n.textureLoader;if(o.uri){const e=n.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then((function(r){if(r)return n.loadTextureImage(e,a.source,s);if(i.extensionsRequired&&i.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return n.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class Id{constructor(e){this.name=gd.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const e=n.extensions[this.name],i=this.parser.getDependency("buffer",e.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return i.then((function(t){const n=e.byteOffset||0,i=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,i);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then((function(e){return e.buffer})):r.ready.then((function(){const t=new ArrayBuffer(a*o);return r.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t}))}))}return null}}class Nd{constructor(e){this.name=gd.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||void 0===n.mesh)return null;const i=t.meshes[n.mesh];for(const e of i.primitives)if(e.mode!==jd.TRIANGLES&&e.mode!==jd.TRIANGLE_STRIP&&e.mode!==jd.TRIANGLE_FAN&&void 0!==e.mode)return null;const r=n.extensions[this.name].attributes,a=[],o={};for(const e in r)a.push(this.parser.getDependency("accessor",r[e]).then((t=>(o[e]=t,o[e]))));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then((e=>{const t=e.pop(),n=t.isGroup?t.children:[t],i=e[0].count,r=[];for(const e of n){const t=new ui,n=new Un,a=new Dn,s=new Un(1,1,1),l=new Sl(e.geometry,e.material,i);for(let e=0;e-1,a=r?e.match(/Firefox\/([0-9]+)\./)[1]:-1}"undefined"==typeof createImageBitmap||n&&i<17||r&&a<98?this.textureLoader=new yh(this.options.manager):this.textureLoader=new Uh(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new vh(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const n=this,i=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(e){return e._markDefs&&e._markDefs()})),Promise.all(this._invokeAll((function(e){return e.beforeRoot&&e.beforeRoot()}))).then((function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])})).then((function(t){const a={scene:t[0][i.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:i.asset,parser:n,userData:{}};return nu(r,a,i),iu(a,i),Promise.all(n._invokeAll((function(e){return e.afterRoot&&e.afterRoot(a)}))).then((function(){for(const e of a.scenes)e.updateMatrixWorld();e(a)}))})).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,i=t.length;n{const n=this.associations.get(e);null!=n&&this.associations.set(t,n);for(const[n,i]of e.children.entries())r(i,t.children[n])};return r(n,i),i.name+="_instance_"+e.uses[t]++,i}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let n=0;n=2&&p.setY(t,h[e*a+1]),a>=3&&p.setZ(t,h[e*a+2]),a>=4&&p.setW(t,h[e*a+3]),a>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return p}))}loadTexture(e){const t=this.json,n=this.options,i=t.textures[e].source,r=t.images[i];let a=this.textureLoader;if(r.uri){const e=n.manager.getHandler(r.uri);null!==e&&(a=e)}return this.loadTextureImage(e,i,a)}loadTextureImage(e,t,n){const i=this,r=this.json,a=r.textures[e],o=r.images[t],s=(o.uri||o.bufferView)+":"+a.sampler;if(this.textureCache[s])return this.textureCache[s];const l=this.loadImageSource(t,n).then((function(t){t.flipY=!1,t.name=a.name||o.name||"",""===t.name&&"string"==typeof o.uri&&!1===o.uri.startsWith("data:image/")&&(t.name=o.uri);const n=(r.samplers||{})[a.sampler]||{};return t.magFilter=Xd[n.magFilter]||ge,t.minFilter=Xd[n.minFilter]||we,t.wrapS=Yd[n.wrapS]||he,t.wrapT=Yd[n.wrapT]||he,i.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[s]=l,l}loadImageSource(e,t){const n=this,i=this.json,r=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((e=>e.clone()));const a=i.images[e],o=self.URL||self.webkitURL;let s=a.uri||"",l=!1;if(void 0!==a.bufferView)s=n.getDependency("bufferView",a.bufferView).then((function(e){l=!0;const t=new Blob([e],{type:a.mimeType});return s=o.createObjectURL(t),s}));else if(void 0===a.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const c=Promise.resolve(s).then((function(e){return new Promise((function(n,i){let a=n;!0===t.isImageBitmapLoader&&(a=function(e){const t=new Cn(e);t.needsUpdate=!0,n(t)}),t.load(Dh.resolveURL(e,r.path),a,void 0,i)}))})).then((function(e){var t;return!0===l&&o.revokeObjectURL(s),iu(e,a),e.userData.mimeType=a.mimeType||((t=a.uri).search(/\.jpe?g($|\?)/i)>0||0===t.search(/^data\:image\/jpeg/)?"image/jpeg":t.search(/\.webp($|\?)/i)>0||0===t.search(/^data\:image\/webp/)?"image/webp":"image/png"),e})).catch((function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",s),e}));return this.sourceCache[e]=c,c}assignTexture(e,t,n,i){const r=this;return this.getDependency("texture",n.index).then((function(a){if(!a)return null;if(void 0!==n.texCoord&&n.texCoord>0&&((a=a.clone()).channel=n.texCoord),r.extensions[gd.KHR_TEXTURE_TRANSFORM]){const e=void 0!==n.extensions?n.extensions[gd.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=r.associations.get(a);a=r.extensions[gd.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),r.associations.set(a,t)}}return void 0!==i&&(a.colorSpace=i),e[t]=a,a}))}assignFinalMaterial(e){const t=e.geometry;let n=e.material;const i=void 0===t.attributes.tangent,r=void 0!==t.attributes.color,a=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+n.uuid;let t=this.cache.get(e);t||(t=new Fl,rr.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,t.sizeAttenuation=!1,this.cache.add(e,t)),n=t}else if(e.isLine){const e="LineBasicMaterial:"+n.uuid;let t=this.cache.get(e);t||(t=new Ml,rr.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,this.cache.add(e,t)),n=t}if(i||r||a){let e="ClonedMaterial:"+n.uuid+":";i&&(e+="derivative-tangents:"),r&&(e+="vertex-colors:"),a&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=n.clone(),r&&(t.vertexColors=!0),a&&(t.flatShading=!0),i&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}e.material=n}getMaterialType(){return Vc}loadMaterial(e){const t=this,n=this.json,i=this.extensions,r=n.materials[e];let a;const o={},s=[];if((r.extensions||{})[gd.KHR_MATERIALS_UNLIT]){const e=i[gd.KHR_MATERIALS_UNLIT];a=e.getMaterialType(),s.push(e.extendParams(o,r,t))}else{const n=r.pbrMetallicRoughness||{};if(o.color=new tr(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){const e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],Ct),o.opacity=e[3]}void 0!==n.baseColorTexture&&s.push(t.assignTexture(o,"map",n.baseColorTexture,At)),o.metalness=void 0!==n.metallicFactor?n.metallicFactor:1,o.roughness=void 0!==n.roughnessFactor?n.roughnessFactor:1,void 0!==n.metallicRoughnessTexture&&(s.push(t.assignTexture(o,"metalnessMap",n.metallicRoughnessTexture)),s.push(t.assignTexture(o,"roughnessMap",n.metallicRoughnessTexture))),a=this._invokeOne((function(t){return t.getMaterialType&&t.getMaterialType(e)})),s.push(Promise.all(this._invokeAll((function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)}))))}!0===r.doubleSided&&(o.side=2);const l=r.alphaMode||$d;if(l===tu?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,l===eu&&(o.alphaTest=void 0!==r.alphaCutoff?r.alphaCutoff:.5)),void 0!==r.normalTexture&&a!==ar&&(s.push(t.assignTexture(o,"normalMap",r.normalTexture)),o.normalScale=new ln(1,1),void 0!==r.normalTexture.scale)){const e=r.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==r.occlusionTexture&&a!==ar&&(s.push(t.assignTexture(o,"aoMap",r.occlusionTexture)),void 0!==r.occlusionTexture.strength&&(o.aoMapIntensity=r.occlusionTexture.strength)),void 0!==r.emissiveFactor&&a!==ar){const e=r.emissiveFactor;o.emissive=(new tr).setRGB(e[0],e[1],e[2],Ct)}return void 0!==r.emissiveTexture&&a!==ar&&s.push(t.assignTexture(o,"emissiveMap",r.emissiveTexture,At)),Promise.all(s).then((function(){const n=new a(o);return r.name&&(n.name=r.name),iu(n,r),t.associations.set(n,{materials:e}),r.extensions&&nu(i,n,r),n}))}createUniqueName(e){const t=Vh.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,n=this.extensions,i=this.primitiveCache;function r(e){return n[gd.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then((function(n){return hu(n,e,t)}))}const a=[];for(let n=0,o=e.length;n0&&ru(d,r),d.name=t.createUniqueName(r.name||"mesh_"+e),iu(d,r),h.extensions&&nu(i,d,h),t.assignFinalMaterial(d),l.push(d)}for(let n=0,i=l.length;n1?new Ws:1===t.length?t[0]:new zi,o!==t[0])for(let e=0,n=t.length;e{const t=new Map;for(const[e,n]of i.associations)(e instanceof rr||e instanceof Cn)&&t.set(e,n);return e.traverse((e=>{const n=i.associations.get(e);null!=n&&t.set(e,n)})),t})(r),r}))}_createAnimationTracks(e,t,n,i,r){const a=[],o=e.name?e.name:e.uuid,s=[];let l;switch(Jd[r.path]===Jd.weights?e.traverse((function(e){e.morphTargetInfluences&&s.push(e.name?e.name:e.uuid)})):s.push(o),Jd[r.path]){case Jd.weights:l=rh;break;case Jd.rotation:l=oh;break;case Jd.position:case Jd.scale:l=lh;break;default:if(1===n.itemSize)l=rh;else l=lh}const c=void 0!==i.interpolation?Qd[i.interpolation]:_t,h=this._getArrayFromAccessor(n);for(let e=0,n=s.length;e=0;--t){const n=Uu(this,Ru,"f")[t];n.vy+=15*e,n.x+=n.vx*e,n.y+=n.vy*e,n.z+=n.vz*e,n.lifetime-=e,n.lifetime<=0&&Uu(this,Ru,"f").splice(t,1)}for(let e=0;e{e.loadedResource()})),"f",Nu)}}Au=Bu,Cu=new WeakMap,Pu=new WeakMap,Ru=new WeakMap,Lu=new WeakMap,Iu=new WeakMap,Nu={value:null};const Ou=Bu;var zu,Fu,Wu,Hu,Vu,Gu,ju,qu,Xu,Yu,Ku,Zu,Ju=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Qu=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Fu=new WeakMap,Wu=new WeakMap,Hu=new WeakMap,Vu=new WeakMap,Gu=new WeakMap,ju=new WeakMap,qu=new WeakMap,Xu=new WeakMap,Yu=new WeakMap,Ku=new WeakMap,zu=new WeakSet,Zu=function(e,t,n,i){const r=new jh(e,t,n,i),a=Qu(this,Hu,"f").shortRaycast(r);if(null!=a)return a;const o=Qu(this,Wu,"f").raycast(r);return null!=o?o:null};const $u=class{constructor(e,t,n){zu.add(this),Fu.set(this,void 0),Wu.set(this,void 0),Hu.set(this,void 0),Vu.set(this,void 0),Gu.set(this,void 0),ju.set(this,void 0),qu.set(this,1e3),Xu.set(this,0),Yu.set(this,null),Ku.set(this,null),Ju(this,Fu,e,"f"),Ju(this,Wu,t,"f"),Ju(this,Hu,n,"f");const i=new yr;Ju(this,Gu,new Float32Array(6*Qu(this,qu,"f")*3),"f"),Ju(this,ju,new lr(Qu(this,Gu,"f"),3),"f"),i.setAttribute("position",Qu(this,ju,"f"));const r=new ar({color:1118481,side:2,polygonOffset:!0,polygonOffsetFactor:-1,polygonOffsetUnits:0});Ju(this,Vu,new Br(i,r),"f"),Qu(this,Vu,"f").frustumCulled=!1,Qu(this,Fu,"f").scene.add(Qu(this,Vu,"f"))}dispose(){Qu(this,Vu,"f").geometry.dispose(),Qu(this,Vu,"f").material.dispose(),Qu(this,Fu,"f").scene.remove(Qu(this,Vu,"f"))}clear(){for(let e=0;e=Qu(this,qu,"f")-1&&Ju(this,Xu,0,"f")}Ju(this,Yu,l,"f"),Ju(this,Ku,c,"f")}else this.break()}};var ep,tp=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},np=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class ip{constructor(e){if(ep.set(this,0),null!=e){if(!Number.isSafeInteger(e))throw"Frames is not a safe integer";tp(this,ep,e,"f")}}get numberOfFrames(){return np(this,ep,"f")}get time(){return np(this,ep,"f")/1e3}increment(){var e;tp(this,ep,(e=np(this,ep,"f"),++e),"f")}difference(e){return new ip(np(this,ep,"f")-np(e,ep,"f"))}lessThan(e){return np(this,ep,"f")np(e,ep,"f")}lessOrEqual(e){return np(this,ep,"f")<=np(e,ep,"f")}greaterOrEqual(e){return np(this,ep,"f")>=np(e,ep,"f")}equals(e){return np(this,ep,"f")==np(e,ep,"f")}isNegative(){return np(this,ep,"f")<0}clone(){const e=new ip;return tp(e,ep,np(this,ep,"f"),"f"),e}}ep=new WeakMap;const rp=ip;function ap(e){let t=e.length;for(;--t>=0;)e[t]=0}const op=256,sp=286,lp=30,cp=15,hp=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),dp=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),up=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),pp=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),fp=new Array(576);ap(fp);const mp=new Array(60);ap(mp);const gp=new Array(512);ap(gp);const vp=new Array(256);ap(vp);const wp=new Array(29);ap(wp);const yp=new Array(lp);function bp(e,t,n,i,r){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=i,this.max_length=r,this.has_stree=e&&e.length}let xp,_p,kp;function Ep(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}ap(yp);const Sp=e=>e<256?gp[e]:gp[256+(e>>>7)],Mp=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},Tp=(e,t,n)=>{e.bi_valid>16-n?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<{Tp(e,n[2*t],n[2*t+1])},Cp=(e,t)=>{let n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1},Pp=(e,t,n)=>{const i=new Array(16);let r,a,o=0;for(r=1;r<=cp;r++)o=o+n[r-1]<<1,i[r]=o;for(a=0;a<=t;a++){let t=e[2*a+1];0!==t&&(e[2*a]=Cp(i[t]++,t))}},Rp=e=>{let t;for(t=0;t{e.bi_valid>8?Mp(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},Ip=(e,t,n,i)=>{const r=2*t,a=2*n;return e[r]{const i=e.heap[n];let r=n<<1;for(;r<=e.heap_len&&(r{let i,r,a,o,s=0;if(0!==e.sym_next)do{i=255&e.pending_buf[e.sym_buf+s++],i+=(255&e.pending_buf[e.sym_buf+s++])<<8,r=e.pending_buf[e.sym_buf+s++],0===i?Ap(e,r,t):(a=vp[r],Ap(e,a+op+1,t),o=hp[a],0!==o&&(r-=wp[a],Tp(e,r,o)),i--,a=Sp(i),Ap(e,a,n),o=dp[a],0!==o&&(i-=yp[a],Tp(e,i,o)))}while(s{const n=t.dyn_tree,i=t.stat_desc.static_tree,r=t.stat_desc.has_stree,a=t.stat_desc.elems;let o,s,l,c=-1;for(e.heap_len=0,e.heap_max=573,o=0;o>1;o>=1;o--)Np(e,n,o);l=a;do{o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],Np(e,n,1),s=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=s,n[2*l]=n[2*o]+n[2*s],e.depth[l]=(e.depth[o]>=e.depth[s]?e.depth[o]:e.depth[s])+1,n[2*o+1]=n[2*s+1]=l,e.heap[1]=l++,Np(e,n,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const n=t.dyn_tree,i=t.max_code,r=t.stat_desc.static_tree,a=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,s=t.stat_desc.extra_base,l=t.stat_desc.max_length;let c,h,d,u,p,f,m=0;for(u=0;u<=cp;u++)e.bl_count[u]=0;for(n[2*e.heap[e.heap_max]+1]=0,c=e.heap_max+1;c<573;c++)h=e.heap[c],u=n[2*n[2*h+1]+1]+1,u>l&&(u=l,m++),n[2*h+1]=u,h>i||(e.bl_count[u]++,p=0,h>=s&&(p=o[h-s]),f=n[2*h],e.opt_len+=f*(u+p),a&&(e.static_len+=f*(r[2*h+1]+p)));if(0!==m){do{for(u=l-1;0===e.bl_count[u];)u--;e.bl_count[u]--,e.bl_count[u+1]+=2,e.bl_count[l]--,m-=2}while(m>0);for(u=l;0!==u;u--)for(h=e.bl_count[u];0!==h;)d=e.heap[--c],d>i||(n[2*d+1]!==u&&(e.opt_len+=(u-n[2*d+1])*n[2*d],n[2*d+1]=u),h--)}})(e,t),Pp(n,c,e.bl_count)},Bp=(e,t,n)=>{let i,r,a=-1,o=t[1],s=0,l=7,c=4;for(0===o&&(l=138,c=3),t[2*(n+1)+1]=65535,i=0;i<=n;i++)r=o,o=t[2*(i+1)+1],++s{let i,r,a=-1,o=t[1],s=0,l=7,c=4;for(0===o&&(l=138,c=3),i=0;i<=n;i++)if(r=o,o=t[2*(i+1)+1],!(++s{Tp(e,0+(i?1:0),3),Lp(e),Mp(e,n),Mp(e,~n),n&&e.pending_buf.set(e.window.subarray(t,t+n),e.pending),e.pending+=n};var Wp=(e,t,n,i)=>{let r,a,o=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,n=4093624447;for(t=0;t<=31;t++,n>>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t{let t;for(Bp(e,e.dyn_ltree,e.l_desc.max_code),Bp(e,e.dyn_dtree,e.d_desc.max_code),Up(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*pp[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),r=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=r&&(r=a)):r=a=n+5,n+4<=r&&-1!==t?Fp(e,t,n,i):4===e.strategy||a===r?(Tp(e,2+(i?1:0),3),Dp(e,fp,mp)):(Tp(e,4+(i?1:0),3),((e,t,n,i)=>{let r;for(Tp(e,t-257,5),Tp(e,n-1,5),Tp(e,i-4,4),r=0;r{zp||((()=>{let e,t,n,i,r;const a=new Array(16);for(n=0,i=0;i<28;i++)for(wp[i]=n,e=0;e<1<>=7;i(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=n,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(vp[n]+op+1)]++,e.dyn_dtree[2*Sp(t)]++),e.sym_next===e.sym_end),_tr_align:e=>{Tp(e,2,3),Ap(e,256,fp),(e=>{16===e.bi_valid?(Mp(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}};var Vp=(e,t,n,i)=>{let r=65535&e,a=e>>>16&65535,o=0;for(;0!==n;){o=n>2e3?2e3:n,n-=o;do{r=r+t[i++]|0,a=a+r|0}while(--o);r%=65521,a%=65521}return r|a<<16};const Gp=new Uint32Array((()=>{let e,t=[];for(var n=0;n<256;n++){e=n;for(var i=0;i<8;i++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t})());var jp=(e,t,n,i)=>{const r=Gp,a=i+n;e^=-1;for(let n=i;n>>8^r[255&(e^t[n])];return~e},qp={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Xp={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Yp,_tr_stored_block:Kp,_tr_flush_block:Zp,_tr_tally:Jp,_tr_align:Qp}=Hp,{Z_NO_FLUSH:$p,Z_PARTIAL_FLUSH:ef,Z_FULL_FLUSH:tf,Z_FINISH:nf,Z_BLOCK:rf,Z_OK:af,Z_STREAM_END:of,Z_STREAM_ERROR:sf,Z_DATA_ERROR:lf,Z_BUF_ERROR:cf,Z_DEFAULT_COMPRESSION:hf,Z_FILTERED:df,Z_HUFFMAN_ONLY:uf,Z_RLE:pf,Z_FIXED:ff,Z_DEFAULT_STRATEGY:mf,Z_UNKNOWN:gf,Z_DEFLATED:vf}=Xp,wf=258,yf=262,bf=42,xf=113,_f=666,kf=(e,t)=>(e.msg=qp[t],t),Ef=e=>2*e-(e>4?9:0),Sf=e=>{let t=e.length;for(;--t>=0;)e[t]=0},Mf=e=>{let t,n,i,r=e.w_size;t=e.hash_size,i=t;do{n=e.head[--i],e.head[i]=n>=r?n-r:0}while(--t);t=r,i=t;do{n=e.prev[--i],e.prev[i]=n>=r?n-r:0}while(--t)};let Tf=(e,t,n)=>(t<{const t=e.state;let n=t.pending;n>e.avail_out&&(n=e.avail_out),0!==n&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+n),e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))},Cf=(e,t)=>{Zp(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Af(e.strm)},Pf=(e,t)=>{e.pending_buf[e.pending++]=t},Rf=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},Lf=(e,t,n,i)=>{let r=e.avail_in;return r>i&&(r=i),0===r?0:(e.avail_in-=r,t.set(e.input.subarray(e.next_in,e.next_in+r),n),1===e.state.wrap?e.adler=Vp(e.adler,t,r,n):2===e.state.wrap&&(e.adler=jp(e.adler,t,r,n)),e.next_in+=r,e.total_in+=r,r)},If=(e,t)=>{let n,i,r=e.max_chain_length,a=e.strstart,o=e.prev_length,s=e.nice_match;const l=e.strstart>e.w_size-yf?e.strstart-(e.w_size-yf):0,c=e.window,h=e.w_mask,d=e.prev,u=e.strstart+wf;let p=c[a+o-1],f=c[a+o];e.prev_length>=e.good_match&&(r>>=2),s>e.lookahead&&(s=e.lookahead);do{if(n=t,c[n+o]===f&&c[n+o-1]===p&&c[n]===c[a]&&c[++n]===c[a+1]){a+=2,n++;do{}while(c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&ao){if(e.match_start=t,o=i,i>=s)break;p=c[a+o-1],f=c[a+o]}}}while((t=d[t&h])>l&&0!=--r);return o<=e.lookahead?o:e.lookahead},Nf=e=>{const t=e.w_size;let n,i,r;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-yf)&&(e.window.set(e.window.subarray(t,t+t-i),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),Mf(e),i+=t),0===e.strm.avail_in)break;if(n=Lf(e.strm,e.window,e.strstart+e.lookahead,i),e.lookahead+=n,e.lookahead+e.insert>=3)for(r=e.strstart-e.insert,e.ins_h=e.window[r],e.ins_h=Tf(e,e.ins_h,e.window[r+1]);e.insert&&(e.ins_h=Tf(e,e.ins_h,e.window[r+3-1]),e.prev[r&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=r,r++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead{let n,i,r,a=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,o=0,s=e.strm.avail_in;do{if(n=65535,r=e.bi_valid+42>>3,e.strm.avail_outi+e.strm.avail_in&&(n=i+e.strm.avail_in),n>r&&(n=r),n>8,e.pending_buf[e.pending-2]=~n,e.pending_buf[e.pending-1]=~n>>8,Af(e.strm),i&&(i>n&&(i=n),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+i),e.strm.next_out),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i,e.block_start+=i,n-=i),n&&(Lf(e.strm,e.strm.output,e.strm.next_out,n),e.strm.next_out+=n,e.strm.avail_out-=n,e.strm.total_out+=n)}while(0===o);return s-=e.strm.avail_in,s&&(s>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=s&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-s,e.strm.next_in),e.strstart),e.strstart+=s,e.insert+=s>e.w_size-e.insert?e.w_size-e.insert:s),e.block_start=e.strstart),e.high_waterr&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,r+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),r>e.strm.avail_in&&(r=e.strm.avail_in),r&&(Lf(e.strm,e.window,e.strstart,r),e.strstart+=r,e.insert+=r>e.w_size-e.insert?e.w_size-e.insert:r),e.high_water>3,r=e.pending_buf_size-r>65535?65535:e.pending_buf_size-r,a=r>e.w_size?e.w_size:r,i=e.strstart-e.block_start,(i>=a||(i||t===nf)&&t!==$p&&0===e.strm.avail_in&&i<=r)&&(n=i>r?r:i,o=t===nf&&0===e.strm.avail_in&&n===i?1:0,Kp(e,e.block_start,n,o),e.block_start+=n,Af(e.strm)),o?3:1)},Uf=(e,t)=>{let n,i;for(;;){if(e.lookahead=3&&(e.ins_h=Tf(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==n&&e.strstart-n<=e.w_size-yf&&(e.match_length=If(e,n)),e.match_length>=3)if(i=Jp(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=Tf(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=Tf(e,e.ins_h,e.window[e.strstart+1]);else i=Jp(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(i&&(Cf(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===nf?(Cf(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Cf(e,!1),0===e.strm.avail_out)?1:2},Bf=(e,t)=>{let n,i,r;for(;;){if(e.lookahead=3&&(e.ins_h=Tf(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==n&&e.prev_length4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){r=e.strstart+e.lookahead-3,i=Jp(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=r&&(e.ins_h=Tf(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,i&&(Cf(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(i=Jp(e,0,e.window[e.strstart-1]),i&&Cf(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(i=Jp(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===nf?(Cf(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Cf(e,!1),0===e.strm.avail_out)?1:2};function Of(e,t,n,i,r){this.good_length=e,this.max_lazy=t,this.nice_length=n,this.max_chain=i,this.func=r}const zf=[new Of(0,0,0,0,Df),new Of(4,4,8,4,Uf),new Of(4,5,16,8,Uf),new Of(4,6,32,32,Uf),new Of(4,4,16,16,Bf),new Of(8,16,32,32,Bf),new Of(8,16,128,128,Bf),new Of(8,32,128,256,Bf),new Of(32,128,258,1024,Bf),new Of(32,258,258,4096,Bf)];function Ff(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=vf,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Sf(this.dyn_ltree),Sf(this.dyn_dtree),Sf(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Sf(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Sf(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Wf=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.status!==bf&&57!==t.status&&69!==t.status&&73!==t.status&&91!==t.status&&103!==t.status&&t.status!==xf&&t.status!==_f?1:0},Hf=e=>{if(Wf(e))return kf(e,sf);e.total_in=e.total_out=0,e.data_type=gf;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=2===t.wrap?57:t.wrap?bf:xf,e.adler=2===t.wrap?0:1,t.last_flush=-2,Yp(t),af},Vf=e=>{const t=Hf(e);var n;return t===af&&((n=e.state).window_size=2*n.w_size,Sf(n.head),n.max_lazy_match=zf[n.level].max_lazy,n.good_match=zf[n.level].good_length,n.nice_match=zf[n.level].nice_length,n.max_chain_length=zf[n.level].max_chain,n.strstart=0,n.block_start=0,n.lookahead=0,n.insert=0,n.match_length=n.prev_length=2,n.match_available=0,n.ins_h=0),t},Gf=(e,t,n,i,r,a)=>{if(!e)return sf;let o=1;if(t===hf&&(t=6),i<0?(o=0,i=-i):i>15&&(o=2,i-=16),r<1||r>9||n!==vf||i<8||i>15||t<0||t>9||a<0||a>ff||8===i&&1!==o)return kf(e,sf);8===i&&(i=9);const s=new Ff;return e.state=s,s.strm=e,s.status=bf,s.wrap=o,s.gzhead=null,s.w_bits=i,s.w_size=1<Gf(e,t,vf,15,8,mf),deflateInit2:Gf,deflateReset:Vf,deflateResetKeep:Hf,deflateSetHeader:(e,t)=>Wf(e)||2!==e.state.wrap?sf:(e.state.gzhead=t,af),deflate:(e,t)=>{if(Wf(e)||t>rf||t<0)return e?kf(e,sf):sf;const n=e.state;if(!e.output||0!==e.avail_in&&!e.input||n.status===_f&&t!==nf)return kf(e,0===e.avail_out?cf:sf);const i=n.last_flush;if(n.last_flush=t,0!==n.pending){if(Af(e),0===e.avail_out)return n.last_flush=-1,af}else if(0===e.avail_in&&Ef(t)<=Ef(i)&&t!==nf)return kf(e,cf);if(n.status===_f&&0!==e.avail_in)return kf(e,cf);if(n.status===bf&&0===n.wrap&&(n.status=xf),n.status===bf){let t=vf+(n.w_bits-8<<4)<<8,i=-1;if(i=n.strategy>=uf||n.level<2?0:n.level<6?1:6===n.level?2:3,t|=i<<6,0!==n.strstart&&(t|=32),t+=31-t%31,Rf(n,t),0!==n.strstart&&(Rf(n,e.adler>>>16),Rf(n,65535&e.adler)),e.adler=1,n.status=xf,Af(e),0!==n.pending)return n.last_flush=-1,af}if(57===n.status)if(e.adler=0,Pf(n,31),Pf(n,139),Pf(n,8),n.gzhead)Pf(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),Pf(n,255&n.gzhead.time),Pf(n,n.gzhead.time>>8&255),Pf(n,n.gzhead.time>>16&255),Pf(n,n.gzhead.time>>24&255),Pf(n,9===n.level?2:n.strategy>=uf||n.level<2?4:0),Pf(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(Pf(n,255&n.gzhead.extra.length),Pf(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=jp(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69;else if(Pf(n,0),Pf(n,0),Pf(n,0),Pf(n,0),Pf(n,0),Pf(n,9===n.level?2:n.strategy>=uf||n.level<2?4:0),Pf(n,3),n.status=xf,Af(e),0!==n.pending)return n.last_flush=-1,af;if(69===n.status){if(n.gzhead.extra){let t=n.pending,i=(65535&n.gzhead.extra.length)-n.gzindex;for(;n.pending+i>n.pending_buf_size;){let r=n.pending_buf_size-n.pending;if(n.pending_buf.set(n.gzhead.extra.subarray(n.gzindex,n.gzindex+r),n.pending),n.pending=n.pending_buf_size,n.gzhead.hcrc&&n.pending>t&&(e.adler=jp(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex+=r,Af(e),0!==n.pending)return n.last_flush=-1,af;t=0,i-=r}let r=new Uint8Array(n.gzhead.extra);n.pending_buf.set(r.subarray(n.gzindex,n.gzindex+i),n.pending),n.pending+=i,n.gzhead.hcrc&&n.pending>t&&(e.adler=jp(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex=0}n.status=73}if(73===n.status){if(n.gzhead.name){let t,i=n.pending;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>i&&(e.adler=jp(e.adler,n.pending_buf,n.pending-i,i)),Af(e),0!==n.pending)return n.last_flush=-1,af;i=0}t=n.gzindexi&&(e.adler=jp(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex=0}n.status=91}if(91===n.status){if(n.gzhead.comment){let t,i=n.pending;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>i&&(e.adler=jp(e.adler,n.pending_buf,n.pending-i,i)),Af(e),0!==n.pending)return n.last_flush=-1,af;i=0}t=n.gzindexi&&(e.adler=jp(e.adler,n.pending_buf,n.pending-i,i))}n.status=103}if(103===n.status){if(n.gzhead.hcrc){if(n.pending+2>n.pending_buf_size&&(Af(e),0!==n.pending))return n.last_flush=-1,af;Pf(n,255&e.adler),Pf(n,e.adler>>8&255),e.adler=0}if(n.status=xf,Af(e),0!==n.pending)return n.last_flush=-1,af}if(0!==e.avail_in||0!==n.lookahead||t!==$p&&n.status!==_f){let i=0===n.level?Df(n,t):n.strategy===uf?((e,t)=>{let n;for(;;){if(0===e.lookahead&&(Nf(e),0===e.lookahead)){if(t===$p)return 1;break}if(e.match_length=0,n=Jp(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(Cf(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===nf?(Cf(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Cf(e,!1),0===e.strm.avail_out)?1:2})(n,t):n.strategy===pf?((e,t)=>{let n,i,r,a;const o=e.window;for(;;){if(e.lookahead<=wf){if(Nf(e),e.lookahead<=wf&&t===$p)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(r=e.strstart-1,i=o[r],i===o[++r]&&i===o[++r]&&i===o[++r])){a=e.strstart+wf;do{}while(i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&re.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=Jp(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=Jp(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(Cf(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===nf?(Cf(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Cf(e,!1),0===e.strm.avail_out)?1:2})(n,t):zf[n.level].func(n,t);if(3!==i&&4!==i||(n.status=_f),1===i||3===i)return 0===e.avail_out&&(n.last_flush=-1),af;if(2===i&&(t===ef?Qp(n):t!==rf&&(Kp(n,0,0,!1),t===tf&&(Sf(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),Af(e),0===e.avail_out))return n.last_flush=-1,af}return t!==nf?af:n.wrap<=0?of:(2===n.wrap?(Pf(n,255&e.adler),Pf(n,e.adler>>8&255),Pf(n,e.adler>>16&255),Pf(n,e.adler>>24&255),Pf(n,255&e.total_in),Pf(n,e.total_in>>8&255),Pf(n,e.total_in>>16&255),Pf(n,e.total_in>>24&255)):(Rf(n,e.adler>>>16),Rf(n,65535&e.adler)),Af(e),n.wrap>0&&(n.wrap=-n.wrap),0!==n.pending?af:of)},deflateEnd:e=>{if(Wf(e))return sf;const t=e.state.status;return e.state=null,t===xf?kf(e,lf):af},deflateSetDictionary:(e,t)=>{let n=t.length;if(Wf(e))return sf;const i=e.state,r=i.wrap;if(2===r||1===r&&i.status!==bf||i.lookahead)return sf;if(1===r&&(e.adler=Vp(e.adler,t,n,0)),i.wrap=0,n>=i.w_size){0===r&&(Sf(i.head),i.strstart=0,i.block_start=0,i.insert=0);let e=new Uint8Array(i.w_size);e.set(t.subarray(n-i.w_size,n),0),t=e,n=i.w_size}const a=e.avail_in,o=e.next_in,s=e.input;for(e.avail_in=n,e.next_in=0,e.input=t,Nf(i);i.lookahead>=3;){let e=i.strstart,t=i.lookahead-2;do{i.ins_h=Tf(i,i.ins_h,i.window[e+3-1]),i.prev[e&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=e,e++}while(--t);i.strstart=e,i.lookahead=2,Nf(i)}return i.strstart+=i.lookahead,i.block_start=i.strstart,i.insert=i.lookahead,i.lookahead=0,i.match_length=i.prev_length=2,i.match_available=0,e.next_in=o,e.input=s,e.avail_in=a,i.wrap=r,af},deflateInfo:"pako deflate (from Nodeca project)"};const qf=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Xf={assign:function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const n=t.shift();if(n){if("object"!=typeof n)throw new TypeError(n+"must be non-object");for(const t in n)qf(n,t)&&(e[t]=n[t])}}return e},flattenChunks:e=>{let t=0;for(let n=0,i=e.length;n=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;Kf[254]=Kf[254]=1;var Zf={string2buf:e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,n,i,r,a,o=e.length,s=0;for(r=0;r>>6,t[a++]=128|63&n):n<65536?(t[a++]=224|n>>>12,t[a++]=128|n>>>6&63,t[a++]=128|63&n):(t[a++]=240|n>>>18,t[a++]=128|n>>>12&63,t[a++]=128|n>>>6&63,t[a++]=128|63&n);return t},buf2string:(e,t)=>{const n=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let i,r;const a=new Array(2*n);for(r=0,i=0;i4)a[r++]=65533,i+=o-1;else{for(t&=2===o?31:3===o?15:7;o>1&&i1?a[r++]=65533:t<65536?a[r++]=t:(t-=65536,a[r++]=55296|t>>10&1023,a[r++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&Yf)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let n="";for(let i=0;i{(t=t||e.length)>e.length&&(t=e.length);let n=t-1;for(;n>=0&&128==(192&e[n]);)n--;return n<0||0===n?t:n+Kf[e[n]]>t?n:t}};var Jf=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Qf=Object.prototype.toString,{Z_NO_FLUSH:$f,Z_SYNC_FLUSH:em,Z_FULL_FLUSH:tm,Z_FINISH:nm,Z_OK:im,Z_STREAM_END:rm,Z_DEFAULT_COMPRESSION:am,Z_DEFAULT_STRATEGY:om,Z_DEFLATED:sm}=Xp;function lm(e){this.options=Xf.assign({level:am,method:sm,chunkSize:16384,windowBits:15,memLevel:8,strategy:om},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Jf,this.strm.avail_out=0;let n=jf.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(n!==im)throw new Error(qp[n]);if(t.header&&jf.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e="string"==typeof t.dictionary?Zf.string2buf(t.dictionary):"[object ArrayBuffer]"===Qf.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,n=jf.deflateSetDictionary(this.strm,e),n!==im)throw new Error(qp[n]);this._dict_set=!0}}function cm(e,t){const n=new lm(t);if(n.push(e,!0),n.err)throw n.msg||qp[n.err];return n.result}lm.prototype.push=function(e,t){const n=this.strm,i=this.options.chunkSize;let r,a;if(this.ended)return!1;for(a=t===~~t?t:!0===t?nm:$f,"string"==typeof e?n.input=Zf.string2buf(e):"[object ArrayBuffer]"===Qf.call(e)?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;)if(0===n.avail_out&&(n.output=new Uint8Array(i),n.next_out=0,n.avail_out=i),(a===em||a===tm)&&n.avail_out<=6)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else{if(r=jf.deflate(n,a),r===rm)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),r=jf.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===im;if(0!==n.avail_out){if(a>0&&n.next_out>0)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else if(0===n.avail_in)break}else this.onData(n.output)}return!0},lm.prototype.onData=function(e){this.chunks.push(e)},lm.prototype.onEnd=function(e){e===im&&(this.result=Xf.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var hm=function(e,t){return(t=t||{}).raw=!0,cm(e,t)},dm=function(e,t){return(t=t||{}).gzip=!0,cm(e,t)},um={Deflate:lm,deflate:cm,deflateRaw:hm,gzip:dm,constants:Xp};const pm=16209;var fm=function(e,t){let n,i,r,a,o,s,l,c,h,d,u,p,f,m,g,v,w,y,b,x,_,k,E,S;const M=e.state;n=e.next_in,E=e.input,i=n+(e.avail_in-5),r=e.next_out,S=e.output,a=r-(t-e.avail_out),o=r+(e.avail_out-257),s=M.dmax,l=M.wsize,c=M.whave,h=M.wnext,d=M.window,u=M.hold,p=M.bits,f=M.lencode,m=M.distcode,g=(1<>>24,u>>>=y,p-=y,y=w>>>16&255,0===y)S[r++]=65535&w;else{if(!(16&y)){if(64&y){if(32&y){M.mode=16191;break e}e.msg="invalid literal/length code",M.mode=pm;break e}w=f[(65535&w)+(u&(1<>>=y,p-=y),p<15&&(u+=E[n++]<>>24,u>>>=y,p-=y,y=w>>>16&255,16&y){if(x=65535&w,y&=15,ps){e.msg="invalid distance too far back",M.mode=pm;break e}if(u>>>=y,p-=y,y=r-a,x>y){if(y=x-y,y>c&&M.sane){e.msg="invalid distance too far back",M.mode=pm;break e}if(_=0,k=d,0===h){if(_+=l-y,y2;)S[r++]=k[_++],S[r++]=k[_++],S[r++]=k[_++],b-=3;b&&(S[r++]=k[_++],b>1&&(S[r++]=k[_++]))}else{_=r-x;do{S[r++]=S[_++],S[r++]=S[_++],S[r++]=S[_++],b-=3}while(b>2);b&&(S[r++]=S[_++],b>1&&(S[r++]=S[_++]))}break}if(64&y){e.msg="invalid distance code",M.mode=pm;break e}w=m[(65535&w)+(u&(1<>3,n-=b,p-=b<<3,u&=(1<{const l=s.bits;let c,h,d,u,p,f,m=0,g=0,v=0,w=0,y=0,b=0,x=0,_=0,k=0,E=0,S=null;const M=new Uint16Array(16),T=new Uint16Array(16);let A,C,P,R=null;for(m=0;m<=mm;m++)M[m]=0;for(g=0;g=1&&0===M[w];w--);if(y>w&&(y=w),0===w)return r[a++]=20971520,r[a++]=20971520,s.bits=1,0;for(v=1;v0&&(0===e||1!==w))return-1;for(T[1]=0,m=1;m852||2===e&&k>592)return 1;for(;;){A=m-x,o[g]+1=f?(C=R[o[g]-f],P=S[o[g]-f]):(C=96,P=0),c=1<>x)+h]=A<<24|C<<16|P}while(0!==h);for(c=1<>=1;if(0!==c?(E&=c-1,E+=c):E=0,g++,0==--M[m]){if(m===w)break;m=t[n+o[g]]}if(m>y&&(E&u)!==d){for(0===x&&(x=y),p+=v,b=m-x,_=1<852||2===e&&k>592)return 1;d=E&u,r[d]=y<<24|b<<16|p-a}}return 0!==E&&(r[p+E]=m-x<<24|64<<16),s.bits=y,0};const{Z_FINISH:xm,Z_BLOCK:_m,Z_TREES:km,Z_OK:Em,Z_STREAM_END:Sm,Z_NEED_DICT:Mm,Z_STREAM_ERROR:Tm,Z_DATA_ERROR:Am,Z_MEM_ERROR:Cm,Z_BUF_ERROR:Pm,Z_DEFLATED:Rm}=Xp,Lm=16180,Im=16190,Nm=16191,Dm=16192,Um=16194,Bm=16199,Om=16200,zm=16206,Fm=16209,Wm=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function Hm(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Vm=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.mode16211?1:0},Gm=e=>{if(Vm(e))return Tm;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=Lm,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,Em},jm=e=>{if(Vm(e))return Tm;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,Gm(e)},qm=(e,t)=>{let n;if(Vm(e))return Tm;const i=e.state;return t<0?(n=0,t=-t):(n=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Tm:(null!==i.window&&i.wbits!==t&&(i.window=null),i.wrap=n,i.wbits=t,jm(e))},Xm=(e,t)=>{if(!e)return Tm;const n=new Hm;e.state=n,n.strm=e,n.window=null,n.mode=Lm;const i=qm(e,t);return i!==Em&&(e.state=null),i};let Ym,Km,Zm=!0;const Jm=e=>{if(Zm){Ym=new Int32Array(512),Km=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(bm(1,e.lens,0,288,Ym,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;bm(2,e.lens,0,32,Km,0,e.work,{bits:5}),Zm=!1}e.lencode=Ym,e.lenbits=9,e.distcode=Km,e.distbits=5},Qm=(e,t,n,i)=>{let r;const a=e.state;return null===a.window&&(a.wsize=1<=a.wsize?(a.window.set(t.subarray(n-a.wsize,n),0),a.wnext=0,a.whave=a.wsize):(r=a.wsize-a.wnext,r>i&&(r=i),a.window.set(t.subarray(n-i,n-i+r),a.wnext),(i-=r)?(a.window.set(t.subarray(n-i,n),0),a.wnext=i,a.whave=a.wsize):(a.wnext+=r,a.wnext===a.wsize&&(a.wnext=0),a.whaveXm(e,15),inflateInit2:Xm,inflate:(e,t)=>{let n,i,r,a,o,s,l,c,h,d,u,p,f,m,g,v,w,y,b,x,_,k,E=0;const S=new Uint8Array(4);let M,T;const A=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Vm(e)||!e.output||!e.input&&0!==e.avail_in)return Tm;n=e.state,n.mode===Nm&&(n.mode=Dm),o=e.next_out,r=e.output,l=e.avail_out,a=e.next_in,i=e.input,s=e.avail_in,c=n.hold,h=n.bits,d=s,u=l,k=Em;e:for(;;)switch(n.mode){case Lm:if(0===n.wrap){n.mode=Dm;break}for(;h<16;){if(0===s)break e;s--,c+=i[a++]<>>8&255,n.check=jp(n.check,S,2,0),c=0,h=0,n.mode=16181;break}if(n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&c)<<8)+(c>>8))%31){e.msg="incorrect header check",n.mode=Fm;break}if((15&c)!==Rm){e.msg="unknown compression method",n.mode=Fm;break}if(c>>>=4,h-=4,_=8+(15&c),0===n.wbits&&(n.wbits=_),_>15||_>n.wbits){e.msg="invalid window size",n.mode=Fm;break}n.dmax=1<>8&1),512&n.flags&&4&n.wrap&&(S[0]=255&c,S[1]=c>>>8&255,n.check=jp(n.check,S,2,0)),c=0,h=0,n.mode=16182;case 16182:for(;h<32;){if(0===s)break e;s--,c+=i[a++]<>>8&255,S[2]=c>>>16&255,S[3]=c>>>24&255,n.check=jp(n.check,S,4,0)),c=0,h=0,n.mode=16183;case 16183:for(;h<16;){if(0===s)break e;s--,c+=i[a++]<>8),512&n.flags&&4&n.wrap&&(S[0]=255&c,S[1]=c>>>8&255,n.check=jp(n.check,S,2,0)),c=0,h=0,n.mode=16184;case 16184:if(1024&n.flags){for(;h<16;){if(0===s)break e;s--,c+=i[a++]<>>8&255,n.check=jp(n.check,S,2,0)),c=0,h=0}else n.head&&(n.head.extra=null);n.mode=16185;case 16185:if(1024&n.flags&&(p=n.length,p>s&&(p=s),p&&(n.head&&(_=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(i.subarray(a,a+p),_)),512&n.flags&&4&n.wrap&&(n.check=jp(n.check,i,p,a)),s-=p,a+=p,n.length-=p),n.length))break e;n.length=0,n.mode=16186;case 16186:if(2048&n.flags){if(0===s)break e;p=0;do{_=i[a+p++],n.head&&_&&n.length<65536&&(n.head.name+=String.fromCharCode(_))}while(_&&p>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=Nm;break;case 16189:for(;h<32;){if(0===s)break e;s--,c+=i[a++]<>>=7&h,h-=7&h,n.mode=zm;break}for(;h<3;){if(0===s)break e;s--,c+=i[a++]<>>=1,h-=1,3&c){case 0:n.mode=16193;break;case 1:if(Jm(n),n.mode=Bm,t===km){c>>>=2,h-=2;break e}break;case 2:n.mode=16196;break;case 3:e.msg="invalid block type",n.mode=Fm}c>>>=2,h-=2;break;case 16193:for(c>>>=7&h,h-=7&h;h<32;){if(0===s)break e;s--,c+=i[a++]<>>16^65535)){e.msg="invalid stored block lengths",n.mode=Fm;break}if(n.length=65535&c,c=0,h=0,n.mode=Um,t===km)break e;case Um:n.mode=16195;case 16195:if(p=n.length,p){if(p>s&&(p=s),p>l&&(p=l),0===p)break e;r.set(i.subarray(a,a+p),o),s-=p,a+=p,l-=p,o+=p,n.length-=p;break}n.mode=Nm;break;case 16196:for(;h<14;){if(0===s)break e;s--,c+=i[a++]<>>=5,h-=5,n.ndist=1+(31&c),c>>>=5,h-=5,n.ncode=4+(15&c),c>>>=4,h-=4,n.nlen>286||n.ndist>30){e.msg="too many length or distance symbols",n.mode=Fm;break}n.have=0,n.mode=16197;case 16197:for(;n.have>>=3,h-=3}for(;n.have<19;)n.lens[A[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,M={bits:n.lenbits},k=bm(0,n.lens,0,19,n.lencode,0,n.work,M),n.lenbits=M.bits,k){e.msg="invalid code lengths set",n.mode=Fm;break}n.have=0,n.mode=16198;case 16198:for(;n.have>>24,v=E>>>16&255,w=65535&E,!(g<=h);){if(0===s)break e;s--,c+=i[a++]<>>=g,h-=g,n.lens[n.have++]=w;else{if(16===w){for(T=g+2;h>>=g,h-=g,0===n.have){e.msg="invalid bit length repeat",n.mode=Fm;break}_=n.lens[n.have-1],p=3+(3&c),c>>>=2,h-=2}else if(17===w){for(T=g+3;h>>=g,h-=g,_=0,p=3+(7&c),c>>>=3,h-=3}else{for(T=g+7;h>>=g,h-=g,_=0,p=11+(127&c),c>>>=7,h-=7}if(n.have+p>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=Fm;break}for(;p--;)n.lens[n.have++]=_}}if(n.mode===Fm)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=Fm;break}if(n.lenbits=9,M={bits:n.lenbits},k=bm(1,n.lens,0,n.nlen,n.lencode,0,n.work,M),n.lenbits=M.bits,k){e.msg="invalid literal/lengths set",n.mode=Fm;break}if(n.distbits=6,n.distcode=n.distdyn,M={bits:n.distbits},k=bm(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,M),n.distbits=M.bits,k){e.msg="invalid distances set",n.mode=Fm;break}if(n.mode=Bm,t===km)break e;case Bm:n.mode=Om;case Om:if(s>=6&&l>=258){e.next_out=o,e.avail_out=l,e.next_in=a,e.avail_in=s,n.hold=c,n.bits=h,fm(e,u),o=e.next_out,r=e.output,l=e.avail_out,a=e.next_in,i=e.input,s=e.avail_in,c=n.hold,h=n.bits,n.mode===Nm&&(n.back=-1);break}for(n.back=0;E=n.lencode[c&(1<>>24,v=E>>>16&255,w=65535&E,!(g<=h);){if(0===s)break e;s--,c+=i[a++]<>y)],g=E>>>24,v=E>>>16&255,w=65535&E,!(y+g<=h);){if(0===s)break e;s--,c+=i[a++]<>>=y,h-=y,n.back+=y}if(c>>>=g,h-=g,n.back+=g,n.length=w,0===v){n.mode=16205;break}if(32&v){n.back=-1,n.mode=Nm;break}if(64&v){e.msg="invalid literal/length code",n.mode=Fm;break}n.extra=15&v,n.mode=16201;case 16201:if(n.extra){for(T=n.extra;h>>=n.extra,h-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=16202;case 16202:for(;E=n.distcode[c&(1<>>24,v=E>>>16&255,w=65535&E,!(g<=h);){if(0===s)break e;s--,c+=i[a++]<>y)],g=E>>>24,v=E>>>16&255,w=65535&E,!(y+g<=h);){if(0===s)break e;s--,c+=i[a++]<>>=y,h-=y,n.back+=y}if(c>>>=g,h-=g,n.back+=g,64&v){e.msg="invalid distance code",n.mode=Fm;break}n.offset=w,n.extra=15&v,n.mode=16203;case 16203:if(n.extra){for(T=n.extra;h>>=n.extra,h-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=Fm;break}n.mode=16204;case 16204:if(0===l)break e;if(p=u-l,n.offset>p){if(p=n.offset-p,p>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=Fm;break}p>n.wnext?(p-=n.wnext,f=n.wsize-p):f=n.wnext-p,p>n.length&&(p=n.length),m=n.window}else m=r,f=o-n.offset,p=n.length;p>l&&(p=l),l-=p,n.length-=p;do{r[o++]=m[f++]}while(--p);0===n.length&&(n.mode=Om);break;case 16205:if(0===l)break e;r[o++]=n.length,l--,n.mode=Om;break;case zm:if(n.wrap){for(;h<32;){if(0===s)break e;s--,c|=i[a++]<{if(Vm(e))return Tm;let t=e.state;return t.window&&(t.window=null),e.state=null,Em},inflateGetHeader:(e,t)=>{if(Vm(e))return Tm;const n=e.state;return 2&n.wrap?(n.head=t,t.done=!1,Em):Tm},inflateSetDictionary:(e,t)=>{const n=t.length;let i,r,a;return Vm(e)?Tm:(i=e.state,0!==i.wrap&&i.mode!==Im?Tm:i.mode===Im&&(r=1,r=Vp(r,t,n,0),r!==i.check)?Am:(a=Qm(e,t,n,n),a?(i.mode=16210,Cm):(i.havedict=1,Em)))},inflateInfo:"pako inflate (from Nodeca project)"};var eg=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const tg=Object.prototype.toString,{Z_NO_FLUSH:ng,Z_FINISH:ig,Z_OK:rg,Z_STREAM_END:ag,Z_NEED_DICT:og,Z_STREAM_ERROR:sg,Z_DATA_ERROR:lg,Z_MEM_ERROR:cg}=Xp;function hg(e){this.options=Xf.assign({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Jf,this.strm.avail_out=0;let n=$m.inflateInit2(this.strm,t.windowBits);if(n!==rg)throw new Error(qp[n]);if(this.header=new eg,$m.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=Zf.string2buf(t.dictionary):"[object ArrayBuffer]"===tg.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(n=$m.inflateSetDictionary(this.strm,t.dictionary),n!==rg)))throw new Error(qp[n])}function dg(e,t){const n=new hg(t);if(n.push(e),n.err)throw n.msg||qp[n.err];return n.result}hg.prototype.push=function(e,t){const n=this.strm,i=this.options.chunkSize,r=this.options.dictionary;let a,o,s;if(this.ended)return!1;for(o=t===~~t?t:!0===t?ig:ng,"[object ArrayBuffer]"===tg.call(e)?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;){for(0===n.avail_out&&(n.output=new Uint8Array(i),n.next_out=0,n.avail_out=i),a=$m.inflate(n,o),a===og&&r&&(a=$m.inflateSetDictionary(n,r),a===rg?a=$m.inflate(n,o):a===lg&&(a=og));n.avail_in>0&&a===ag&&n.state.wrap>0&&0!==e[n.next_in];)$m.inflateReset(n),a=$m.inflate(n,o);switch(a){case sg:case lg:case og:case cg:return this.onEnd(a),this.ended=!0,!1}if(s=n.avail_out,n.next_out&&(0===n.avail_out||a===ag))if("string"===this.options.to){let e=Zf.utf8border(n.output,n.next_out),t=n.next_out-e,r=Zf.buf2string(n.output,e);n.next_out=t,n.avail_out=i-t,t&&n.output.set(n.output.subarray(e,e+t),0),this.onData(r)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(a!==rg||0!==s){if(a===ag)return a=$m.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(0===n.avail_in)break}}return!0},hg.prototype.onData=function(e){this.chunks.push(e)},hg.prototype.onEnd=function(e){e===rg&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Xf.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var ug=function(e,t){return(t=t||{}).raw=!0,dg(e,t)},pg={Inflate:hg,inflate:dg,inflateRaw:ug,ungzip:dg,constants:Xp};const{Deflate:fg,deflate:mg,deflateRaw:gg,gzip:vg}=um,{Inflate:wg,inflate:yg,inflateRaw:bg,ungzip:xg}=pg;var _g={Deflate:fg,deflate:mg,deflateRaw:gg,gzip:vg,Inflate:wg,inflate:yg,inflateRaw:bg,ungzip:xg,constants:Xp};function kg(e){let t;e=(e=e.replace(/-/g,"+")).replace(/_/g,"/");try{t=atob(e)}catch(e){return null}const n=new Uint8Array(t.length);for(let e=0;e255)return null;n[e]=i}return n}var Eg,Sg=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Mg=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class Tg{constructor(e){Eg.set(this,[]),null!=e&&Sg(this,Eg,e,"f")}recordFrame(e,t){if(Mg(this,Eg,"f").length>0){const e=Mg(this,Eg,"f")[Mg(this,Eg,"f").length-1];if(e.controls.up==t.up&&e.controls.right==t.right&&e.controls.down==t.down&&e.controls.left==t.left)return}Mg(this,Eg,"f").push({frame:e,controls:t})}getFrame(e){for(let t=0;te&&t>0){const e=Mg(this,Eg,"f")[t-1];return[e.controls.up,e.controls.right,e.controls.down,e.controls.left]}}if(Mg(this,Eg,"f").length>0){const e=Mg(this,Eg,"f")[Mg(this,Eg,"f").length-1];return[e.controls.up,e.controls.right,e.controls.down,e.controls.left]}return[!1,!1,!1,!1]}getRecording(){return Mg(this,Eg,"f")}serialize(){const e=new Uint8Array(Math.ceil(3.5*Mg(this,Eg,"f").length));for(let t=0;t>>8&255,e[3*t+2]=n.frame>>>16&255}for(let t=0;t{t+=String.fromCharCode(e)}));let n=btoa(t);return n=n.replace(/\+/g,"-"),n=n.replace(/\//g,"_"),n=n.replace(/=/g,""),n}(t.result)}static deserialize(e){const t=kg(e);if(null==t)return null;const n=new _g.Inflate;if(n.push(t,!0),n.err)return null;const i=n.result,r=[],a=Math.round(i.length/3.5);for(let e=0;e>>1&1),down:1==(o>>>2&1),left:1==(o>>>3&1)}:{up:1==(o>>>4&1),right:1==(o>>>5&1),down:1==(o>>>6&1),left:1==(o>>>7&1)},r.push({frame:t,controls:n})}return new Tg(r)}}Eg=new WeakMap;const Ag=Tg;var Cg,Pg,Rg,Lg,Ig,Ng,Dg,Ug,Bg,Og,zg,Fg,Wg,Hg,Vg,Gg,jg,qg,Xg,Yg,Kg,Zg,Jg,Qg,$g,ev,tv,nv,iv,rv,av,ov,sv,lv,cv,hv,dv,uv,pv,fv,mv,gv,vv,wv,yv,bv,xv,_v,kv,Ev,Sv,Mv,Tv,Av,Cv,Pv,Rv,Lv,Iv=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Nv=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class Dv{constructor(e,t,n,i,r,a,o,s,l,c){var h;if(Cg.add(this),Rg.set(this,void 0),Lg.set(this,null),Ig.set(this,1),Ng.set(this,null),Dg.set(this,0),Ug.set(this,[]),Bg.set(this,null),Og.set(this,null),zg.set(this,null),Fg.set(this,[]),Wg.set(this,void 0),Hg.set(this,void 0),Vg.set(this,void 0),Gg.set(this,void 0),jg.set(this,!1),qg.set(this,void 0),Xg.set(this,void 0),Yg.set(this,void 0),Kg.set(this,void 0),Zg.set(this,[]),Jg.set(this,[0,0,0,0]),Qg.set(this,[0,0,0,0]),$g.set(this,void 0),ev.set(this,null),tv.set(this,null),nv.set(this,null),iv.set(this,[]),rv.set(this,null),av.set(this,void 0),ov.set(this,void 0),sv.set(this,void 0),lv.set(this,void 0),cv.set(this,void 0),hv.set(this,void 0),dv.set(this,void 0),uv.set(this,[]),pv.set(this,null),fv.set(this,[.075,.075,.075,.075]),mv.set(this,void 0),gv.set(this,null),vv.set(this,!1),Iv(this,Rg,o,"f"),Iv(this,$g,a,"f"),Iv(this,cv,s,"f"),Iv(this,hv,l,"f"),Iv(this,dv,c,"f"),Iv(this,Gg,e,"f"),Iv(this,Wg,r,"f"),(null==c?void 0:c.getSettingBoolean(Jh.ParticlesEnabled))?Iv(this,mv,new Ou(a),"f"):Iv(this,mv,null,"f"),null!=Nv(this,cv,"f")&&null!=Nv(this,hv,"f")&&Iv(this,uv,[new $u(Nv(this,$g,"f"),Nv(this,cv,"f"),Nv(this,hv,"f")),new $u(Nv(this,$g,"f"),Nv(this,cv,"f"),Nv(this,hv,"f")),new $u(Nv(this,$g,"f"),Nv(this,cv,"f"),Nv(this,hv,"f")),new $u(Nv(this,$g,"f"),Nv(this,cv,"f"),Nv(this,hv,"f"))],"f"),Iv(this,Hg,new Tu,"f"),Nv(this,Hg,"f").reset(t.position,t.quaternion),a.scene.add(Nv(this,Hg,"f").camera),Iv(this,Vg,new gu,"f"),Nv(this,Vg,"f").reset(t.position,t.quaternion),a.scene.add(Nv(this,Vg,"f").camera),null==Pg.models)throw"Car model isn't loaded yet";if(null!=Nv(this,Gg,"f")&&null!=Nv(this,cv,"f")&&null!=Nv(this,hv,"f"))Iv(this,qg,Nv(this,Gg,"f").createCar(t,Nv(this,cv,"f").getMountainVertices(),Nv(this,cv,"f").getMountainOffset(),Nv(this,hv,"f").getTrackData(),n,(e=>this.setCarState(e))),"f");else{const e=.11898833513259888,n=[new Un(.627909,.27-e,1.3478).applyQuaternion(t.quaternion).add(t.position),new Un(-.627909,.27-e,1.3478).applyQuaternion(t.quaternion).add(t.position),new Un(.720832,.27-e,-1.52686).applyQuaternion(t.quaternion).add(t.position),new Un(-.720832,.27-e,-1.52686).applyQuaternion(t.quaternion).add(t.position)],i=[(new Dn).setFromEuler((new _i).set(0,Math.PI,0)).multiply(t.quaternion),(new Dn).setFromEuler((new _i).set(0,Math.PI,0)).multiply(t.quaternion),(new Dn).setFromEuler((new _i).set(0,Math.PI,0)).multiply(t.quaternion),(new Dn).setFromEuler((new _i).set(0,Math.PI,0)).multiply(t.quaternion)];Iv(this,qg,{id:0,frames:0,totalFrames:0,speedKmh:0,hasStarted:!1,hasFinished:!1,nextCheckpointIndex:0,position:{x:t.position.x,y:t.position.y,z:t.position.z},quaternion:{x:t.quaternion.x,y:t.quaternion.y,z:t.quaternion.z,w:t.quaternion.w},collisionImpulses:[],wheelInContact:[!1,!1,!1,!1],wheelSuspensionLength:[e,e,e,e],wheelSuspensionVelocity:[0,0,0,0],wheelRotation:[0,0,0,0],wheelDeltaRotation:[0,0,0,0],wheelSkidInfo:[0,0,0,0],wheelPosition:n,wheelQuaternion:i,brakeLightEnabled:!1,controls:{up:!1,right:!1,down:!1,left:!1}},"f")}if(Iv(this,Xg,i,"f"),null==n)Iv(this,Yg,null!=Nv(this,Xg,"f"),"f"),Iv(this,Kg,new Ag,"f");else{if(null!=Nv(this,Xg,"f"))throw"Can't control car when recording is set";Iv(this,Yg,!1,"f"),Iv(this,Kg,n,"f")}Iv(this,ev,new Ws,"f"),Nv(this,ev,"f").add(Pg.models.chassis.clone()),Nv(this,ev,"f").add(Pg.models.suspension.clone()),Nv(this,ev,"f").add(Pg.models.wheelFL.clone()),Nv(this,ev,"f").add(Pg.models.wheelFR.clone()),Nv(this,ev,"f").add(Pg.models.wheelBL.clone()),Nv(this,ev,"f").add(Pg.models.wheelBR.clone()),Nv(this,ev,"f").children.forEach((e=>{const t=e;Array.isArray(t.material)?t.material=t.material.map((e=>e.clone())):t.material=t.material.clone(),t.castShadow=!0,t.receiveShadow=!0,t.frustumCulled=!1})),Nv(this,$g,"f").scene.add(Nv(this,ev,"f")),Iv(this,tv,Nv(this,ev,"f").getObjectByName("Body"),"f"),Iv(this,nv,Nv(this,ev,"f").getObjectByName("Suspension"),"f");{const e=document.createElement("canvas");e.width=2048,e.height=2048;const t=e.getContext("2d");if(null==t)throw"Failed to get context for car texture";const n=new Cn(e);let i;n.flipY=!1,n.anisotropy=Nv(this,$g,"f").getMaxAnisotropy(),n.needsUpdate=!0,Iv(this,av,t,"f"),Iv(this,ov,n,"f"),Iv(this,lv,wu.random(),"f"),Nv(this,Cg,"m",yv).call(this),Iv(this,sv,{value:new Un(0,0,0)},"f"),i=Array.isArray(Nv(this,tv,"f").material)?Nv(this,tv,"f").material:[Nv(this,tv,"f").material];for(let e=0;e{e.fragmentShader="uniform sampler2D carColorPattern;\nuniform vec3 carColorSecondary;\n"+e.fragmentShader,e.fragmentShader=e.fragmentShader.replace("vec4 diffuseColor = vec4( diffuse, opacity );","float colorSource = texture(carColorPattern, vUv).a;\nvec4 diffuseColor = vec4( carColorSecondary * colorSource + diffuse * (1.0 - colorSource), opacity );"),e.uniforms.carColorPattern={value:n},e.uniforms.carColorSecondary=Nv(this,sv,"f"),null==e.defines&&(e.defines={}),e.defines.USE_UV=!0}:"Metal"==t.name?t.needsUpdate=!0:"BrakeLight"==t.name&&Iv(this,rv,t,"f")}}Nv(this,nv,"f").geometry.morphAttributes.position=[];const d=Nv(this,nv,"f"),u=Pg.models.suspensionFL,p=Pg.models.suspensionFR,f=Pg.models.suspensionBL,m=Pg.models.suspensionBR;Nv(this,ev,"f").children.forEach((e=>{if(e!=Nv(this,tv,"f")&&e!=Nv(this,nv,"f")){const t=e;if(!(u.geometry.attributes.position instanceof lr&&p.geometry.attributes.position instanceof lr&&f.geometry.attributes.position instanceof lr&&m.geometry.attributes.position instanceof lr))throw"Vertices must use BufferAttribute";const n=u.geometry.attributes.position.array,i=p.geometry.attributes.position.array,r=f.geometry.attributes.position.array,a=m.geometry.attributes.position.array,o=d.geometry.morphAttributes.position;if("WheelFL"==t.name)o.push(new lr(n,3));else if("WheelFR"==t.name)o.push(new lr(i,3));else if("WheelBL"==t.name)o.push(new lr(r,3));else{if("WheelBR"!=t.name)throw"Unidentified wheel";o.push(new lr(a,3))}Nv(this,iv,"f").push(t)}})),Nv(this,nv,"f").updateMorphTargets(),null!=Nv(this,Xg,"f")&&(null===(h=Nv(this,Gg,"f"))||void 0===h||h.controlCar(Nv(this,qg,"f").id,Nv(this,Xg,"f").up,Nv(this,Xg,"f").right,Nv(this,Xg,"f").down,Nv(this,Xg,"f").left),Nv(this,Xg,"f").addChangeCallback(Iv(this,gv,(e=>{var t;null===(t=Nv(this,Gg,"f"))||void 0===t||t.controlCar(Nv(this,qg,"f").id,e.up,e.right,e.down,e.left)}),"f")))}dispose(){var e,t,n;Iv(this,vv,!0,"f"),Nv(this,Cg,"m",wv).call(this),Nv(this,$g,"f").scene.remove(Nv(this,Hg,"f").camera),Nv(this,$g,"f").scene.remove(Nv(this,Vg,"f").camera),null===(e=Nv(this,mv,"f"))||void 0===e||e.dispose(),Nv(this,uv,"f").forEach((e=>{e.dispose()})),Nv(this,uv,"f").length=0,null!=Nv(this,ev,"f")&&(Nv(this,ev,"f").children.forEach((e=>{const t=e;Array.isArray(t.material)?t.material.forEach((e=>e.dispose())):t.material.dispose(),t.geometry.dispose()})),Nv(this,$g,"f").scene.remove(Nv(this,ev,"f"))),Nv(this,ov,"f").dispose(),null===(t=Nv(this,Gg,"f"))||void 0===t||t.deleteCar(Nv(this,qg,"f").id),null!=Nv(this,gv,"f")&&(null===(n=Nv(this,Xg,"f"))||void 0===n||n.removeChangeCallback(Nv(this,gv,"f")))}addFinishCallback(e){Nv(this,Zg,"f").push(e)}getChassisMatrix(){return null!=Nv(this,tv,"f")?Nv(this,tv,"f").matrix:null}getSpeedKmh(){return Nv(this,qg,"f").speedKmh}start(){var e;null===(e=Nv(this,Gg,"f"))||void 0===e||e.startCar(Nv(this,qg,"f").id,null)}hasStarted(){return Nv(this,qg,"f").hasStarted}hasFinished(){return Nv(this,qg,"f").hasFinished}getRecording(){return Nv(this,Kg,"f")}getTime(){return new rp(Nv(this,qg,"f").frames)}getTotalTime(){return new rp(Nv(this,qg,"f").totalFrames)}getNextCheckpointIndex(){return Nv(this,qg,"f").nextCheckpointIndex}getPosition(){return new Un(Nv(this,qg,"f").position.x,Nv(this,qg,"f").position.y,Nv(this,qg,"f").position.z)}getQuaternion(){return new Dn(Nv(this,qg,"f").quaternion.x,Nv(this,qg,"f").quaternion.y,Nv(this,qg,"f").quaternion.z,Nv(this,qg,"f").quaternion.w)}getMatrix4(){const e=this.getPosition(),t=this.getQuaternion(),n=(new ui).makeRotationFromQuaternion(t);return n.setPosition(e),n}get isPaused(){return Nv(this,jg,"f")}set isPaused(e){var t;Nv(this,jg,"f")!=e&&(null===(t=Nv(this,Gg,"f"))||void 0===t||t.pauseCar(Nv(this,qg,"f").id,e),Iv(this,jg,e,"f"))}getControls(){return null!=Nv(this,Xg,"f")?Nv(this,Xg,"f").getControls():Nv(this,qg,"f").controls}getColors(){return Nv(this,lv,"f")}setColors(e){if(Nv(this,sv,"f").value=(new Un).setFromColor(e.secondary),null!=Nv(this,tv,"f")&&Array.isArray(Nv(this,tv,"f").material))for(let t=0;t{const n=t;let i;i=Array.isArray(n.material)?n.material:[n.material],i.forEach((t=>{t.opacity=e;const n=e<1;t.needsUpdate=n!=t.transparent,t.transparent=n}))}))}setCarState(e){var t;if(Nv(this,vv,"f"))return;const n=Nv(this,qg,"f");Iv(this,qg,e,"f");const i=Nv(this,qg,"f").frames!=n.frames&&Nv(this,qg,"f").frames!=n.frames+1;Nv(this,qg,"f").nextCheckpointIndex>n.nextCheckpointIndex&&Nv(this,Wg,"f")&&Nv(this,Cg,"m",xv).call(this),Nv(this,qg,"f").hasFinished&&!n.hasFinished&&(Nv(this,Wg,"f")&&Nv(this,Cg,"m",_v).call(this),Nv(this,Zg,"f").forEach((e=>e(this))));const r=.001;i&&(null===(t=Nv(this,mv,"f"))||void 0===t||t.clear(),Nv(this,uv,"f").forEach((e=>{e.clear()}))),this.getTotalTime().numberOfFrames%10==0&&Nv(this,Cg,"m",kv).call(this,.01),i&&(Nv(this,Hg,"f").reset(this.getPosition(),this.getQuaternion()),Nv(this,Vg,"f").reset(this.getPosition(),this.getQuaternion())),Nv(this,qg,"f").hasFinished||(Nv(this,Hg,"f").update(this.getPosition(),this.getQuaternion(),this.getSpeedKmh()),Nv(this,Vg,"f").update(this.getPosition(),this.getQuaternion(),this.getSpeedKmh())),Nv(this,Cg,"m",Mv).call(this,r),Nv(this,Cg,"m",Av).call(this,r),Nv(this,Yg,"f")&&Nv(this,qg,"f").hasStarted&&!Nv(this,qg,"f").hasFinished&&Nv(this,Kg,"f").recordFrame(n.frames,Nv(this,qg,"f").controls)}update(e){var t,n,i;if(null!=Nv(this,tv,"f")&&null!=Nv(this,nv,"f")){Nv(this,Cg,"m",Ev).call(this),null===(t=Nv(this,mv,"f"))||void 0===t||t.update(e);const r=this.getMatrix4(),a=this.getQuaternion();Nv(this,tv,"f").matrixAutoUpdate=!1,Nv(this,tv,"f").matrix.copy(r),Nv(this,tv,"f").matrix.multiply((new ui).makeTranslation(0,Pg.massOffset,0)),Nv(this,nv,"f").matrixAutoUpdate=!1,Nv(this,nv,"f").matrix.copy(Nv(this,tv,"f").matrix);const o=4;for(let t=0;t0&&(null===(i=Nv(this,dv,"f"))||void 0===i?void 0:i.getSettingBoolean(Jh.SkidmarksEnabled))&&t.06&&d<.5&&0==Nv(this,fv,"f")[t]&&Nv(this,uv,"f")[t].spawn(s.x,s.y,s.z,a)}Nv(this,Cg,"m",Rv).call(this,Nv(this,qg,"f").brakeLightEnabled)}}get cameraOrbit(){return Nv(this,Hg,"f").camera}get cameraCockpit(){return Nv(this,Vg,"f").camera}set audioVolume(e){Iv(this,Ig,e,"f"),null!=Nv(this,Lg,"f")&&Nv(this,Lg,"f").gain.setTargetAtTime(Nv(this,Ig,"f"),0,.01)}static initResources(e){e.addResource();(new fd).load("models/car.glb",(t=>{function n(e){const n=t.scene.getObjectByName(e);if(null==n)throw'Mesh "'+e+'" does not exist';if(0==n.children.length){const e=n;return e.updateMatrixWorld(!0),e.geometry.applyMatrix4(e.matrix.clone()),e.matrix.identity(),e}const i=dd(n.children.map((e=>e.geometry)),!0);n.updateMatrixWorld(!0),i.applyMatrix4(n.matrix.clone());const r=n.children.map((e=>e.material)),a=new Br(i,r);return a.name=e,a}function i(e){let t;return t=Array.isArray(e.material)?e.material:[e.material],t.forEach((e=>e.side=M)),e}Pg.models={chassis:i(n("Body")),suspension:i(n("Suspension")),suspensionFL:i(n("SuspensionFL")),suspensionFR:i(n("SuspensionFR")),suspensionBL:i(n("SuspensionBL")),suspensionBR:i(n("SuspensionBR")),wheelFL:i(n("WheelFL")),wheelFR:i(n("WheelFR")),wheelBL:i(n("WheelBL")),wheelBR:i(n("WheelBR")),collisionShapeVertices:Nv(Pg,Pg,"m",Lv).call(Pg,n("Collision"))},Pg.models.wheelFL.geometry.translate(-.627909,.218824,-1.3478),Pg.models.wheelFR.geometry.translate(.627909,.218824,-1.3478),Pg.models.wheelBL.geometry.translate(-.720832,.218824,1.52686),Pg.models.wheelBR.geometry.translate(.720832,.218824,1.52686),Pg.models.wheelFL.geometry.rotateZ(Math.PI),Pg.models.wheelFR.geometry.rotateZ(Math.PI),Pg.models.wheelBL.geometry.rotateZ(Math.PI),Pg.models.wheelBR.geometry.rotateZ(Math.PI),e.loadedResource()})),e.addResource();const t=new Image;t.addEventListener("load",(()=>{e.loadedResource()})),t.src="images/car_stripe.svg",Pg.images={stripe:t}}}Pg=Dv,Rg=new WeakMap,Lg=new WeakMap,Ig=new WeakMap,Ng=new WeakMap,Dg=new WeakMap,Ug=new WeakMap,Bg=new WeakMap,Og=new WeakMap,zg=new WeakMap,Fg=new WeakMap,Wg=new WeakMap,Hg=new WeakMap,Vg=new WeakMap,Gg=new WeakMap,jg=new WeakMap,qg=new WeakMap,Xg=new WeakMap,Yg=new WeakMap,Kg=new WeakMap,Zg=new WeakMap,Jg=new WeakMap,Qg=new WeakMap,$g=new WeakMap,ev=new WeakMap,tv=new WeakMap,nv=new WeakMap,iv=new WeakMap,rv=new WeakMap,av=new WeakMap,ov=new WeakMap,sv=new WeakMap,lv=new WeakMap,cv=new WeakMap,hv=new WeakMap,dv=new WeakMap,uv=new WeakMap,pv=new WeakMap,fv=new WeakMap,mv=new WeakMap,gv=new WeakMap,vv=new WeakMap,Cg=new WeakSet,wv=function(){Nv(this,Cg,"m",bv).call(this),setTimeout((()=>{null!=Nv(this,Ng,"f")&&(Nv(this,Ng,"f").source.stop(),Iv(this,Ng,null,"f")),null!=Nv(this,Bg,"f")&&(Nv(this,Bg,"f").forEach((({source:e})=>{e.stop()})),Iv(this,Bg,null,"f"))}),200)},yv=function(){if(null==Pg.images)throw"Car images are not loaded yet";Nv(this,av,"f").clearRect(0,0,Nv(this,av,"f").canvas.width,Nv(this,av,"f").canvas.height),Nv(this,av,"f").drawImage(Pg.images.stripe,0,0,Nv(this,av,"f").canvas.width,Nv(this,av,"f").canvas.height),Nv(this,ov,"f").needsUpdate=!0},bv=function(){if(null!=Nv(this,Ng,"f")&&(Nv(this,Ng,"f").source.playbackRate.setTargetAtTime(.7,0,.15),Nv(this,Ng,"f").gain.gain.setTargetAtTime(0,0,.15)),null!=Nv(this,Bg,"f"))for(let e=0;e{e.stop()})),Iv(this,pv,null,"f"))},xv=function(){var e,t;const n=null!==(t=null===(e=Nv(this,dv,"f"))||void 0===e?void 0:e.getSettingFloat(Jh.CheckpointVolume))&&void 0!==t?t:0;let i=Math.min(Math.max(Nv(this,Ig,"f")*n,0),1);if(Number.isNaN(i)&&(i=0),i>0&&null!=Nv(this,Rg,"f")){const e=Nv(this,Rg,"f").getBuffer("checkpoint");if(null!=e&&null!=Nv(this,Rg,"f").context&&null!=Nv(this,Rg,"f").destinationMaster){const t=Nv(this,Rg,"f").context.createBufferSource();t.buffer=e,t.playbackRate.value=1.25;const n=Nv(this,Rg,"f").context.createGain();n.gain.value=.03*i,t.connect(n),n.connect(Nv(this,Rg,"f").destinationMaster),t.start(0)}}},_v=function(){var e,t;const n=null!==(t=null===(e=Nv(this,dv,"f"))||void 0===e?void 0:e.getSettingFloat(Jh.CheckpointVolume))&&void 0!==t?t:0;let i=Math.min(Math.max(Nv(this,Ig,"f")*n,0),1);if(Number.isNaN(i)&&(i=0),i>0&&null!=Nv(this,Rg,"f")){const e=Nv(this,Rg,"f").getBuffer("finish");if(null!=e&&null!=Nv(this,Rg,"f").context&&null!=Nv(this,Rg,"f").destinationMaster){const t=Nv(this,Rg,"f").context.createBufferSource();t.buffer=e,t.playbackRate.value=1.25;const n=Nv(this,Rg,"f").context.createGain();n.gain.value=.03,t.connect(n),n.connect(Nv(this,Rg,"f").destinationMaster),t.start(0)}}},kv=function(e){var t;for(let n=0;n<4;n++){const i=Nv(this,qg,"f").wheelPosition[n],r=Nv(this,qg,"f").wheelInContact[n],a=Nv(this,qg,"f").wheelDeltaRotation[n],o=Nv(this,qg,"f").wheelSkidInfo[n];r&&a>.06&&o<.5?(n4&&null!=Nv(this,Rg,"f")){const n=Nv(this,Rg,"f").getBuffer("suspension");if(null!=n&&null!=Nv(this,Rg,"f").context){const i=Nv(this,Rg,"f").context.createBufferSource();i.buffer=n,i.playbackRate.value=.7+.1*Math.random();const r=Nv(this,Rg,"f").context.createGain();r.gain.value=Math.min(.285,e/140),i.connect(r),r.connect(Nv(this,Fg,"f")[t]),i.start(Nv(this,Rg,"f").context.currentTime+.02*Math.random()),Nv(this,Ug,"f")[t]=.1}}}},Tv=function(){if(null==Nv(this,Bg,"f")&&null!=Nv(this,Rg,"f")){const e=Nv(this,Rg,"f").getBuffer("tires");if(null!=e&&null!=Nv(this,Rg,"f").context){Iv(this,Bg,[],"f");const t=4;for(let n=0;n{Nv(this,Cg,"m",Cv).call(this,e)}))},Cv=function(e){if(e>25&&null!=Nv(this,zg,"f")&&null!=Nv(this,Rg,"f")&&(null==Nv(this,Og,"f")||Nv(this,Og,"f").impulse+100Math.PI&&(w-=m),y<-Math.PI?y+=m:y>Math.PI&&(y-=m),o.theta=w<=y?Math.max(w,Math.min(y,o.theta)):o.theta>(w+y)/2?Math.max(w,o.theta):Math.min(y,o.theta)),o.phi=Math.max(n.minPolarAngle,Math.min(n.maxPolarAngle,o.phi)),o.makeSafe(),!0===n.enableDamping?n.target.addScaledVector(c,n.dampingFactor):n.target.add(c),n.target.sub(n.cursor),n.target.clampLength(n.minTargetRadius,n.maxTargetRadius),n.target.add(n.cursor);let b=!1;if(n.zoomToCursor&&A||n.object.isOrthographicCamera)o.radius=W(o.radius);else{const e=o.radius;o.radius=W(o.radius*l),b=e!=o.radius}if(t.setFromSpherical(o),t.applyQuaternion(d),v.copy(n.target).add(t),n.object.lookAt(n.target),!0===n.enableDamping?(s.theta*=1-n.dampingFactor,s.phi*=1-n.dampingFactor,c.multiplyScalar(1-n.dampingFactor)):(s.set(0,0,0),c.set(0,0,0)),n.zoomToCursor&&A){let i=null;if(n.object.isPerspectiveCamera){const e=t.length();i=W(e*l);const r=e-i;n.object.position.addScaledVector(M,r),n.object.updateMatrixWorld(),b=!!r}else if(n.object.isOrthographicCamera){const e=new Un(T.x,T.y,0);e.unproject(n.object);const r=n.object.zoom;n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom/l)),n.object.updateProjectionMatrix(),b=r!==n.object.zoom;const a=new Un(T.x,T.y,0);a.unproject(n.object),n.object.position.sub(a).add(e),n.object.updateMatrixWorld(),i=t.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),n.zoomToCursor=!1;null!==i&&(this.screenSpacePanning?n.target.set(0,0,-1).transformDirection(n.object.matrix).multiplyScalar(i).add(n.object.position):(Hv.origin.copy(n.object.position),Hv.direction.set(0,0,-1).transformDirection(n.object.matrix),Math.abs(n.object.up.dot(Hv.direction))a||8*(1-p.dot(n.object.quaternion))>a||f.distanceToSquared(n.target)>a)&&(n.dispatchEvent(zv),u.copy(n.object.position),p.copy(n.object.quaternion),f.copy(n.target),!0)}}(),this.dispose=function(){n.domElement.removeEventListener("contextmenu",re),n.domElement.removeEventListener("pointerdown",Z),n.domElement.removeEventListener("pointercancel",Q),n.domElement.removeEventListener("wheel",$),n.domElement.removeEventListener("pointermove",J),n.domElement.removeEventListener("pointerup",Q);n.domElement.getRootNode().removeEventListener("keydown",ee,{capture:!0}),null!==n._domElementKeyEvents&&(n._domElementKeyEvents.removeEventListener("keydown",ne),n._domElementKeyEvents=null)};const n=this,i={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let r=i.NONE;const a=1e-6,o=new Yh,s=new Yh;let l=1;const c=new Un,h=new ln,d=new ln,u=new ln,p=new ln,f=new ln,m=new ln,k=new ln,E=new ln,S=new ln,M=new Un,T=new ln;let A=!1;const C=[],P={};let R=!1;function L(e){const t=Math.abs(.01*e);return Math.pow(.95,n.zoomSpeed*t)}function I(e){s.theta-=e}function N(e){s.phi-=e}const D=function(){const e=new Un;return function(t,n){e.setFromMatrixColumn(n,0),e.multiplyScalar(-t),c.add(e)}}(),U=function(){const e=new Un;return function(t,i){!0===n.screenSpacePanning?e.setFromMatrixColumn(i,1):(e.setFromMatrixColumn(i,0),e.crossVectors(n.object.up,e)),e.multiplyScalar(t),c.add(e)}}(),B=function(){const e=new Un;return function(t,i){const r=n.domElement;if(n.object.isPerspectiveCamera){const a=n.object.position;e.copy(a).sub(n.target);let o=e.length();o*=Math.tan(n.object.fov/2*Math.PI/180),D(2*t*o/r.clientHeight,n.object.matrix),U(2*i*o/r.clientHeight,n.object.matrix)}else n.object.isOrthographicCamera?(D(t*(n.object.right-n.object.left)/n.object.zoom/r.clientWidth,n.object.matrix),U(i*(n.object.top-n.object.bottom)/n.object.zoom/r.clientHeight,n.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),n.enablePan=!1)}}();function O(e){n.object.isPerspectiveCamera||n.object.isOrthographicCamera?l/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),n.enableZoom=!1)}function z(e){n.object.isPerspectiveCamera||n.object.isOrthographicCamera?l*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),n.enableZoom=!1)}function F(e,t){if(!n.zoomToCursor)return;A=!0;const i=n.domElement.getBoundingClientRect(),r=e-i.left,a=t-i.top,o=i.width,s=i.height;T.x=r/o*2-1,T.y=-a/s*2+1,M.set(T.x,T.y,1).unproject(n.object).sub(n.object.position).normalize()}function W(e){return Math.max(n.minDistance,Math.min(n.maxDistance,e))}function H(e){h.set(e.clientX,e.clientY)}function V(e){p.set(e.clientX,e.clientY)}function G(e){if(1===C.length)h.set(e.pageX,e.pageY);else{const t=oe(e),n=.5*(e.pageX+t.x),i=.5*(e.pageY+t.y);h.set(n,i)}}function j(e){if(1===C.length)p.set(e.pageX,e.pageY);else{const t=oe(e),n=.5*(e.pageX+t.x),i=.5*(e.pageY+t.y);p.set(n,i)}}function q(e){const t=oe(e),n=e.pageX-t.x,i=e.pageY-t.y,r=Math.sqrt(n*n+i*i);k.set(0,r)}function X(e){if(1==C.length)d.set(e.pageX,e.pageY);else{const t=oe(e),n=.5*(e.pageX+t.x),i=.5*(e.pageY+t.y);d.set(n,i)}u.subVectors(d,h).multiplyScalar(n.rotateSpeed);const t=n.domElement;I(2*Math.PI*u.x/t.clientHeight),N(2*Math.PI*u.y/t.clientHeight),h.copy(d)}function Y(e){if(1===C.length)f.set(e.pageX,e.pageY);else{const t=oe(e),n=.5*(e.pageX+t.x),i=.5*(e.pageY+t.y);f.set(n,i)}m.subVectors(f,p).multiplyScalar(n.panSpeed),B(m.x,m.y),p.copy(f)}function K(e){const t=oe(e),i=e.pageX-t.x,r=e.pageY-t.y,a=Math.sqrt(i*i+r*r);E.set(0,a),S.set(0,Math.pow(E.y/k.y,n.zoomSpeed)),O(S.y),k.copy(E);F(.5*(e.pageX+t.x),.5*(e.pageY+t.y))}function Z(e){!1!==n.enabled&&(0===C.length&&(n.domElement.setPointerCapture(e.pointerId),n.domElement.addEventListener("pointermove",J),n.domElement.addEventListener("pointerup",Q)),function(e){for(let t=0;t0?O(L(S.y)):S.y<0&&z(L(S.y)),k.copy(E),n.update()}(e);break;case i.PAN:if(!1===n.enablePan)return;!function(e){f.set(e.clientX,e.clientY),m.subVectors(f,p).multiplyScalar(n.panSpeed),B(m.x,m.y),p.copy(f),n.update()}(e)}}(e))}function Q(e){switch(function(e){delete P[e.pointerId];for(let t=0;t0&&O(L(e.deltaY)),n.update()}(function(e){const t=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100}e.ctrlKey&&!R&&(n.deltaY*=10);return n}(e)),n.dispatchEvent(Wv))}function ee(e){if("Control"===e.key){R=!0;n.domElement.getRootNode().addEventListener("keyup",te,{passive:!0,capture:!0})}}function te(e){if("Control"===e.key){R=!1;n.domElement.getRootNode().removeEventListener("keyup",te,{passive:!0,capture:!0})}}function ne(e){!1!==n.enabled&&!1!==n.enablePan&&function(e){let t=!1;switch(e.code){case n.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?N(2*Math.PI*n.rotateSpeed/n.domElement.clientHeight):B(0,n.keyPanSpeed),t=!0;break;case n.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?N(-2*Math.PI*n.rotateSpeed/n.domElement.clientHeight):B(0,-n.keyPanSpeed),t=!0;break;case n.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?I(2*Math.PI*n.rotateSpeed/n.domElement.clientHeight):B(n.keyPanSpeed,0),t=!0;break;case n.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?I(-2*Math.PI*n.rotateSpeed/n.domElement.clientHeight):B(-n.keyPanSpeed,0),t=!0}t&&(e.preventDefault(),n.update())}(e)}function ie(e){switch(ae(e),C.length){case 1:switch(n.touches.ONE){case y:if(!1===n.enableRotate)return;G(e),r=i.TOUCH_ROTATE;break;case b:if(!1===n.enablePan)return;j(e),r=i.TOUCH_PAN;break;default:r=i.NONE}break;case 2:switch(n.touches.TWO){case x:if(!1===n.enableZoom&&!1===n.enablePan)return;!function(e){n.enableZoom&&q(e),n.enablePan&&j(e)}(e),r=i.TOUCH_DOLLY_PAN;break;case _:if(!1===n.enableZoom&&!1===n.enableRotate)return;!function(e){n.enableZoom&&q(e),n.enableRotate&&G(e)}(e),r=i.TOUCH_DOLLY_ROTATE;break;default:r=i.NONE}break;default:r=i.NONE}r!==i.NONE&&n.dispatchEvent(Fv)}function re(e){!1!==n.enabled&&e.preventDefault()}function ae(e){let t=P[e.pointerId];void 0===t&&(t=new ln,P[e.pointerId]=t),t.set(e.pageX,e.pageY)}function oe(e){const t=e.pointerId===C[0]?C[1]:C[0];return P[t]}n.domElement.addEventListener("contextmenu",re),n.domElement.addEventListener("pointerdown",Z),n.domElement.addEventListener("pointercancel",Q),n.domElement.addEventListener("wheel",$,{passive:!1});n.domElement.getRootNode().addEventListener("keydown",ee,{passive:!0,capture:!0}),this.update()}}var qv=n(848),Xv={};Xv.styleTagTransform=u(),Xv.setAttributes=l(),Xv.insert=o().bind(null,"head"),Xv.domAPI=r(),Xv.insertStyleElement=h();t()(qv.A,Xv);qv.A&&qv.A.locals&&qv.A.locals;var Yv,Kv,Zv,Jv,Qv,$v,ew,tw,nw,iw,rw,aw,ow,sw,lw,cw,hw,dw,uw,pw=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},fw=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Kv=new WeakMap,Zv=new WeakMap,Jv=new WeakMap,Qv=new WeakMap,$v=new WeakMap,ew=new WeakMap,tw=new WeakMap,nw=new WeakMap,iw=new WeakMap,rw=new WeakMap,aw=new WeakMap,ow=new WeakMap,sw=new WeakMap,lw=new WeakMap,cw=new WeakMap,hw=new WeakMap,Yv=new WeakSet,dw=function(){fw(this,nw,"f").style.left="calc("+100*fw(this,ow,"f")/360+"% - 1px)",fw(this,Qv,"f").style.backgroundImage="linear-gradient(transparent, #000), linear-gradient(to right, transparent, hsla("+fw(this,ow,"f")+", 100%, 50%, 1))"},uw=function(){fw(this,$v,"f").style.left="calc("+fw(this,aw,"f")+"% - 6px)",fw(this,$v,"f").style.top="calc("+(100-fw(this,rw,"f"))+"% - 6px)"};const mw=class{constructor(e,t){Yv.add(this),Kv.set(this,void 0),Zv.set(this,void 0),Jv.set(this,void 0),Qv.set(this,void 0),$v.set(this,void 0),ew.set(this,!1),tw.set(this,void 0),nw.set(this,void 0),iw.set(this,!1),rw.set(this,0),aw.set(this,0),ow.set(this,0),sw.set(this,void 0),lw.set(this,void 0),cw.set(this,void 0),hw.set(this,void 0),pw(this,Kv,e,"f"),pw(this,Zv,t,"f"),pw(this,Jv,document.createElement("div"),"f"),fw(this,Jv,"f").className="color-picker",pw(this,Qv,document.createElement("div"),"f"),fw(this,Qv,"f").className="value-saturation-picker",fw(this,Jv,"f").appendChild(fw(this,Qv,"f")),pw(this,$v,document.createElement("div"),"f"),fw(this,$v,"f").className="marker",fw(this,Qv,"f").appendChild(fw(this,$v,"f")),pw(this,tw,document.createElement("div"),"f"),fw(this,tw,"f").className="hue-picker",fw(this,Jv,"f").appendChild(fw(this,tw,"f")),pw(this,nw,document.createElement("div"),"f"),fw(this,nw,"f").className="marker",fw(this,tw,"f").appendChild(fw(this,nw,"f")),fw(this,Kv,"f").appendChild(fw(this,Jv,"f"));pw(this,sw,(e=>{let n=null;if(e instanceof MouseEvent?fw(this,ew,"f")&&(n=e):e instanceof TouchEvent&&e.targetTouches.length>0&&(n=e.targetTouches[e.targetTouches.length-1]),null!=n){const e=fw(this,Qv,"f").getBoundingClientRect(),i=Math.max(0,Math.min(1,(n.clientX-e.left)/e.width)),r=Math.max(0,Math.min(1,(n.clientY-e.top)/e.height));pw(this,aw,100*i,"f"),pw(this,rw,100*(1-r),"f"),fw(this,Yv,"m",uw).call(this),t(this.color)}}),"f"),pw(this,lw,(e=>{0==e.button&&pw(this,ew,!1,"f")}),"f"),fw(this,Qv,"f").addEventListener("mousedown",(e=>{0==e.button&&pw(this,ew,!0,"f"),fw(this,sw,"f").call(this,e)})),window.addEventListener("mouseup",fw(this,lw,"f")),window.addEventListener("mousemove",fw(this,sw,"f")),fw(this,Qv,"f").addEventListener("touchstart",fw(this,sw,"f")),fw(this,Qv,"f").addEventListener("touchmove",fw(this,sw,"f")),pw(this,cw,(e=>{let n=null;if(e instanceof MouseEvent?fw(this,iw,"f")&&(n=e):e instanceof TouchEvent&&e.targetTouches.length>0&&(n=e.targetTouches[e.targetTouches.length-1]),null!=n){const e=fw(this,tw,"f").getBoundingClientRect(),i=Math.max(0,Math.min(1,(n.clientX-e.left)/e.width));pw(this,ow,360*i,"f"),fw(this,Yv,"m",dw).call(this),t(this.color)}}),"f"),pw(this,hw,(e=>{0==e.button&&pw(this,iw,!1,"f")}),"f"),fw(this,tw,"f").addEventListener("mousedown",(e=>{0==e.button&&pw(this,iw,!0,"f"),fw(this,cw,"f").call(this,e)})),window.addEventListener("mouseup",fw(this,hw,"f")),window.addEventListener("mousemove",fw(this,cw,"f")),fw(this,tw,"f").addEventListener("touchstart",fw(this,cw,"f")),fw(this,tw,"f").addEventListener("touchmove",fw(this,cw,"f")),fw(this,Yv,"m",dw).call(this),fw(this,Yv,"m",uw).call(this)}dispose(){window.removeEventListener("mouseup",fw(this,lw,"f")),window.removeEventListener("mousemove",fw(this,sw,"f")),window.removeEventListener("mouseup",fw(this,hw,"f")),window.removeEventListener("mousemove",fw(this,cw,"f"))}get color(){const e=fw(this,aw,"f")/100,t=fw(this,rw,"f")/100,n=t-t*e/2,i=Math.min(n,1-n),r=0!=i?(t-n)/i:0;return new tr("hsl("+fw(this,ow,"f")+","+100*r+"%,"+100*n+"%)")}set color(e){const{h:t,s:n,l:i}=e.getHSL({h:0,s:0,l:0},At),r=i+n*Math.min(i,1-i),a=0==r?0:2*(1-i/r);pw(this,ow,360*t,"f"),pw(this,aw,100*a,"f"),pw(this,rw,100*r,"f"),fw(this,Yv,"m",dw).call(this),fw(this,Yv,"m",uw).call(this),fw(this,Zv,"f").call(this,this.color)}};var gw,vw,ww,yw,bw,xw,_w,kw,Ew,Sw,Mw,Tw,Aw,Cw,Pw,Rw,Lw,Iw=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Nw=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};vw=new WeakMap,ww=new WeakMap,yw=new WeakMap,bw=new WeakMap,xw=new WeakMap,_w=new WeakMap,kw=new WeakMap,Ew=new WeakMap,Sw=new WeakMap,Mw=new WeakMap,Tw=new WeakMap,Aw=new WeakMap,gw=new WeakSet,Cw=function(e){const t=document.createElement("div");t.className="color",Nw(this,Mw,"f").appendChild(t);const n=document.createElement("h2");n.textContent=e,t.appendChild(n);const i=document.createElement("input");i.type="text",i.addEventListener("input",(()=>{let e=i.value;/^[0-9A-F]{6}$/i.test(e)&&(e="#"+e),r.color=new tr(e),Nw(this,vw,"f").setColors(Nw(this,gw,"m",Rw).call(this)),Iw(this,Aw,!0,"f")})),i.addEventListener("blur",(()=>{i.value="#"+r.color.getHexString()})),t.appendChild(i);const r=new mw(t,(e=>{document.activeElement!=i&&(i.value="#"+e.getHexString()),Nw(this,vw,"f").setColors(Nw(this,gw,"m",Rw).call(this)),Iw(this,Aw,!0,"f")}));i.value="#"+r.color.getHexString(),Nw(this,Tw,"f").push(r)},Pw=function(){const e=wu.random();Nw(this,Tw,"f")[0].color=e.primary.clone(),Nw(this,Tw,"f")[1].color=e.secondary.clone(),Nw(this,Tw,"f")[2].color=e.frame.clone(),Nw(this,Tw,"f")[3].color=e.rims.clone()},Rw=function(){return new wu(Nw(this,Tw,"f")[0].color.clone(),Nw(this,Tw,"f")[1].color.clone(),Nw(this,Tw,"f")[2].color.clone(),Nw(this,Tw,"f")[3].color.clone())},Lw=function(e){Nw(this,Tw,"f")[0].color=e.primary.clone(),Nw(this,Tw,"f")[1].color=e.secondary.clone(),Nw(this,Tw,"f")[2].color=e.frame.clone(),Nw(this,Tw,"f")[3].color=e.rims.clone()};const Dw=class{constructor(e,t,n,i,r,a,o){gw.add(this),vw.set(this,void 0),ww.set(this,void 0),yw.set(this,void 0),bw.set(this,void 0),xw.set(this,void 0),_w.set(this,void 0),kw.set(this,void 0),Ew.set(this,void 0),Sw.set(this,void 0),Mw.set(this,void 0),Tw.set(this,[]),Aw.set(this,!1),Iw(this,vw,e,"f"),Iw(this,ww,n,"f"),Iw(this,yw,r,"f"),Iw(this,bw,a,"f"),Iw(this,kw,new Kr(70,1,.1,1e4),"f"),Nw(this,kw,"f").position.set(4,3,4),n.scene.add(Nw(this,kw,"f")),Iw(this,Ew,new jv(Nw(this,kw,"f"),n.canvas),"f"),Nw(this,Ew,"f").target.set(0,.7,1.2),Nw(this,Ew,"f").update(),Nw(this,Ew,"f").mouseButtons={LEFT:g,MIDDLE:g,RIGHT:g},Nw(this,Ew,"f").enablePan=!1,Nw(this,Ew,"f").minDistance=2.5,Nw(this,Ew,"f").maxDistance=5.8,Nw(this,Ew,"f").maxPolarAngle=Math.PI/2+.06,Iw(this,xw,document.getElementById("ui"),"f"),Iw(this,Sw,document.createElement("div"),"f"),Nw(this,Sw,"f").className="customization";const s=document.createElement("div");s.className="top",Nw(this,Sw,"f").appendChild(s);const l=document.createElement("button");l.className="button",l.innerHTML=' ',l.append(document.createTextNode(t.get("Exit"))),l.addEventListener("click",(()=>{i.playUIClick(),o()})),s.appendChild(l),window.addEventListener("keydown",Iw(this,_w,(e=>{"Escape"==e.code&&(o(),e.preventDefault())}),"f"));const c=document.createElement("button");c.className="button",c.innerHTML=' ',c.append(document.createTextNode(t.get("Random"))),c.addEventListener("click",(()=>{i.playUIClick(),Nw(this,gw,"m",Pw).call(this)})),s.appendChild(c),Iw(this,Mw,document.createElement("div"),"f"),Nw(this,Mw,"f").className="colors",Nw(this,Sw,"f").appendChild(Nw(this,Mw,"f")),Nw(this,gw,"m",Cw).call(this,t.get("Primary")),Nw(this,gw,"m",Cw).call(this,t.get("Secondary")),Nw(this,gw,"m",Cw).call(this,t.get("Frame")),Nw(this,gw,"m",Cw).call(this,t.get("Rims")),Nw(this,xw,"f").appendChild(Nw(this,Sw,"f"));const h=Nw(this,bw,"f").getCarColors();Nw(this,gw,"m",Lw).call(this,h),Nw(this,vw,"f").setColors(h),Iw(this,Aw,!1,"f")}save(){if(Nw(this,Aw,"f")){const e=Nw(this,gw,"m",Rw).call(this);Nw(this,bw,"f").setCarColors(e),Nw(this,yw,"f").submitUserProfile(Nw(this,bw,"f").getToken(),Nw(this,bw,"f").getNickname(),e),Iw(this,Aw,!1,"f")}}dispose(){Nw(this,Tw,"f").forEach((e=>{e.dispose()})),Nw(this,ww,"f").scene.remove(Nw(this,kw,"f")),window.removeEventListener("keydown",Nw(this,_w,"f")),Nw(this,xw,"f").removeChild(Nw(this,Sw,"f")),Nw(this,Ew,"f").dispose()}get camera(){return Nw(this,kw,"f")}};var Uw;!function(e){e[e.Straight=0]="Straight",e[e.TurnSharp=1]="TurnSharp",e[e.SlopeUp=2]="SlopeUp",e[e.SlopeDown=3]="SlopeDown",e[e.Slope=4]="Slope",e[e.Start=5]="Start",e[e.Finish=6]="Finish",e[e.ToWideMiddle=7]="ToWideMiddle",e[e.ToWideLeft=8]="ToWideLeft",e[e.ToWideRight=9]="ToWideRight",e[e.StraightWide=10]="StraightWide",e[e.InnerCornerWide=11]="InnerCornerWide",e[e.OuterCornerWide=12]="OuterCornerWide",e[e.SlopeUpLeftWide=13]="SlopeUpLeftWide",e[e.SlopeUpRightWide=14]="SlopeUpRightWide",e[e.SlopeDownLeftWide=15]="SlopeDownLeftWide",e[e.SlopeDownRightWide=16]="SlopeDownRightWide",e[e.SlopeLeftWide=17]="SlopeLeftWide",e[e.SlopeRightWide=18]="SlopeRightWide",e[e.PillarTop=19]="PillarTop",e[e.PillarMiddle=20]="PillarMiddle",e[e.PillarBottom=21]="PillarBottom",e[e.PillarShort=22]="PillarShort",e[e.PlanePillarBottom=23]="PlanePillarBottom",e[e.PlanePillarShort=24]="PlanePillarShort",e[e.Plane=25]="Plane",e[e.PlaneWall=26]="PlaneWall",e[e.PlaneWallCorner=27]="PlaneWallCorner",e[e.PlaneWallInnerCorner=28]="PlaneWallInnerCorner",e[e.Block=29]="Block",e[e.WallTrackTop=30]="WallTrackTop",e[e.WallTrackMiddle=31]="WallTrackMiddle",e[e.WallTrackBottom=32]="WallTrackBottom",e[e.PlaneSlopeUp=33]="PlaneSlopeUp",e[e.PlaneSlopeDown=34]="PlaneSlopeDown",e[e.PlaneSlope=35]="PlaneSlope",e[e.TurnShort=36]="TurnShort",e[e.TurnLong=37]="TurnLong",e[e.SlopeUpLong=38]="SlopeUpLong",e[e.SlopeDownLong=39]="SlopeDownLong",e[e.SlopePillar=40]="SlopePillar",e[e.TurnSLeft=41]="TurnSLeft",e[e.TurnSRight=42]="TurnSRight",e[e.IntersectionT=43]="IntersectionT",e[e.IntersectionCross=44]="IntersectionCross",e[e.PillarBranch1=45]="PillarBranch1",e[e.PillarBranch2=46]="PillarBranch2",e[e.PillarBranch3=47]="PillarBranch3",e[e.PillarBranch4=48]="PillarBranch4",e[e.WallTrackBottomCorner=49]="WallTrackBottomCorner",e[e.WallTrackMiddleCorner=50]="WallTrackMiddleCorner",e[e.WallTrackTopCorner=51]="WallTrackTopCorner",e[e.Checkpoint=52]="Checkpoint",e[e.HalfBlock=53]="HalfBlock",e[e.QuarterBlock=54]="QuarterBlock",e[e.HalfPlane=55]="HalfPlane",e[e.QuarterPlane=56]="QuarterPlane",e[e.PlaneBridge=57]="PlaneBridge",e[e.SignArrowLeft=58]="SignArrowLeft",e[e.SignArrowRight=59]="SignArrowRight",e[e.SignArrowUp=61]="SignArrowUp",e[e.SignArrowDown=62]="SignArrowDown",e[e.SignWarning=63]="SignWarning",e[e.SignWrongWay=64]="SignWrongWay",e[e.CheckpointWide=65]="CheckpointWide",e[e.WallTrackCeiling=66]="WallTrackCeiling",e[e.WallTrackFloor=67]="WallTrackFloor",e[e.BlockSlopedDown=68]="BlockSlopedDown",e[e.BlockSlopedDownInnerCorner=69]="BlockSlopedDownInnerCorner",e[e.BlockSlopedDownOuterCorner=70]="BlockSlopedDownOuterCorner",e[e.BlockSlopedUp=71]="BlockSlopedUp",e[e.BlockSlopedUpInnerCorner=72]="BlockSlopedUpInnerCorner",e[e.BlockSlopedUpOuterCorner=73]="BlockSlopedUpOuterCorner",e[e.FinishWide=74]="FinishWide",e[e.PlaneCheckpoint=75]="PlaneCheckpoint",e[e.PlaneFinish=76]="PlaneFinish",e[e.PlaneCheckpointWide=77]="PlaneCheckpointWide",e[e.PlaneFinishWide=78]="PlaneFinishWide",e[e.WallTrackBottomInnerCorner=79]="WallTrackBottomInnerCorner",e[e.WallTrackInnerCorner=80]="WallTrackInnerCorner",e[e.WallTrackTopInnerCorner=81]="WallTrackTopInnerCorner",e[e.TurnLong2=82]="TurnLong2",e[e.TurnLong3=83]="TurnLong3",e[e.SlopePillarShort=84]="SlopePillarShort",e[e.BlockSlopeUp=85]="BlockSlopeUp",e[e.BlockSlopeDown=86]="BlockSlopeDown",e[e.SlopeBlock=87]="SlopeBlock",e[e.SlopeUpBlock=88]="SlopeUpBlock",e[e.SlopeDownBlock=89]="SlopeDownBlock",e[e.SlopeUpLeftWideBlock=90]="SlopeUpLeftWideBlock",e[e.SlopeUpRightWideBlock=91]="SlopeUpRightWideBlock",e[e.SlopeDownLeftWideBlock=92]="SlopeDownLeftWideBlock",e[e.SlopeDownRightWideBlock=93]="SlopeDownRightWideBlock",e[e.SlopeLeftWideBlock=94]="SlopeLeftWideBlock",e[e.SlopeRightWideBlock=95]="SlopeRightWideBlock",e[e.PlaneSlopeUpBlock=96]="PlaneSlopeUpBlock",e[e.PlaneSlopeDownBlock=97]="PlaneSlopeDownBlock",e[e.PlaneSlopeBlock=98]="PlaneSlopeBlock",e[e.PlaneSlopePillar=99]="PlaneSlopePillar",e[e.PlaneSlopePillarShort=100]="PlaneSlopePillarShort",e[e.PillarBranch1Top=101]="PillarBranch1Top",e[e.PillarBranch1Bottom=102]="PillarBranch1Bottom",e[e.PillarBranch1Middle=103]="PillarBranch1Middle",e[e.PillarBranch2Top=104]="PillarBranch2Top",e[e.PillarBranch2Middle=105]="PillarBranch2Middle",e[e.PillarBranch2Bottom=106]="PillarBranch2Bottom",e[e.PillarBranch3Top=107]="PillarBranch3Top",e[e.PillarBranch3Middle=108]="PillarBranch3Middle",e[e.PillarBranch3Bottom=109]="PillarBranch3Bottom",e[e.PillarBranch4Top=110]="PillarBranch4Top",e[e.PillarBranch4Middle=111]="PillarBranch4Middle",e[e.PillarBranch4Bottom=112]="PillarBranch4Bottom",e[e.PillarBranch5=113]="PillarBranch5",e[e.PillarBranch5Top=114]="PillarBranch5Top",e[e.PillarBranch5Middle=115]="PillarBranch5Middle",e[e.PillarBranch5Bottom=116]="PillarBranch5Bottom",e[e.ToWideDouble=117]="ToWideDouble",e[e.ToWideDiagonal=118]="ToWideDiagonal",e[e.StraightPillarBottom=119]="StraightPillarBottom",e[e.StraightPillarShort=120]="StraightPillarShort",e[e.TurnSharpPillarBottom=121]="TurnSharpPillarBottom",e[e.TurnSharpPillarShort=122]="TurnSharpPillarShort",e[e.IntersectionTPillarBottom=123]="IntersectionTPillarBottom",e[e.IntersectionTPillarShort=124]="IntersectionTPillarShort",e[e.IntersectionCrossPillarBottom=125]="IntersectionCrossPillarBottom",e[e.IntersectionCrossPillarShort=126]="IntersectionCrossPillarShort",e[e.PlaneBridgeCorner=127]="PlaneBridgeCorner",e[e.PlaneBridgeIntersectionT=128]="PlaneBridgeIntersectionT",e[e.PlaneBridgeIntersectionCross=129]="PlaneBridgeIntersectionCross",e[e.BlockBridge=130]="BlockBridge",e[e.BlockBridgeCorner=131]="BlockBridgeCorner",e[e.BlockBridgeIntersectionT=132]="BlockBridgeIntersectionT",e[e.BlockBridgeIntersectionCross=133]="BlockBridgeIntersectionCross",e[e.RedBlock=134]="RedBlock",e[e.RedHalfBlock=135]="RedHalfBlock",e[e.RedQuarterBlock=136]="RedQuarterBlock",e[e.RedBlockSlopedDown=137]="RedBlockSlopedDown",e[e.RedBlockSlopedDownInnerCorner=138]="RedBlockSlopedDownInnerCorner",e[e.RedBlockSlopedDownOuterCorner=139]="RedBlockSlopedDownOuterCorner",e[e.RedBlockSlopedUp=140]="RedBlockSlopedUp",e[e.RedBlockSlopedUpInnerCorner=141]="RedBlockSlopedUpInnerCorner",e[e.RedBlockSlopedUpOuterCorner=142]="RedBlockSlopedUpOuterCorner",e[e.RedBlockSlopeDown=143]="RedBlockSlopeDown",e[e.RedBlockSlopeUp=144]="RedBlockSlopeUp",e[e.RedBlockBridge=145]="RedBlockBridge",e[e.RedBlockBridgeCorner=146]="RedBlockBridgeCorner",e[e.RedBlockBridgeIntersectionT=147]="RedBlockBridgeIntersectionT",e[e.RedBlockBridgeIntersectionCross=148]="RedBlockBridgeIntersectionCross",e[e.BlueBlock=149]="BlueBlock",e[e.BlueHalfBlock=150]="BlueHalfBlock",e[e.BlueQuarterBlock=151]="BlueQuarterBlock",e[e.BlueBlockSlopedDown=152]="BlueBlockSlopedDown",e[e.BlueBlockSlopedDownInnerCorner=153]="BlueBlockSlopedDownInnerCorner",e[e.BlueBlockSlopedDownOuterCorner=154]="BlueBlockSlopedDownOuterCorner",e[e.BlueBlockSlopedUp=155]="BlueBlockSlopedUp",e[e.BlueBlockSlopedUpInnerCorner=156]="BlueBlockSlopedUpInnerCorner",e[e.BlueBlockSlopedUpOuterCorner=157]="BlueBlockSlopedUpOuterCorner",e[e.BlueBlockSlopeDown=158]="BlueBlockSlopeDown",e[e.BlueBlockSlopeUp=159]="BlueBlockSlopeUp",e[e.BlueBlockBridge=160]="BlueBlockBridge",e[e.BlueBlockBridgeCorner=161]="BlueBlockBridgeCorner",e[e.BlueBlockBridgeIntersectionT=162]="BlueBlockBridgeIntersectionT",e[e.BlueBlockBridgeIntersectionCross=163]="BlueBlockBridgeIntersectionCross",e[e.BlackBlock=164]="BlackBlock",e[e.BlackHalfBlock=165]="BlackHalfBlock",e[e.BlackQuarterBlock=166]="BlackQuarterBlock",e[e.BlackBlockSlopedDown=167]="BlackBlockSlopedDown",e[e.BlackBlockSlopedDownInnerCorner=168]="BlackBlockSlopedDownInnerCorner",e[e.BlackBlockSlopedDownOuterCorner=169]="BlackBlockSlopedDownOuterCorner",e[e.BlackBlockSlopedUp=170]="BlackBlockSlopedUp",e[e.BlackBlockSlopedUpInnerCorner=171]="BlackBlockSlopedUpInnerCorner",e[e.BlackBlockSlopedUpOuterCorner=172]="BlackBlockSlopedUpOuterCorner",e[e.BlackBlockSlopeDown=173]="BlackBlockSlopeDown",e[e.BlackBlockSlopeUp=174]="BlackBlockSlopeUp",e[e.BlackBlockBridge=175]="BlackBlockBridge",e[e.BlackBlockBridgeCorner=176]="BlackBlockBridgeCorner",e[e.BlackBlockBridgeIntersectionT=177]="BlackBlockBridgeIntersectionT",e[e.BlackBlockBridgeIntersectionCross=178]="BlackBlockBridgeIntersectionCross"}(Uw||(Uw={}));const Bw=Uw;var Ow,zw,Fw,Ww,Hw,Vw,Gw,jw=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},qw=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Ow=new WeakMap,zw=new WeakMap,Fw=new WeakMap,Ww=new WeakMap,Hw=new WeakMap,Vw=new WeakMap,Gw=new WeakMap;const Xw=class{constructor(e,t,n,i,r,a,o,s,l,c){Ow.set(this,void 0),zw.set(this,void 0),Fw.set(this,void 0),Ww.set(this,void 0),Hw.set(this,void 0),Vw.set(this,void 0),Gw.set(this,void 0),jw(this,Ow,a,"f"),jw(this,zw,n,"f"),jw(this,Fw,i,"f"),jw(this,Ww,r,"f"),jw(this,Hw,s,"f");for(let e=-100;e<100;++e)0==e?n.setPart(0,0,e,Bw.Start,2,null):n.setPart(0,0,e,Bw.Straight,0,null);n.generateMeshes(),i.generateMountains(n.getBounds()),jw(this,Gw,new Uv(e,qw(this,zw,"f").getStartTransform(),null,null,!1,r,a,i,n,s),"f"),qw(this,Gw,"f").audioVolume=0,qw(this,Gw,"f").update(0),jw(this,Vw,new Dw(qw(this,Gw,"f"),t,r,a,l,o,c),"f"),r.setCamera(qw(this,Vw,"f").camera)}dispose(){qw(this,zw,"f").clear(),qw(this,Fw,"f").clearMountains(),qw(this,Vw,"f").save(),qw(this,Vw,"f").dispose(),qw(this,Gw,"f").dispose()}update(e){qw(this,Ww,"f").update(qw(this,Gw,"f").getPosition()),qw(this,Ow,"f").update(e,!0,qw(this,Ww,"f"),qw(this,Hw,"f"))}};var Yw=n(344),Kw={};Kw.styleTagTransform=u(),Kw.setAttributes=l(),Kw.insert=o().bind(null,"head"),Kw.domAPI=r(),Kw.insertStyleElement=h();t()(Yw.A,Kw);Yw.A&&Yw.A.locals&&Yw.A.locals;var Zw,Jw,Qw,$w,ey=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},ty=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Zw=new WeakMap,Jw=new WeakMap,Qw=new WeakMap,$w=new WeakMap;const ny=class{constructor(){Zw.set(this,!1),Jw.set(this,void 0),Qw.set(this,0),$w.set(this,0);const e=document.getElementById("ui");ey(this,Jw,document.createElement("div"),"f"),ty(this,Jw,"f").className="hidden",e.appendChild(ty(this,Jw,"f"))}show(){ty(this,Jw,"f").className="debug",ey(this,Zw,!0,"f")}hide(){ty(this,Jw,"f").className="hidden",ey(this,Zw,!1,"f")}toggle(){ty(this,Zw,"f")?this.hide():this.show()}update(e){ey(this,Qw,ty(this,Qw,"f")+e,"f"),ey(this,$w,ty(this,$w,"f")+1,"f"),ty(this,Qw,"f")>=1&&(ty(this,Jw,"f").textContent="FPS: "+ty(this,$w,"f"),ey(this,Qw,ty(this,Qw,"f")-Math.trunc(ty(this,Qw,"f")),"f"),ey(this,$w,0,"f"))}};var iy=n(57),ry={};ry.styleTagTransform=u(),ry.setAttributes=l(),ry.insert=o().bind(null,"head"),ry.domAPI=r(),ry.insertStyleElement=h();t()(iy.A,ry);iy.A&&iy.A.locals&&iy.A.locals;class ay extends jv{constructor(e,t){super(e,t),this.screenSpacePanning=!1,this.mouseButtons={LEFT:w,MIDDLE:v,RIGHT:g},this.touches={ONE:b,TWO:_}}}class oy extends fh{constructor(e){super(e)}load(e,t,n,i){const r=this,a=new vh(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(e){const n=r.parse(JSON.parse(e));t&&t(n)}),n,i)}parse(e){return new sy(e)}}class sy{constructor(e){this.isFont=!0,this.type="Font",this.data=e}generateShapes(e,t=100){const n=[],i=function(e,t,n){const i=Array.from(e),r=t/n.resolution,a=(n.boundingBox.yMax-n.boundingBox.yMin+n.underlineThickness)*r,o=[];let s=0,l=0;for(let e=0;e=uy.length)return null;const o=uy[a];if(-1==o)return null;(o&py)==py?(vy(n,t,5,o,r==i-1),t+=5):(vy(n,t,6,o,r==i-1),t+=6)}return new Uint8Array(n)}function gy(e,t){if(t>=8*e.length)throw"Out of range";const n=Math.floor(t/8),i=e[n],r=t-8*n;if(r<=2||n>=e.length-1)return(i&63<>>r;return(i&63<>>r|(e[n+1]&63>>>8-r)<<8-r}function vy(e,t,n,i,r){const a=Math.floor(t/8);for(;a>=e.length;)e.push(0);const o=t-8*a;if(e[a]|=i<8-n&&!r){const t=a+1;t>=e.length&&e.push(0),e[t]|=i>>8-o}}var wy;!function(e){e[e.Checkpoint=0]="Checkpoint",e[e.Finish=1]="Finish"}(wy||(wy={}));const yy=wy;function by(e,t){const n=e.parts;if("object"!=typeof n&&null!==n&&!Array.isArray(n))return null;const i=t.getPartTypesWithDetector(yy.Checkpoint),r=new Py,a=Object.keys(n);for(let e=0;e=0&&l<=3&&Math.abs(a)<=1e9&&o>=0&&o<=1e9&&Math.abs(s)<=1e9))return null;if(i.includes(t))return null;r.addPart(a,o,s,t,l,null)}}}return r}function xy(e,t){if("string"!=typeof e.name)return null;if("string"!=typeof e.track)return null;let n;try{n=JSON.parse(e.track)}catch(e){return console.error(e),null}const i=by(n,t);return null==i?null:{trackName:e.name,trackData:i}}function _y(e,t){const n=kg(e);if(null==n)return null;const i=t.getPartTypesWithDetector(yy.Checkpoint),r=new Py;let a=0;for(;a0?e[e.length-1]:null},Ay=function(e){const t=e.getPartTypesWithDetector(yy.Checkpoint),n=[];return Cy(this,My,"f").forEach(((e,i)=>{if(i<0||i>65535)throw"Type id is out of range";const r=e.length;n.push(255&i,i>>>8&255,255&r,r>>>8&255,r>>>16&255,r>>>24&255),e.forEach((e=>{const r=e.x+Math.pow(2,23),a=e.y,o=e.z+Math.pow(2,23);if(n.push(255&r,r>>>8&255,r>>>16&255,255&a,a>>>8&255,a>>>16&255,255&o,o>>>8&255,o>>>16&255,3&e.rotation),t.includes(i)){if(null==e.checkpointOrder)throw"Checkpoint has no checkpoint order";n.push(255&e.checkpointOrder,e.checkpointOrder>>>8&255)}}))})),new Uint8Array(n)};const Py=class{constructor(){Sy.add(this),My.set(this,new Map)}addPart(e,t,n,i,r,a){const o=Cy(this,My,"f").get(i);null!=o?o.push({x:e,y:t,z:n,rotation:r,checkpointOrder:a}):Cy(this,My,"f").set(i,[{x:e,y:t,z:n,rotation:r,checkpointOrder:a}])}forEachPart(e){Cy(this,My,"f").forEach(((t,n)=>{t.forEach((t=>{e(t.x,t.y,t.z,n,t.rotation,t.checkpointOrder)}))}))}getId(e){return(0,hy.sha256)(Cy(this,Sy,"m",Ay).call(this,e))}getBounds(){let e=1/0,t=1/0,n=-1/0,i=-1/0;return this.forEachPart(((r,a,o)=>{e=Math.min(r,e),t=Math.min(o,t),n=Math.max(r,n),i=Math.max(o,i)})),Number.isFinite(e)&&Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(i)?{min:new ln(e,t),max:new ln(n,i)}:{min:new ln,max:new ln}}hasStartingPoint(){return Cy(this,My,"f").has(Bw.Start)}getStartTransform(){const e=Cy(this,Sy,"m",Ty).call(this);if(null!=e){const t=(new Dn).setFromEuler(new _i(0,Math.PI+e.rotation*Math.PI/2,0)),n=new Un(0,.385,1.35);return n.applyQuaternion(t),{position:new Un(e.x*Ky.partWidth+n.x,e.y*Ky.partHeight+n.y,e.z*Ky.partLength+n.z),quaternion:t}}return null}toSaveString(e){const t=Cy(this,Sy,"m",Ay).call(this,e),n=new _g.Deflate({level:9});return n.push(t,!0),fy(n.result)}toExportString(e,t){const n=fy((new TextEncoder).encode(e)),i=new Uint8Array(1);i[0]=n.length;let r=fy(i);return 1==r.length&&(r+="A"),"v3"+r+n+this.toSaveString(t)}static fromSaveString(e,t){const n=Ey(e,t);if(null!=n)return n;const i=ky(e,t);if(null!=i)return i;const r=_y(e,t);if(null!=r)return r;const a=by(e,t);return null!=a?a:null}static fromExportString(e,t){const n=e.replace(/\s+/g,""),i=function(e,t){if(!e.startsWith("v3"))return null;const n=my(e.substring(2,4));if(null==n)return null;if(1!=n.length)return null;const i=n[0],r=my(e.substring(4,4+i));if(null==r)return null;let a;try{a=new TextDecoder("utf-8").decode(r)}catch(e){return null}const o=Ey(e.substring(4+i),t);return null==o?null:{trackName:a,trackData:o}}(n,t);if(null!=i)return i;const r=function(e,t){if(!e.startsWith("v2"))return null;const n=my(e.substring(2,4));if(null==n)return null;if(1!=n.length)return null;const i=n[0],r=Math.ceil(i/3*4),a=my(e.substring(4,4+r));if(null==a)return null;let o;try{o=new TextDecoder("utf-8").decode(a)}catch(e){return null}const s=ky(e.substring(4+r),t);return null==s?null:{trackName:o,trackData:s}}(n,t);if(null!=r)return r;const a=function(e,t){if(!e.startsWith("v1n"))return null;const n=kg(e.substring(3,5));if(null==n)return null;if(1!=n.length)return null;const i=n[0],r=e.substring(5,5+i);let a;try{a=decodeURIComponent(r)}catch(e){return console.error(e),null}const o=_y(e.substring(5+i),t);return null==o?null:{trackName:a,trackData:o}}(n,t);if(null!=a)return a;const o=xy(e,t);return null!=o?o:null}createThumbnail(e){const t=document.createElement("canvas");let n=0,i=0,r=0,a=0;this.forEachPart(((e,t,o)=>{n=Math.min(n,e),i=Math.min(i,o),r=Math.max(r,e),a=Math.max(a,o)}));const o=10,s=r-n+1;s<=o&&(r+=Math.ceil((o-s)/2),n-=Math.ceil((o-s)/2));const l=a-i+1;l<=o&&(a+=Math.ceil((o-l)/2),i-=Math.ceil((o-l)/2)),t.width=Math.min(1024,r-n+1),t.height=Math.min(1024,a-i+1);const c=t.getContext("2d");c.fillStyle="#fff";const h=[],d=[],u=[];return this.forEachPart(((t,r,a,o,s)=>{const l=e.getPart(o);l.tiles.rotated(s).forEach(((e,r,s)=>{c.fillRect(t+e-n,a+s-i,1,1),o==Bw.Start?d.push([t+e-n,a+s-i]):null!=l.detector&&l.detector.type==yy.Checkpoint?h.push([t+e-n,a+s-i]):null!=l.detector&&l.detector.type==yy.Finish&&u.push([t+e-n,a+s-i])}))})),c.fillStyle="#e2c026",h.forEach((([e,t])=>{c.fillRect(e,t,1,1)})),c.fillStyle="#338ce0",d.forEach((([e,t])=>{c.fillRect(e,t,1,1)})),c.fillStyle="#d12929",u.forEach((([e,t])=>{c.fillRect(e,t,1,1)})),t}};var Ry,Ly,Iy,Ny,Dy,Uy,By,Oy,zy,Fy,Wy,Hy,Vy,Gy,jy=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},qy=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class Xy{constructor(e,t,n,i,r,a,o){if(this.checkpointOrder=null,this.x=e,this.y=t,this.z=n,this.rotation=i,this.type=r,this.matrix=a,this.checkpointOrder=o,null!=r.detector&&r.detector.type==yy.Checkpoint){if(null==o)throw"Checkpoint has no checkpoint order"}else if(null!=o)throw"Non-checkpoint has checkpoint order"}}class Yy{constructor(e,t,n){Ry.add(this),Ly.set(this,void 0),Iy.set(this,void 0),Ny.set(this,void 0),Dy.set(this,[]),Uy.set(this,new Map),By.set(this,new Map),Oy.set(this,{min:new ln(0,0),max:new ln(0,0)}),zy.set(this,null),Fy.set(this,[]),jy(this,Ly,e,"f"),jy(this,Iy,t,"f"),jy(this,Ny,n,"f")}getID(){return qy(this,zy,"f")}clear(){jy(this,zy,null,"f"),qy(this,Dy,"f").length=0,qy(this,Uy,"f").clear(),qy(this,By,"f").clear(),qy(this,Ry,"m",Wy).call(this)}hasPartAt(e,t,n){return qy(this,Uy,"f").has(e+"|"+t+"|"+n)}getPartAt(e,t,n){const i=qy(this,Uy,"f").get(e+"|"+t+"|"+n);return null==i?null:{id:i.type.id,rotation:i.rotation}}setPart(e,t,n,i,r,a){const o=qy(this,Ny,"f").getPart(i),s=new Xy(e,t,n,r,o,(new ui).makeRotationY(r*Math.PI/2).setPosition(e*Yy.partWidth,t*Yy.partHeight,n*Yy.partLength),a);qy(this,Dy,"f").push(s);o.tiles.rotated(r).forEach(((i,r,a)=>{const o=e+i+"|"+(t+r)+"|"+(n+a);if(this.hasPartAt(e+i,t+r,n+a))throw"Track part collision";qy(this,Uy,"f").set(o,s)}));const l=qy(this,By,"f").get(i);null==l?qy(this,By,"f").set(i,[s]):l.push(s)}deletePart(e,t,n){const i=qy(this,Uy,"f").get(e+"|"+t+"|"+n);if(null==i)throw"Track part missing from parts by position map";for(let e=0;e{const r=i.x+e+"|"+(i.y+t)+"|"+(i.z+n);if(!qy(this,Uy,"f").has(r))throw"Track part section missing";qy(this,Uy,"f").delete(r)}));const r=qy(this,By,"f").get(i.type.id);if(null==r)throw"Track part type is missing from parts by type map";for(let e=0;e{if(null==t.type.mesh)throw"Track part is not loaded yet";if(null==i){t.type.mesh.matrixWorld.copy(t.matrix);const n=e.intersectObject(t.type.mesh,!0);n.length>0&&(i=n[0])}})),i}generateMeshes(){qy(this,Ry,"m",Wy).call(this);const e=qy(this,Ly,"f").getShadowDirection(),t=new Pn(e.x,e.y,e.z,0);qy(this,Ny,"f").getAllParts().forEach((e=>{const n=[];for(let t=0;t0){if(null==e.mesh)throw"Mesh is not loaded";const i=new Sl(e.mesh.geometry,e.mesh.material,n.length);i.frustumCulled=!1,i.receiveShadow=!0;for(let e=0;e{const n=qy(this,By,"f").get(t);null!=n&&(e=e.concat(n))})),e.map((e=>{if(null==e.checkpointOrder)throw"Checkpoint has no checkpoint order";if(null==e.type.detector)throw"Checkpoint has no detector";return{x:e.x,y:e.y,z:e.z,rotation:e.rotation,checkpointOrder:e.checkpointOrder,detector:e.type.detector}}))}getCheckpointOrders(){let e=[];return qy(this,Ny,"f").getPartTypesWithDetector(yy.Checkpoint).forEach((t=>{const n=qy(this,By,"f").get(t);null!=n&&(e=e.concat(n))})),e.map((e=>{if(null==e.checkpointOrder)throw"Checkpoint has no checkpoint order";if(null==e.type.detector)throw"Checkpoint has no detector";return e.checkpointOrder}))}getTotalNumberOfCheckpointIndices(){let e=[];if(qy(this,Ny,"f").getPartTypesWithDetector(yy.Checkpoint).forEach((t=>{const n=qy(this,By,"f").get(t);null!=n&&(e=e.concat(n))})),null==e)return 0;return e.map((e=>e.checkpointOrder)).filter(((e,t,n)=>n.indexOf(e)==t)).length}getStartTransform(){const e=qy(this,Ry,"m",Gy).call(this);if(null!=e){const t=(new Dn).setFromEuler(new _i(0,Math.PI+e.rotation*Math.PI/2,0)),n=new Un(0,.385,1.35);return n.applyQuaternion(t),{position:new Un(e.x*Yy.partWidth+n.x,e.y*Yy.partHeight+n.y,e.z*Yy.partLength+n.z),quaternion:t}}return null}getTrackData(){const e=new Py;return qy(this,Dy,"f").forEach((t=>{e.addPart(t.x,t.y,t.z,t.type.id,t.rotation,t.checkpointOrder)})),e}loadTrackData(e,t=!0){return this.clear(),jy(this,zy,t?e.getId(qy(this,Ny,"f")):null,"f"),e.forEachPart(((e,t,n,i,r,a)=>{this.setPart(e,t,n,i,r,a)})),!0}}Ly=new WeakMap,Iy=new WeakMap,Ny=new WeakMap,Dy=new WeakMap,Uy=new WeakMap,By=new WeakMap,Oy=new WeakMap,zy=new WeakMap,Fy=new WeakMap,Ry=new WeakSet,Wy=function(){for(let e=0;e{e=Math.min(r.x,e),t=Math.min(r.z,t),n=Math.max(r.x,n),i=Math.max(r.z,i)})),Number.isFinite(e)&&Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(i)?jy(this,Oy,{min:new ln(e,t),max:new ln(n,i)},"f"):jy(this,Oy,{min:new ln,max:new ln},"f")},Gy=function(){const e=qy(this,By,"f").get(Bw.Start);return null!=e&&e.length>0?e[e.length-1]:null},Yy.partWidth=20,Yy.partHeight=5,Yy.partLength=20;const Ky=Yy;var Zy,Jy,Qy,$y,eb,tb=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},nb=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class ib{constructor(e){Jy.set(this,void 0),Qy.set(this,[]),$y.set(this,[]),tb(this,Jy,e,"f")}dispose(){nb(this,Qy,"f").forEach((e=>{Array.isArray(e.material)?e.material.forEach((e=>e.dispose())):e.material.dispose(),e.geometry.dispose(),nb(this,Jy,"f").scene.remove(e)})),nb(this,Qy,"f").length=0}refresh(e){const t=e.getCheckpoints();let n=!1;if(t.length==nb(this,$y,"f").length)for(let e=0;e{if(null==nb(Zy,Zy,"f",eb))throw"Font is not loaded yet";const n=new Un(...t.detector.center);let i;if(0==t.rotation)i=new Un(n.x,n.y,n.z);else if(1==t.rotation)i=new Un(n.z,n.y,-n.x);else if(2==t.rotation)i=new Un(-n.x,n.y,-n.z);else{if(3!=t.rotation)throw"Invalid rotation";i=new Un(n.z,n.y,n.x)}i.add(new Un(t.x*Ky.partWidth,t.y*Ky.partHeight,t.z*Ky.partLength)),i.add(new Un(0,-1.3,0));const r=nb(Zy,Zy,"f",eb).generateShapes((t.checkpointOrder+1).toString(),4),a=new Wc(r);a.computeBoundingBox();const o=-.5*(a.boundingBox.max.x-a.boundingBox.min.x);a.translate(o,0,0);const s=new Br(a,e);s.position.copy(i),s.rotation.y=Math.PI/2*t.rotation,nb(this,Jy,"f").scene.add(s),nb(this,Qy,"f").push(s);const l=new Br(a,e);l.position.copy(i),l.rotation.y=Math.PI/2*t.rotation+Math.PI,nb(this,Jy,"f").scene.add(l),nb(this,Qy,"f").push(l)}))}}static initResources(e){e.addResource();(new oy).load("forced_square.json",(t=>{tb(this,Zy,t,"f",eb),e.loadedResource()}))}}Zy=ib,Jy=new WeakMap,Qy=new WeakMap,$y=new WeakMap,eb={value:null};const rb=ib;var ab=n(909),ob={};ob.styleTagTransform=u(),ob.setAttributes=l(),ob.insert=o().bind(null,"head"),ob.domAPI=r(),ob.insertStyleElement=h();t()(ab.A,ob);ab.A&&ab.A.locals&&ab.A.locals;var sb,lb,cb,hb,db,ub,pb,fb,mb,gb,vb=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},wb=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};lb=new WeakMap,cb=new WeakMap,hb=new WeakMap,db=new WeakMap,ub=new WeakMap,pb=new WeakMap,fb=new WeakMap,sb=new WeakSet,mb=function(){wb(this,ub,"f").textContent=wb(this,cb,"f").get("Checkpoint order")+": "+(this.checkpointOrder+1)},gb=function(e){const t=e.getCheckpointOrders(),n=new Set;t.forEach((e=>{n.add(e)}));for(let e=0;e<65535;e++)if(!n.has(e))return e;return 65535};const yb=class{constructor(e,t,n,i){sb.add(this),lb.set(this,void 0),cb.set(this,void 0),hb.set(this,void 0),db.set(this,void 0),ub.set(this,void 0),pb.set(this,0),fb.set(this,void 0),vb(this,lb,e,"f"),vb(this,cb,t,"f"),vb(this,hb,i,"f"),vb(this,db,document.createElement("div"),"f"),wb(this,db,"f").className="hidden",e.appendChild(wb(this,db,"f")),wb(this,hb,"f").addChangeListener(vb(this,fb,(e=>{e?wb(this,db,"f").classList.add("touch"):wb(this,db,"f").classList.remove("touch")}),"f"));const r=document.createElement("div");r.className="buttons",wb(this,db,"f").appendChild(r);const a=document.createElement("button");a.addEventListener("click",(()=>{n.playUIClick(),this.checkpointOrder++})),r.appendChild(a);const o=document.createElement("img");o.src="images/arrow_up.svg",a.appendChild(o);const s=document.createElement("button");s.addEventListener("click",(()=>{n.playUIClick(),this.checkpointOrder--})),r.appendChild(s);const l=document.createElement("img");l.src="images/arrow_down.svg",s.appendChild(l),vb(this,ub,document.createElement("p"),"f"),wb(this,db,"f").appendChild(wb(this,ub,"f")),wb(this,sb,"m",mb).call(this)}dispose(){wb(this,lb,"f").removeChild(wb(this,db,"f")),wb(this,hb,"f").removeChangeListener(wb(this,fb,"f"))}hide(){wb(this,db,"f").classList.add("hidden"),wb(this,db,"f").classList.remove("editor-checkpoint-order")}show(){wb(this,db,"f").classList.remove("hidden"),wb(this,db,"f").classList.add("editor-checkpoint-order")}reset(){this.checkpointOrder=0}get checkpointOrder(){return wb(this,pb,"f")}set checkpointOrder(e){vb(this,pb,Math.max(0,Math.min(65535,e)),"f"),wb(this,sb,"m",mb).call(this)}setFromExistingCheckpoints(e){this.checkpointOrder=wb(this,sb,"m",gb).call(this,e)}};var bb=n(7),xb={};xb.styleTagTransform=u(),xb.setAttributes=l(),xb.insert=o().bind(null,"head"),xb.domAPI=r(),xb.insertStyleElement=h();t()(bb.A,xb);bb.A&&bb.A.locals&&bb.A.locals;var _b,kb,Eb,Sb,Mb,Tb,Ab=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Cb=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};_b=new WeakMap,kb=new WeakMap,Eb=new WeakMap,Sb=new WeakMap,Mb=new WeakMap,Tb=new WeakMap;const Pb=class{constructor(e,t,n,i,r){_b.set(this,void 0),kb.set(this,void 0),Eb.set(this,void 0),Sb.set(this,void 0),Mb.set(this,void 0),Tb.set(this,void 0),Ab(this,_b,e,"f"),Ab(this,kb,t,"f"),Ab(this,Eb,n,"f"),Ab(this,Sb,document.createElement("div"),"f"),Cb(this,Sb,"f").className="editor-height-selector",e.appendChild(Cb(this,Sb,"f")),Cb(this,Eb,"f").addChangeListener(Ab(this,Tb,(e=>{e?Cb(this,Sb,"f").classList.add("touch"):Cb(this,Sb,"f").classList.remove("touch")}),"f")),Ab(this,Mb,document.createElement("p"),"f"),Cb(this,Sb,"f").appendChild(Cb(this,Mb,"f"));const a=document.createElement("div");a.className="buttons",Cb(this,Sb,"f").appendChild(a);const o=document.createElement("button");o.addEventListener("click",i),a.appendChild(o);const s=document.createElement("img");s.src="images/arrow_up.svg",o.appendChild(s);const l=document.createElement("button");l.addEventListener("click",r),a.appendChild(l);const c=document.createElement("img");c.src="images/arrow_down.svg",l.appendChild(c)}refresh(e){Cb(this,Mb,"f").textContent=Cb(this,kb,"f").get("Height")+": "+e}dispose(){Cb(this,_b,"f").removeChild(Cb(this,Sb,"f")),Cb(this,Eb,"f").removeChangeListener(Cb(this,Tb,"f"))}};var Rb;!function(e){e[e.VehicleAccelerate=0]="VehicleAccelerate",e[e.VehicleTurnRight=1]="VehicleTurnRight",e[e.VehicleBrake=2]="VehicleBrake",e[e.VehicleTurnLeft=3]="VehicleTurnLeft",e[e.VehicleReset=4]="VehicleReset",e[e.VehicleCockpitCamera=5]="VehicleCockpitCamera",e[e.ToggleUI=6]="ToggleUI",e[e.EditorRotate=7]="EditorRotate",e[e.EditorHeightModifier=8]="EditorHeightModifier",e[e.EditorDelete=9]="EditorDelete",e[e.EditorMoveForwards=10]="EditorMoveForwards",e[e.EditorMoveRight=11]="EditorMoveRight",e[e.EditorMoveBackwards=12]="EditorMoveBackwards",e[e.EditorMoveLeft=13]="EditorMoveLeft",e[e.EditorRotateLeft=14]="EditorRotateLeft",e[e.EditorRotateRight=15]="EditorRotateRight",e[e.EditorMoveDown=16]="EditorMoveDown",e[e.EditorMoveUp=17]="EditorMoveUp",e[e.EditorTest=18]="EditorTest",e[e.EditorPick=19]="EditorPick",e[e.ToggleFpsCounter=20]="ToggleFpsCounter",e[e.ToggleSpectatorCamera=21]="ToggleSpectatorCamera",e[e.SpectatorMoveForwards=22]="SpectatorMoveForwards",e[e.SpectatorMoveRight=23]="SpectatorMoveRight",e[e.SpectatorMoveBackwards=24]="SpectatorMoveBackwards",e[e.SpectatorMoveLeft=25]="SpectatorMoveLeft",e[e.SpectatorSpeedModifier=26]="SpectatorSpeedModifier"}(Rb||(Rb={}));const Lb=Rb;var Ib=n(687),Nb={};Nb.styleTagTransform=u(),Nb.setAttributes=l(),Nb.insert=o().bind(null,"head"),Nb.domAPI=r(),Nb.insertStyleElement=h();t()(Ib.A,Nb);Ib.A&&Ib.A.locals&&Ib.A.locals;var Db,Ub,Bb,Ob,zb,Fb,Wb,Hb=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Vb=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Db=new WeakMap,Ub=new WeakMap,Bb=new WeakMap,Ob=new WeakMap,zb=new WeakMap,Fb=new WeakMap,Wb=new WeakMap;const Gb=class{constructor(e,t,n,i,r,a,o,s,l){Db.set(this,void 0),Ub.set(this,void 0),Bb.set(this,void 0),Ob.set(this,void 0),zb.set(this,void 0),Fb.set(this,void 0),Wb.set(this,void 0),Hb(this,Db,r,"f"),Hb(this,Ub,document.getElementById("ui"),"f"),Hb(this,Bb,document.createElement("div"),"f"),Vb(this,Bb,"f").className="track-export",Vb(this,Ub,"f").appendChild(Vb(this,Bb,"f"));const c=document.createElement("div");c.className="background",Vb(this,Bb,"f").appendChild(c);const h=document.createElement("div");h.className="box",Vb(this,Bb,"f").appendChild(h);const d=document.createElement("div");d.className="bar",h.appendChild(d);const u=document.createElement("button");u.className="button",u.innerHTML=' ',u.append(document.createTextNode(r.get("Back"))),u.addEventListener("click",(()=>{a.playUIClick(),t()})),d.appendChild(u),Hb(this,zb,document.createElement("button"),"f"),Vb(this,zb,"f").className="hidden",Vb(this,zb,"f").innerHTML=' ',Vb(this,zb,"f").append(document.createTextNode(r.get("Copy"))),Vb(this,zb,"f").addEventListener("click",(()=>{a.playUIClick();try{navigator.clipboard.writeText(Vb(this,Ob,"f").value)}catch(e){console.error(e)}})),d.appendChild(Vb(this,zb,"f")),Hb(this,Fb,document.createElement("button"),"f"),Vb(this,Fb,"f").className="hidden",Vb(this,Fb,"f").innerHTML=' ',Vb(this,Fb,"f").append(document.createTextNode(r.get("Import"))),Vb(this,Fb,"f").addEventListener("click",(()=>{a.playUIClick();const e=()=>{const e=Vb(this,Bb,"f").className;Vb(this,Bb,"f").className="hidden",l.show(r.get("Failed to import track"),r.get("Ok"),(()=>{Vb(this,Bb,"f").className=e}))},i=Vb(this,Ob,"f").value,c=Py.fromExportString(i,o);if(null==c)e();else{const{trackName:i,trackData:a}=c,h=a.getId(o),d=a.createThumbnail(o);if(s.checkTrackExists(i)){const c=Vb(this,Bb,"f").className;Vb(this,Bb,"f").className="hidden",l.showConfirm(r.get('The track "{0}" already exists. Do you wish to overwrite it?',[i]),r.get("Cancel"),r.get("Overwrite"),(()=>{Vb(this,Bb,"f").className=c}),(()=>{Vb(this,Bb,"f").className=c,s.saveTrack(i,a,o)?null!=n?n(a,i,h,d):t():e()}))}else s.saveTrack(i,a,o)?null!=n?n(a,i,h,d):t():e()}})),d.appendChild(Vb(this,Fb,"f")),Hb(this,Ob,document.createElement("textarea"),"f"),Vb(this,Ob,"f").spellcheck=!1,h.appendChild(Vb(this,Ob,"f")),i&&(Vb(this,Ob,"f").placeholder=Vb(this,Db,"f").get("Paste track data here...")),Vb(this,Ob,"f").value=e,Vb(this,Ob,"f").readOnly=!i,i?(Vb(this,zb,"f").className="hidden",Vb(this,Fb,"f").className="button right"):(Vb(this,zb,"f").className="button right",Vb(this,Fb,"f").className="hidden"),window.addEventListener("keydown",Hb(this,Wb,(e=>{"Escape"==e.code&&(t(),e.preventDefault())}),"f"))}dispose(){Vb(this,Ub,"f").removeChild(Vb(this,Bb,"f")),window.removeEventListener("keydown",Vb(this,Wb,"f"))}};var jb=n(353),qb={};qb.styleTagTransform=u(),qb.setAttributes=l(),qb.insert=o().bind(null,"head"),qb.domAPI=r(),qb.insertStyleElement=h();t()(jb.A,qb);jb.A&&jb.A.locals&&jb.A.locals;var Xb=n(479),Yb={};Yb.styleTagTransform=u(),Yb.setAttributes=l(),Yb.insert=o().bind(null,"head"),Yb.domAPI=r(),Yb.insertStyleElement=h();t()(Xb.A,Yb);Xb.A&&Xb.A.locals&&Xb.A.locals;var Kb,Zb,Jb,Qb,$b,ex,tx,nx,ix,rx=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},ax=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class ox{constructor(e,t,n,i=!1){if(Kb.set(this,void 0),Zb.set(this,void 0),Jb.set(this,void 0),Qb.set(this,void 0),$b.set(this,void 0),ex.set(this,void 0),tx.set(this,null),nx.set(this,null),ix.set(this,null),this.record=null,rx(this,Kb,t,"f"),rx(this,Zb,document.getElementById("ui"),"f"),rx(this,Jb,document.createElement("div"),"f"),t.getSettingBoolean(Jh.TimerPosition)?ax(this,Jb,"f").className="timer up":ax(this,Jb,"f").className="timer",i)rx(this,Qb,null,"f");else{const t=document.createElement("div");t.className="left",ax(this,Jb,"f").appendChild(t);const i=document.createElement("h2");i.textContent=null!=n?'"'+n+'"':e.get("Record"),t.appendChild(i);const r=document.createElement("div");t.appendChild(r),rx(this,Qb,document.createElement("p"),"f"),ax(this,Qb,"f").className="small",ax(this,Qb,"f").textContent="- - -",r.appendChild(ax(this,Qb,"f"))}const r=document.createElement("div");r.className="center",ax(this,Jb,"f").appendChild(r);const a=document.createElement("h2");a.textContent=e.get("Current"),r.appendChild(a);const o=document.createElement("div");if(r.appendChild(o),rx(this,$b,document.createElement("p"),"f"),ax(this,$b,"f").textContent="- - -",o.appendChild(ax(this,$b,"f")),i)rx(this,ex,null,"f");else{const t=document.createElement("div");t.className="right",ax(this,Jb,"f").appendChild(t);const n=document.createElement("h2");n.textContent=e.get("Difference"),t.appendChild(n);const i=document.createElement("div");t.appendChild(i),rx(this,ex,document.createElement("p"),"f"),ax(this,ex,"f").className="small",ax(this,ex,"f").textContent="- - -",i.appendChild(ax(this,ex,"f"))}ax(this,Zb,"f").appendChild(ax(this,Jb,"f"))}dispose(){ax(this,Zb,"f").removeChild(ax(this,Jb,"f"))}setOverridePosition(e){(null!=e?e:ax(this,Kb,"f").getSettingBoolean(Jh.TimerPosition))?ax(this,Jb,"f").className="timer up":ax(this,Jb,"f").className="timer"}static formatTimeString(e,t=!1){if(null==e)return"---";{const n=Math.abs(e.numberOfFrames),i=Math.floor(n/6e4),r=Math.floor((n-6e4*i)/1e3),a=n-6e4*i-1e3*r;let o;return o=t?e.isNegative()?"-":"+":"",o+i.toString().padStart(2,"0")+":"+r.toString().padStart(2,"0")+"."+a.toString().padStart(3,"0")}}update(e){const t=e.getTime();let n;if(n=null!=this.record?t.difference(this.record):null,null!=ax(this,Qb,"f")){const e=ox.formatTimeString(this.record,!1);if(e!=ax(this,tx,"f")){ax(this,Qb,"f").innerHTML="";for(let t=0;t{Tx(this,dx,"f").playUIClick(),Tx(this,wx,"f").call(this,e,t,n,i)})),a.appendChild(o);const s=document.createElement("div");s.className="track-title",o.appendChild(s);const l=document.createElement("p");l.textContent=t,s.appendChild(l),o.appendChild(i);const c=Tx(this,ux,"f").getRecordTime(Tx(this,mx,"f").profileSlot,n),h=document.createElement("div");if(h.className="record",h.textContent=null!=c?sx.formatTimeString(c):Tx(this,hx,"f").get("No record"),o.appendChild(h),null!=r){const e=document.createElement("button");e.className="delete-button",e.innerHTML='',e.addEventListener("click",(()=>{Tx(this,dx,"f").playUIClick(),r()})),a.appendChild(e)}},Sx=function(){Tx(this,bx,"f").innerHTML="",Tx(this,fx,"f").refreshCustomTracks();const e=document.createElement("h2");if(e.textContent=Tx(this,hx,"f").get("Standard tracks"),Tx(this,bx,"f").appendChild(e),Tx(this,fx,"f").forEachStandard(((e,t,n,i)=>{Tx(this,lx,"m",Ex).call(this,n,t,e,i)})),!Tx(this,fx,"f").isCustomTracksEmpty()){const e=document.createElement("h2");e.textContent=Tx(this,hx,"f").get("Custom tracks"),Tx(this,bx,"f").appendChild(e),Tx(this,fx,"f").forEachCustom(((e,t,n,i)=>{Tx(this,lx,"m",Ex).call(this,n,t,e,i,(()=>{this.hide(),Tx(this,gx,"f").showConfirm(Tx(this,hx,"f").get('Are you sure you want to delete "{0}"?',[t]),Tx(this,hx,"f").get("Cancel"),Tx(this,hx,"f").get("Delete"),(()=>{this.show()}),(()=>{Tx(this,px,"f").deleteTrack(t),this.show()}))}))}))}};const Ax=class{constructor(e,t,n,i,r,a,o,s,l,c,h,d){lx.add(this),cx.set(this,void 0),hx.set(this,void 0),dx.set(this,void 0),ux.set(this,void 0),px.set(this,void 0),fx.set(this,void 0),mx.set(this,void 0),gx.set(this,void 0),vx.set(this,void 0),wx.set(this,void 0),yx.set(this,void 0),bx.set(this,void 0),xx.set(this,null),_x.set(this,!1),kx.set(this,void 0),Mx(this,cx,e,"f"),Mx(this,hx,t,"f"),Mx(this,dx,n,"f"),Mx(this,ux,i,"f"),Mx(this,px,r,"f"),Mx(this,fx,a,"f"),Mx(this,mx,s,"f"),Mx(this,gx,l,"f"),Mx(this,vx,c,"f"),Mx(this,wx,d,"f"),Mx(this,yx,document.createElement("div"),"f"),Tx(this,yx,"f").className="hidden",e.appendChild(Tx(this,yx,"f"));const u=document.createElement("div");u.className="bar",Tx(this,yx,"f").appendChild(u),Mx(this,bx,document.createElement("div"),"f"),Tx(this,bx,"f").className="tracks-container",Tx(this,yx,"f").appendChild(Tx(this,bx,"f"));const p=document.createElement("button");p.className="button",c?(p.innerHTML=' ',p.append(document.createTextNode(Tx(this,hx,"f").get("Cancel")))):(p.innerHTML=' ',p.append(document.createTextNode(Tx(this,hx,"f").get("Back")))),p.addEventListener("click",(()=>{Tx(this,dx,"f").playUIClick(),h()})),u.appendChild(p);const f=document.createElement("button");f.className="button right",f.innerHTML=' ',f.append(document.createTextNode(Tx(this,hx,"f").get("Import"))),f.addEventListener("click",(()=>{Tx(this,dx,"f").playUIClick(),this.hide(),Mx(this,xx,new Gb("",(()=>{var e;this.show(),null===(e=Tx(this,xx,"f"))||void 0===e||e.dispose(),Mx(this,xx,null,"f")}),((e,t,n,i)=>{var r;null===(r=Tx(this,xx,"f"))||void 0===r||r.dispose(),Mx(this,xx,null,"f"),Tx(this,wx,"f").call(this,e,t,n,i)}),!0,t,n,o,r,l),"f")})),u.appendChild(f),window.addEventListener("keydown",Mx(this,kx,(e=>{Tx(this,_x,"f")&&"Escape"==e.code&&(h(),e.preventDefault())}),"f"))}dispose(){Tx(this,cx,"f").removeChild(Tx(this,yx,"f")),window.removeEventListener("keydown",Tx(this,kx,"f"))}hide(){Tx(this,yx,"f").className="hidden",Mx(this,_x,!1,"f")}show(){Tx(this,vx,"f")?Tx(this,yx,"f").className="track-selection editor-track-selection":Tx(this,yx,"f").className="track-selection",Mx(this,_x,!0,"f"),Tx(this,lx,"m",Sx).call(this)}get isOpen(){return Tx(this,_x,"f")}};var Cx,Px=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Rx=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class Lx{constructor(e){Cx.set(this,void 0);const t=[];e.forEach((([e,n,i])=>{t.push([e,n,i])})),Px(this,Cx,t,"f")}rotated(e){const t=[];return Rx(this,Cx,"f").forEach((([n,i,r])=>{switch(e){case 0:t.push([n,i,r]);break;case 1:t.push([r,i,-n]);break;case 2:t.push([-n,i,-r]);break;case 3:t.push([-r,i,n]);break;default:throw"Invalid rotation"}})),new Lx(t)}forEach(e){Rx(this,Cx,"f").forEach((([t,n,i])=>{e(t,n,i)}))}}Cx=new WeakMap;const Ix=Lx;var Nx=n(51),Dx={};Dx.styleTagTransform=u(),Dx.setAttributes=l(),Dx.insert=o().bind(null,"head"),Dx.domAPI=r(),Dx.insertStyleElement=h();t()(Nx.A,Dx);Nx.A&&Nx.A.locals&&Nx.A.locals;var Ux,Bx,Ox,zx,Fx,Wx,Hx=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Vx=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Bx=new WeakMap,Ox=new WeakMap,zx=new WeakMap,Fx=new WeakMap,Ux=new WeakSet,Wx=function(){!Vx(this,Fx,"f")&&Vx(this,zx,"f")?Vx(this,Ox,"f").className="editor-touch-controls":Vx(this,Ox,"f").className="hidden"};const Gx=class{constructor(e,t,n){Ux.add(this),Bx.set(this,void 0),Ox.set(this,void 0),zx.set(this,!1),Fx.set(this,!1),Hx(this,Bx,e,"f"),Hx(this,Ox,document.createElement("div"),"f"),Vx(this,Ox,"f").className="hidden",Vx(this,Bx,"f").appendChild(Vx(this,Ox,"f"));const i=document.createElement("button");i.className="rotate",i.innerHTML='',i.addEventListener("touchstart",(()=>{i.classList.add("active")})),i.addEventListener("touchend",(()=>{i.classList.remove("active")})),i.addEventListener("click",(()=>{t.playUIClick(),n()})),Vx(this,Ox,"f").appendChild(i)}setEnabled(e){Hx(this,zx,e,"f"),Vx(this,Ux,"m",Wx).call(this)}hide(){Hx(this,Fx,!0,"f"),Vx(this,Ux,"m",Wx).call(this)}show(){Hx(this,Fx,!1,"f"),Vx(this,Ux,"m",Wx).call(this)}dispose(){Vx(this,Bx,"f").removeChild(Vx(this,Ox,"f"))}};var jx=n(242),qx={};qx.styleTagTransform=u(),qx.setAttributes=l(),qx.insert=o().bind(null,"head"),qx.domAPI=r(),qx.insertStyleElement=h();t()(jx.A,qx);jx.A&&jx.A.locals&&jx.A.locals;var Xx,Yx,Kx,Zx=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Jx=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Xx=new WeakMap,Yx=new WeakMap,Kx=new WeakMap;const Qx=class{constructor(e,t,n,i,r,a,o,s){Xx.set(this,void 0),Yx.set(this,void 0),Kx.set(this,void 0),Zx(this,Xx,document.getElementById("ui"),"f"),Zx(this,Yx,document.createElement("div"),"f"),Jx(this,Yx,"f").className="editor-help",Jx(this,Xx,"f").appendChild(Jx(this,Yx,"f"));const l=document.createElement("div");l.className="background",Jx(this,Yx,"f").appendChild(l);const c=document.createElement("section");c.className="container",Jx(this,Yx,"f").appendChild(c);const h=document.createElement("h1");h.textContent=t.get("How to use the editor"),c.appendChild(h);const d=document.createElement("section");d.className="content",c.appendChild(d);const u=document.createElement("h2");function p(e){const i=n.getKeyBindings(e).filter((e=>null!=e));return 0==i.length?t.get("Not set"):i.map((e=>"["+e+"]")).join(" "+t.get("or")+" ")}u.textContent=t.get("Camera controls"),d.appendChild(u);let f="";i.touchEnabled?(f+=t.get("The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.")+"\n\n",f+=t.get("The edited height can be changed by using the height selection in the bottom left corner.")):(f+=t.get("The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.")+"\n\n",f+=t.get("Alternatively, the camera can also be controlled using the following keyboard keys:")+"\n\n",f+="\t"+t.get("Move forwards:")+" "+p(Lb.EditorMoveForwards)+"\n",f+="\t"+t.get("Move backwards:")+" "+p(Lb.EditorMoveBackwards)+"\n",f+="\t"+t.get("Move left:")+" "+p(Lb.EditorMoveLeft)+"\n",f+="\t"+t.get("Move right:")+" "+p(Lb.EditorMoveRight)+"\n",f+="\t"+t.get("Rotate left:")+" "+p(Lb.EditorRotateLeft)+"\n",f+="\t"+t.get("Rotate right:")+" "+p(Lb.EditorRotateRight)+"\n\n",f+=t.get("The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:")+"\n\n",f+="\t"+t.get("Move up:")+" "+p(Lb.EditorMoveUp)+"\n",f+="\t"+t.get("Move down:")+" "+p(Lb.EditorMoveDown));const m=document.createElement("p");m.textContent=f,d.appendChild(m);const g=document.createElement("h2");g.textContent=t.get("Editing"),d.appendChild(g);let v="";i.touchEnabled?(v+=t.get("Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.")+"\n\n",v+=t.get("The selected part can then be rotated by tapping the rotate button in the bottom left corner.")+"\n\n",v+=t.get("Track parts can be deleted by using the delete tool in the right side menu.")):(v+=t.get("Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.")+"\n\n",v+=t.get("Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:")+" "+p(Lb.EditorPick)+"\n\n",v+=t.get("The selected part can then be rotated using the following keyboard shortcut:")+" "+p(Lb.EditorRotate)+"\n\n",v+=t.get("Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:")+" "+p(Lb.EditorDelete));const w=document.createElement("p");w.textContent=v,d.appendChild(w);const y=document.createElement("h2");y.textContent=t.get("Starting points, checkpoints and the finish line"),d.appendChild(y);let b=t.get("Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.")+"\n\n";b+=t.get("Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.")+"\n\n",b+=t.get("Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.")+"\n\n",b+=t.get("The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.");const x=document.createElement("p");x.textContent=b,d.appendChild(x);const _=document.createElement("div");_.className="part-images",d.appendChild(_);const k=document.createElement("div");_.appendChild(k);const E=document.createElement("img");E.src=r,k.appendChild(E);const S=document.createElement("span");S.textContent=t.get("Starting point"),k.appendChild(S);const M=document.createElement("div");_.appendChild(M);const T=document.createElement("img");T.src=a,M.appendChild(T);const A=document.createElement("span");A.textContent=t.get("Checkpoint"),M.appendChild(A);const C=document.createElement("div");_.appendChild(C);const P=document.createElement("img");P.src=o,C.appendChild(P);const R=document.createElement("span");R.textContent=t.get("Finish line"),C.appendChild(R);const L=document.createElement("h2");L.textContent=t.get("Exporting the track"),d.appendChild(L);let I=t.get("When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.")+"\n\n";const N=document.createElement("p");N.textContent=I,d.appendChild(N);const D=document.createElement("div");D.className="button-wrapper",c.appendChild(D);const U=document.createElement("button");U.className="button",U.innerHTML=' ',U.append(document.createTextNode(t.get("Close"))),U.addEventListener("click",(()=>{e.playUIClick(),s()})),D.appendChild(U),window.addEventListener("keydown",Zx(this,Kx,(e=>{"Escape"==e.code&&(s(),e.preventDefault())}),"f"))}dispose(){Jx(this,Xx,"f").removeChild(Jx(this,Yx,"f")),window.removeEventListener("keydown",Jx(this,Kx,"f"))}};var $x,e_,t_,n_,i_,r_,a_,o_,s_,l_,c_,h_,d_,u_,p_,f_,m_,g_,v_,w_,y_,b_,x_,__,k_,E_,S_,M_,T_,A_,C_,P_,R_,L_,I_,N_,D_,U_,B_,O_,z_,F_,W_,H_,V_,G_,j_,q_,X_,Y_,K_,Z_,J_,Q_,$_,ek,tk,nk,ik,rk,ak,ok,sk,lk,ck,hk,dk,uk,pk,fk,mk,gk,vk,wk,yk,bk,xk,_k,kk,Ek,Sk,Mk,Tk,Ak,Ck,Pk,Rk,Lk,Ik,Nk=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Dk=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};e_=new WeakMap,t_=new WeakMap,n_=new WeakMap,i_=new WeakMap,r_=new WeakMap,a_=new WeakMap,o_=new WeakMap,s_=new WeakMap,l_=new WeakMap,c_=new WeakMap,h_=new WeakMap,d_=new WeakMap,u_=new WeakMap,p_=new WeakMap,f_=new WeakMap,m_=new WeakMap,g_=new WeakMap,v_=new WeakMap,w_=new WeakMap,y_=new WeakMap,b_=new WeakMap,x_=new WeakMap,__=new WeakMap,k_=new WeakMap,E_=new WeakMap,S_=new WeakMap,M_=new WeakMap,T_=new WeakMap,A_=new WeakMap,C_=new WeakMap,P_=new WeakMap,R_=new WeakMap,L_=new WeakMap,I_=new WeakMap,N_=new WeakMap,D_=new WeakMap,U_=new WeakMap,B_=new WeakMap,O_=new WeakMap,z_=new WeakMap,F_=new WeakMap,W_=new WeakMap,H_=new WeakMap,V_=new WeakMap,G_=new WeakMap,j_=new WeakMap,q_=new WeakMap,X_=new WeakMap,Y_=new WeakMap,K_=new WeakMap,Z_=new WeakMap,J_=new WeakMap,Q_=new WeakMap,$_=new WeakMap,ek=new WeakMap,tk=new WeakMap,nk=new WeakMap,ik=new WeakMap,rk=new WeakMap,ak=new WeakMap,ok=new WeakMap,sk=new WeakMap,lk=new WeakMap,ck=new WeakMap,hk=new WeakMap,dk=new WeakMap,uk=new WeakMap,pk=new WeakMap,_k=new WeakMap,kk=new WeakMap,Ek=new WeakMap,$x=new WeakSet,fk=function(e){const t=document.getElementById("ui");Nk(this,g_,document.createElement("div"),"f"),Dk(this,g_,"f").className="hidden",t.appendChild(Dk(this,g_,"f")),Nk(this,v_,document.createElement("div"),"f"),Dk(this,v_,"f").className="top",Dk(this,g_,"f").appendChild(Dk(this,v_,"f"));const n=document.createElement("div");n.className="button-bar",Dk(this,v_,"f").appendChild(n);const i=document.createElement("button");i.className="button",i.innerHTML=' ',i.append(document.createTextNode(Dk(this,n_,"f").get("Exit"))),i.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick(),Dk(this,$x,"m",mk).call(this,e)})),n.appendChild(i);const r=document.createElement("button");r.className="button",r.innerHTML=' ',r.append(Dk(this,n_,"f").get("Test")),r.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick(),Dk(this,$x,"m",gk).call(this)})),n.appendChild(r);const a=document.createElement("button");a.className="button",a.innerHTML=' ',a.append(Dk(this,n_,"f").get("Generate")),a.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick();const e=()=>{var e;!function(e){let t;e.clear();do{let n=0,i=0,r=0,a=Math.floor(4*Math.random());Math.random()<.5&&(i=Math.floor(20*Math.random()));const o=new Map;function s(){switch(a){case 0:--r;break;case 1:--n;break;case 2:++r;break;case 3:++n}}function l(){switch(a){case 0:++r;break;case 1:++n;break;case 2:--r;break;case 3:--n}}function c(){switch((a+1)%4){case 0:--r;break;case 1:--n;break;case 2:++r;break;case 3:++n}}function h(){switch(((a-1)%4+4)%4){case 0:--r;break;case 1:--n;break;case 2:++r;break;case 3:++n}}function d(e,n,i,r=null){const a=e+"|"+n+"|"+i;o.has(a)&&(t=!0),null!=r&&(r.x=e,r.y=n,r.z=i,"direction"in r&&(r.direction=(r.direction%4+4)%4)),o.set(a,r)}function u(e,t,n){return!!o.has(e+"|"+t+"|"+n)}function p(){let e=!1;for(let t=0;t0?(--e,Math.random()<.2?E(e):Math.random()<.6?g(e):Math.random()<.5?y(e,i<2||Math.random()<.5):Math.random()<.5?v(e):w(e)):_()}function m(e){e>0?(--e,Math.random()<.1?S(e):Math.random()<.6?M(e):Math.random()<.5?C(e,i<2||Math.random()<.5):Math.random()<.5?T(e):A(e)):S(e)}function g(e){d(n,i,r,{type:0,direction:a}),p(),s(),f(e)}function v(e){d(n,i,r,{type:1,direction:a-1}),p(),a=(a+1)%4,s(),e>0?(--e,Math.random()<.4?g(e):Math.random()<.5?v(e):w(e)):_()}function w(e){d(n,i,r,{type:1,direction:a}),p(),a=((a-1)%4+4)%4,s(),e>0?(--e,Math.random()<.4?g(e):Math.random()<.5?v(e):w(e)):_()}function y(e,t){let o;o=t?2:3,t||--i,d(n,i+1,r),d(n,i,r,{type:o,direction:a}),s(),t&&++i,e>0?(--e,Math.random()<.4||i<=3?b(e,t):x(e,t)):b(e,t)}function b(e,t){let o;t||--i,d(n,i+1,r),o=t?3:2,d(n,i,r,{type:o,direction:a+2}),s(),t&&++i,e>0?f(--e):_()}function x(e,t){let o;t||(i-=2),d(n,i+1,r),d(n,i+2,r),o=t?a:a+2,d(n,i,r,{type:4,direction:o}),s(),t&&(i+=2),e>0?(--e,Math.random()<.4||i<=3?b(e,t):x(e,t)):b(e,t)}function _(){d(n,i,r,{type:6,direction:a})}function k(e){d(n,i,r,{type:5,direction:a}),p(),s(),f(e)}function E(e){Math.random()<.5?(d(n,i,r,{type:8,direction:a}),p(),h(),d(n,i,r,{type:12,direction:a+2}),p(),s()):(d(n,i,r,{type:9,direction:a}),p(),c(),d(n,i,r,{type:12,direction:a+1}),p(),s(),h()),m(e)}function S(e){Math.random()<.5?(d(n,i,r,{type:12,direction:a+3}),p(),c(),d(n,i,r,{type:9,direction:a+2}),p(),s()):(d(n,i,r,{type:8,direction:a+2}),p(),c(),d(n,i,r,{type:12,direction:a}),p(),s(),h()),f(e)}function M(e){d(n,i,r,{type:10,direction:a}),p(),c(),d(n,i,r,{type:10,direction:a+2}),p(),h(),s(),m(e)}function T(e){d(n,i,r,{type:10,direction:a}),p(),s(),d(n,i,r,{type:12,direction:a+3}),p(),c(),d(n,i,r,{type:10,direction:a+1}),p(),l(),d(n,i,r,{type:11,direction:a+3}),p(),s(),a=(a+1)%4,s(),m(e)}function A(e){d(n,i,r,{type:11,direction:a}),p(),c(),d(n,i,r,{type:10,direction:a+2}),p(),s(),d(n,i,r,{type:12,direction:a}),p(),h(),d(n,i,r,{type:10,direction:a+1}),p(),l(),a=((a-1)%4+4)%4,s(),m(e)}function C(e,t){let o,l;t?(o=13,l=14):(o=15,l=16),t||--i,c(),d(n,i+1,r),d(n,i,r,{type:o,direction:a}),h(),d(n,i+1,r),d(n,i,r,{type:l,direction:a}),s(),t&&++i,e>0?(--e,Math.random()<.4||i<=3?P(e,t):R(e,t)):P(e,t)}function P(e,t){let o,l;t||--i,t?(o=16,l=15):(o=14,l=13),c(),d(n,i+1,r),d(n,i,r,{type:o,direction:a+2}),h(),d(n,i+1,r),d(n,i,r,{type:l,direction:a+2}),s(),t&&++i,m(e)}function R(e,t){t||(i-=2),t?(c(),d(n,i+1,r),d(n,i+2,r),d(n,i,r,{type:17,direction:a}),h(),d(n,i+1,r),d(n,i+2,r),d(n,i,r,{type:18,direction:a})):(c(),d(n,i+1,r),d(n,i+2,r),d(n,i,r,{type:18,direction:a+2}),h(),d(n,i+1,r),d(n,i+2,r),d(n,i,r,{type:17,direction:a+2})),s(),t&&(i+=2),e>0?(--e,Math.random()<.4||i<=3?P(e,t):R(e,t)):P(e,t)}t=!1,k(50),t||o.forEach((t=>{null!=t&&e.setPart(t.x,t.y,t.z,t.type,t.direction,null)}))}while(t)}(Dk(this,a_,"f")),Dk(this,a_,"f").generateMeshes(),null===(e=Dk(this,ck,"f"))||void 0===e||e.refresh(Dk(this,a_,"f")),Dk(this,E_,"f").setFromExistingCheckpoints(Dk(this,a_,"f")),Nk(this,K_,!0,"f")};Dk(this,K_,"f")?e():(Dk(this,g_,"f").inert=!0,Dk(this,d_,"f").showConfirm(Dk(this,n_,"f").get("Are you sure you want to generate a new track?\n\nYour current track will be lost!"),Dk(this,n_,"f").get("Cancel"),Dk(this,n_,"f").get("Confirm"),(()=>{Dk(this,g_,"f").inert=!1}),(()=>{e(),Dk(this,g_,"f").inert=!1})))})),n.appendChild(a),Nk(this,S_,new Ax(t,Dk(this,n_,"f"),Dk(this,e_,"f"),Dk(this,s_,"f"),Dk(this,l_,"f"),Dk(this,c_,"f"),Dk(this,o_,"f"),Dk(this,h_,"f"),Dk(this,d_,"f"),!0,(()=>{Dk(this,g_,"f").className="editor",Dk(this,S_,"f").hide()}),((e,t)=>{var n;Dk(this,a_,"f").loadTrackData(e,!1),Dk(this,a_,"f").generateMeshes(),null===(n=Dk(this,ck,"f"))||void 0===n||n.refresh(Dk(this,a_,"f")),Dk(this,E_,"f").setFromExistingCheckpoints(Dk(this,a_,"f")),Nk(this,K_,!0,"f"),Dk(this,w_,"f").value=t,this.resetView(),Dk(this,g_,"f").className="editor",Dk(this,S_,"f").hide()})),"f"),Nk(this,T_,new Gx(Dk(this,g_,"f"),Dk(this,e_,"f"),(()=>{Nk(this,ok,(Dk(this,ok,"f")+1)%4,"f")})),"f"),Dk(this,T_,"f").setEnabled(Dk(this,u_,"f").touchEnabled);const o=document.createElement("button");o.className="button",o.innerHTML=' ',o.append(document.createTextNode(Dk(this,n_,"f").get("Load"))),o.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick(),Dk(this,K_,"f")?(Dk(this,S_,"f").show(),Dk(this,g_,"f").className="hidden"):(Dk(this,g_,"f").inert=!0,Dk(this,d_,"f").showConfirm(Dk(this,n_,"f").get("Are you sure you want to load a new track?\n\nYour current track will be lost!"),Dk(this,n_,"f").get("Cancel"),Dk(this,n_,"f").get("Confirm"),(()=>{Dk(this,g_,"f").inert=!1}),(()=>{Dk(this,S_,"f").show(),Dk(this,g_,"f").className="hidden",Dk(this,g_,"f").inert=!1})))})),n.appendChild(o);const s=document.createElement("button");s.className="button",s.innerHTML=' ',s.append(document.createTextNode(Dk(this,n_,"f").get("Save"))),s.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick();const e=this.getTrackName();if(null==e)Dk(this,$x,"m",wk).call(this,Dk(this,n_,"f").get("Failed to save - Track name is needed!"),!1);else{const t=()=>{Dk(this,l_,"f").saveTrack(e,Dk(this,a_,"f").getTrackData(),Dk(this,o_,"f"))?(Dk(this,$x,"m",wk).call(this,Dk(this,n_,"f").get("Track saved!"),!0),Nk(this,K_,!0,"f")):Dk(this,$x,"m",wk).call(this,Dk(this,n_,"f").get("Failed to save!"),!1)},n=Dk(this,l_,"f").checkTrackExists(e);null==n?Dk(this,$x,"m",wk).call(this,Dk(this,n_,"f").get("Failed to save!"),!1):0==n?t():(Dk(this,g_,"f").inert=!0,Dk(this,d_,"f").showConfirm(Dk(this,n_,"f").get('Are you sure you want to overwrite "{0}"?',[e]),Dk(this,n_,"f").get("Cancel"),Dk(this,n_,"f").get("Confirm"),(()=>{Dk(this,g_,"f").inert=!1}),(()=>{t(),Dk(this,g_,"f").inert=!1})))}})),n.appendChild(s);const l=document.createElement("button");l.className="button",l.innerHTML=' ',l.append(document.createTextNode(Dk(this,n_,"f").get("Export"))),l.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick();const e=this.getTrackName();if(null==e)Dk(this,$x,"m",wk).call(this,Dk(this,n_,"f").get("Failed to export - Track name is needed!"),!1);else{const t=Dk(this,a_,"f").getTrackData().toExportString(e,Dk(this,o_,"f"));Dk(this,g_,"f").className="hidden",Nk(this,M_,new Gb(t,(()=>{var e;null===(e=Dk(this,M_,"f"))||void 0===e||e.dispose(),Nk(this,M_,null,"f"),Dk(this,g_,"f").className="editor"}),null,!1,Dk(this,n_,"f"),Dk(this,e_,"f"),Dk(this,o_,"f"),Dk(this,l_,"f"),Dk(this,d_,"f")),"f")}})),n.appendChild(l);const c=document.createElement("button");c.className="button",c.innerHTML=' ',c.append(document.createTextNode(Dk(this,n_,"f").get("Help"))),c.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick();const e=Dk(this,o_,"f").getPart(Bw.Start).mesh;if(null==e)throw new Error("Starting point mesh is null");const t=Dk(this,$x,"m",Sk).call(this,e),n=Dk(this,o_,"f").getPart(Bw.Checkpoint).mesh;if(null==n)throw new Error("Checkpoint mesh is null");const i=Dk(this,$x,"m",Sk).call(this,n),r=Dk(this,o_,"f").getPart(Bw.Finish).mesh;if(null==r)throw new Error("Finish line mesh is null");const a=Dk(this,$x,"m",Sk).call(this,r);Dk(this,g_,"f").className="hidden",Nk(this,A_,new Qx(Dk(this,e_,"f"),Dk(this,n_,"f"),Dk(this,p_,"f"),Dk(this,u_,"f"),t,i,a,(()=>{var e;null===(e=Dk(this,A_,"f"))||void 0===e||e.dispose(),Nk(this,A_,null,"f"),Dk(this,g_,"f").className="editor"})),"f")})),n.appendChild(c);const h=document.createElement("div");h.className="trackname-input",h.textContent=Dk(this,n_,"f").get("Track name")+": ",Dk(this,v_,"f").appendChild(h),Nk(this,w_,document.createElement("input"),"f"),Dk(this,w_,"f").type="text",Dk(this,w_,"f").maxLength=64,Dk(this,w_,"f").spellcheck=!1,h.appendChild(Dk(this,w_,"f")),Nk(this,y_,document.createElement("div"),"f"),Dk(this,y_,"f").className="message-box",Dk(this,g_,"f").appendChild(Dk(this,y_,"f"));const d=document.createElement("side");d.className="side",Dk(this,g_,"f").appendChild(d),Nk(this,E_,new yb(d,Dk(this,n_,"f"),Dk(this,e_,"f"),Dk(this,u_,"f")),"f"),Nk(this,x_,document.createElement("div"),"f"),Dk(this,x_,"f").className="side-panel",d.appendChild(Dk(this,x_,"f")),Nk(this,__,document.createElement("div"),"f"),Dk(this,__,"f").className="category-panel",Dk(this,x_,"f").appendChild(Dk(this,__,"f"));const u=new zr(Ky.partWidth,Ky.partHeight,Ky.partLength);u.translate(0,2.5,0);const p=new Br(u,Dk(this,$_,"f")),f=document.createElement("button");f.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick(),Dk(this,$x,"m",bk).call(this,null)})),Dk(this,__,"f").appendChild(f);const m=document.createElement("img");m.src="images/erase.svg",f.appendChild(m),Dk(this,Q_,"f").add(p),Dk(this,hk,"f").push({id:null,mesh:p,button:f,tiles:new Ix([[0,0,0]]),isCheckpoint:!1,category:null}),Nk(this,k_,new Pb(Dk(this,g_,"f"),Dk(this,n_,"f"),Dk(this,u_,"f"),(()=>{Dk(this,e_,"f").playUIClick(),Nk(this,$x,Dk(this,$x,"a",Mk)+1,"a",Tk)}),(()=>{Dk(this,e_,"f").playUIClick(),Nk(this,$x,Math.max(0,Dk(this,$x,"a",Mk)-1),"a",Tk)})),"f"),Dk(this,k_,"f").refresh(Dk(this,$x,"a",Mk))},mk=function(e){const t=()=>{Dk(this,r_,"f").trigger((()=>{Nk(this,K_,!0,"f"),Dk(this,w_,"f").value="",e(),Dk(this,g_,"f").inert=!1}))};Dk(this,K_,"f")?t():(Dk(this,g_,"f").inert=!0,Dk(this,d_,"f").showConfirm(Dk(this,n_,"f").get("Are you sure you want to exit the editor?")+"\n\n"+Dk(this,n_,"f").get("All unsaved data will be lost!"),Dk(this,n_,"f").get("Cancel"),Dk(this,n_,"f").get("Confirm"),(()=>{Dk(this,g_,"f").inert=!1}),(()=>{t()})))},gk=function(){if(null!=Dk(this,a_,"f").getStartTransform()){if(null==Dk(this,f_,"f"))throw"Test callback is null";Dk(this,f_,"f").call(this)}else Dk(this,$x,"m",wk).call(this,Dk(this,n_,"f").get("Starting point is missing!"),!1)},vk=function(){if(null!=Dk(this,ak,"f")){const e=Dk(this,a_,"f").getPartAt(Dk(this,ak,"f").x,Dk(this,ak,"f").y,Dk(this,ak,"f").z);if(null!=e){const t=Dk(this,hk,"f").findIndex((t=>t.id==e.id));t>=0&&(Dk(this,$x,"m",xk).call(this,t),Nk(this,ok,e.rotation,"f"))}}},wk=function(e,t){null!=Dk(this,b_,"f")&&(clearTimeout(Dk(this,b_,"f")),Nk(this,b_,null,"f")),t?Dk(this,y_,"f").classList.add("green"):Dk(this,y_,"f").classList.remove("green"),Dk(this,y_,"f").classList.remove("show"),Dk(this,y_,"f").classList.remove("hide"),Nk(this,b_,window.setTimeout((()=>{Dk(this,y_,"f").textContent=e,Dk(this,y_,"f").classList.add("show"),Nk(this,b_,window.setTimeout((()=>{Dk(this,y_,"f").classList.remove("show"),Dk(this,y_,"f").classList.add("hide")}),3e3),"f")}),0),"f")},yk=function(){var e;const t=Dk(this,o_,"f").getAllParts();for(let n=0;ne.category==i.category)))||void 0===e?void 0:e.partPanel;if(null==o){o=document.createElement("div"),o.className="part-panel hidden",Dk(this,x_,"f").prepend(o);const e=document.createElement("button");e.addEventListener("click",(()=>{Dk(this,$x,"m",bk).call(this,i.category),Dk(this,e_,"f").playUIClick()})),Dk(this,__,"f").appendChild(e);const t=document.createElement("img");t.src=a,e.appendChild(t),Dk(this,uk,"f").push({category:i.category,button:e,partPanel:o,selectedIndex:null})}const s=document.createElement("button");s.addEventListener("click",(()=>{Dk(this,e_,"f").playUIClick(),Dk(this,$x,"m",xk).call(this,1+n)})),o.appendChild(s);const l=document.createElement("img");l.src=a,s.appendChild(l),r.material=Dk(this,$_,"f"),Dk(this,Q_,"f").add(r),Dk(this,hk,"f").push({id:i.id,mesh:r,button:s,tiles:i.tiles,isCheckpoint:null!=i.detector&&i.detector.type==yy.Checkpoint,category:i.category})}Dk(this,$x,"m",xk).call(this,1)},bk=function(e){var t;if(Dk(this,pk,"f")!=e)if(Nk(this,pk,e,"f"),Dk(this,uk,"f").forEach((t=>{t.category==e?(t.button.classList.add("selected"),t.partPanel.classList.remove("hidden")):(t.button.classList.remove("selected"),t.partPanel.classList.add("hidden"))})),null==e)Dk(this,$x,"m",xk).call(this,0);else{let n=null===(t=Dk(this,uk,"f").find((t=>t.category==e)))||void 0===t?void 0:t.selectedIndex;if(null==n&&(n=Dk(this,hk,"f").findIndex((t=>t.category==e)),n<0))throw"Empty category";Dk(this,$x,"m",xk).call(this,n)}},xk=function(e){Dk(this,hk,"f").forEach((({button:t},n)=>{t.className=n==e?"selected":""})),Nk(this,dk,e,"f");const t=Dk(this,uk,"f").find((e=>e.category==Dk(this,pk,"f")));null!=t&&(t.selectedIndex=e);const n=Dk(this,hk,"f")[e];null!=n&&n.isCheckpoint?Dk(this,E_,"f").show():Dk(this,E_,"f").hide()},Sk=function(e){if(null==Dk(this,_k,"f")||null==Dk(this,kk,"f")||null==Dk(this,Ek,"f")){const e=document.createElement("canvas");e.width=128,e.height=128,Nk(this,_k,new Zs({canvas:e,alpha:!0,preserveDrawingBuffer:!0,antialias:!0}),"f"),Dk(this,_k,"f").outputColorSpace=Ct,Nk(this,Ek,new Qs,"f"),Nk(this,kk,new _a(-1,1,1,-1,.1,1e4),"f"),Dk(this,kk,"f").position.set(1e3,1e3,1e3),Dk(this,kk,"f").lookAt(0,0,0),Dk(this,Ek,"f").add(Dk(this,kk,"f"));const t=new Nh(16777215,4.7);t.position.set(8,10,10),Dk(this,Ek,"f").add(t)}e.geometry.computeBoundingSphere();const t=(new ii).copy(e.geometry.boundingSphere);return Dk(this,kk,"f").zoom=1/t.radius*.9,Dk(this,kk,"f").position.copy(t.center),Dk(this,kk,"f").position.addScalar(1e3),Dk(this,kk,"f").updateProjectionMatrix(),Dk(this,_k,"f").clear(),Dk(this,Ek,"f").add(e),Dk(this,_k,"f").render(Dk(this,Ek,"f"),Dk(this,kk,"f")),Dk(this,Ek,"f").remove(e),Dk(this,_k,"f").domElement.toDataURL()},Mk=function(){return Math.floor(Dk(this,J_,"f").position.y/5)},Tk=function(e){const t=Dk(this,$x,"a",Mk);Dk(this,J_,"f").position.y=5*e,Dk(this,F_,"f").position.y+=5*(e-t),Dk(this,W_,"f").target.y=5*e,Dk(this,k_,"f").refresh(e),Dk(this,J_,"f").updateWorldMatrix(!0,!0),Dk(this,W_,"f").update()},Ak=function(){const e=performance.now();if(e-Dk(this,t_,"f")>35){const t=Dk(this,e_,"f").getBuffer("editor_edit");if(null!=t&&null!=Dk(this,e_,"f").context&&null!=Dk(this,e_,"f").destinationSfx){const e=Dk(this,e_,"f").context.createBufferSource();e.buffer=t,e.playbackRate.value=.7;const n=Dk(this,e_,"f").context.createGain();n.gain.value=.05,e.connect(n),n.connect(Dk(this,e_,"f").destinationSfx),e.start(0)}Nk(this,t_,e,"f")}},Ck=function(){if(Dk(this,u_,"f").touchEnabled)return new Un(Math.round(Dk(this,W_,"f").target.x/Ky.partWidth),Math.round(Dk(this,W_,"f").target.y/Ky.partHeight),Math.round(Dk(this,W_,"f").target.z/Ky.partLength));let e;if(null!=Dk(this,nk,"f")?(Dk(this,Z_,"f").setFromCamera(Dk(this,nk,"f"),Dk(this,i_,"f").camera),e=Dk(this,Z_,"f").intersectObjects([Dk(this,J_,"f")])):e=[],e.length>0){const t=e[0],n=new Un(Math.round(t.point.x/Ky.partWidth),Math.floor(Dk(this,J_,"f").position.y/Ky.partHeight),Math.round(t.point.z/Ky.partLength));return t.point.distanceToSquared(Dk(this,W_,"f").target)<=Dk(this,lk,"f")*Dk(this,lk,"f")?n:null}return null},Pk=function(e,t){const n=[];return t.rotated(Dk(this,ok,"f")).forEach(((t,i,r)=>{const a=e.x+t,o=e.y+i,s=e.z+r;Dk(this,a_,"f").hasPartAt(a,o,s)&&n.push({x:a,y:o,z:s})})),n},Rk=function(e){var t;let n=!1;e.forEach((({x:e,y:t,z:i})=>{Dk(this,a_,"f").hasPartAt(e,t,i)&&(Dk(this,a_,"f").deletePart(e,t,i),n=!0)})),n&&(Dk(this,$x,"m",Ak).call(this),Dk(this,a_,"f").generateMeshes(),null===(t=Dk(this,ck,"f"))||void 0===t||t.refresh(Dk(this,a_,"f")),Dk(this,E_,"f").setFromExistingCheckpoints(Dk(this,a_,"f")),Nk(this,K_,!1,"f"))},Lk=function(e){const t=4*Dk(this,W_,"f").getDistance();if(Dk(this,m_,"f")&&Dk(this,$x,"m",Ik).call(this)){const n=new Un;if(Dk(this,V_,"f")&&(n.z=-1),Dk(this,G_,"f")&&(n.x=1),Dk(this,j_,"f")&&(n.z=1),Dk(this,q_,"f")&&(n.x=-1),0!=n.x||0!=n.z){const i=n.applyQuaternion(Dk(this,F_,"f").quaternion),r=new ln(i.x,i.z).normalize(),a=new Un(r.x,0,r.y).multiplyScalar(t*e);Dk(this,F_,"f").position.add(a),Dk(this,W_,"f").target.add(a)}let i=0;if(Dk(this,X_,"f")&&(i+=1.5*Math.PI*e),Dk(this,Y_,"f")&&(i-=1.5*Math.PI*e),0!=i){const e=new ln(Dk(this,F_,"f").position.x,Dk(this,F_,"f").position.z).distanceTo(new ln(Dk(this,W_,"f").target.x,Dk(this,W_,"f").target.z)),t=Math.atan2(Dk(this,F_,"f").position.z-Dk(this,W_,"f").target.z,Dk(this,F_,"f").position.x-Dk(this,W_,"f").target.x)+i;Dk(this,F_,"f").position.x=Dk(this,W_,"f").target.x+Math.cos(t)*e,Dk(this,F_,"f").position.z=Dk(this,W_,"f").target.z+Math.sin(t)*e,Dk(this,W_,"f").update()}}},Ik=function(){return!!Dk(this,m_,"f")&&(document.activeElement!=Dk(this,w_,"f")&&(!Dk(this,d_,"f").isOpen&&null==Dk(this,M_,"f")&&!Dk(this,S_,"f").isOpen&&null==Dk(this,A_,"f")))};const Uk=class{constructor(e,t,n,i,r,a,o,s,l,c,h,d,u,p){$x.add(this),e_.set(this,void 0),t_.set(this,performance.now()),n_.set(this,void 0),i_.set(this,void 0),r_.set(this,void 0),a_.set(this,void 0),o_.set(this,void 0),s_.set(this,void 0),l_.set(this,void 0),c_.set(this,void 0),h_.set(this,void 0),d_.set(this,void 0),u_.set(this,void 0),p_.set(this,void 0),f_.set(this,null),m_.set(this,!1),g_.set(this,void 0),v_.set(this,void 0),w_.set(this,void 0),y_.set(this,void 0),b_.set(this,null),x_.set(this,void 0),__.set(this,void 0),k_.set(this,void 0),E_.set(this,void 0),S_.set(this,void 0),M_.set(this,null),T_.set(this,void 0),A_.set(this,null),C_.set(this,void 0),P_.set(this,void 0),R_.set(this,void 0),L_.set(this,void 0),I_.set(this,void 0),N_.set(this,void 0),D_.set(this,void 0),U_.set(this,void 0),B_.set(this,void 0),O_.set(this,void 0),z_.set(this,void 0),F_.set(this,void 0),W_.set(this,void 0),H_.set(this,!1),V_.set(this,!1),G_.set(this,!1),j_.set(this,!1),q_.set(this,!1),X_.set(this,!1),Y_.set(this,!1),K_.set(this,!0),Z_.set(this,void 0),J_.set(this,void 0),Q_.set(this,void 0),$_.set(this,void 0),ek.set(this,!1),tk.set(this,!1),nk.set(this,null),ik.set(this,null),rk.set(this,!1),ak.set(this,null),ok.set(this,0),sk.set(this,null),lk.set(this,1e3),ck.set(this,null),hk.set(this,[]),dk.set(this,1),uk.set(this,[]),pk.set(this,null),_k.set(this,null),kk.set(this,null),Ek.set(this,null),Nk(this,n_,e,"f"),Nk(this,e_,t,"f"),Nk(this,i_,n,"f"),Nk(this,r_,i,"f"),Nk(this,a_,r,"f"),Nk(this,o_,a,"f"),Nk(this,h_,o,"f"),Nk(this,s_,s,"f"),Nk(this,l_,l,"f"),Nk(this,c_,c,"f"),Nk(this,d_,h,"f"),Nk(this,u_,d,"f"),Nk(this,p_,u,"f"),Nk(this,F_,new Kr(70,1,.1,1e4),"f"),Dk(this,F_,"f").position.set(40,40,-40),n.scene.add(Dk(this,F_,"f")),Nk(this,W_,new ay(Dk(this,F_,"f"),n.canvas),"f"),Dk(this,W_,"f").mouseButtons={MIDDLE:g,RIGHT:w},Dk(this,W_,"f").minDistance=4,Dk(this,W_,"f").maxDistance=600,Nk(this,Z_,new jh,"f"),Nk(this,$_,new jc({transparent:!0,opacity:.3,polygonOffset:!0,polygonOffsetFactor:-.3,depthWrite:!1}),"f"),Nk(this,Q_,new Ws,"f"),Dk(this,Q_,"f").visible=!1,n.scene.add(Dk(this,Q_,"f")),Nk(this,J_,new Br(new ca(1e6,1e6),new ar({side:2})),"f"),Dk(this,J_,"f").rotation.x=-Math.PI/2,Dk(this,J_,"f").updateWorldMatrix(!0,!0),n.canvas.addEventListener("mousemove",Nk(this,C_,(e=>{const t=e.clientX/window.innerWidth*2-1,n=-e.clientY/window.innerHeight*2+1;null==Dk(this,nk,"f")?Nk(this,nk,new ln(t,n),"f"):Dk(this,nk,"f").set(t,n)}),"f")),n.canvas.addEventListener("mousedown",Nk(this,P_,(e=>{0==e.button&&Nk(this,tk,!0,"f"),1==e.button&&e.preventDefault()}),"f")),window.addEventListener("mouseup",Nk(this,R_,(e=>{0==e.button&&(Nk(this,tk,!1,"f"),Nk(this,sk,null,"f"))}),"f")),n.canvas.addEventListener("mouseout",Nk(this,L_,(()=>{Nk(this,nk,null,"f")}),"f")),n.canvas.addEventListener("touchstart",Nk(this,I_,(()=>{Dk(this,u_,"f").touchEnabled&&Nk(this,ik,Date.now(),"f")}),"f")),n.canvas.addEventListener("click",Nk(this,N_,(()=>{Dk(this,u_,"f").touchEnabled&&null!=Dk(this,ik,"f")&&Date.now()-Dk(this,ik,"f")<200&&(Nk(this,ik,null,"f"),Nk(this,rk,!0,"f"))}),"f")),window.addEventListener("keydown",Nk(this,D_,(e=>{Dk(this,$x,"m",Ik).call(this)&&(Dk(this,d_,"f").isOpen||Dk(this,S_,"f").isOpen||null!=Dk(this,M_,"f")||null!=Dk(this,A_,"f")||"Escape"==e.code&&(Dk(this,$x,"m",mk).call(this,p),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorRotate)&&(Nk(this,ok,(Dk(this,ok,"f")+1)%4,"f"),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorHeightModifier)&&(Nk(this,H_,!0,"f"),Dk(this,W_,"f").enableZoom=!1,e.preventDefault()),u.checkKeyBinding(e,Lb.EditorDelete)&&(Nk(this,ek,!0,"f"),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorMoveForwards)&&(Nk(this,V_,!0,"f"),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorMoveRight)&&(Nk(this,G_,!0,"f"),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorMoveBackwards)&&(Nk(this,j_,!0,"f"),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorMoveLeft)&&(Nk(this,q_,!0,"f"),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorRotateLeft)&&(Nk(this,X_,!0,"f"),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorRotateRight)&&(Nk(this,Y_,!0,"f"),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorMoveDown)&&(Nk(this,$x,Math.max(0,Dk(this,$x,"a",Mk)-1),"a",Tk),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorMoveUp)&&(Nk(this,$x,Dk(this,$x,"a",Mk)+1,"a",Tk),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorTest)&&(Dk(this,$x,"m",gk).call(this),e.preventDefault()),u.checkKeyBinding(e,Lb.EditorPick)&&(Dk(this,$x,"m",vk).call(this),e.preventDefault()))}),"f")),window.addEventListener("keyup",Nk(this,U_,(e=>{u.checkKeyBinding(e,Lb.EditorHeightModifier)&&(Nk(this,H_,!1,"f"),Dk(this,W_,"f").enableZoom=!0),u.checkKeyBinding(e,Lb.EditorDelete)&&Nk(this,ek,!1,"f"),u.checkKeyBinding(e,Lb.EditorMoveForwards)&&Nk(this,V_,!1,"f"),u.checkKeyBinding(e,Lb.EditorMoveRight)&&Nk(this,G_,!1,"f"),u.checkKeyBinding(e,Lb.EditorMoveBackwards)&&Nk(this,j_,!1,"f"),u.checkKeyBinding(e,Lb.EditorMoveLeft)&&Nk(this,q_,!1,"f"),u.checkKeyBinding(e,Lb.EditorRotateLeft)&&Nk(this,X_,!1,"f"),u.checkKeyBinding(e,Lb.EditorRotateRight)&&Nk(this,Y_,!1,"f")}),"f")),window.addEventListener("wheel",Nk(this,B_,(e=>{Dk(this,H_,"f")&&Dk(this,m_,"f")&&(e.deltaY>0?Nk(this,$x,Dk(this,$x,"a",Mk)+1,"a",Tk):e.deltaY<0&&Nk(this,$x,Math.max(0,Dk(this,$x,"a",Mk)-1),"a",Tk))}),"f")),window.addEventListener("beforeunload",Nk(this,O_,(e=>!Dk(this,K_,"f")&&(e.preventDefault(),e.returnValue=!0,!0)),"f")),Dk(this,$x,"m",fk).call(this,p),d.addChangeListener(Nk(this,z_,(e=>{Dk(this,T_,"f").setEnabled(e)}),"f"))}dispose(){var e,t,n;Nk(this,m_,!1,"f"),null===(e=Dk(this,ck,"f"))||void 0===e||e.dispose(),Dk(this,k_,"f").dispose(),Dk(this,E_,"f").dispose(),null===(t=Dk(this,M_,"f"))||void 0===t||t.dispose(),Nk(this,M_,null,"f"),Dk(this,S_,"f").dispose(),Dk(this,T_,"f").dispose(),null===(n=Dk(this,A_,"f"))||void 0===n||n.dispose(),Nk(this,A_,null,"f");document.getElementById("ui").removeChild(Dk(this,g_,"f")),Dk(this,i_,"f").scene.remove(Dk(this,F_,"f")),Dk(this,W_,"f").dispose(),Dk(this,$_,"f").dispose(),Dk(this,Q_,"f").children.forEach((e=>{const t=e;t.geometry.dispose(),Array.isArray(t.material)?t.material.forEach((e=>e.dispose())):t.material.dispose()})),Dk(this,i_,"f").scene.remove(Dk(this,Q_,"f")),Dk(this,J_,"f").geometry.dispose(),Array.isArray(Dk(this,J_,"f").material)?Dk(this,J_,"f").material.forEach((e=>e.dispose())):Dk(this,J_,"f").material.dispose(),Dk(this,i_,"f").canvas.removeEventListener("mousemove",Dk(this,C_,"f")),Dk(this,i_,"f").canvas.removeEventListener("mousedown",Dk(this,P_,"f")),window.removeEventListener("mouseup",Dk(this,R_,"f")),Dk(this,i_,"f").canvas.removeEventListener("mouseout",Dk(this,L_,"f")),Dk(this,i_,"f").canvas.removeEventListener("touchstart",Dk(this,I_,"f")),Dk(this,i_,"f").canvas.removeEventListener("click",Dk(this,N_,"f")),window.removeEventListener("keydown",Dk(this,D_,"f")),window.removeEventListener("keyup",Dk(this,U_,"f")),window.removeEventListener("wheel",Dk(this,B_,"f")),window.removeEventListener("beforeunload",Dk(this,O_,"f")),Dk(this,u_,"f").removeChangeListener(Dk(this,z_,"f"))}getTrackName(){return""==Dk(this,w_,"f").value.trim()?null:Dk(this,w_,"f").value}setTestCallback(e){Nk(this,f_,e,"f")}reset(){Nk(this,ok,0,"f"),Dk(this,$x,"m",xk).call(this,1),Dk(this,E_,"f").reset(),this.resetView()}enable(){var e;Nk(this,m_,!0,"f"),Dk(this,W_,"f").enabled=!0,1==Dk(this,hk,"f").length&&Dk(this,$x,"m",yk).call(this),null===(e=Dk(this,ck,"f"))||void 0===e||e.dispose(),Nk(this,ck,new rb(Dk(this,i_,"f")),"f"),Dk(this,ck,"f").refresh(Dk(this,a_,"f")),Dk(this,T_,"f").show(),Dk(this,g_,"f").className="editor"}disable(){var e,t,n;Nk(this,m_,!1,"f"),Dk(this,W_,"f").enabled=!1,Dk(this,Q_,"f").visible=!1,null===(e=Dk(this,ck,"f"))||void 0===e||e.dispose(),Dk(this,g_,"f").className="hidden",null===(t=Dk(this,M_,"f"))||void 0===t||t.dispose(),Nk(this,M_,null,"f"),Dk(this,S_,"f").hide(),Dk(this,T_,"f").hide(),null===(n=Dk(this,A_,"f"))||void 0===n||n.dispose(),Nk(this,A_,null,"f")}isEnabled(){return Dk(this,m_,"f")}resetView(){Nk(this,$x,0,"a",Tk),Dk(this,F_,"f").position.set(40,40,-40),Dk(this,W_,"f").target.set(0,0,0),Dk(this,W_,"f").update()}get camera(){return Dk(this,F_,"f")}update(e){var t;if(Dk(this,m_,"f")){Dk(this,F_,"f").position.y<.5&&(Dk(this,F_,"f").position.y=.5,Dk(this,W_,"f").update()),Nk(this,ak,Dk(this,$x,"m",Ck).call(this),"f"),null!=Dk(this,ak,"f")?Dk(this,Q_,"f").position.set(Dk(this,ak,"f").x*Ky.partWidth,Dk(this,ak,"f").y*Ky.partHeight,Dk(this,ak,"f").z*Ky.partLength):Dk(this,Q_,"f").position.set(-1e6,-1e6,-1e6),Dk(this,Q_,"f").rotation.y=Dk(this,ok,"f")*Math.PI/2;for(let e=0;e0?Dk(this,$_,"f").color.set(12255232):Dk(this,$_,"f").color.set(12263970):i.length>0?Dk(this,$_,"f").color.set(12303104):Dk(this,$_,"f").color.set(187),Dk(this,ek,"f"))Dk(this,$x,"m",Rk).call(this,i);else if(Dk(this,tk,"f")||Dk(this,rk,"f")){if(null==n.id)Dk(this,$x,"m",Rk).call(this,i);else if(null==Dk(this,sk,"f")||Dk(this,sk,"f").x!=e.x||Dk(this,sk,"f").y!=e.y||Dk(this,sk,"f").z!=e.z||Dk(this,sk,"f").id!=n.id||Dk(this,sk,"f").rotation!=Dk(this,ok,"f")){i.forEach((({x:e,y:t,z:n})=>{Dk(this,a_,"f").hasPartAt(e,t,n)&&Dk(this,a_,"f").deletePart(e,t,n)}));let r=null;n.isCheckpoint&&(r=Dk(this,E_,"f").checkpointOrder),Dk(this,a_,"f").setPart(e.x,e.y,e.z,n.id,Dk(this,ok,"f"),r),Dk(this,$x,"m",Ak).call(this),Nk(this,sk,{x:e.x,y:e.y,z:e.z,id:n.id,rotation:Dk(this,ok,"f")},"f"),Dk(this,a_,"f").generateMeshes(),null===(t=Dk(this,ck,"f"))||void 0===t||t.refresh(Dk(this,a_,"f")),Dk(this,E_,"f").setFromExistingCheckpoints(Dk(this,a_,"f")),Nk(this,K_,!1,"f")}Nk(this,rk,!1,"f")}Dk(this,Q_,"f").visible=!0}else Dk(this,Q_,"f").visible=!1}Dk(this,$x,"m",Lk).call(this,e)}};var Bk,Ok,zk,Fk,Wk,Hk=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},Vk=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Bk=new WeakMap,Ok=new WeakMap,zk=new WeakMap,Fk=new WeakMap,Wk=new WeakMap;const Gk=class{constructor(e,t,n,i,r,a,o,s,l,c,h,d,u,p,f){Bk.set(this,void 0),Ok.set(this,void 0),zk.set(this,void 0),Fk.set(this,void 0),Wk.set(this,void 0),this.isPaused=!1,Hk(this,Bk,e,"f"),Hk(this,Ok,i,"f"),Hk(this,zk,r,"f"),Hk(this,Fk,a,"f"),Hk(this,Wk,new Uk(n,i,r,o,e,t,s,l,c,h,d,u,a,p),"f"),Vk(this,Wk,"f").reset(),Vk(this,Wk,"f").enable(),Vk(this,Bk,"f").clear(),Vk(this,Bk,"f").setPart(0,0,0,Bw.Start,0,null),Vk(this,Bk,"f").generateMeshes(),r.setCamera(Vk(this,Wk,"f").camera),Vk(this,Wk,"f").setTestCallback((()=>{var e;Vk(this,Wk,"f").disable();const t=null!==(e=Vk(this,Wk,"f").getTrackName())&&void 0!==e?e:"Unnamed track";f(t,Vk(this,Bk,"f").getTrackData(),(()=>{Vk(this,Wk,"f").enable(),r.setCamera(Vk(this,Wk,"f").camera)}))}))}dispose(){Vk(this,Wk,"f").dispose(),Vk(this,Wk,"f").resetView(),Vk(this,Bk,"f").clear()}update(e){this.isPaused||Vk(this,Wk,"f").update(e),Vk(this,zk,"f").update(),Vk(this,Ok,"f").update(e,!1,Vk(this,zk,"f"),Vk(this,Fk,"f"))}};var jk=n(811),qk={};qk.styleTagTransform=u(),qk.setAttributes=l(),qk.insert=o().bind(null,"head"),qk.domAPI=r(),qk.insertStyleElement=h();t()(jk.A,qk);jk.A&&jk.A.locals&&jk.A.locals;var Xk,Yk,Kk,Zk,Jk,Qk,$k=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},eE=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};Xk=new WeakMap,Yk=new WeakMap,Kk=new WeakMap,Zk=new WeakMap,Jk=new WeakMap,Qk=new WeakMap;const tE=class{constructor(e,t){Xk.set(this,void 0),Yk.set(this,void 0),Kk.set(this,void 0),Zk.set(this,void 0),Jk.set(this,void 0),Qk.set(this,null),$k(this,Xk,t,"f"),$k(this,Yk,e,"f"),$k(this,Kk,document.getElementById("ui"),"f"),$k(this,Zk,document.createElement("div"),"f"),eE(this,Yk,"f")>0?t.getSettingBoolean(Jh.CheckpointsPosition)?eE(this,Zk,"f").className="checkpoint up":eE(this,Zk,"f").className="checkpoint":eE(this,Zk,"f").className="hidden",eE(this,Kk,"f").appendChild(eE(this,Zk,"f"));const n=document.createElement("div");eE(this,Zk,"f").appendChild(n);const i=document.createElement("img");i.src="images/checkpoint.svg",n.appendChild(i),$k(this,Jk,document.createElement("span"),"f"),n.appendChild(eE(this,Jk,"f"))}dispose(){eE(this,Kk,"f").removeChild(eE(this,Zk,"f"))}setOverridePosition(e){eE(this,Yk,"f")>0?(null!=e?e:eE(this,Xk,"f").getSettingBoolean(Jh.CheckpointsPosition))?eE(this,Zk,"f").className="checkpoint up":eE(this,Zk,"f").className="checkpoint":eE(this,Zk,"f").className="hidden"}update(e){const t=e.getNextCheckpointIndex()+"/"+eE(this,Yk,"f");t!=eE(this,Qk,"f")&&(eE(this,Jk,"f").textContent=t,$k(this,Qk,t,"f"))}};var nE=n(229),iE={};iE.styleTagTransform=u(),iE.setAttributes=l(),iE.insert=o().bind(null,"head"),iE.domAPI=r(),iE.insertStyleElement=h();t()(nE.A,iE);nE.A&&nE.A.locals&&nE.A.locals;var rE,aE,oE,sE,lE,cE,hE,dE,uE,pE,fE=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},mE=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};aE=new WeakMap,oE=new WeakMap,sE=new WeakMap,lE=new WeakMap,cE=new WeakMap,hE=new WeakMap,rE=new WeakSet,dE=function(e){mE(this,cE,"f").textContent=e,mE(this,cE,"f").className="hint show"},uE=function(){fE(this,hE,2.5,"f"),mE(this,cE,"f").className="hint hide"},pE=function(){fE(this,hE,2.5,"f"),mE(this,cE,"f").className="hint"};const gE=class{constructor(e,t,n){rE.add(this),aE.set(this,void 0),oE.set(this,void 0),sE.set(this,void 0),lE.set(this,void 0),cE.set(this,void 0),hE.set(this,2.5),fE(this,aE,e,"f"),fE(this,oE,t,"f"),fE(this,sE,n,"f"),fE(this,lE,document.getElementById("ui"),"f"),fE(this,cE,document.createElement("div"),"f"),mE(this,cE,"f").className="hint",mE(this,lE,"f").appendChild(mE(this,cE,"f"))}dispose(){mE(this,lE,"f").removeChild(mE(this,cE,"f"))}update(e,t){if(e.hasStarted()&&!mE(this,oE,"f").touchEnabled&&mE(this,sE,"f").getSettingBoolean(Jh.ResetHintEnabled))if(e.getSpeedKmh()<50||e.hasFinished()){if(0!=mE(this,hE,"f")&&(fE(this,hE,mE(this,hE,"f")-t,"f"),mE(this,hE,"f")<=0)){const e=mE(this,sE,"f").getKeyBindings(Lb.VehicleReset);null!=e[0]&&null!=e[1]?mE(this,rE,"m",dE).call(this,mE(this,aE,"f").get("Press [{0}] or [{1}] to restart",[e[0],e[1]])):null!=e[0]?mE(this,rE,"m",dE).call(this,mE(this,aE,"f").get("Press [{0}] to restart",[e[0]])):null!=e[1]&&mE(this,rE,"m",dE).call(this,mE(this,aE,"f").get("Press [{0}] to restart",[e[1]])),fE(this,hE,0,"f")}}else mE(this,rE,"m",uE).call(this);else mE(this,rE,"m",pE).call(this)}};var vE=n(151),wE={};wE.styleTagTransform=u(),wE.setAttributes=l(),wE.insert=o().bind(null,"head"),wE.domAPI=r(),wE.insertStyleElement=h();t()(vE.A,wE);vE.A&&vE.A.locals&&vE.A.locals;var yE,bE,xE,_E,kE,EE,SE,ME=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},TE=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};yE=new WeakMap,bE=new WeakMap,xE=new WeakMap,_E=new WeakMap,kE=new WeakMap,EE=new WeakMap,SE=new WeakMap;const AE=class{constructor(e){yE.set(this,void 0),bE.set(this,void 0),xE.set(this,void 0),_E.set(this,void 0),kE.set(this,void 0),EE.set(this,null),SE.set(this,void 0),ME(this,yE,e,"f"),ME(this,SE,e.getSettingBoolean(Jh.ImperialUnitsEnabled),"f"),ME(this,bE,document.getElementById("ui"),"f"),ME(this,xE,document.createElement("div"),"f"),e.getSettingBoolean(Jh.SpeedometerPosition)?TE(this,xE,"f").className="speedometer up":TE(this,xE,"f").className="speedometer",TE(this,bE,"f").appendChild(TE(this,xE,"f"));const t=document.createElement("div");TE(this,xE,"f").appendChild(t),ME(this,_E,document.createElement("span"),"f"),TE(this,_E,"f").textContent="0",t.appendChild(TE(this,_E,"f")),ME(this,kE,document.createElement("span"),"f"),TE(this,SE,"f")?TE(this,kE,"f").textContent="mph":TE(this,kE,"f").textContent="km/h",t.appendChild(TE(this,kE,"f"))}dispose(){TE(this,bE,"f").removeChild(TE(this,xE,"f"))}setOverridePosition(e){(null!=e?e:TE(this,yE,"f").getSettingBoolean(Jh.SpeedometerPosition))?TE(this,xE,"f").className="speedometer up":TE(this,xE,"f").className="speedometer"}update(e){const t=Math.abs(e.getSpeedKmh());let n;n=TE(this,SE,"f")?t/1.609344:t;const i=Math.trunc(n).toString();if(i!=TE(this,EE,"f")){TE(this,_E,"f").innerHTML="";for(let e=0;e{dS(this,nS,!0,"f"),uS(this,iS,"f").forEach((e=>{e(!0)}))})),uS(this,tS,"f").addEventListener("unlock",(()=>{dS(this,nS,!1,"f"),uS(this,iS,"f").forEach((e=>{e(!1)}))})),window.addEventListener("keydown",dS(this,rS,(t=>{e.checkKeyBinding(t,Lb.SpectatorMoveForwards)?(dS(this,oS,!0,"f"),t.preventDefault()):e.checkKeyBinding(t,Lb.SpectatorMoveRight)?(dS(this,sS,!0,"f"),t.preventDefault()):e.checkKeyBinding(t,Lb.SpectatorMoveBackwards)?(dS(this,lS,!0,"f"),t.preventDefault()):e.checkKeyBinding(t,Lb.SpectatorMoveLeft)?(dS(this,cS,!0,"f"),t.preventDefault()):e.checkKeyBinding(t,Lb.SpectatorSpeedModifier)&&(dS(this,hS,!0,"f"),t.preventDefault())}),"f")),window.addEventListener("keyup",dS(this,aS,(t=>{e.checkKeyBinding(t,Lb.SpectatorMoveForwards)?dS(this,oS,!1,"f"):e.checkKeyBinding(t,Lb.SpectatorMoveRight)?dS(this,sS,!1,"f"):e.checkKeyBinding(t,Lb.SpectatorMoveBackwards)?dS(this,lS,!1,"f"):e.checkKeyBinding(t,Lb.SpectatorMoveLeft)?dS(this,cS,!1,"f"):e.checkKeyBinding(t,Lb.SpectatorSpeedModifier)&&dS(this,hS,!1,"f")}),"f"))}dispose(){uS(this,tS,"f").dispose(),window.removeEventListener("keydown",uS(this,rS,"f")),window.removeEventListener("keyup",uS(this,aS,"f"))}addToggleListener(e){uS(this,iS,"f").push(e)}enable(){try{uS(this,tS,"f").lock()}catch(e){}}disable(){try{uS(this,tS,"f").unlock()}catch(e){}}toggle(){uS(this,nS,"f")?this.disable():this.enable()}update(e){if(uS(this,nS,"f")){let t;if(t=uS(this,hS,"f")?400*e:50*e,uS(this,oS,"f")){const e=new Un(0,0,-1).applyQuaternion(uS(this,eS,"f").quaternion);uS(this,eS,"f").position.add(e.multiplyScalar(t))}if(uS(this,sS,"f")){const e=new Un(1,0,0).applyQuaternion(uS(this,eS,"f").quaternion);uS(this,eS,"f").position.add(e.multiplyScalar(t))}if(uS(this,lS,"f")){const e=new Un(0,0,1).applyQuaternion(uS(this,eS,"f").quaternion);uS(this,eS,"f").position.add(e.multiplyScalar(t))}if(uS(this,cS,"f")){const e=new Un(-1,0,0).applyQuaternion(uS(this,eS,"f").quaternion);uS(this,eS,"f").position.add(e.multiplyScalar(t))}}}get camera(){return uS(this,eS,"f")}get enabled(){return uS(this,nS,"f")}};var fS=n(571),mS={};mS.styleTagTransform=u(),mS.setAttributes=l(),mS.insert=o().bind(null,"head"),mS.domAPI=r(),mS.insertStyleElement=h();t()(fS.A,mS);fS.A&&fS.A.locals&&fS.A.locals;var gS,vS,wS,yS=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},bS=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};gS=new WeakMap,vS=new WeakMap,wS=new WeakMap;const xS=class{constructor(e,t,n,i){gS.set(this,void 0),vS.set(this,void 0),wS.set(this,void 0),yS(this,gS,document.getElementById("ui"),"f"),yS(this,vS,document.createElement("div"),"f"),bS(this,vS,"f").className="hidden",bS(this,gS,"f").appendChild(bS(this,vS,"f"));const r=document.createElement("button");r.className="quit",r.innerHTML='',r.addEventListener("touchstart",(()=>{r.classList.add("active"),r.click()})),r.addEventListener("touchend",(()=>{r.classList.remove("active")})),r.addEventListener("click",(()=>{t.playUIClick(),i()})),bS(this,vS,"f").appendChild(r);const a=document.createElement("button");a.className="reset",a.innerHTML='',a.addEventListener("touchstart",(()=>{a.classList.add("active"),a.click()})),a.addEventListener("touchend",(()=>{a.classList.remove("active")})),a.addEventListener("click",(()=>{t.playUIClick(),n()})),bS(this,vS,"f").appendChild(a);const o=document.createElement("div");o.className="left-container",bS(this,vS,"f").appendChild(o);const s=document.createElement("div");s.innerHTML='',o.appendChild(s);const l=document.createElement("div");l.innerHTML='',o.appendChild(l);const c=document.createElement("div");c.className="right-container",bS(this,vS,"f").appendChild(c);const h=document.createElement("div");h.innerHTML='',c.appendChild(h);const d=document.createElement("div");d.innerHTML='',c.appendChild(d),yS(this,wS,(t=>{let n=!1,i=!1,r=!1,a=!1;for(let e=0;e{e.checkKeyBinding(t,Lb.VehicleAccelerate)?(this.up=!0,t.preventDefault()):e.checkKeyBinding(t,Lb.VehicleTurnRight)?(this.right=!0,t.preventDefault()):e.checkKeyBinding(t,Lb.VehicleBrake)?(this.down=!0,t.preventDefault()):e.checkKeyBinding(t,Lb.VehicleTurnLeft)&&(this.left=!0,t.preventDefault())}),"f")),window.addEventListener("keyup",CS(this,TS,(t=>{e.checkKeyBinding(t,Lb.VehicleAccelerate)?this.up=!1:e.checkKeyBinding(t,Lb.VehicleTurnRight)?this.right=!1:e.checkKeyBinding(t,Lb.VehicleBrake)?this.down=!1:e.checkKeyBinding(t,Lb.VehicleTurnLeft)&&(this.left=!1)}),"f"))}get up(){return PS(this,_S,"f")}get right(){return PS(this,kS,"f")}get down(){return PS(this,ES,"f")}get left(){return PS(this,SS,"f")}set up(e){PS(this,_S,"f")!=e&&(CS(this,_S,e,"f"),PS(this,AS,"f").forEach((e=>{e(this)})))}set right(e){PS(this,kS,"f")!=e&&(CS(this,kS,e,"f"),PS(this,AS,"f").forEach((e=>{e(this)})))}set down(e){PS(this,ES,"f")!=e&&(CS(this,ES,e,"f"),PS(this,AS,"f").forEach((e=>{e(this)})))}set left(e){PS(this,SS,"f")!=e&&(CS(this,SS,e,"f"),PS(this,AS,"f").forEach((e=>{e(this)})))}addChangeCallback(e){PS(this,AS,"f").push(e)}removeChangeCallback(e){const t=PS(this,AS,"f").indexOf(e);t>=0&&PS(this,AS,"f").splice(t,1)}dispose(){window.removeEventListener("keydown",PS(this,MS,"f")),window.removeEventListener("keyup",PS(this,TS,"f"))}getControls(){return{up:this.up,right:this.right,down:this.down,left:this.left}}};var LS,IS=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};LS=new WeakMap;const NS=class{constructor(){LS.set(this,[])}push(e){if(IS(this,LS,"f").length>0){if(e.totalFrames!=IS(this,LS,"f")[IS(this,LS,"f").length-1].totalFrames+1)throw"Car states are not continuous"}else if(e.totalFrames>0)throw"First frame must be zero";IS(this,LS,"f").push(e)}getFrame(e){return e>=0&&e ',r.append(document.createTextNode(t.get("Exit"))),r.addEventListener("click",(()=>{e.playUIClick(),i()})),WS(this,OS,"f").appendChild(r),WS(this,BS,"f").appendChild(WS(this,OS,"f"))}dispose(){WS(this,BS,"f").removeChild(WS(this,OS,"f"))}setVisible(e){WS(this,zS,"f")!=e&&(e?WS(this,OS,"f").classList.add("visible"):WS(this,OS,"f").classList.remove("visible"),FS(this,zS,e,"f"))}};var VS,GS,jS,qS,XS,YS,KS,ZS,JS,QS,$S,eM,tM,nM,iM,rM,aM,oM,sM,lM,cM,hM,dM,uM,pM,fM,mM,gM,vM,wM,yM,bM,xM,_M,kM,EM,SM,MM,TM,AM=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},CM=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};GS=new WeakMap,jS=new WeakMap,qS=new WeakMap,XS=new WeakMap,YS=new WeakMap,KS=new WeakMap,ZS=new WeakMap,JS=new WeakMap,QS=new WeakMap,$S=new WeakMap,eM=new WeakMap,tM=new WeakMap,nM=new WeakMap,iM=new WeakMap,rM=new WeakMap,aM=new WeakMap,oM=new WeakMap,sM=new WeakMap,lM=new WeakMap,cM=new WeakMap,hM=new WeakMap,dM=new WeakMap,uM=new WeakMap,pM=new WeakMap,fM=new WeakMap,mM=new WeakMap,gM=new WeakMap,vM=new WeakMap,wM=new WeakMap,yM=new WeakMap,bM=new WeakMap,xM=new WeakMap,VS=new WeakSet,_M=function(e){var t,n,i,r,a,o,s,l,c;e?(AM(this,aM,new gE(CM(this,YS,"f"),CM(this,eM,"f"),CM(this,QS,"f")),"f"),AM(this,oM,new tE(CM(this,qS,"f").getTotalNumberOfCheckpointIndices(),CM(this,QS,"f")),"f"),AM(this,sM,new AE(CM(this,QS,"f")),"f"),AM(this,lM,new sx(CM(this,YS,"f"),CM(this,QS,"f"),null===(t=CM(this,vM,"f"))||void 0===t?void 0:t.name),"f"),CM(this,eM,"f").touchEnabled?(CM(this,oM,"f").setOverridePosition(!0),CM(this,lM,"f").setOverridePosition(!0),CM(this,sM,"f").setOverridePosition(!0)):(CM(this,oM,"f").setOverridePosition(null),CM(this,lM,"f").setOverridePosition(null),CM(this,sM,"f").setOverridePosition(null),AM(this,hM,new HS(CM(this,ZS,"f"),CM(this,YS,"f"),CM(this,QS,"f"),CM(this,nM,"f")),"f"),CM(this,hM,"f").setVisible(!(null!==(i=null===(n=CM(this,fM,"f"))||void 0===n?void 0:n.hasStarted())&&void 0!==i&&i))),CM(this,dM,"f").setEnabled(CM(this,eM,"f").touchEnabled),CM(this,VS,"m",TM).call(this)):(null===(r=CM(this,aM,"f"))||void 0===r||r.dispose(),AM(this,aM,null,"f"),null===(a=CM(this,oM,"f"))||void 0===a||a.dispose(),AM(this,oM,null,"f"),null===(o=CM(this,sM,"f"))||void 0===o||o.dispose(),AM(this,sM,null,"f"),null===(s=CM(this,lM,"f"))||void 0===s||s.dispose(),AM(this,lM,null,"f"),null===(l=CM(this,cM,"f"))||void 0===l||l.dispose(),AM(this,cM,null,"f"),null===(c=CM(this,hM,"f"))||void 0===c||c.dispose(),AM(this,hM,null,"f"))},kM=function(){CM(this,VS,"m",EM).call(this,CM(this,JS,"f").getCarColors()),CM(this,VS,"m",SM).call(this)},EM=function(e){var t,n;null!=CM(this,fM,"f")&&(null!=CM(this,lM,"f")&&CM(this,vM,"f").isSelf&&CM(this,fM,"f").hasFinished()&&(null==CM(this,lM,"f").record||CM(this,fM,"f").getTime().lessThan(null===(t=CM(this,lM,"f"))||void 0===t?void 0:t.record))&&(CM(this,lM,"f").record=CM(this,fM,"f").getTime()),CM(this,fM,"f").dispose(),AM(this,fM,null,"f")),AM(this,fM,new Uv(CM(this,GS,"f"),CM(this,qS,"f").getStartTransform(),null,CM(this,pM,"f"),!0,CM(this,KS,"f"),CM(this,ZS,"f"),CM(this,XS,"f"),CM(this,qS,"f"),CM(this,QS,"f")),"f"),CM(this,fM,"f").addFinishCallback((e=>{const t=e.getTime(),n=e.getRecording(),i=e.getColors(),r=CM(this,wM,"f");(null==CM(this,wM,"f")||t.lessThan(CM(this,wM,"f")))&&(CM(this,tM,"f").call(this,CM(this,qS,"f").getID(),n,t,i),CM(this,vM,"f").isSelf&&(CM(this,vM,"f").recording=n,CM(this,vM,"f").time=t),AM(this,wM,t,"f"));let a=null;CM(this,vM,"f").isSelf||null==CM(this,vM,"f").time||null==CM(this,vM,"f").name||(a={record:CM(this,vM,"f").time,name:CM(this,vM,"f").name}),AM(this,cM,new VE(CM(this,YS,"f"),CM(this,iM,"f"),t,r,a),"f")})),CM(this,fM,"f").setColors(e),CM(this,KS,"f").setCamera(CM(this,fM,"f").cameraOrbit),CM(this,xM,"f").disable(),null===(n=CM(this,cM,"f"))||void 0===n||n.dispose(),AM(this,cM,null,"f")},SM=function(){var e,t,n;if(CM(this,QS,"f").getSettingBoolean(Jh.GhostCarEnabled)&&(null!=CM(this,mM,"f")&&(null===(e=CM(this,mM,"f"))||void 0===e||e.dispose(),AM(this,mM,null,"f")),null!=CM(this,vM,"f").time&&null!=CM(this,vM,"f").recording)){const e=CM(this,qS,"f").getStartTransform();if(null!=CM(this,gM,"f")&&CM(this,vM,"f").recording!=(null===(t=CM(this,gM,"f"))||void 0===t?void 0:t.recording)&&(null!=CM(this,gM,"f").carId&&(CM(this,jS,"f").deleteCar(CM(this,gM,"f").carId),CM(this,gM,"f").carId=null),AM(this,gM,null,"f")),null==CM(this,gM,"f")){const t=CM(this,vM,"f").time.numberOfFrames+1e4,n=new NS,i=CM(this,jS,"f").createCar(e,CM(this,XS,"f").getMountainVertices(),CM(this,XS,"f").getMountainOffset(),CM(this,qS,"f").getTrackData(),CM(this,vM,"f").recording,(e=>{n.push(e),e.frames>=t&&null!=r.carId&&(CM(this,jS,"f").deleteCar(r.carId),r.carId=null)}));n.push(i),CM(this,jS,"f").startCar(i.id,new rp(t));const r={carId:i.id,recording:CM(this,vM,"f").recording,replay:n};AM(this,gM,r,"f")}const i=new Uv(null,e,CM(this,vM,"f").recording,null,!1,CM(this,KS,"f"),CM(this,ZS,"f"),CM(this,XS,"f"),CM(this,qS,"f"),CM(this,QS,"f"));i.setColors(null!==(n=CM(this,vM,"f").carColors)&&void 0!==n?n:CM(this,JS,"f").getCarColors()),i.audioVolume=.35,CM(this,VS,"m",MM).call(this),AM(this,mM,i,"f")}},MM=function(){if(null!=CM(this,mM,"f")&&null!=CM(this,fM,"f")){const e=CM(this,mM,"f").getPosition().distanceTo(CM(this,fM,"f").getPosition()),t=Math.max(0,Math.min(1,e/5));CM(this,mM,"f").setOpacity(t)}},TM=function(){var e,t;null!=CM(this,lM,"f")&&(CM(this,lM,"f").record=null!==(t=null===(e=CM(this,vM,"f"))||void 0===e?void 0:e.time)&&void 0!==t?t:null)};const PM=class{constructor(e,t,n,i,r,a,o,s,l,c,h,d,u,p,f,m,g){VS.add(this),GS.set(this,void 0),jS.set(this,void 0),qS.set(this,void 0),XS.set(this,void 0),YS.set(this,void 0),KS.set(this,void 0),ZS.set(this,void 0),JS.set(this,void 0),QS.set(this,void 0),$S.set(this,void 0),eM.set(this,void 0),tM.set(this,void 0),nM.set(this,void 0),iM.set(this,void 0),rM.set(this,!0),aM.set(this,void 0),oM.set(this,void 0),sM.set(this,void 0),lM.set(this,void 0),cM.set(this,void 0),hM.set(this,void 0),dM.set(this,void 0),uM.set(this,void 0),pM.set(this,void 0),fM.set(this,null),mM.set(this,null),gM.set(this,null),vM.set(this,void 0),wM.set(this,void 0),yM.set(this,void 0),bM.set(this,void 0),xM.set(this,void 0),this.isPaused=!1,AM(this,GS,e,"f"),AM(this,jS,t,"f"),AM(this,qS,n,"f"),AM(this,XS,i,"f"),AM(this,YS,r,"f"),AM(this,KS,a,"f"),AM(this,ZS,o,"f"),AM(this,JS,s,"f"),AM(this,QS,l,"f"),AM(this,$S,c,"f"),AM(this,eM,h,"f"),AM(this,tM,m,"f"),AM(this,nM,g,"f"),AM(this,vM,p,"f"),AM(this,wM,f,"f"),AM(this,iM,d,"f"),n.loadTrackData(u),n.generateMeshes(),i.generateMountains(n.getBounds()),AM(this,pM,new RS(l),"f"),c.setCursorHiddenWhenInactive(!0),AM(this,dM,new xS(CM(this,pM,"f"),CM(this,ZS,"f"),(()=>{CM(this,VS,"m",kM).call(this)}),g),"f"),CM(this,dM,"f").setEnabled(CM(this,eM,"f").touchEnabled),CM(this,VS,"m",_M).call(this,!0),CM(this,VS,"m",TM).call(this),AM(this,xM,new pS(l),"f"),CM(this,xM,"f").addToggleListener((e=>{e?(null!=CM(this,fM,"f")&&(CM(this,fM,"f").audioVolume=0),null!=CM(this,mM,"f")&&(CM(this,mM,"f").audioVolume=0),CM(this,VS,"m",_M).call(this,!1),a.setCamera(CM(this,xM,"f").camera)):null!=CM(this,fM,"f")&&(null!=CM(this,fM,"f")&&(CM(this,fM,"f").audioVolume=1),null!=CM(this,mM,"f")&&(CM(this,mM,"f").audioVolume=.35),CM(this,VS,"m",_M).call(this,CM(this,rM,"f")),a.setCamera(CM(this,fM,"f").cameraOrbit))})),CM(this,eM,"f").addChangeListener(AM(this,uM,(e=>{var t,n,i,r,a,o,s,l,c;e?(null===(t=CM(this,oM,"f"))||void 0===t||t.setOverridePosition(!0),null===(n=CM(this,lM,"f"))||void 0===n||n.setOverridePosition(!0),null===(i=CM(this,sM,"f"))||void 0===i||i.setOverridePosition(!0),null===(r=CM(this,hM,"f"))||void 0===r||r.dispose(),AM(this,hM,null,"f")):(null===(a=CM(this,oM,"f"))||void 0===a||a.setOverridePosition(null),null===(o=CM(this,lM,"f"))||void 0===o||o.setOverridePosition(null),null===(s=CM(this,sM,"f"))||void 0===s||s.setOverridePosition(null),CM(this,rM,"f")&&!CM(this,xM,"f").enabled&&null==CM(this,hM,"f")&&(AM(this,hM,new HS(CM(this,ZS,"f"),CM(this,YS,"f"),CM(this,QS,"f"),CM(this,nM,"f")),"f"),CM(this,hM,"f").setVisible(!(null!==(c=null===(l=CM(this,fM,"f"))||void 0===l?void 0:l.hasStarted())&&void 0!==c&&c)))),CM(this,dM,"f").setEnabled(e)}),"f")),CM(this,VS,"m",EM).call(this,s.getCarColors()),CM(this,VS,"m",SM).call(this),window.addEventListener("keydown",AM(this,yM,(e=>{var t;if(CM(this,xM,"f").enabled||(CM(this,QS,"f").checkKeyBinding(e,Lb.VehicleReset)?((null===(t=CM(this,fM,"f"))||void 0===t?void 0:t.hasStarted())&&CM(this,VS,"m",kM).call(this),e.preventDefault()):CM(this,QS,"f").checkKeyBinding(e,Lb.VehicleCockpitCamera)?(e.repeat||null==CM(this,fM,"f")||CM(this,fM,"f").hasFinished()||(CM(this,QS,"f").getSettingBoolean(Jh.CockpitCameraToggle)?CM(this,KS,"f").camera==CM(this,fM,"f").cameraOrbit?CM(this,KS,"f").setCamera(CM(this,fM,"f").cameraCockpit):CM(this,KS,"f").setCamera(CM(this,fM,"f").cameraOrbit):CM(this,KS,"f").setCamera(CM(this,fM,"f").cameraCockpit)),e.preventDefault()):l.checkKeyBinding(e,Lb.ToggleUI)?(AM(this,rM,!CM(this,rM,"f"),"f"),CM(this,VS,"m",_M).call(this,CM(this,rM,"f")),e.preventDefault()):"Escape"==e.code&&(g(),e.preventDefault())),l.checkKeyBinding(e,Lb.ToggleSpectatorCamera)&&null!=CM(this,fM,"f")){CM(this,xM,"f").camera.position.copy(CM(this,KS,"f").camera.position);const t=new _i(0,0,0,"YXZ").setFromQuaternion(CM(this,KS,"f").camera.quaternion);t.z=0,CM(this,xM,"f").camera.quaternion.setFromEuler(t),CM(this,xM,"f").toggle(),e.preventDefault()}}),"f")),window.addEventListener("keyup",AM(this,bM,(e=>{CM(this,xM,"f").enabled||CM(this,QS,"f").checkKeyBinding(e,Lb.VehicleCockpitCamera)&&(null==CM(this,fM,"f")||CM(this,fM,"f").hasFinished()||CM(this,QS,"f").getSettingBoolean(Jh.CockpitCameraToggle)||CM(this,KS,"f").setCamera(CM(this,fM,"f").cameraOrbit))}),"f"))}dispose(e=!0){var t,n;CM(this,$S,"f").setCursorHiddenWhenInactive(!1),CM(this,VS,"m",_M).call(this,!1),CM(this,dM,"f").dispose(),CM(this,eM,"f").removeChangeListener(CM(this,uM,"f")),e&&CM(this,qS,"f").clear(),CM(this,XS,"f").clearMountains(),CM(this,pM,"f").dispose(),null===(t=CM(this,fM,"f"))||void 0===t||t.dispose(),null!=(null===(n=CM(this,gM,"f"))||void 0===n?void 0:n.carId)&&(CM(this,jS,"f").deleteCar(CM(this,gM,"f").carId),CM(this,gM,"f").carId=null,AM(this,gM,null,"f")),null!=CM(this,mM,"f")&&(CM(this,mM,"f").dispose(),AM(this,mM,null,"f")),window.removeEventListener("keydown",CM(this,yM,"f")),window.removeEventListener("keyup",CM(this,bM,"f")),CM(this,xM,"f").dispose()}update(e){var t,n,i,r,a,o,s,l,c,h;if(!this.isPaused){let h;if(h=null==CM(this,fM,"f")||CM(this,xM,"f").enabled?0:e,null===(t=CM(this,fM,"f"))||void 0===t||t.update(h),null==CM(this,fM,"f")||CM(this,xM,"f").enabled)null!=CM(this,fM,"f")&&(CM(this,fM,"f").isPaused=!0);else{CM(this,fM,"f").isPaused=!1;const t=CM(this,pM,"f").getControls();(t.up||t.down)&&(CM(this,fM,"f").hasStarted()||CM(this,fM,"f").start()),null===(n=CM(this,aM,"f"))||void 0===n||n.update(CM(this,fM,"f"),e),null===(i=CM(this,sM,"f"))||void 0===i||i.update(CM(this,fM,"f")),null===(r=CM(this,lM,"f"))||void 0===r||r.update(CM(this,fM,"f")),null===(a=CM(this,oM,"f"))||void 0===a||a.update(CM(this,fM,"f")),null===(o=CM(this,hM,"f"))||void 0===o||o.setVisible(!CM(this,fM,"f").hasStarted())}if(null!=CM(this,mM,"f")){const e=null===(s=CM(this,fM,"f"))||void 0===s?void 0:s.getTotalTime().numberOfFrames;if(null!=e){for(let t=CM(this,mM,"f").getTotalTime().numberOfFrames+1;t<=e;t++){const e=null===(l=CM(this,gM,"f"))||void 0===l?void 0:l.replay.getFrame(t);if(null==e){CM(this,mM,"f").dispose(),AM(this,mM,null,"f");break}CM(this,mM,"f").setCarState(e)}}null===(c=CM(this,mM,"f"))||void 0===c||c.update(h)}CM(this,VS,"m",MM).call(this),CM(this,xM,"f").update(e)}CM(this,KS,"f").update(null===(h=CM(this,fM,"f"))||void 0===h?void 0:h.getPosition()),CM(this,ZS,"f").update(e,!1,CM(this,KS,"f"),CM(this,QS,"f"))}};var RM,LM,IM,NM,DM,UM,BM,OM,zM,FM=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},WM=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};LM=new WeakMap,IM=new WeakMap,NM=new WeakMap,DM=new WeakMap,UM=new WeakMap,BM=new WeakMap,OM=new WeakMap,RM=new WeakSet,zM=function(){var e,t;if(WM(this,UM,"f")instanceof Kr){const e=window.innerWidth/window.innerHeight;WM(this,LM,"f").width==window.innerWidth&&WM(this,LM,"f").height==window.innerHeight&&WM(this,UM,"f").aspect==e||(WM(this,NM,"f").setSize(window.innerWidth,window.innerHeight),WM(this,UM,"f").aspect=e,WM(this,UM,"f").updateProjectionMatrix())}let n=null!==(t=null===(e=WM(this,IM,"f"))||void 0===e?void 0:e.getSettingFloat(Jh.RenderScale))&&void 0!==t?t:1;n=Number.isFinite(n)?Math.min(Math.max(n,.25),2):1;const i=window.devicePixelRatio*n;WM(this,NM,"f").pixelRatio!=i&&WM(this,NM,"f").setPixelRatio(i)};const HM=class{constructor(e,t,n=!0,i=!1){var r;RM.add(this),LM.set(this,void 0),IM.set(this,void 0),NM.set(this,void 0),DM.set(this,void 0),UM.set(this,new Kr),BM.set(this,void 0),OM.set(this,{x:8,y:10,z:10}),FM(this,LM,e,"f"),FM(this,IM,t,"f"),FM(this,NM,new Zs({antialias:null===(r=null==t?void 0:t.getSettingBoolean(Jh.Antialiasing))||void 0===r||r,powerPreference:"high-performance",canvas:e,alpha:i}),"f"),WM(this,NM,"f").outputColorSpace=Ct,WM(this,NM,"f").shadowMap.enabled=!0,FM(this,DM,new Qs,"f"),n&&(WM(this,DM,"f").fog=new Js(6793641,.001)),WM(this,DM,"f").add(new xh(3891597,11714755,4.7)),FM(this,BM,new Nh(16777215,4.7),"f"),WM(this,BM,"f").position.set(WM(this,OM,"f").x,WM(this,OM,"f").y,WM(this,OM,"f").z),WM(this,BM,"f").castShadow=!0,WM(this,BM,"f").shadow.camera.top=10,WM(this,BM,"f").shadow.camera.right=10,WM(this,BM,"f").shadow.camera.bottom=-10,WM(this,BM,"f").shadow.camera.left=-10,WM(this,BM,"f").shadow.camera.near=1,WM(this,BM,"f").shadow.camera.far=50,WM(this,BM,"f").shadow.mapSize.width=2048,WM(this,BM,"f").shadow.mapSize.height=2048,WM(this,DM,"f").add(WM(this,BM,"f")),WM(this,DM,"f").add(WM(this,BM,"f").target)}clear(){WM(this,NM,"f").clear()}update(e){var t,n,i;const r=null!==(n=null===(t=WM(this,IM,"f"))||void 0===t?void 0:t.getSettingInteger(Jh.CarShadowQuality))&&void 0!==n?n:0;if(!Number.isFinite(r)||r<=0)WM(this,BM,"f").castShadow=!1;else{WM(this,BM,"f").castShadow=!0;const e=Math.min(r,WM(this,NM,"f").capabilities.maxTextureSize);WM(this,BM,"f").shadow.mapSize.width==e&&WM(this,BM,"f").shadow.mapSize.height==e||(WM(this,BM,"f").shadow.mapSize.setScalar(e),null===(i=WM(this,BM,"f").shadow.map)||void 0===i||i.dispose(),WM(this,BM,"f").shadow.map=null)}null!=e&&(WM(this,BM,"f").position.set(e.x+WM(this,OM,"f").x,e.y+WM(this,OM,"f").y,e.z+WM(this,OM,"f").z),WM(this,BM,"f").target.position.copy(e)),WM(this,RM,"m",zM).call(this),WM(this,NM,"f").render(WM(this,DM,"f"),WM(this,UM,"f"))}getShadowDirection(){return(new Un).subVectors(WM(this,BM,"f").position,WM(this,BM,"f").target.position).normalize()}getLightTarget(){return WM(this,BM,"f").target.position}getMaxAnisotropy(){return WM(this,NM,"f").capabilities.getMaxAnisotropy()}setCamera(e){FM(this,UM,e,"f")}get camera(){return WM(this,UM,"f")}get canvas(){return WM(this,LM,"f")}setAnimationLoop(e){WM(this,NM,"f").setAnimationLoop(e)}get scene(){return WM(this,DM,"f")}};var VM,GM,jM,qM=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)},XM=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n};class YM{constructor(e){if(GM.set(this,void 0),null!=e){if(!Number.isInteger(e))throw"Seed must be an integer";XM(this,GM,e%qM(VM,VM,"f",jM).length,"f")}else XM(this,GM,0,"f")}next(){var e;return XM(this,GM,(e=qM(this,GM,"f"),++e),"f"),qM(this,GM,"f")>=qM(VM,VM,"f",jM).length&&XM(this,GM,0,"f"),qM(VM,VM,"f",jM)[qM(this,GM,"f")]}}VM=YM,GM=new WeakMap,jM={value:[.12047764760664692,.19645762332790628,.5525629082262744,.41272626379209965,.7795036003541387,.13367266027110114,.7999601557377349,.9519714253374205,.1735048382917752,.7513367084489158,.6531386724839523,.9026427867068505,.8543272738216994,.11176849958868162,.6705698284858437,.26628732081296946,.31140322993719605,.45170300835470933,.12615515120247944,.0610638094525735,.291990923385425,.4613983868623317,.6615759832726253,.4373182881232056,.7432890501246443,.39316710322388837,.49444122821563297,.5994296685114344,.060050119050233386,.4165885432422003,.43974364800990084,.1628314496954224,.05787972729968116,.225388541259955,.6075775236386991,.8908354370882479,.47072983115144584,.7662003453186828,.20651036895645647,.03724062137286044,.17110277274376795,.7626426077793496,.8372112804261309,.8761690804447455,.13887024930406633,.8287513367412203,.9794446290917873,.807658524448803,.8465629116398186,.5187285629536083,.33962953580139277,.9798419666114342,.6777071959103609,.5388899884934379,.7863389168762325,.4274591420924474,.25631366937500566,.5695289062505289,.026841382754547727,.18267938207996903,.9853642975717878,.24428485895234409,.5322028747608949,.9655065842019517,.043810183244384016,.541216190236913,.05897981610006209,.2849168541804703,.5349823008832073,.9655676144971486,.22831812764497283,.7698701658704175,.4103995069939841,.25782763124411856,.8490222628872495,.39280879489916987,.31999467883347554,.2860820872456349,.9684928577493004,.9973831481899462,.2930912094664657,.4847128131859766,.7218400909709828,.40407009594106236,.7059298060123587,.45362146566562744,.4640974655488792,.16076769483252273,.5989453525750241,.585759299589679,.9417035568973537,.20117930667657413,.5777873180244959,.1991854396549344,.8743781441651348,.624666386634513,.38720573630932886,.9967931526923675,.49817894572849486,.24585267823751833,.8639168275132305,.2865624029759799,.6163605496913385,.5864748073339972,.8781049154377354,.7497547608938613,.7864098057445887,.0334170452332867,.4875588105294657,.6737395339380896,.21851121231639659,.2923739650597854,.6073797612662293,.41823228947229896,.8531029420136382,.3260916332061783,.6306262204574675,.5268576689601923,.3516570914484707,.8659366375222706,.8447448461834428,.3794548980890986,.9832775904115916,.8442256760399809,.3006550591973338,.9718660619781394,.5103245035851833,.794319831388071]};const KM=YM;var ZM,JM,QM,$M,eT=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},tT=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class nT{constructor(e){ZM.set(this,void 0),JM.set(this,void 0),QM.set(this,void 0),$M.set(this,null),eT(this,ZM,e,"f"),eT(this,JM,new Br(new dc(9e3,32),new jc({color:3495480,depthWrite:!1})),"f"),tT(this,JM,"f").rotation.x=-Math.PI/2,tT(this,JM,"f").renderOrder=-3,e.scene.add(tT(this,JM,"f")),eT(this,QM,new Br(new ca(120,120),new jc({color:3495480,depthWrite:!1})),"f"),tT(this,QM,"f").rotation.x=-Math.PI/2,tT(this,QM,"f").receiveShadow=!0,tT(this,QM,"f").renderOrder=-2,e.scene.add(tT(this,QM,"f"))}clearMountains(){null!=tT(this,$M,"f")&&(tT(this,$M,"f").material.dispose(),tT(this,$M,"f").geometry.dispose(),tT(this,ZM,"f").scene.remove(tT(this,$M,"f")),eT(this,$M,null,"f"))}generateMountains(e){this.clearMountains();const{vertices:t,offset:n}=nT.createMountainVertices(e),i=new yr;i.setAttribute("position",new lr(new Float32Array(t),3)),i.computeVertexNormals();const r=new Br(i,new jc({color:3495480}));r.position.copy(n),r.receiveShadow=!0,tT(this,ZM,"f").scene.add(r),eT(this,$M,r,"f")}static createMountainVertices(e){const t=new KM,n=Math.max(200,160+Math.max(Math.abs(e.max.x-e.min.x)*Ky.partWidth/2*Math.SQRT2,Math.abs(e.max.y-e.min.y)*Ky.partLength/2*Math.SQRT2)),i=new ln((e.min.x+(e.max.x-e.min.x)/2)*Ky.partWidth,(e.min.y+(e.max.y-e.min.y)/2)*Ky.partLength);if(n>4500)return{vertices:[],offset:new Un};const r=Math.floor(n/10),a=[];for(let e=0;e0)return t[0];if(null!=tT(this,$M,"f")){const t=e.intersectObject(tT(this,$M,"f"));if(t.length>0)return t[0]}return null}update(){const e=new Un,t=new Dn,n=new Un;tT(this,ZM,"f").camera.matrix.decompose(e,t,n),tT(this,JM,"f").position.set(e.x,0,e.z);const i=tT(this,ZM,"f").getLightTarget();tT(this,QM,"f").position.set(i.x,0,i.z),tT(this,QM,"f").visible=tT(this,QM,"f").position.manhattanDistanceTo(tT(this,JM,"f").position)<8e3}}ZM=new WeakMap,JM=new WeakMap,QM=new WeakMap,$M=new WeakMap;const iT=nT;var rT=n(915),aT={};aT.styleTagTransform=u(),aT.setAttributes=l(),aT.insert=o().bind(null,"head"),aT.domAPI=r(),aT.insertStyleElement=h();t()(rT.A,aT);rT.A&&rT.A.locals&&rT.A.locals;var oT=n(927),sT={};sT.styleTagTransform=u(),sT.setAttributes=l(),sT.insert=o().bind(null,"head"),sT.domAPI=r(),sT.insertStyleElement=h();t()(oT.A,sT);oT.A&&oT.A.locals&&oT.A.locals;var lT,cT,hT=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},dT=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};lT=new WeakMap,cT=new WeakMap;const uT=class{constructor(e,t,n){lT.set(this,void 0),cT.set(this,void 0),hT(this,lT,e,"f"),hT(this,cT,document.createElement("div"),"f"),dT(this,cT,"f").className="loading",e.appendChild(dT(this,cT,"f"));const i=document.createElement("p");i.textContent=t.get("Loading")+"...",dT(this,cT,"f").appendChild(i);const r=document.createElement("div");dT(this,cT,"f").appendChild(r);const a=document.createElement("div");r.appendChild(a);const o=document.createElement("div");a.appendChild(o),n.addProgressListener((e=>{o.style.width=100*e+"%"}))}dispose(){dT(this,lT,"f").removeChild(dT(this,cT,"f"))}};var pT=n(643),fT={};fT.styleTagTransform=u(),fT.setAttributes=l(),fT.insert=o().bind(null,"head"),fT.domAPI=r(),fT.insertStyleElement=h();t()(pT.A,fT);pT.A&&pT.A.locals&&pT.A.locals;var mT,gT,vT,wT,yT,bT,xT,_T,kT,ET,ST,MT,TT,AT,CT,PT,RT,LT,IT,NT,DT=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},UT=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};gT=new WeakMap,vT=new WeakMap,wT=new WeakMap,yT=new WeakMap,bT=new WeakMap,xT=new WeakMap,_T=new WeakMap,kT=new WeakMap,ET=new WeakMap,ST=new WeakMap,MT=new WeakMap,TT=new WeakMap,mT=new WeakSet,AT=function(){UT(this,_T,"f").className="hidden"},CT=function(){UT(this,_T,"f").className="settings-menu"},PT=function(){UT(this,kT,"f").innerHTML="",UT(this,mT,"m",RT).call(this,UT(this,vT,"f").get("Gameplay")),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Units"),[{title:UT(this,vT,"f").get("Metric"),value:"false"},{title:UT(this,vT,"f").get("Imperial"),value:"true"}],Jh.ImperialUnitsEnabled),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Reset hint"),[{title:UT(this,vT,"f").get("Disabled"),value:"false"},{title:UT(this,vT,"f").get("Enabled"),value:"true"}],Jh.ResetHintEnabled),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Ghost car"),[{title:UT(this,vT,"f").get("Disabled"),value:"false"},{title:UT(this,vT,"f").get("Enabled"),value:"true"}],Jh.GhostCarEnabled),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Cockpit camera mode"),[{title:UT(this,vT,"f").get("Hold"),value:"false"},{title:UT(this,vT,"f").get("Toggle"),value:"true"}],Jh.CockpitCameraToggle),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Checkpoints position"),[{title:UT(this,vT,"f").get("Bottom"),value:"false"},{title:UT(this,vT,"f").get("Top"),value:"true"}],Jh.CheckpointsPosition),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Timer position"),[{title:UT(this,vT,"f").get("Bottom"),value:"false"},{title:UT(this,vT,"f").get("Top"),value:"true"}],Jh.TimerPosition),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Speedometer position"),[{title:UT(this,vT,"f").get("Bottom"),value:"false"},{title:UT(this,vT,"f").get("Top"),value:"true"}],Jh.SpeedometerPosition),UT(this,mT,"m",RT).call(this,UT(this,vT,"f").get("Language")),UT(this,mT,"m",LT).call(this,null,[{title:"العربية",value:"ar"},{title:"Deutsch",value:"de-DE"},{title:"English",value:"en-US"},{title:"Español",value:"es-ES"},{title:"Français",value:"fr-FR"},{title:"Italiano",value:"it-IT"},{title:"日本語",value:"ja-JP"},{title:"한국어",value:"ko-KR"},{title:"Polski",value:"pl-PL"},{title:"Português (BR)",value:"pt-BR"},{title:"Português (PT)",value:"pt-PT"},{title:"Русский",value:"ru-RU"},{title:"Türkçe",value:"tr-TR"},{title:"Українська",value:"uk-UA"},{title:"简体中文",value:"zh-CN"},{title:"繁體中文",value:"zh-TW"}],Jh.Language),UT(this,mT,"m",RT).call(this,UT(this,vT,"f").get("Graphics")),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Car shadow"),[{title:UT(this,vT,"f").get("Off"),value:"0"},{title:UT(this,vT,"f").get("Low"),value:"1024"},{title:UT(this,vT,"f").get("Medium"),value:"2048"},{title:UT(this,vT,"f").get("High"),value:"4096"}],Jh.CarShadowQuality),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Track shadow"),[{title:UT(this,vT,"f").get("Off"),value:"false"},{title:UT(this,vT,"f").get("On"),value:"true"}],Jh.TrackShadowEnabled,(()=>{UT(this,bT,"f").generateMeshes()})),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Clouds"),[{title:UT(this,vT,"f").get("Off"),value:"false"},{title:UT(this,vT,"f").get("On"),value:"true"}],Jh.CloudsEnabled),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Particles"),[{title:UT(this,vT,"f").get("Off"),value:"false"},{title:UT(this,vT,"f").get("On"),value:"true"}],Jh.ParticlesEnabled),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Skidmarks"),[{title:UT(this,vT,"f").get("Off"),value:"false"},{title:UT(this,vT,"f").get("On"),value:"true"}],Jh.SkidmarksEnabled),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Render scale"),[{title:"25%",value:"0.25"},{title:"50%",value:"0.5"},{title:"100%",value:"1"},{title:"150%",value:"1.5"},{title:"200%",value:"2"}],Jh.RenderScale),UT(this,mT,"m",LT).call(this,UT(this,vT,"f").get("Anti-aliasing (requires restart)"),[{title:UT(this,vT,"f").get("Off"),value:"false"},{title:UT(this,vT,"f").get("On"),value:"true"}],Jh.Antialiasing),UT(this,mT,"m",RT).call(this,UT(this,vT,"f").get("Audio")),UT(this,mT,"m",IT).call(this,UT(this,vT,"f").get("Sound effect volume"),Jh.SoundEffectVolume),UT(this,mT,"m",IT).call(this,UT(this,vT,"f").get("Music volume"),Jh.MusicVolume),UT(this,mT,"m",IT).call(this,UT(this,vT,"f").get("Checkpoint volume"),Jh.CheckpointVolume),UT(this,mT,"m",RT).call(this,UT(this,vT,"f").get("Controls")),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Vehicle accelerate"),Lb.VehicleAccelerate),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Vehicle brake"),Lb.VehicleBrake),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Vehicle turn left"),Lb.VehicleTurnLeft),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Vehicle turn right"),Lb.VehicleTurnRight),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Vehicle reset"),Lb.VehicleReset),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Vehicle cockpit camera"),Lb.VehicleCockpitCamera),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Hide UI"),Lb.ToggleUI),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor rotate part"),Lb.EditorRotate),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor height modifier"),Lb.EditorHeightModifier),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor delete part"),Lb.EditorDelete),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor forwards"),Lb.EditorMoveForwards),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor backwards"),Lb.EditorMoveBackwards),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor left"),Lb.EditorMoveLeft),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor right"),Lb.EditorMoveRight),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor rotate left"),Lb.EditorRotateLeft),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor rotate right"),Lb.EditorRotateRight),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor move down"),Lb.EditorMoveDown),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor move up"),Lb.EditorMoveUp),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor test"),Lb.EditorTest),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Editor pick"),Lb.EditorPick),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Toggle FPS counter"),Lb.ToggleFpsCounter),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Toggle spectator camera"),Lb.ToggleSpectatorCamera),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Spectator forwards"),Lb.SpectatorMoveForwards),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Spectator backwards"),Lb.SpectatorMoveBackwards),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Spectator left"),Lb.SpectatorMoveLeft),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Spectator right"),Lb.SpectatorMoveRight),UT(this,mT,"m",NT).call(this,UT(this,vT,"f").get("Spectator speed modifier"),Lb.SpectatorSpeedModifier)},RT=function(e){const t=document.createElement("h2");t.textContent=e,UT(this,kT,"f").appendChild(t)},LT=function(e,t,n,i){var r;const a=null!==(r=UT(this,MT,"f").get(n))&&void 0!==r?r:UT(this,yT,"f").getSetting(n),o=document.createElement("div");if(o.className="setting",null!=e){const t=document.createElement("p");t.textContent=e,o.appendChild(t)}else o.classList.add("wrappable");const s=document.createElement("div");s.className="button-wrapper",o.appendChild(s);const l=[];t.forEach((({title:e,value:t})=>{const r=document.createElement("button");r.className=t==a?"button selected":"button",r.textContent=e,r.addEventListener("click",(()=>{UT(this,wT,"f").playUIClick(),l.forEach((e=>{e.className="button"})),r.className="button selected",UT(this,MT,"f").set(n,t),UT(this,yT,"f").updateSettings(Array.from(UT(this,MT,"f"))),null!=i&&i()})),s.appendChild(r),l.push(r)})),UT(this,kT,"f").appendChild(o)},IT=function(e,t,n=0,i=1){var r;let a=parseFloat(null!==(r=UT(this,MT,"f").get(t))&&void 0!==r?r:UT(this,yT,"f").getSetting(t));Number.isNaN(a)&&(a=0);const o=document.createElement("div");o.className="setting";const s=document.createElement("p");s.textContent=e,o.appendChild(s);const l=document.createElement("input");l.type="range",l.min=(20*n).toString(),l.max=(20*i).toString(),l.value=(20*a).toString(),l.addEventListener("input",(()=>{const e=parseFloat(l.value)/20;UT(this,MT,"f").set(t,e.toString()),UT(this,yT,"f").updateSettings(Array.from(UT(this,MT,"f")))})),o.appendChild(l),UT(this,kT,"f").appendChild(o)},NT=function(e,t){var n,i,r;const a=document.createElement("div");a.className="setting";const o=document.createElement("p");o.textContent=e,a.appendChild(o);const s=document.createElement("div");s.className="button-wrapper",a.appendChild(s);const l=null!==(n=UT(this,TT,"f").get(t))&&void 0!==n?n:UT(this,yT,"f").getKeyBindings(t),c=document.createElement("button");c.className="button key-binding",c.textContent=null!==(i=l[0])&&void 0!==i?i:"",c.addEventListener("click",(()=>{UT(this,wT,"f").playUIClick(),UT(this,mT,"m",AT).call(this);const e=t=>{"Escape"==t.code||"Tab"==t.code||"Enter"==t.code&&null!=document.activeElement&&document.activeElement!=document.body||(UT(this,xT,"f").hide(),l[0]=t.code,c.textContent=t.code,UT(this,mT,"m",CT).call(this),window.removeEventListener("keydown",e),t.preventDefault())};window.addEventListener("keydown",e),UT(this,xT,"f").showConfirm(UT(this,vT,"f").get("Press any key...\n\nPress [Escape] to cancel."),UT(this,vT,"f").get("Cancel"),UT(this,vT,"f").get("Clear"),(()=>{UT(this,mT,"m",CT).call(this),window.removeEventListener("keydown",e)}),(()=>{c.textContent="",l[0]=null,window.removeEventListener("keydown",e),UT(this,mT,"m",CT).call(this)}))})),s.appendChild(c);const h=document.createElement("button");h.className="button key-binding",h.textContent=null!==(r=l[1])&&void 0!==r?r:"",h.addEventListener("click",(()=>{UT(this,wT,"f").playUIClick(),UT(this,mT,"m",AT).call(this);const e=t=>{"Escape"==t.code||"Tab"==t.code||"Enter"==t.code&&null!=document.activeElement&&document.activeElement!=document.body||(UT(this,xT,"f").hide(),l[1]=t.code,h.textContent=t.code,UT(this,mT,"m",CT).call(this),window.removeEventListener("keydown",e),t.preventDefault())};window.addEventListener("keydown",e),UT(this,xT,"f").showConfirm(UT(this,vT,"f").get("Press any key...\n\nPress [Escape] to cancel."),UT(this,vT,"f").get("Cancel"),UT(this,vT,"f").get("Clear"),(()=>{UT(this,mT,"m",CT).call(this),window.removeEventListener("keydown",e)}),(()=>{h.textContent="",l[1]=null,window.removeEventListener("keydown",e),UT(this,mT,"m",CT).call(this)}))})),s.appendChild(h),UT(this,kT,"f").appendChild(a)};const BT=class{constructor(e,t,n,i,r,a,o){mT.add(this),gT.set(this,void 0),vT.set(this,void 0),wT.set(this,void 0),yT.set(this,void 0),bT.set(this,void 0),xT.set(this,void 0),_T.set(this,void 0),kT.set(this,void 0),ET.set(this,void 0),ST.set(this,new Map),MT.set(this,new Map),TT.set(this,new Map),DT(this,gT,e,"f"),DT(this,vT,t,"f"),DT(this,wT,n,"f"),DT(this,yT,i,"f"),DT(this,bT,r,"f"),DT(this,xT,a,"f"),DT(this,_T,document.createElement("div"),"f"),UT(this,_T,"f").className="settings-menu",e.appendChild(UT(this,_T,"f"));const s=document.createElement("h2");s.textContent=t.get("Settings"),UT(this,_T,"f").appendChild(s),DT(this,kT,document.createElement("div"),"f"),UT(this,kT,"f").className="container",UT(this,_T,"f").appendChild(UT(this,kT,"f")),DT(this,ST,new Map(i.getSettings()),"f"),UT(this,mT,"m",PT).call(this);const l=document.createElement("div");l.className="button-wrapper",UT(this,_T,"f").appendChild(l);const c=document.createElement("button");c.className="button cancel",c.innerHTML=' ',c.append(document.createTextNode(t.get("Cancel"))),c.addEventListener("click",(()=>{n.playUIClick(),i.updateSettings(Array.from(UT(this,ST,"f"))),r.generateMeshes(),o()})),l.appendChild(c);const h=document.createElement("button");h.className="button reset",h.innerHTML=' ',h.append(document.createTextNode(t.get("Reset"))),h.addEventListener("click",(()=>{n.playUIClick(),DT(this,MT,UT(this,yT,"f").defaultSettings(),"f"),i.updateSettings(Array.from(UT(this,MT,"f"))),DT(this,TT,UT(this,yT,"f").defaultKeyBindings(),"f"),r.generateMeshes(),UT(this,mT,"m",PT).call(this)})),l.appendChild(h);const d=document.createElement("button");d.className="button apply",d.append(document.createTextNode(t.get("Apply"))),d.innerHTML+=' ',d.addEventListener("click",(()=>{n.playUIClick(),i.updateSettings(Array.from(UT(this,MT,"f"))),i.saveSettings(),i.setKeyBindings(Array.from(UT(this,TT,"f"))),r.generateMeshes(),t.language=i.getSetting(Jh.Language),o()})),l.appendChild(d),window.addEventListener("keydown",DT(this,ET,(e=>{"Escape"==e.code&&(o(),e.preventDefault())}),"f"))}dispose(){UT(this,gT,"f").removeChild(UT(this,_T,"f")),window.removeEventListener("keydown",UT(this,ET,"f"))}};var OT=n(586),zT={};zT.styleTagTransform=u(),zT.setAttributes=l(),zT.insert=o().bind(null,"head"),zT.domAPI=r(),zT.insertStyleElement=h();t()(OT.A,zT);OT.A&&OT.A.locals&&OT.A.locals;var FT=n(657),WT={};WT.styleTagTransform=u(),WT.setAttributes=l(),WT.insert=o().bind(null,"head"),WT.domAPI=r(),WT.insertStyleElement=h();t()(FT.A,WT);FT.A&&FT.A.locals&&FT.A.locals;var HT=n(86),VT={};VT.styleTagTransform=u(),VT.setAttributes=l(),VT.insert=o().bind(null,"head"),VT.domAPI=r(),VT.insertStyleElement=h();t()(HT.A,VT);HT.A&&HT.A.locals&&HT.A.locals;let GT=null,jT=null,qT=null,XT=null;function YT(e){return null!=GT&&null!=jT&&null!=qT&&null!=XT||(jT=document.createElement("canvas"),jT.width=100,jT.height=100,qT=new HM(jT,null,!1,!0),XT=new _a(-1,1,1,-1,.1,1e4),XT.position.set(1e3,1e3,1e3),XT.lookAt(0,0,0),XT.zoom=.5,XT.position.add(new Un(.1,.3,0)),XT.updateProjectionMatrix(),qT.scene.add(XT),qT.setCamera(XT),GT=new Uv(null,{position:new Un,quaternion:new Dn},null,null,!1,qT,null,null,null,null),GT.update(0)),GT.setColors(e),qT.update(new Un),jT.toDataURL()}var KT,ZT,JT,QT,$T,eA,tA,nA,iA,rA,aA,oA,sA,lA,cA,hA,dA,uA,pA,fA,mA,gA,vA,wA,yA,bA,xA,_A,kA=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},EA=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class SA{constructor(e,t,n,i,r,a,o,s,l,c,h){KT.add(this),JT.set(this,void 0),QT.set(this,void 0),$T.set(this,void 0),eA.set(this,void 0),tA.set(this,void 0),nA.set(this,void 0),iA.set(this,void 0),rA.set(this,void 0),aA.set(this,void 0),oA.set(this,void 0),sA.set(this,void 0),lA.set(this,void 0),cA.set(this,void 0),hA.set(this,void 0),dA.set(this,void 0),uA.set(this,void 0),pA.set(this,null),fA.set(this,!1),mA.set(this,!1),gA.set(this,0),vA.set(this,0),wA.set(this,null),yA.set(this,null),kA(this,JT,t,"f"),kA(this,QT,n,"f"),kA(this,$T,i,"f"),kA(this,eA,r,"f"),kA(this,tA,a,"f"),kA(this,nA,o,"f"),kA(this,iA,l,"f"),kA(this,rA,c,"f"),kA(this,aA,h,"f"),kA(this,oA,e,"f"),kA(this,sA,document.createElement("div"),"f"),EA(this,sA,"f").className="leaderboard",e.appendChild(EA(this,sA,"f"));const d=document.createElement("h2");d.textContent=n.get("Leaderboard"),EA(this,sA,"f").appendChild(d),kA(this,lA,document.createElement("div"),"f"),EA(this,lA,"f").className="container",EA(this,sA,"f").appendChild(EA(this,lA,"f")),kA(this,cA,document.createElement("div"),"f"),EA(this,cA,"f").className="loading-spinner",EA(this,lA,"f").appendChild(EA(this,cA,"f")),EA(this,KT,"m",bA).call(this,!1),kA(this,uA,document.createElement("div"),"f"),EA(this,uA,"f").className="pages",EA(this,sA,"f").appendChild(EA(this,uA,"f")),EA(this,KT,"m",_A).call(this);const u=document.createElement("div");u.className="button-wrapper",EA(this,sA,"f").appendChild(u);const p=document.createElement("button");p.className="button back",p.innerHTML=' ',p.append(document.createTextNode(n.get("Back"))),p.addEventListener("click",(()=>{r.playUIClick(),s()})),u.appendChild(p),kA(this,hA,document.createElement("button"),"f"),EA(this,hA,"f").className="button icon-button first",EA(this,hA,"f").innerHTML='',EA(this,hA,"f").disabled=!0,EA(this,hA,"f").addEventListener("click",(()=>{r.playUIClick(),null!=EA(this,yA,"f")?EA(this,yA,"f").scrollIntoView({behavior:"smooth"}):null!=EA(this,wA,"f")&&(kA(this,gA,EA(this,wA,"f"),"f"),EA(this,KT,"m",_A).call(this),EA(this,KT,"m",bA).call(this,!0))})),u.appendChild(EA(this,hA,"f")),kA(this,dA,document.createElement("button"),"f"),EA(this,dA,"f").className="button icon-button disabled",EA(this,dA,"f").innerHTML='',EA(this,dA,"f").addEventListener("click",(()=>{r.playUIClick(),kA(this,mA,!EA(this,mA,"f"),"f"),EA(this,mA,"f")?EA(this,dA,"f").classList.remove("disabled"):EA(this,dA,"f").classList.add("disabled"),EA(this,KT,"m",bA).call(this,!1)})),u.appendChild(EA(this,dA,"f"))}dispose(){EA(this,oA,"f").removeChild(EA(this,sA,"f"))}static getPositionSuffix(e){if(e<=0||!Number.isInteger(e))throw"Position must be a positive integer.";const t=e%100;if(t>=11&&t<=13)return"th";switch(e%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}}}ZT=SA,JT=new WeakMap,QT=new WeakMap,$T=new WeakMap,eA=new WeakMap,tA=new WeakMap,nA=new WeakMap,iA=new WeakMap,rA=new WeakMap,aA=new WeakMap,oA=new WeakMap,sA=new WeakMap,lA=new WeakMap,cA=new WeakMap,hA=new WeakMap,dA=new WeakMap,uA=new WeakMap,pA=new WeakMap,fA=new WeakMap,mA=new WeakMap,gA=new WeakMap,vA=new WeakMap,wA=new WeakMap,yA=new WeakMap,KT=new WeakSet,bA=function e(t){null!=EA(this,pA,"f")&&(EA(this,pA,"f").isCancelled=!0);const n={isCancelled:!1};kA(this,pA,n,"f"),EA(this,lA,"f").innerHTML="",EA(this,lA,"f").appendChild(EA(this,cA,"f")),kA(this,yA,null,"f"),setTimeout((()=>{if(!n.isCancelled){const i=20,r=EA(this,gA,"f")*i;EA(this,$T,"f").getLeaderboard(EA(this,JT,"f"),r,i,EA(this,mA,"f")).then((({total:a,entries:o,userEntry:s})=>{if(!n.isCancelled&&(kA(this,vA,Math.ceil(a/i),"f"),EA(this,KT,"m",_A).call(this),o.forEach((({id:e,name:t,time:n,carColors:i,verifiedState:a,isSelf:o},s)=>{const l=r+s+1;EA(this,KT,"m",xA).call(this,l,t,n,i,a,o,e)})),null!=s?(kA(this,wA,Math.floor((s.position-1)/i),"f"),EA(this,hA,"f").disabled=!1,t&&null!=EA(this,yA,"f")&&EA(this,yA,"f").scrollIntoView(),EA(this,aA,"f").call(this,s)):(kA(this,wA,null,"f"),EA(this,hA,"f").disabled=!0,EA(this,aA,"f").call(this,null)),!EA(this,fA,"f"))){kA(this,fA,!0,"f");let n=null;null!=s&&(n={time:s.time,recordingId:s.id}),EA(this,nA,"f").syncRecord(EA(this,tA,"f").profileSlot,EA(this,JT,"f"),n,EA(this,tA,"f").getCarColors()).then((n=>{"Upload"==n&&EA(this,KT,"m",e).call(this,t)}))}})).catch((e=>{if(!n.isCancelled){const e=document.createElement("p");e.className="error-message",e.textContent=EA(this,QT,"f").get("Error: Failed to load leaderboard"),EA(this,lA,"f").appendChild(e)}console.error(e)})).finally((()=>{n.isCancelled||EA(this,lA,"f").removeChild(EA(this,cA,"f"))}))}}),500)},xA=function(e,t,n,i,r,a,o){const s=document.createElement("div");s.className="buttons",EA(this,lA,"f").appendChild(s);const l=document.createElement("button");a?(kA(this,yA,l,"f"),l.className="button main",l.disabled=!0):(l.className="button main",l.addEventListener("click",(()=>{EA(this,eA,"f").playUIClick(),EA(this,iA,"f").call(this,new Promise(((e,i)=>{EA(this,$T,"f").getRecording(o).then((({recording:i,carColors:r})=>{e({recording:i,carColors:r,name:t,time:n,isSelf:!1})})).catch(i)})))}))),s.appendChild(l);const c=document.createElement("button");c.className="button preview",c.innerHTML='',c.addEventListener("click",(()=>{EA(this,eA,"f").playUIClick(),EA(this,rA,"f").call(this,new Promise(((e,i)=>{EA(this,$T,"f").getRecording(o).then((({recording:i,carColors:r})=>{e({recording:i,carColors:r,name:t,time:n})})).catch(i)})))})),s.appendChild(c);const h=document.createElement("img");h.src=YT(i),l.appendChild(h);const d=document.createElement("div");d.className="left",l.appendChild(d);const u=document.createElement("p");u.textContent=e+ZT.getPositionSuffix(e),d.appendChild(u);const p=document.createElement("p");p.textContent=sx.formatTimeString(n),d.appendChild(p);const f=document.createElement("div");f.className="right",l.appendChild(f);const m=document.createElement("p");m.className="name",m.textContent=t,f.appendChild(m);const g=document.createElement("p");1==r?(g.innerHTML='',g.prepend(document.createTextNode(EA(this,QT,"f").get("Verified"))),g.className="verified-state verified"):0==r?(g.innerHTML='',g.prepend(document.createTextNode(EA(this,QT,"f").get("Invalid"))),g.className="verified-state invalid"):(g.innerHTML='',g.prepend(document.createTextNode(EA(this,QT,"f").get("Pending"))),g.className="verified-state pending"),f.appendChild(g)},_A=function e(){EA(this,uA,"f").innerHTML="";const t=document.createElement("button");t.className="button",t.textContent="<",EA(this,gA,"f")>0?t.addEventListener("click",(()=>{EA(this,eA,"f").playUIClick(),kA(this,gA,EA(this,gA,"f")-1,"f"),EA(this,KT,"m",e).call(this),EA(this,KT,"m",bA).call(this,!1)})):t.disabled=!0,EA(this,uA,"f").appendChild(t);const n=Math.max(0,EA(this,gA,"f")-Math.floor(3.5));for(let t=n;t=EA(this,vA,"f")?(n.className="button page",n.disabled=!0):t==EA(this,gA,"f")?n.className="button page selected":(n.className="button page",n.addEventListener("click",(()=>{EA(this,eA,"f").playUIClick(),kA(this,gA,t,"f"),EA(this,KT,"m",e).call(this),EA(this,KT,"m",bA).call(this,!1)}))),EA(this,uA,"f").appendChild(n)}const i=document.createElement("button");i.className="button",i.textContent=">",EA(this,gA,"f")+1>=EA(this,vA,"f")?i.disabled=!0:i.addEventListener("click",(()=>{EA(this,eA,"f").playUIClick(),kA(this,gA,EA(this,gA,"f")+1,"f"),EA(this,KT,"m",e).call(this),EA(this,KT,"m",bA).call(this,!1)})),EA(this,uA,"f").appendChild(i)};const MA=SA;var TA,AA,CA,PA,RA,LA,IA=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},NA=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};TA=new WeakMap,AA=new WeakMap,CA=new WeakMap,PA=new WeakMap,RA=new WeakMap,LA=new WeakMap;const DA=class{constructor(e,t,n,i,r,a,o,s,l,c,h,d,u){var p;TA.set(this,void 0),AA.set(this,void 0),CA.set(this,void 0),PA.set(this,void 0),RA.set(this,void 0),LA.set(this,void 0),IA(this,TA,e,"f"),IA(this,AA,u,"f"),IA(this,CA,document.createElement("div"),"f"),NA(this,CA,"f").className="track-info",e.appendChild(NA(this,CA,"f"));const f=r.getRecord(i.profileSlot,s);IA(this,RA,new MA(NA(this,CA,"f"),s,t,n,a,i,r,c,h,d,(e=>{null==e||null!=f&&!e.time.lessOrEqual(f.time)?w.textContent=t.get("Rank")+": ---":(v.textContent=t.get("Record")+": "+sx.formatTimeString(e.time),w.textContent=t.get("Rank")+": "+e.position+MA.getPositionSuffix(e.position))})),"f"),IA(this,PA,document.createElement("div"),"f"),NA(this,PA,"f").className="side-panel",NA(this,CA,"f").appendChild(NA(this,PA,"f"));const m=document.createElement("h2");m.textContent=o,NA(this,PA,"f").appendChild(m);const g=document.createElement("div");g.className="thumbnail",g.appendChild(l),NA(this,PA,"f").appendChild(g);const v=document.createElement("p");v.textContent=t.get("Record")+": "+sx.formatTimeString(null!==(p=null==f?void 0:f.time)&&void 0!==p?p:null),NA(this,PA,"f").appendChild(v);const w=document.createElement("p");NA(this,PA,"f").appendChild(w);const y=document.createElement("button");y.className="button play",y.innerHTML='',y.prepend(document.createTextNode(t.get("Play"))),y.addEventListener("click",(()=>{var e,t;a.playUIClick();const n=r.getRecord(i.profileSlot,s);NA(this,AA,"f").call(this,{recording:null!==(e=null==n?void 0:n.recording)&&void 0!==e?e:null,carColors:null,name:null,time:null!==(t=null==n?void 0:n.time)&&void 0!==t?t:null,isSelf:!0})})),NA(this,PA,"f").appendChild(y),window.addEventListener("keydown",IA(this,LA,(e=>{"Escape"==e.code&&(c(),e.preventDefault())}),"f"))}dispose(){NA(this,RA,"f").dispose(),NA(this,TA,"f").removeChild(NA(this,CA,"f")),window.removeEventListener("keydown",NA(this,LA,"f"))}};var UA=n(140),BA={};BA.styleTagTransform=u(),BA.setAttributes=l(),BA.insert=o().bind(null,"head"),BA.domAPI=r(),BA.insertStyleElement=h();t()(UA.A,BA);UA.A&&UA.A.locals&&UA.A.locals;var OA,zA,FA,WA,HA,VA,GA,jA,qA=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},XA=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};zA=new WeakMap,FA=new WeakMap,WA=new WeakMap,HA=new WeakMap,VA=new WeakMap,GA=new WeakMap,OA=new WeakSet,jA=function(e,t){const n=XA(this,WA,"f").getUserProfile(e),i=document.createElement("div");i.className="slot";const r=document.createElement("button");if(r.className="button main",e==XA(this,WA,"f").profileSlot&&r.classList.add("selected"),r.addEventListener("click",(()=>{XA(this,FA,"f").playUIClick(),XA(this,VA,"f").forEach((e=>{e.classList.remove("selected")})),r.classList.add("selected"),t(e)})),i.appendChild(r),XA(this,VA,"f").push(r),null!=n){const e=document.createElement("img");e.src=YT(n.carColors),r.appendChild(e);const t=document.createElement("p");t.className="name",t.textContent=n.nickname,r.appendChild(t)}XA(this,HA,"f").appendChild(i)};const YA=class{constructor(e,t,n,i,r,a){OA.add(this),zA.set(this,void 0),FA.set(this,void 0),WA.set(this,void 0),HA.set(this,void 0),VA.set(this,[]),GA.set(this,void 0),qA(this,zA,document.getElementById("ui"),"f"),qA(this,FA,t,"f"),qA(this,WA,n,"f"),qA(this,HA,document.createElement("div"),"f"),XA(this,HA,"f").className="profile-selection",XA(this,zA,"f").appendChild(XA(this,HA,"f"));const o=document.createElement("div");o.className="top-bar",XA(this,HA,"f").appendChild(o);const s=document.createElement("h2");s.textContent=e.get("Profiles"),o.appendChild(s);for(let e=0;e<3;e++)XA(this,OA,"m",jA).call(this,e,a);const l=document.createElement("div");l.className="bottom-bar",XA(this,HA,"f").appendChild(l);const c=document.createElement("button");c.className="button",c.innerHTML=' ',c.append(document.createTextNode(e.get("Back"))),c.addEventListener("click",(()=>{t.playUIClick(),i()})),l.appendChild(c);const h=document.createElement("button");h.className="button right",h.innerHTML=' ',h.append(document.createTextNode(e.get("Import"))),h.addEventListener("click",(()=>{t.playUIClick(),r()})),l.appendChild(h),window.addEventListener("keydown",qA(this,GA,(e=>{"Escape"==e.code&&(i(),e.preventDefault())}),"f"))}dispose(){XA(this,zA,"f").removeChild(XA(this,HA,"f")),window.removeEventListener("keydown",XA(this,GA,"f"))}};var KA=n(474),ZA={};ZA.styleTagTransform=u(),ZA.setAttributes=l(),ZA.insert=o().bind(null,"head"),ZA.domAPI=r(),ZA.insertStyleElement=h();t()(KA.A,ZA);KA.A&&KA.A.locals&&KA.A.locals;function JA(e){return new Blob([e]).size}var QA,$A,eC,tC,nC,iC,rC,aC,oC,sC=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},lC=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};$A=new WeakMap,eC=new WeakMap,tC=new WeakMap,nC=new WeakMap,iC=new WeakMap,rC=new WeakMap,aC=new WeakMap,QA=new WeakSet,oC=function(){let e=lC(this,nC,"f").value;return/\S/.test(e)||(e="Anonymous"),e};const cC=class{constructor(e,t,n,i,r,a,o,s,l,c){QA.add(this),$A.set(this,void 0),eC.set(this,!1),tC.set(this,void 0),nC.set(this,void 0),iC.set(this,null),rC.set(this,null),aC.set(this,void 0),sC(this,$A,document.getElementById("ui"),"f"),sC(this,tC,document.createElement("div"),"f"),lC(this,tC,"f").className="nickname",lC(this,$A,"f").appendChild(lC(this,tC,"f"));const h=document.createElement("h1");h.textContent=e.get("Nickname"),lC(this,tC,"f").appendChild(h),sC(this,nC,document.createElement("input"),"f"),lC(this,nC,"f").type="text",lC(this,nC,"f").placeholder="Anonymous",lC(this,nC,"f").spellcheck=!1,"Anonymous"!=i&&(lC(this,nC,"f").value=i),lC(this,tC,"f").appendChild(lC(this,nC,"f")),lC(this,nC,"f").focus(),lC(this,nC,"f").addEventListener("input",(()=>{let e=lC(this,nC,"f").value;for(;JA(e)>=50;)e=e.substring(0,e.length-1);lC(this,nC,"f").value=e})),lC(this,nC,"f").addEventListener("keydown",(e=>{"Enter"==e.code&&(l(lC(this,QA,"m",oC).call(this)),e.preventDefault())}));const d=document.createElement("p");d.textContent=e.get("Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time."),lC(this,tC,"f").appendChild(d);const u=document.createElement("button");u.className="button delete",u.innerHTML=' ',u.append(e.get("Delete")),u.addEventListener("click",(()=>{t.playUIClick(),o(lC(this,QA,"m",oC).call(this))})),lC(this,tC,"f").appendChild(u);const p=document.createElement("button");p.className="button",p.innerHTML=' ',p.append(e.get("Export")),p.addEventListener("click",(()=>{t.playUIClick(),s(lC(this,QA,"m",oC).call(this))})),lC(this,tC,"f").appendChild(p);const f=document.createElement("button");f.className="button",f.textContent=e.get("Ok"),f.addEventListener("click",(()=>{t.playUIClick(),l(lC(this,QA,"m",oC).call(this))})),lC(this,tC,"f").appendChild(f),null!=r&&n.getUser(r).then((n=>{const i=1==(null==n?void 0:n.isVerifier);!lC(this,eC,"f")&&i&&(sC(this,iC,document.createElement("button"),"f"),lC(this,iC,"f").className="button nickname-verifier-button",lC(this,iC,"f").textContent=e.get("Verifier"),lC(this,iC,"f").addEventListener("click",(()=>{t.playUIClick(),c()})),lC(this,$A,"f").appendChild(lC(this,iC,"f")))})).catch((e=>{console.error(e)})),null!=a&&(sC(this,rC,document.createElement("p"),"f"),lC(this,rC,"f").className="nickname-user-token",lC(this,rC,"f").textContent=e.get("User ID")+": "+a,lC(this,$A,"f").appendChild(lC(this,rC,"f"))),window.addEventListener("keydown",sC(this,aC,(e=>{"Escape"==e.code&&(l(lC(this,QA,"m",oC).call(this)),e.preventDefault())}),"f"))}dispose(){lC(this,$A,"f").removeChild(lC(this,tC,"f")),null!=lC(this,iC,"f")&&lC(this,$A,"f").removeChild(lC(this,iC,"f")),null!=lC(this,rC,"f")&&lC(this,$A,"f").removeChild(lC(this,rC,"f")),window.removeEventListener("keydown",lC(this,aC,"f")),sC(this,eC,!0,"f")}};var hC=n(818),dC={};dC.styleTagTransform=u(),dC.setAttributes=l(),dC.insert=o().bind(null,"head"),dC.domAPI=r(),dC.insertStyleElement=h();t()(hC.A,dC);hC.A&&hC.A.locals&&hC.A.locals;var uC,pC,fC,mC=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},gC=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};uC=new WeakMap,pC=new WeakMap,fC=new WeakMap;const vC=class{constructor(e,t,n,i,r){uC.set(this,void 0),pC.set(this,void 0),fC.set(this,void 0),mC(this,uC,document.getElementById("ui"),"f"),mC(this,pC,document.createElement("div"),"f"),gC(this,pC,"f").className="user-export",gC(this,uC,"f").appendChild(gC(this,pC,"f"));const a=document.createElement("textarea");a.value=n,a.readOnly=null==r,a.placeholder="Paste user token here...",gC(this,pC,"f").appendChild(a);const o=document.createElement("div");o.className="bar",gC(this,pC,"f").appendChild(o);const s=document.createElement("button");if(s.className="button",s.innerHTML=' ',s.append(document.createTextNode(t.get("Back"))),s.addEventListener("click",(()=>{e.playUIClick(),i()})),o.appendChild(s),null!=r){const n=document.createElement("button");n.className="button right",n.innerHTML=' ',n.append(document.createTextNode(t.get("Import"))),n.addEventListener("click",(()=>{e.playUIClick(),r(a.value)})),o.appendChild(n)}else{const n=document.createElement("button");n.className="button right",n.innerHTML=' ',n.append(document.createTextNode(t.get("Copy"))),n.addEventListener("click",(()=>{e.playUIClick();try{navigator.clipboard.writeText(a.value)}catch(e){console.error(e)}})),o.appendChild(n)}window.addEventListener("keydown",mC(this,fC,(e=>{"Escape"==e.code&&(i(),e.preventDefault())}),"f"))}dispose(){gC(this,uC,"f").removeChild(gC(this,pC,"f")),window.removeEventListener("keydown",gC(this,fC,"f"))}},wC={rE:"0.4.1"};var yC,bC,xC,_C,kC,EC,SC,MC,TC,AC,CC,PC,RC,LC,IC,NC,DC,UC,BC,OC,zC,FC,WC,HC,VC=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},GC=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};bC=new WeakMap,xC=new WeakMap,_C=new WeakMap,kC=new WeakMap,EC=new WeakMap,SC=new WeakMap,MC=new WeakMap,TC=new WeakMap,AC=new WeakMap,CC=new WeakMap,PC=new WeakMap,RC=new WeakMap,LC=new WeakMap,IC=new WeakMap,NC=new WeakMap,DC=new WeakMap,UC=new WeakMap,yC=new WeakSet,BC=function e(t,n,i,r,a,o,s,l,c,h,d,u,p,f,m,g,v){GC(this,_C,"f").innerHTML="",VC(this,kC,document.createElement("img"),"f"),GC(this,kC,"f").src="images/logo.svg",GC(this,kC,"f").className="logo",GC(this,_C,"f").appendChild(GC(this,kC,"f")),VC(this,TC,new Ax(GC(this,_C,"f"),t,n,s,l,h,a,o,u,!1,(()=>{GC(this,TC,"f").hide(),GC(this,yC,"m",zC).call(this),GC(this,yC,"m",WC).call(this)}),((e,i,r,a)=>{if(e.hasStartingPoint()){GC(this,TC,"f").hide();const l=()=>{var e;GC(this,TC,"f").show(),null===(e=GC(this,AC,"f"))||void 0===e||e.dispose(),VC(this,AC,null,"f")},h=t=>{var n;null===(n=GC(this,AC,"f"))||void 0===n||n.dispose(),VC(this,AC,null,"f"),m(i,e,t)},d=f=>{var g;null===(g=GC(this,AC,"f"))||void 0===g||g.dispose(),VC(this,AC,null,"f"),f.then((t=>{m(i,e,t)})).catch((()=>{u.show(t.get("Failed to load recording"),t.get("Ok"),(()=>{VC(this,AC,new DA(GC(this,_C,"f"),t,c,o,s,n,i,r,a,l,d,p,h),"f")}))}))},p=f=>{var m;null===(m=GC(this,AC,"f"))||void 0===m||m.dispose(),VC(this,AC,null,"f"),f.then((t=>{g(e,t)})).catch((()=>{u.show(t.get("Failed to load recording"),t.get("Ok"),(()=>{VC(this,AC,new DA(GC(this,_C,"f"),t,c,o,s,n,i,r,a,l,d,p,h),"f")}))}))};VC(this,AC,new DA(GC(this,_C,"f"),t,c,o,s,n,i,r,a,l,d,p,h),"f"),GC(this,yC,"m",FC).call(this)}else GC(this,TC,"f").hide(),u.show(t.get("Track is missing starting point"),t.get("Ok"),(()=>{GC(this,TC,"f").show()}))})),"f");const w=document.createElement("button");w.className="hidden",w.innerHTML='',w.addEventListener("click",(()=>{n.playUIClick(),p()}));const y=document.createElement("p");y.textContent=t.get("Customize"),w.appendChild(y),GC(this,_C,"f").appendChild(w),GC(this,IC,"f").push(w);const b=document.createElement("button");b.className="hidden",b.innerHTML='',b.addEventListener("click",(()=>{n.playUIClick(),f()}));const x=document.createElement("p");x.textContent=t.get("Editor"),b.appendChild(x),GC(this,_C,"f").appendChild(b),GC(this,IC,"f").push(b);const _=document.createElement("button");_.className="hidden",_.innerHTML='',_.addEventListener("click",(()=>{n.playUIClick(),GC(this,yC,"m",OC).call(this),GC(this,yC,"m",FC).call(this),VC(this,CC,new BT(GC(this,_C,"f"),t,n,d,r,u,(()=>{var w;null===(w=GC(this,CC,"f"))||void 0===w||w.dispose(),VC(this,CC,null,"f"),GC(this,yC,"m",e).call(this,t,n,i,r,a,o,s,l,c,h,d,u,p,f,m,g,v)})),"f")}));const k=document.createElement("p");k.textContent=t.get("Settings"),_.appendChild(k),GC(this,_C,"f").appendChild(_),GC(this,IC,"f").push(_);const E=document.createElement("button");E.className="hidden",E.innerHTML='',E.addEventListener("click",(()=>{n.playUIClick(),GC(this,yC,"m",OC).call(this);const e=(i,a)=>{VC(this,LC,new vC(n,t,a,(()=>{var e;null===(e=GC(this,LC,"f"))||void 0===e||e.dispose(),VC(this,LC,null,"f"),r()}),(n=>{var a;null===(a=GC(this,LC,"f"))||void 0===a||a.dispose(),VC(this,LC,null,"f"),o.hasDuplicateToken(n)?u.show(t.get("You cannot have duplicate user profiles"),t.get("Ok"),(()=>{e(i,n)})):o.isValidToken(n)?c.getUser(n).then((a=>{null!=a?o.createProfile(i,n,a.name,a.carColors)?(o.setProfileSlot(i),r()):u.show(t.get("Failed to create user profile"),t.get("Ok"),(()=>{e(i,n)})):u.show(t.get("This user profile does not exist on the server"),t.get("Ok"),(()=>{e(i,n)}))})).catch((r=>{console.error(r),u.show(t.get("Failed to download user profile from the server"),t.get("Ok"),(()=>{e(i,n)}))})):u.show(t.get("User token is invalid"),t.get("Ok"),(()=>{e(i,n)}))})),"f")},i=(e,a)=>{var s;null===(s=GC(this,PC,"f"))||void 0===s||s.dispose(),VC(this,PC,null,"f"),null!=a||(a=o.getNickname(e)),VC(this,RC,new cC(t,n,c,a,o.getToken(e),o.getTokenHash(e),(n=>{var a;null===(a=GC(this,RC,"f"))||void 0===a||a.dispose(),VC(this,RC,null,"f"),u.showConfirm(t.get('Are you sure you would like to delete "{0}"?',[n]),t.get("Cancel"),t.get("Confirm"),(()=>{i(e,n)}),(()=>{var t;o.deleteProfileSlot(e),e==o.profileSlot&&o.setProfileSlot(null!==(t=o.firstOccupiedProfileSlot())&&void 0!==t?t:0),r()}))}),(r=>{var a;null===(a=GC(this,RC,"f"))||void 0===a||a.dispose(),VC(this,RC,null,"f"),u.showConfirm(t.get("Are you sure you want to display your private key?")+"\n\n"+t.get("DO NOT SHARE THIS KEY WITH ANYONE."),t.get("Cancel"),t.get("Confirm"),(()=>{i(e,r)}),(()=>{var a;VC(this,LC,new vC(n,t,null!==(a=o.getToken(e))&&void 0!==a?a:"",(()=>{var t;null===(t=GC(this,LC,"f"))||void 0===t||t.dispose(),VC(this,LC,null,"f"),i(e,r)}),null),"f")}))}),(t=>{var n;null===(n=GC(this,RC,"f"))||void 0===n||n.dispose(),VC(this,RC,null,"f"),o.setNickname(t,e),c.submitUserProfile(o.getToken(e),t,o.getCarColors(e)),o.setProfileSlot(e),r()}),(()=>{var t;null===(t=GC(this,RC,"f"))||void 0===t||t.dispose(),VC(this,RC,null,"f"),v(o.getToken(e)),GC(this,yC,"m",zC).call(this)})),"f")},r=()=>{VC(this,PC,new YA(t,n,o,(()=>{var e;null===(e=GC(this,PC,"f"))||void 0===e||e.dispose(),VC(this,PC,null,"f"),GC(this,yC,"m",zC).call(this)}),(()=>{var n;null===(n=GC(this,PC,"f"))||void 0===n||n.dispose(),VC(this,PC,null,"f");const i=o.firstFreeProfileSlot();null==i?u.show(t.get("You need a free user profile slot to import a new user profile"),t.get("Ok"),(()=>{r()})):e(i,"")}),(e=>i(e,null))),"f")};r()}));const S=document.createElement("p");S.textContent=t.get("Profile"),E.appendChild(S),GC(this,_C,"f").appendChild(E),GC(this,IC,"f").push(E);const M=document.createElement("button");M.className="hidden",M.innerHTML='',M.addEventListener("click",(()=>{n.playUIClick(),GC(this,yC,"m",OC).call(this),GC(this,yC,"m",FC).call(this),GC(this,TC,"f").show()}));const T=document.createElement("p");T.textContent=t.get("Play"),M.appendChild(T),GC(this,_C,"f").appendChild(M),GC(this,IC,"f").push(M);const A=document.createElement("div");if(A.className="bottom-buttons",GC(this,_C,"f").appendChild(A),window.electron){const e=document.createElement("button");e.className="button small",e.innerHTML=' Quit',e.addEventListener("click",(()=>{var e;n.playUIClick(),null===(e=window.electron)||void 0===e||e.quit()})),A.appendChild(e),GC(this,NC,"f").push(e)}VC(this,EC,document.createElement("a"),"f"),GC(this,EC,"f").className="discord-link",GC(this,EC,"f").href="https://www.kodub.com/discord/polytrack",GC(this,EC,"f").target="_blank",GC(this,EC,"f").innerHTML='',GC(this,_C,"f").appendChild(GC(this,EC,"f")),VC(this,SC,document.createElement("div"),"f"),GC(this,SC,"f").className="info",GC(this,_C,"f").appendChild(GC(this,SC,"f"));const C=document.createElement("a");C.href="https://www.kodub.com",C.target="_blank",C.textContent="kodub.com - "+t.get("Version")+" "+wC.rE,GC(this,SC,"f").appendChild(C);const P=document.createElement("a");P.href="https://opengameart.org/content/sci-fi-theme-1",P.target="_blank",P.textContent='"Sci-fi Theme" by Maou (CC-BY 4.0)',GC(this,SC,"f").appendChild(P);const G=document.createElement("a");G.href="https://selenite.cc",P.target="_blank",G.textContent='Ripped by Selenite. No multiplayer features.',GC(this,SC,"f").appendChild(G),i.hasLoaded()?GC(this,yC,"m",zC).call(this):(VC(this,MC,new uT(GC(this,_C,"f"),t,i),"f"),i.addCompleteListener((()=>{var e;null===(e=GC(this,MC,"f"))||void 0===e||e.dispose(),VC(this,MC,null,"f");null==o.getToken()?(E.disabled=!0,GC(this,yC,"m",FC).call(this),u.show(t.get("Failed to create user token.")+" "+t.get("Leaderboard is disabled.")+"\n\n"+t.get("Please try another browser or device."),t.get("Ok"),(()=>{GC(this,yC,"m",WC).call(this),GC(this,yC,"m",zC).call(this)}))):c.submitAllowed?(E.disabled=!1,GC(this,yC,"m",zC).call(this)):(E.disabled=!0,GC(this,yC,"m",FC).call(this),u.show(t.get("Computer determinism check failed.")+" "+t.get("Leaderboard is disabled.")+"\n\n"+t.get("Please try another browser or device."),t.get("Ok"),(()=>{GC(this,yC,"m",WC).call(this),GC(this,yC,"m",zC).call(this)})))})))},OC=function(){GC(this,IC,"f").forEach((e=>{e.className="hidden"})),GC(this,NC,"f").forEach((e=>{e.classList.add("hidden")})),GC(this,EC,"f").className="hidden",GC(this,SC,"f").className="hidden"},zC=function(){GC(this,IC,"f").forEach((e=>{e.className="button-image button"})),GC(this,NC,"f").forEach((e=>{e.classList.remove("hidden")})),GC(this,EC,"f").className="discord-link",GC(this,SC,"f").className="info"},FC=function(){GC(this,kC,"f").className="hidden"},WC=function(){GC(this,kC,"f").className="logo"},HC=function(){const e=GC(this,bC,"f").getBounds(),t=new ln((e.min.x+(e.max.x-e.min.x)/2)*Ky.partWidth,(e.min.y+(e.max.y-e.min.y)/2)*Ky.partLength);GC(this,DC,"f").position.set(t.x+250*Math.cos(GC(this,UC,"f")),100,t.y-250*Math.sin(GC(this,UC,"f"))),GC(this,DC,"f").rotation.y=GC(this,UC,"f")+Math.PI/2};const jC=class{constructor(e,t,n,i,r,a,o,s,l,c,h,d,u,p,f,m,g,v){yC.add(this),bC.set(this,void 0),xC.set(this,void 0),_C.set(this,void 0),kC.set(this,void 0),EC.set(this,void 0),SC.set(this,void 0),MC.set(this,null),TC.set(this,void 0),AC.set(this,null),CC.set(this,null),PC.set(this,null),RC.set(this,null),LC.set(this,null),IC.set(this,[]),NC.set(this,[]),DC.set(this,void 0),UC.set(this,Math.random()*Math.PI*2),VC(this,bC,r,"f"),VC(this,xC,document.getElementById("ui"),"f"),VC(this,_C,document.createElement("div"),"f"),GC(this,_C,"f").className="menu",GC(this,yC,"m",BC).call(this,e,t,i,r,a,o,s,l,c,h,d,u,p,f,m,g,v),GC(this,xC,"f").appendChild(GC(this,_C,"f")),VC(this,DC,new Kr(70,1,.1,1e4),"f"),n.scene.add(GC(this,DC,"f")),GC(this,yC,"m",HC).call(this)}dispose(){var e;GC(this,xC,"f").removeChild(GC(this,_C,"f")),null===(e=GC(this,AC,"f"))||void 0===e||e.dispose(),VC(this,AC,null,"f")}get camera(){return GC(this,DC,"f")}update(e){VC(this,UC,GC(this,UC,"f")+.05*e,"f"),GC(this,yC,"m",HC).call(this)}};var qC,XC,YC,KC,ZC,JC,QC,$C,eP,tP,nP,iP,rP,aP=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},oP=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};XC=new WeakMap,YC=new WeakMap,KC=new WeakMap,ZC=new WeakMap,JC=new WeakMap,QC=new WeakMap,$C=new WeakMap,eP=new WeakMap,tP=new WeakMap,nP=new WeakMap,iP=new WeakMap,qC=new WeakSet,rP=function(){oP(this,YC,"f").loadTrackData(oP(this,ZC,"f").getRandomTrackData(!1)),oP(this,YC,"f").generateMeshes(),oP(this,KC,"f").generateMountains(oP(this,YC,"f").getBounds());let e=null;const t=oP(this,YC,"f").getID();if(null!=t){const n=oP(this,JC,"f").getRecord(oP(this,tP,"f").profileSlot,t);null!=n&&(e=n.recording)}null!=e&&(aP(this,iP,new Uv(oP(this,XC,"f"),oP(this,YC,"f").getStartTransform(),e,null,!1,oP(this,$C,"f"),oP(this,eP,"f"),oP(this,KC,"f"),oP(this,YC,"f"),oP(this,QC,"f")),"f"),oP(this,iP,"f").audioVolume=0,oP(this,iP,"f").start())};const sP=class{constructor(e,t,n,i,r,a,o,s,l,c,h,d,u,p,f,m,g,v,w,y){qC.add(this),XC.set(this,void 0),YC.set(this,void 0),KC.set(this,void 0),ZC.set(this,void 0),JC.set(this,void 0),QC.set(this,void 0),$C.set(this,void 0),eP.set(this,void 0),tP.set(this,void 0),nP.set(this,void 0),iP.set(this,null),aP(this,XC,e,"f"),aP(this,YC,t,"f"),aP(this,KC,i,"f"),aP(this,ZC,r,"f"),aP(this,JC,l,"f"),aP(this,QC,u,"f"),aP(this,$C,c,"f"),aP(this,eP,h,"f"),aP(this,tP,s,"f"),aP(this,nP,new jC(a,h,c,f,t,n,s,l,d,p,r,u,o,m,g,v,w,y),"f"),c.setCamera(oP(this,nP,"f").camera),f.hasLoaded()?oP(this,qC,"m",rP).call(this):f.addCompleteListener((()=>{oP(this,qC,"m",rP).call(this)}))}dispose(){var e;null===(e=oP(this,iP,"f"))||void 0===e||e.dispose(),oP(this,nP,"f").dispose(),oP(this,YC,"f").clear(),oP(this,KC,"f").clearMountains()}update(e){var t,n;null===(t=oP(this,iP,"f"))||void 0===t||t.update(e),oP(this,nP,"f").update(e),oP(this,$C,"f").update(null===(n=oP(this,iP,"f"))||void 0===n?void 0:n.getPosition()),oP(this,eP,"f").update(e,!0,oP(this,$C,"f"),oP(this,QC,"f"))}};var lP=n(437),cP={};cP.styleTagTransform=u(),cP.setAttributes=l(),cP.insert=o().bind(null,"head"),cP.domAPI=r(),cP.insertStyleElement=h();t()(lP.A,cP);lP.A&&lP.A.locals&&lP.A.locals;var hP,dP,uP,pP,fP,mP,gP,vP,wP,yP=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},bP=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};hP=new WeakMap,dP=new WeakMap,uP=new WeakMap,pP=new WeakMap,fP=new WeakMap,mP=new WeakMap,gP=new WeakMap,vP=new WeakMap,wP=new WeakMap;const xP=class{constructor(e){hP.set(this,!1),dP.set(this,void 0),uP.set(this,void 0),pP.set(this,void 0),fP.set(this,void 0),mP.set(this,void 0),gP.set(this,void 0),vP.set(this,null),wP.set(this,null);const t=document.getElementById("ui");yP(this,dP,document.createElement("div"),"f"),bP(this,dP,"f").className="hidden",t.appendChild(bP(this,dP,"f")),yP(this,uP,document.createElement("div"),"f"),bP(this,uP,"f").className="background",bP(this,dP,"f").appendChild(bP(this,uP,"f")),yP(this,pP,document.createElement("div"),"f"),bP(this,pP,"f").className="box",bP(this,dP,"f").appendChild(bP(this,pP,"f")),yP(this,fP,document.createElement("p"),"f"),bP(this,pP,"f").appendChild(bP(this,fP,"f")),yP(this,mP,document.createElement("button"),"f"),bP(this,mP,"f").className="button",bP(this,mP,"f").addEventListener("click",(()=>{e.playUIClick(),yP(this,hP,!1,"f"),null!=bP(this,vP,"f")&&bP(this,vP,"f").call(this),bP(this,hP,"f")||this.hide()})),bP(this,pP,"f").appendChild(bP(this,mP,"f")),yP(this,gP,document.createElement("button"),"f"),bP(this,gP,"f").className="button",bP(this,gP,"f").addEventListener("click",(()=>{e.playUIClick(),yP(this,hP,!1,"f"),null!=bP(this,wP,"f")&&bP(this,wP,"f").call(this),bP(this,hP,"f")||this.hide()})),bP(this,pP,"f").appendChild(bP(this,gP,"f")),window.addEventListener("keydown",(e=>{this.isOpen&&"Escape"==e.code&&(null!=bP(this,vP,"f")&&bP(this,vP,"f").call(this),this.hide(),e.stopImmediatePropagation(),e.preventDefault())}))}get isOpen(){return bP(this,hP,"f")}show(e,t,n){yP(this,hP,!0,"f"),bP(this,dP,"f").className="message-box message",bP(this,fP,"f").textContent=e,bP(this,mP,"f").textContent="",bP(this,gP,"f").textContent=t,yP(this,vP,n,"f"),yP(this,wP,n,"f")}showConfirm(e,t,n,i,r){yP(this,hP,!0,"f"),bP(this,dP,"f").className="message-box confirm",bP(this,fP,"f").textContent=e,bP(this,mP,"f").textContent=t,bP(this,gP,"f").textContent=n,yP(this,vP,i,"f"),yP(this,wP,r,"f")}hide(){yP(this,hP,!1,"f"),bP(this,dP,"f").className="hidden",bP(this,fP,"f").textContent="",bP(this,mP,"f").textContent="",bP(this,gP,"f").textContent="",yP(this,vP,null,"f"),yP(this,wP,null,"f")}};var _P,kP,EP,SP,MP=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)},TP=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n};_P=new WeakMap,kP=new WeakMap,EP=new WeakMap,SP=new WeakMap;const AP=class{constructor(){_P.set(this,0),kP.set(this,0),EP.set(this,[]),SP.set(this,[])}hasLoaded(){return MP(this,kP,"f")==MP(this,_P,"f")}getProgress(){return MP(this,kP,"f")/MP(this,_P,"f")}addResource(){var e;TP(this,_P,(e=MP(this,_P,"f"),++e),"f")}loadedResource(){var e;TP(this,kP,(e=MP(this,kP,"f"),++e),"f");for(let e=0;e{this.loadedResource()})),t.src=e}};var CP,PP,RP,LP,IP,NP,DP,UP=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},BP=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};PP=new WeakMap,RP=new WeakMap,LP=new WeakMap,IP=new WeakMap,CP=new WeakSet,NP=function(e,t,n,i,r){var a;const o=BP(this,LP,"f").getToken(e),s=e+"_"+t,l=(null!==(a=BP(this,IP,"f").get(s))&&void 0!==a?a:0)+1;return BP(this,IP,"f").set(s,l),BP(this,RP,"f").submitLeaderboard(t,n,i,r).then((({uploadId:r})=>{null!=o&&BP(this,IP,"f").get(s)==l&&BP(this,LP,"f").getToken(e)==o&&BP(this,PP,"f").saveRecord(e,t,r,n,i)}))},DP=function(e,t,n){var i;const r=BP(this,LP,"f").getToken(e),a=e+"_"+t,o=(null!==(i=BP(this,IP,"f").get(a))&&void 0!==i?i:0)+1;return BP(this,IP,"f").set(a,o),BP(this,RP,"f").getRecording(n).then((({recording:i,time:s})=>{if(null!=r&&BP(this,IP,"f").get(a)==o&&BP(this,LP,"f").getToken(e)==r){const r=this.getRecordTime(e,t);(null==r||s.lessThan(r))&&BP(this,PP,"f").saveRecord(e,t,n,s,i)}}))};const OP=class{constructor(e,t,n){CP.add(this),PP.set(this,void 0),RP.set(this,void 0),LP.set(this,void 0),IP.set(this,new Map),UP(this,PP,e,"f"),UP(this,RP,t,"f"),UP(this,LP,n,"f")}setRecord(e,t,n,i,r){BP(this,PP,"f").saveRecord(e,t,null,n,i),BP(this,CP,"m",NP).call(this,e,t,n,i,r)}syncRecord(e,t,n,i){return new Promise(((r,a)=>{const o=this.getRecord(e,t);null!=o&&(null==n||o.uploadId!=n.recordingId&&o.time.lessThan(n.time))?BP(this,CP,"m",NP).call(this,e,t,o.time,o.recording,i).then((()=>r("Upload"))).catch(a):null!=n&&(null==o||o.uploadId!=n.recordingId&&n.time.lessThan(o.time))?BP(this,CP,"m",DP).call(this,e,t,n.recordingId).then((()=>r("Download"))).catch(a):r(null)}))}getRecordTime(e,t){const n=this.getRecord(e,t);return null==n?null:n.time}getRecord(e,t){return BP(this,PP,"f").loadRecord(e,t)}};var zP,FP,WP,HP,VP,GP,jP,qP=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},XP=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};FP=new WeakMap,WP=new WeakMap,HP=new WeakMap,VP=new WeakMap,zP=new WeakSet,GP=function(e,t){return t.addResource(),new Promise((n=>{const i=new XMLHttpRequest;i.overrideMimeType("text/plain"),i.onreadystatechange=()=>{if(4==i.readyState&&200==i.status){t.loadedResource();const e=Py.fromExportString(i.responseText,XP(this,VP,"f"));if(null==e)throw"Failed to load standard track";const{trackName:r,trackData:a}=e;n({id:a.getId(XP(this,VP,"f")),name:r,trackData:a,thumbnail:a.createThumbnail(XP(this,VP,"f")),saveTime:null})}},i.open("GET",e,!0),i.send()}))},jP=function(e){var t;const n=XP(this,HP,"f").loadTrack(e,XP(this,VP,"f"));if(null!=n){const{trackData:i,saveTime:r}=n,a={id:i.getId(XP(this,VP,"f")),name:e,trackData:i,thumbnail:i.createThumbnail(XP(this,VP,"f")),saveTime:r};for(let e=0;e<=XP(this,WP,"f").length;e++)if(e==XP(this,WP,"f").length||(null!==(t=XP(this,WP,"f")[e].saveTime)&&void 0!==t?t:-1/0){qP(this,FP,e,"f")}))}refreshCustomTracks(){const e=XP(this,HP,"f").getAllTrackNames();null!=e&&(XP(this,WP,"f").length=0,e.forEach((e=>{XP(this,zP,"m",jP).call(this,e)})))}isCustomTracksEmpty(){return 0==XP(this,WP,"f").length}forEach(e){this.forEachStandard(e),this.forEachCustom(e)}forEachStandard(e){XP(this,FP,"f").forEach((t=>{e(t.id,t.name,t.trackData,t.thumbnail)}))}forEachCustom(e){XP(this,WP,"f").forEach((t=>{e(t.id,t.name,t.trackData,t.thumbnail)}))}getRandomTrackData(e){let t;return t=e?XP(this,FP,"f").concat(XP(this,WP,"f")):XP(this,FP,"f"),t[Math.floor(Math.random()*t.length)].trackData}};var KP;!function(e){e[e.Special=0]="Special",e[e.Road=1]="Road",e[e.RoadTurns=2]="RoadTurns",e[e.RoadWide=3]="RoadWide",e[e.Plane=4]="Plane",e[e.Block=5]="Block",e[e.WallTrack=6]="WallTrack",e[e.Pillar=7]="Pillar",e[e.Sign=8]="Sign"}(KP||(KP={}));const ZP=KP;var JP,QP,$P,eR,tR=function(e,t,n,i){return new(n||(n=Promise))((function(r,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function s(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}l((i=i.apply(e,t||[])).next())}))},nR=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},iR=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class rR{constructor(e){JP.add(this),QP.set(this,void 0),$P.set(this,new Map),nR(this,QP,e,"f"),iR(this,JP,"m",eR).call(this)}getPhysicsParts(){const e=[];return iR(this,$P,"f").forEach((({id:t,physicsShapeVertices:n,detector:i})=>{e.push({type:t,vertices:n,detector:i})})),e}hasPart(e){return iR(this,$P,"f").has(e)}getPart(e){const t=iR(this,$P,"f").get(e);if(null==t)throw'Track part with the id "'+e+'" does not exist';return t}getAllParts(){return Array.from(iR(this,$P,"f").values())}getPartTypesWithDetector(e){const t=[];return iR(this,$P,"f").forEach(((n,i)=>{null!=n.detector&&n.detector.type==e&&t.push(i)})),t}}QP=new WeakMap,$P=new WeakMap,JP=new WeakSet,eR=function(){return tR(this,void 0,void 0,(function*(){const e=(t=["models/block.glb","models/pillar.glb","models/plane.glb","models/road.glb","models/road_wide.glb","models/signs.glb","models/wall_track.glb"],Promise.all(t.map((e=>{return t=e,new Promise((e=>{(new fd).load(t,(t=>{e(t)}))}));var t}))));var t;const n=new jc({vertexColors:!0}),i=(t,i,r,...a)=>tR(this,[t,i,r,...a],void 0,(function*(t,i,r,a=null,o=null,s=null){if(iR(this,QP,"f").addResource(),iR(this,$P,"f").has(i))throw"Track part types have same Id";const l={id:i,mesh:null,physicsShapeVertices:[],tiles:new Ix(null!=a?a:[[0,0,0]]),detector:null!=o?o:null,category:t};iR(this,$P,"f").set(i,l);const c=yield e;function h(e){const t=e.material;if(!(t instanceof Vc))throw"Material is not a MeshStandardMaterial";const n=e.geometry.clone(),i=new Float32Array(n.attributes.position.array.length);for(let e=0;e{const i=function(e,t){const i=c.find((t=>t.scene.name==e));if(null==i)throw'Scene "'+e+'" does not exist';const r=i.scene.getObjectByName(t);if(null==r)throw'Mesh "'+t+'" does not exist in scene "'+e+'"';let a;if(0==r.children.length){const e=r;a=h(e),e.updateMatrixWorld(!0),a.applyMatrix4(e.matrix)}else{const e=r.children.map((e=>h(e)));a=dd(e,!0),r.updateMatrixWorld(!0),a.applyMatrix4(r.matrix)}const o=new Br(a,n);return o.name=t,o}(e,t);d.push(i);const r=i.geometry.toNonIndexed();if(!(r.attributes.position instanceof lr))throw"Vertices must use BufferAttribute";u=u.concat(Array.from(r.attributes.position.array))}));const p=dd(d.map((e=>e.geometry)),!0),f=new Br(p,n);l.mesh=f,l.physicsShapeVertices=u,null!=s&&s(l),iR(this,QP,"f").loadedResource()}));function r(e,t,n,i){if(null==e.mesh)throw"Mesh not loaded";const r=e.mesh.geometry.attributes.color.array;for(let e=0;e<3*r.length;e+=3){const a=new tr(r[e+0],r[e+1],r[e+2]);a.offsetHSL(t,n,i),r[e+0]=a.r,r[e+1]=a.g,r[e+2]=a.b}}function a(e){return r(e,0,.5,0)}function o(e){return r(e,.65,.4,0)}function s(e){return r(e,0,0,-.135)}i(ZP.Special,Bw.Start,[["Road","Start"]]),i(ZP.Special,Bw.Checkpoint,[["Road","Checkpoint"]],[[0,0,0]],{type:yy.Checkpoint,center:[0,2.2,0],size:[11,3.8,2]}),i(ZP.Special,Bw.CheckpointWide,[["RoadWide","CheckpointWide"]],[[0,0,0],[1,0,0]],{type:yy.Checkpoint,center:[10,2.2,0],size:[31.1,3.8,2]}),i(ZP.Special,Bw.PlaneCheckpoint,[["Planes","PlaneCheckpoint"]],[[0,0,0]],{type:yy.Checkpoint,center:[0,2.2,0],size:[18.75,3.8,2]}),i(ZP.Special,Bw.PlaneCheckpointWide,[["Planes","PlaneCheckpointWide"]],[[0,0,0],[1,0,0]],{type:yy.Checkpoint,center:[10,2.2,0],size:[38.75,3.8,2]}),i(ZP.Special,Bw.Finish,[["Road","Finish"]],[[0,0,0]],{type:yy.Finish,center:[0,2.2,0],size:[11,3.8,2]}),i(ZP.Special,Bw.FinishWide,[["RoadWide","FinishWide"]],[[0,0,0],[1,0,0]],{type:yy.Finish,center:[10,2.2,0],size:[31.1,3.8,2]}),i(ZP.Special,Bw.PlaneFinish,[["Planes","PlaneFinish"]],[[0,0,0]],{type:yy.Finish,center:[0,2.2,0],size:[18.75,3.8,2]}),i(ZP.Special,Bw.PlaneFinishWide,[["Planes","PlaneFinishWide"]],[[0,0,0],[1,0,0]],{type:yy.Finish,center:[10,2.2,0],size:[38.75,3.8,2]}),i(ZP.Road,Bw.Straight,[["Road","Straight"]]),i(ZP.Road,Bw.StraightPillarBottom,[["Road","Straight"],["Pillar","SurfacePillarBottom"]]),i(ZP.Road,Bw.StraightPillarShort,[["Road","Straight"],["Pillar","SurfacePillarShort"]]),i(ZP.Road,Bw.TurnSharp,[["Road","TurnSharp"]]),i(ZP.Road,Bw.TurnSharpPillarBottom,[["Road","TurnSharp"],["Pillar","SurfacePillarBottom"]]),i(ZP.Road,Bw.TurnSharpPillarShort,[["Road","TurnSharp"],["Pillar","SurfacePillarShort"]]),i(ZP.RoadTurns,Bw.TurnShort,[["Road","TurnShort"]],[[0,0,0],[1,0,0],[0,0,-1],[1,0,-1]]),i(ZP.RoadTurns,Bw.TurnLong,[["Road","TurnLong"]],[[0,0,0],[1,0,0],[0,0,-1],[1,0,-1],[2,0,-1],[1,0,-2],[2,0,-2]]),i(ZP.RoadTurns,Bw.TurnLong2,[["Road","TurnLong2"]],[[0,0,0],[0,0,-1],[1,0,-1],[0,0,-2],[1,0,-2],[2,0,-2],[1,0,-3],[2,0,-3],[3,0,-3]]),i(ZP.RoadTurns,Bw.TurnLong3,[["Road","TurnLong3"]],[[0,0,0],[0,0,-1],[1,0,-1],[0,0,-2],[1,0,-2],[2,0,-2],[1,0,-3],[2,0,-3],[3,0,-3],[2,0,-4],[3,0,-4],[4,0,-4]]),i(ZP.RoadTurns,Bw.TurnSLeft,[["Road","TurnSLeft"]],[[0,0,0],[0,0,-1],[0,0,-2],[-1,0,0],[-1,0,-1],[-1,0,-2]]),i(ZP.RoadTurns,Bw.TurnSRight,[["Road","TurnSRight"]],[[0,0,0],[0,0,-1],[0,0,-2],[1,0,0],[1,0,-1],[1,0,-2]]),i(ZP.Road,Bw.SlopeUp,[["Road","SlopeUp"]],[[0,0,0],[0,1,0]]),i(ZP.Road,Bw.SlopeUpBlock,[["Road","SlopeUp"],["Blocks","BlockSlopeUp"]],[[0,0,0],[0,1,0]]),i(ZP.Road,Bw.SlopeUpLong,[["Road","SlopeUpLong"]],[[0,0,0],[0,0,-1],[0,1,-1],[0,2,-1]]),i(ZP.Road,Bw.SlopeDown,[["Road","SlopeDown"]],[[0,0,0],[0,1,0]]),i(ZP.Road,Bw.SlopeDownBlock,[["Road","SlopeDown"],["Blocks","BlockSlopeDown"]],[[0,0,0],[0,1,0]]),i(ZP.Road,Bw.SlopeDownLong,[["Road","SlopeDownLong"]],[[0,0,0],[0,1,0],[0,1,1],[0,2,1]]),i(ZP.Road,Bw.Slope,[["Road","Slope"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Road,Bw.SlopePillar,[["Road","Slope"],["Pillar","PillarTopSlope"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Road,Bw.SlopePillarShort,[["Road","Slope"],["Pillar","PillarShortSlope"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Road,Bw.SlopeBlock,[["Road","Slope"],["Blocks","BlockSlopedUp"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Road,Bw.IntersectionT,[["Road","IntersectionT"]]),i(ZP.Road,Bw.IntersectionTPillarBottom,[["Road","IntersectionT"],["Pillar","SurfacePillarBottom"]]),i(ZP.Road,Bw.IntersectionTPillarShort,[["Road","IntersectionT"],["Pillar","SurfacePillarShort"]]),i(ZP.Road,Bw.IntersectionCross,[["Road","IntersectionCross"]]),i(ZP.Road,Bw.IntersectionCrossPillarBottom,[["Road","IntersectionCross"],["Pillar","SurfacePillarBottom"]]),i(ZP.Road,Bw.IntersectionCrossPillarShort,[["Road","IntersectionCross"],["Pillar","SurfacePillarShort"]]),i(ZP.RoadWide,Bw.ToWideMiddle,[["RoadWide","ToWideMiddle"]]),i(ZP.RoadWide,Bw.ToWideLeft,[["RoadWide","ToWideLeft"]]),i(ZP.RoadWide,Bw.ToWideRight,[["RoadWide","ToWideRight"]]),i(ZP.RoadWide,Bw.ToWideDouble,[["RoadWide","ToWideDouble"]]),i(ZP.RoadWide,Bw.ToWideDiagonal,[["RoadWide","ToWideDiagonal"]]),i(ZP.RoadWide,Bw.StraightWide,[["RoadWide","StraightWide"]]),i(ZP.RoadWide,Bw.InnerCornerWide,[["RoadWide","InnerCornerWide"]]),i(ZP.RoadWide,Bw.OuterCornerWide,[["RoadWide","OuterCornerWide"]]),i(ZP.RoadWide,Bw.SlopeUpLeftWide,[["RoadWide","SlopeUpLeftWide"]],[[0,0,0],[0,1,0]]),i(ZP.RoadWide,Bw.SlopeUpLeftWideBlock,[["RoadWide","SlopeUpLeftWide"],["Blocks","BlockSlopeUp"]],[[0,0,0],[0,1,0]]),i(ZP.RoadWide,Bw.SlopeUpRightWide,[["RoadWide","SlopeUpRightWide"]],[[0,0,0],[0,1,0]]),i(ZP.RoadWide,Bw.SlopeUpRightWideBlock,[["RoadWide","SlopeUpRightWide"],["Blocks","BlockSlopeUp"]],[[0,0,0],[0,1,0]]),i(ZP.RoadWide,Bw.SlopeDownLeftWide,[["RoadWide","SlopeDownLeftWide"]],[[0,0,0],[0,1,0]]),i(ZP.RoadWide,Bw.SlopeDownLeftWideBlock,[["RoadWide","SlopeDownLeftWide"],["Blocks","BlockSlopeDown"]],[[0,0,0],[0,1,0]]),i(ZP.RoadWide,Bw.SlopeDownRightWide,[["RoadWide","SlopeDownRightWide"]],[[0,0,0],[0,1,0]]),i(ZP.RoadWide,Bw.SlopeDownRightWideBlock,[["RoadWide","SlopeDownRightWide"],["Blocks","BlockSlopeDown"]],[[0,0,0],[0,1,0]]),i(ZP.RoadWide,Bw.SlopeLeftWide,[["RoadWide","SlopeLeftWide"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.RoadWide,Bw.SlopeLeftWideBlock,[["RoadWide","SlopeLeftWide"],["Blocks","BlockSlopedUp"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.RoadWide,Bw.SlopeRightWide,[["RoadWide","SlopeRightWide"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.RoadWide,Bw.SlopeRightWideBlock,[["RoadWide","SlopeRightWide"],["Blocks","BlockSlopedUp"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Plane,Bw.Plane,[["Planes","Plane"]]),i(ZP.Plane,Bw.PlanePillarBottom,[["Planes","Plane"],["Pillar","SurfacePillarBottom"]]),i(ZP.Plane,Bw.PlanePillarShort,[["Planes","Plane"],["Pillar","SurfacePillarShort"]]),i(ZP.Plane,Bw.HalfPlane,[["Planes","HalfPlane"]]),i(ZP.Plane,Bw.QuarterPlane,[["Planes","QuarterPlane"]]),i(ZP.Plane,Bw.PlaneSlopeUp,[["Planes","PlaneSlopeUp"]],[[0,0,0],[0,1,0]]),i(ZP.Plane,Bw.PlaneSlopeDown,[["Planes","PlaneSlopeDown"]],[[0,0,0],[0,1,0]]),i(ZP.Plane,Bw.PlaneSlope,[["Planes","PlaneSlope"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Plane,Bw.PlaneBridge,[["Planes","PlaneBridge"]]),i(ZP.Plane,Bw.PlaneBridgeCorner,[["Planes","PlaneBridgeCorner"]]),i(ZP.Plane,Bw.PlaneBridgeIntersectionT,[["Planes","PlaneBridgeIntersectionT"]]),i(ZP.Plane,Bw.PlaneBridgeIntersectionCross,[["Planes","PlaneBridgeIntersectionCross"]]),i(ZP.Plane,Bw.PlaneWall,[["Planes","PlaneWall"]]),i(ZP.Plane,Bw.PlaneWallCorner,[["Planes","PlaneWallCorner"]]),i(ZP.Plane,Bw.PlaneWallInnerCorner,[["Planes","PlaneWallInnerCorner"]]),i(ZP.Plane,Bw.PlaneSlopeUpBlock,[["Planes","PlaneSlopeUp"],["Blocks","BlockSlopeUp"]],[[0,0,0],[0,1,0]]),i(ZP.Plane,Bw.PlaneSlopeDownBlock,[["Planes","PlaneSlopeDown"],["Blocks","BlockSlopeDown"]],[[0,0,0],[0,1,0]]),i(ZP.Plane,Bw.PlaneSlopeBlock,[["Planes","PlaneSlope"],["Blocks","BlockSlopedUp"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Plane,Bw.PlaneSlopePillar,[["Planes","PlaneSlope"],["Pillar","PillarTopSlope"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Plane,Bw.PlaneSlopePillarShort,[["Planes","PlaneSlope"],["Pillar","PillarShortSlope"]],[[0,0,0],[0,1,0],[0,2,0]]),i(ZP.Block,Bw.Block,[["Blocks","Block"]]),i(ZP.Block,Bw.HalfBlock,[["Blocks","HalfBlock"]]),i(ZP.Block,Bw.QuarterBlock,[["Blocks","QuarterBlock"]]),i(ZP.Block,Bw.BlockSlopedDown,[["Blocks","BlockSlopedDown"]],[[0,0,0],[0,1,0]]),i(ZP.Block,Bw.BlockSlopedDownInnerCorner,[["Blocks","BlockSlopedDownInnerCorner"]],[[0,0,0],[0,1,0]]),i(ZP.Block,Bw.BlockSlopedDownOuterCorner,[["Blocks","BlockSlopedDownOuterCorner"]],[[0,0,0],[0,1,0]]),i(ZP.Block,Bw.BlockSlopedUp,[["Blocks","BlockSlopedUp"]],[[0,0,0],[0,1,0]]),i(ZP.Block,Bw.BlockSlopedUpInnerCorner,[["Blocks","BlockSlopedUpInnerCorner"]],[[0,0,0],[0,1,0]]),i(ZP.Block,Bw.BlockSlopedUpOuterCorner,[["Blocks","BlockSlopedUpOuterCorner"]],[[0,0,0],[0,1,0]]),i(ZP.Block,Bw.BlockSlopeDown,[["Blocks","BlockSlopeDown"]]),i(ZP.Block,Bw.BlockSlopeUp,[["Blocks","BlockSlopeUp"]]),i(ZP.Block,Bw.BlockBridge,[["Blocks","BlockBridge"]]),i(ZP.Block,Bw.BlockBridgeCorner,[["Blocks","BlockBridgeCorner"]]),i(ZP.Block,Bw.BlockBridgeIntersectionT,[["Blocks","BlockBridgeIntersectionT"]]),i(ZP.Block,Bw.BlockBridgeIntersectionCross,[["Blocks","BlockBridgeIntersectionCross"]]),i(ZP.Block,Bw.RedBlock,[["Blocks","Block"]],null,null,a),i(ZP.Block,Bw.RedHalfBlock,[["Blocks","HalfBlock"]],null,null,a),i(ZP.Block,Bw.RedQuarterBlock,[["Blocks","QuarterBlock"]],null,null,a),i(ZP.Block,Bw.RedBlockSlopedDown,[["Blocks","BlockSlopedDown"]],[[0,0,0],[0,1,0]],null,a),i(ZP.Block,Bw.RedBlockSlopedDownInnerCorner,[["Blocks","BlockSlopedDownInnerCorner"]],[[0,0,0],[0,1,0]],null,a),i(ZP.Block,Bw.RedBlockSlopedDownOuterCorner,[["Blocks","BlockSlopedDownOuterCorner"]],[[0,0,0],[0,1,0]],null,a),i(ZP.Block,Bw.RedBlockSlopedUp,[["Blocks","BlockSlopedUp"]],[[0,0,0],[0,1,0]],null,a),i(ZP.Block,Bw.RedBlockSlopedUpInnerCorner,[["Blocks","BlockSlopedUpInnerCorner"]],[[0,0,0],[0,1,0]],null,a),i(ZP.Block,Bw.RedBlockSlopedUpOuterCorner,[["Blocks","BlockSlopedUpOuterCorner"]],[[0,0,0],[0,1,0]],null,a),i(ZP.Block,Bw.RedBlockSlopeDown,[["Blocks","BlockSlopeDown"]],null,null,a),i(ZP.Block,Bw.RedBlockSlopeUp,[["Blocks","BlockSlopeUp"]],null,null,a),i(ZP.Block,Bw.RedBlockBridge,[["Blocks","BlockBridge"]],null,null,a),i(ZP.Block,Bw.RedBlockBridgeCorner,[["Blocks","BlockBridgeCorner"]],null,null,a),i(ZP.Block,Bw.RedBlockBridgeIntersectionT,[["Blocks","BlockBridgeIntersectionT"]],null,null,a),i(ZP.Block,Bw.RedBlockBridgeIntersectionCross,[["Blocks","BlockBridgeIntersectionCross"]],null,null,a),i(ZP.Block,Bw.BlueBlock,[["Blocks","Block"]],null,null,o),i(ZP.Block,Bw.BlueHalfBlock,[["Blocks","HalfBlock"]],null,null,o),i(ZP.Block,Bw.BlueQuarterBlock,[["Blocks","QuarterBlock"]],null,null,o),i(ZP.Block,Bw.BlueBlockSlopedDown,[["Blocks","BlockSlopedDown"]],[[0,0,0],[0,1,0]],null,o),i(ZP.Block,Bw.BlueBlockSlopedDownInnerCorner,[["Blocks","BlockSlopedDownInnerCorner"]],[[0,0,0],[0,1,0]],null,o),i(ZP.Block,Bw.BlueBlockSlopedDownOuterCorner,[["Blocks","BlockSlopedDownOuterCorner"]],[[0,0,0],[0,1,0]],null,o),i(ZP.Block,Bw.BlueBlockSlopedUp,[["Blocks","BlockSlopedUp"]],[[0,0,0],[0,1,0]],null,o),i(ZP.Block,Bw.BlueBlockSlopedUpInnerCorner,[["Blocks","BlockSlopedUpInnerCorner"]],[[0,0,0],[0,1,0]],null,o),i(ZP.Block,Bw.BlueBlockSlopedUpOuterCorner,[["Blocks","BlockSlopedUpOuterCorner"]],[[0,0,0],[0,1,0]],null,o),i(ZP.Block,Bw.BlueBlockSlopeDown,[["Blocks","BlockSlopeDown"]],null,null,o),i(ZP.Block,Bw.BlueBlockSlopeUp,[["Blocks","BlockSlopeUp"]],null,null,o),i(ZP.Block,Bw.BlueBlockBridge,[["Blocks","BlockBridge"]],null,null,o),i(ZP.Block,Bw.BlueBlockBridgeCorner,[["Blocks","BlockBridgeCorner"]],null,null,o),i(ZP.Block,Bw.BlueBlockBridgeIntersectionT,[["Blocks","BlockBridgeIntersectionT"]],null,null,o),i(ZP.Block,Bw.BlueBlockBridgeIntersectionCross,[["Blocks","BlockBridgeIntersectionCross"]],null,null,o),i(ZP.Block,Bw.BlackBlock,[["Blocks","Block"]],null,null,s),i(ZP.Block,Bw.BlackHalfBlock,[["Blocks","HalfBlock"]],null,null,s),i(ZP.Block,Bw.BlackQuarterBlock,[["Blocks","QuarterBlock"]],null,null,s),i(ZP.Block,Bw.BlackBlockSlopedDown,[["Blocks","BlockSlopedDown"]],[[0,0,0],[0,1,0]],null,s),i(ZP.Block,Bw.BlackBlockSlopedDownInnerCorner,[["Blocks","BlockSlopedDownInnerCorner"]],[[0,0,0],[0,1,0]],null,s),i(ZP.Block,Bw.BlackBlockSlopedDownOuterCorner,[["Blocks","BlockSlopedDownOuterCorner"]],[[0,0,0],[0,1,0]],null,s),i(ZP.Block,Bw.BlackBlockSlopedUp,[["Blocks","BlockSlopedUp"]],[[0,0,0],[0,1,0]],null,s),i(ZP.Block,Bw.BlackBlockSlopedUpInnerCorner,[["Blocks","BlockSlopedUpInnerCorner"]],[[0,0,0],[0,1,0]],null,s),i(ZP.Block,Bw.BlackBlockSlopedUpOuterCorner,[["Blocks","BlockSlopedUpOuterCorner"]],[[0,0,0],[0,1,0]],null,s),i(ZP.Block,Bw.BlackBlockSlopeDown,[["Blocks","BlockSlopeDown"]],null,null,s),i(ZP.Block,Bw.BlackBlockSlopeUp,[["Blocks","BlockSlopeUp"]],null,null,s),i(ZP.Block,Bw.BlackBlockBridge,[["Blocks","BlockBridge"]],null,null,s),i(ZP.Block,Bw.BlackBlockBridgeCorner,[["Blocks","BlockBridgeCorner"]],null,null,s),i(ZP.Block,Bw.BlackBlockBridgeIntersectionT,[["Blocks","BlockBridgeIntersectionT"]],null,null,s),i(ZP.Block,Bw.BlackBlockBridgeIntersectionCross,[["Blocks","BlockBridgeIntersectionCross"]],null,null,s),i(ZP.WallTrack,Bw.WallTrackTop,[["WallTrack","WallTrackTop"]],[[0,0,0],[0,1,0],[0,2,0],[0,3,0]]),i(ZP.WallTrack,Bw.WallTrackMiddle,[["WallTrack","WallTrackMiddle"]]),i(ZP.WallTrack,Bw.WallTrackBottom,[["WallTrack","WallTrackBottom"]],[[0,0,0],[0,1,0],[0,2,0],[0,3,0]]),i(ZP.WallTrack,Bw.WallTrackTopCorner,[["WallTrack","WallTrackTopCorner"]],[[0,0,0],[0,1,0],[0,2,0],[0,3,0]]),i(ZP.WallTrack,Bw.WallTrackMiddleCorner,[["WallTrack","WallTrackMiddleCorner"]]),i(ZP.WallTrack,Bw.WallTrackBottomCorner,[["WallTrack","WallTrackBottomCorner"]],[[0,0,0],[0,1,0],[0,2,0],[0,3,0]]),i(ZP.WallTrack,Bw.WallTrackBottomInnerCorner,[["WallTrack","WallTrackBottomInnerCorner"]],[[0,0,0],[0,1,0],[0,2,0],[0,3,0]]),i(ZP.WallTrack,Bw.WallTrackInnerCorner,[["WallTrack","WallTrackInnerCorner"]]),i(ZP.WallTrack,Bw.WallTrackTopInnerCorner,[["WallTrack","WallTrackTopInnerCorner"]],[[0,0,0],[0,1,0],[0,2,0],[0,3,0]]),i(ZP.WallTrack,Bw.WallTrackCeiling,[["WallTrack","WallTrackCeiling"]]),i(ZP.WallTrack,Bw.WallTrackFloor,[["WallTrack","WallTrackFloor"]]),i(ZP.Pillar,Bw.PillarTop,[["Pillar","PillarTop"]]),i(ZP.Pillar,Bw.PillarMiddle,[["Pillar","PillarMiddle"]]),i(ZP.Pillar,Bw.PillarBottom,[["Pillar","PillarBottom"]]),i(ZP.Pillar,Bw.PillarShort,[["Pillar","PillarShort"]]),i(ZP.Pillar,Bw.PillarBranch1,[["Pillar","PillarBranch1"]]),i(ZP.Pillar,Bw.PillarBranch1Top,[["Pillar","PillarBranch1Top"]]),i(ZP.Pillar,Bw.PillarBranch1Middle,[["Pillar","PillarBranch1Middle"]]),i(ZP.Pillar,Bw.PillarBranch1Bottom,[["Pillar","PillarBranch1Bottom"]]),i(ZP.Pillar,Bw.PillarBranch2,[["Pillar","PillarBranch2"]]),i(ZP.Pillar,Bw.PillarBranch2Top,[["Pillar","PillarBranch2Top"]]),i(ZP.Pillar,Bw.PillarBranch2Middle,[["Pillar","PillarBranch2Middle"]]),i(ZP.Pillar,Bw.PillarBranch2Bottom,[["Pillar","PillarBranch2Bottom"]]),i(ZP.Pillar,Bw.PillarBranch3,[["Pillar","PillarBranch3"]]),i(ZP.Pillar,Bw.PillarBranch3Top,[["Pillar","PillarBranch3Top"]]),i(ZP.Pillar,Bw.PillarBranch3Middle,[["Pillar","PillarBranch3Middle"]]),i(ZP.Pillar,Bw.PillarBranch3Bottom,[["Pillar","PillarBranch3Bottom"]]),i(ZP.Pillar,Bw.PillarBranch4,[["Pillar","PillarBranch4"]]),i(ZP.Pillar,Bw.PillarBranch4Top,[["Pillar","PillarBranch4Top"]]),i(ZP.Pillar,Bw.PillarBranch4Middle,[["Pillar","PillarBranch4Middle"]]),i(ZP.Pillar,Bw.PillarBranch4Bottom,[["Pillar","PillarBranch4Bottom"]]),i(ZP.Pillar,Bw.PillarBranch5,[["Pillar","PillarBranch5"]]),i(ZP.Pillar,Bw.PillarBranch5Top,[["Pillar","PillarBranch5Top"]]),i(ZP.Pillar,Bw.PillarBranch5Middle,[["Pillar","PillarBranch5Middle"]]),i(ZP.Pillar,Bw.PillarBranch5Bottom,[["Pillar","PillarBranch5Bottom"]]),i(ZP.Sign,Bw.SignArrowLeft,[["Signs","SignArrowLeft"]]),i(ZP.Sign,Bw.SignArrowRight,[["Signs","SignArrowRight"]]),i(ZP.Sign,Bw.SignArrowUp,[["Signs","SignArrowUp"]]),i(ZP.Sign,Bw.SignArrowDown,[["Signs","SignArrowDown"]]),i(ZP.Sign,Bw.SignWarning,[["Signs","SignWarning"]]),i(ZP.Sign,Bw.SignWrongWay,[["Signs","SignWrongWay"]])}))};var aR=n(207),oR={};oR.styleTagTransform=u(),oR.setAttributes=l(),oR.insert=o().bind(null,"head"),oR.domAPI=r(),oR.insertStyleElement=h();t()(aR.A,oR);aR.A&&aR.A.locals&&aR.A.locals;const sR=class{constructor(){this.transitionLayer=document.getElementById("transition-layer"),this.callback=null}trigger(e){null==this.callback&&(this.transitionLayer.style.opacity="1",setTimeout((()=>{if(null!=this.callback){const e=this.callback();null==e?(this.transitionLayer.style.opacity="0",this.callback=null):e.catch((e=>{console.error(e)})).finally((()=>{this.transitionLayer.style.opacity="0",this.callback=null}))}}),250)),this.callback=e}};var lR,cR,hR=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},dR=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};lR=new WeakMap,cR=new WeakMap;const uR=class{constructor(e,t,n){lR.set(this,void 0),cR.set(this,void 0),hR(this,lR,t,"f");const i=e.getShadowDirection().negate();n.addResource();const r=(new yh).load("images/clouds.jpg",(()=>{n.loadedResource()}));r.wrapT=he,r.wrapS=he;const a=new Hc(1e6,5,2,0,2*Math.PI,0,Math.PI),o=new Gr({defines:{CLOUDS_ENABLED:t.getSettingBoolean(Jh.CloudsEnabled)},uniforms:{scrollA:{value:new ln(100*Math.random(),100*Math.random())},scrollB:{value:new ln(100*Math.random(),100*Math.random())},sampler:{value:r},cloudDensity:{value:.6},cloudLight:{value:new Un(.75,.75,.75)},sunPosition:{value:i}},vertexShader:"\n\t\t\t\tvarying vec3 fPos;\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewPosition;\n\t\t\t\t\tgl_Position.z = 0.0;\n\t\t\t\t\tfPos = position;\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\t\t\t\tvarying vec3 fPos;\n\n\t\t\t\tuniform vec2 offset;\n\t\t\t\tuniform vec2 scrollA;\n\t\t\t\tuniform vec2 scrollB;\n\t\t\t\tuniform sampler2D sampler;\n\n\t\t\t\tuniform float cloudDensity;\n\t\t\t\tuniform vec3 cloudLight;\n\n\t\t\t\tuniform vec3 sunPosition;\n\n\t\t\t\tvoid main()\n\t\t\t\t{\n\t\t\t\t\t#ifdef CLOUDS_ENABLED\n\t\t\t\t\t\tfloat c00 = texture2D(sampler, vec2(fPos.x / ((fPos.y + 0.06) / 0.1) - scrollB.x * 0.981, fPos.z / ((fPos.y + 0.06) / 0.1) - scrollB.y * 1.041) + scrollA).r;\n\t\t\t\t\t\tfloat c10 = texture2D(sampler, vec2(fPos.x / ((fPos.y + 0.06) / 0.1) + scrollB.x * 0.821, fPos.z / ((fPos.y + 0.06) / 0.1) - scrollB.y * 0.951) + scrollA).r;\n\t\t\t\t\t\tfloat c01 = texture2D(sampler, vec2(fPos.x / ((fPos.y + 0.06) / 0.1) - scrollB.x * 1.043, fPos.z / ((fPos.y + 0.06) / 0.1) + scrollB.y * 0.899) + scrollA).r;\n\t\t\t\t\t\tfloat c11 = texture2D(sampler, vec2(fPos.x / ((fPos.y + 0.06) / 0.1) + scrollB.x * 0.901, fPos.z / ((fPos.y + 0.06) / 0.1) + scrollB.y * 1.045) + scrollA).r;\n\t\t\t\t\t\tfloat cloud = min(1.0, max(0.0, (c00 + c10 + c01 + c11) / 4.0 - (1.0 - cloudDensity)) * 3.0);\n\n\t\t\t\t\t\tvec3 cloudColor = vec3(min(1.0, (c00 + c10 + c01 + c11) / 4.0 - (1.0 - cloudDensity)) * 4.0 + cloudDensity) * cloudLight;\n\t\t\t\t\t\tfloat cloudIntensity = cloud * min(1.0, max(0.0, fPos.y * 2.0 / 1000000.0));\n\t\t\t\t\t#else\n\t\t\t\t\t\tvec3 cloudColor = vec3(0.0);\n\t\t\t\t\t\tfloat cloudIntensity = 0.0;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\tvec3 horizonColor = vec3(255.0 / 255.0, 255.0 / 255.0, 255.0 / 255.0);\n\t\t\t\t\tvec3 zenithColor = vec3(5.0 / 255.0, 140.0 / 255.0, 255.0 / 255.0);\n\t\t\t\t\tfloat h = pow(clamp(fPos.y / 1000000.0, 0.01, 1.0), 0.2);\n\t\t\t\t\tvec3 skyColor = zenithColor * h + horizonColor * (1.0 - h);\n\n\t\t\t\t\tvec3 normal = normalize(-fPos);\n\t\t\t\t\tfloat sun = pow(max(0.0, max(0.0, dot(normal, sunPosition)) - 0.999), 4.0) * 60000000000.0;\n\t\t\t\t\tvec3 sunColor = vec3(20.0 * sun, 20.0 * sun, 19.0 * sun);\n\n\t\t\t\t\tgl_FragColor = vec4((skyColor * (1.0 - cloudIntensity) + cloudColor * cloudIntensity) * max(vec3(0.0), vec3(1.0) - sunColor) + sunColor, 1.0);\n\t\t\t\t}\n\t\t\t"});o.side=T,o.depthWrite=!1,hR(this,cR,new Br(a,o),"f"),dR(this,cR,"f").renderOrder=-3,dR(this,cR,"f").matrixAutoUpdate=!1,dR(this,cR,"f").updateMatrix(),e.scene.add(dR(this,cR,"f"))}update(e,t){dR(this,lR,"f").getSettingBoolean(Jh.CloudsEnabled)?(dR(this,cR,"f").material.uniforms.scrollA.value.x+=.00226*e,dR(this,cR,"f").material.uniforms.scrollA.value.y+=.001646*e,dR(this,cR,"f").material.uniforms.scrollB.value.x+=.001752*e,dR(this,cR,"f").material.uniforms.scrollB.value.y+=.001057*e,1!=dR(this,cR,"f").material.defines.CLOUDS_ENABLED&&(dR(this,cR,"f").material.defines.CLOUDS_ENABLED=!0,dR(this,cR,"f").material.needsUpdate=!0)):0!=dR(this,cR,"f").material.defines.CLOUDS_ENABLED&&(dR(this,cR,"f").material.defines.CLOUDS_ENABLED=!1,dR(this,cR,"f").material.needsUpdate=!0),dR(this,cR,"f").position.copy(t.position),dR(this,cR,"f").updateMatrix()}};const pR=class{constructor(){this.token=null,this.nickname=ER.defaultNickname,this.carColors=wu.random()}};var fR,mR,gR,vR,wR,yR,bR,xR=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},_R=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class kR{constructor(e){var t;fR.add(this),gR.set(this,void 0),vR.set(this,void 0),wR.set(this,void 0),xR(this,gR,e,"f"),xR(this,vR,null!==(t=_R(this,gR,"f").loadUserProfileSlot())&&void 0!==t?t:0,"f"),xR(this,wR,_R(this,fR,"m",bR).call(this,_R(this,vR,"f")),"f")}createProfile(e,t,n,i){return!!this.isValidToken(t)&&(_R(this,gR,"f").saveUserProfile(e,t,n,i),null!=_R(this,gR,"f").loadUserProfile(e))}isValidToken(e){return!(!/^[0-9a-f]*$/.test(e)||64!=e.length)}hasDuplicateToken(e){var t;for(let n=0;n<3;n++)if((null===(t=_R(this,gR,"f").loadUserProfile(n))||void 0===t?void 0:t.token)==e)return!0;return!1}firstOccupiedProfileSlot(){for(let e=0;e<3;e++)if(null!=_R(this,gR,"f").loadUserProfile(e))return e;return null}firstFreeProfileSlot(){for(let e=0;e<3;e++)if(null==_R(this,gR,"f").loadUserProfile(e))return e;return null}deleteProfileSlot(e){_R(this,gR,"f").deleteAllRecords(e),_R(this,gR,"f").deleteUserProfile(e)}setProfileSlot(e){if(!Number.isSafeInteger(e)||e<0)throw"Profile slot is invalid";xR(this,vR,e,"f"),xR(this,wR,_R(this,fR,"m",bR).call(this,_R(this,vR,"f")),"f"),_R(this,gR,"f").saveUserProfileSlot(_R(this,vR,"f"))}setNickname(e,t=_R(this,vR,"f")){let n;n=t==_R(this,vR,"f")?_R(this,wR,"f"):_R(this,fR,"m",bR).call(this,t),n.nickname=e,_R(this,gR,"f").saveUserProfile(t,n.token,n.nickname,n.carColors)}setCarColors(e,t=_R(this,vR,"f")){let n;n=t==_R(this,vR,"f")?_R(this,wR,"f"):_R(this,fR,"m",bR).call(this,t),n.carColors=e,_R(this,gR,"f").saveUserProfile(t,n.token,n.nickname,n.carColors)}get profileSlot(){return _R(this,vR,"f")}getUserProfile(e=_R(this,vR,"f")){var t;return e==_R(this,vR,"f")?{token:_R(this,wR,"f").token,nickname:_R(this,wR,"f").nickname,carColors:_R(this,wR,"f").carColors}:null!==(t=_R(this,gR,"f").loadUserProfile(e))&&void 0!==t?t:null}getToken(e=_R(this,vR,"f")){var t,n;return e==_R(this,vR,"f")?_R(this,wR,"f").token:null!==(n=null===(t=_R(this,gR,"f").loadUserProfile(e))||void 0===t?void 0:t.token)&&void 0!==n?n:null}getTokenHash(e=_R(this,vR,"f")){var t,n;let i;return i=e==_R(this,vR,"f")?_R(this,wR,"f").token:null!==(n=null===(t=_R(this,gR,"f").loadUserProfile(e))||void 0===t?void 0:t.token)&&void 0!==n?n:null,null==i?null:(0,hy.sha256)(i)}getNickname(e=_R(this,vR,"f")){var t,n;return e==_R(this,vR,"f")?_R(this,wR,"f").nickname:null!==(n=null===(t=_R(this,gR,"f").loadUserProfile(e))||void 0===t?void 0:t.nickname)&&void 0!==n?n:mR.defaultNickname}getCarColors(e=_R(this,vR,"f")){var t,n;return e==_R(this,vR,"f")?_R(this,wR,"f").carColors:null!==(n=null===(t=_R(this,gR,"f").loadUserProfile(e))||void 0===t?void 0:t.carColors)&&void 0!==n?n:wu.random()}syncUserProfile(e){const t=this.getUserProfile();null!=t&&e.getUser(t.token).then((e=>{if(null==e)return;const n=this.getUserProfile();null!=n&&n.token==t.token&&n.nickname==t.nickname&&n.carColors.serialize()==t.carColors.serialize()&&(this.setNickname(e.name),this.setCarColors(e.carColors))})).catch((e=>{console.error(e)}))}}mR=kR,gR=new WeakMap,vR=new WeakMap,wR=new WeakMap,fR=new WeakSet,yR=function(e){let t,n="";try{const e=new Uint8Array(32);crypto.getRandomValues(e),n+=e}catch(e){}try{n+=crypto.randomUUID()}catch(e){}0==n.length?(t=null,console.error("Failed to generate user token")):t=(0,hy.sha256)(n);const i=mR.defaultNickname,r=wu.random();_R(this,gR,"f").saveUserProfile(e,t,i,r)},bR=function(e){var t;return null==_R(this,gR,"f").loadUserProfile(e)&&_R(this,fR,"m",yR).call(this,e),null!==(t=_R(this,gR,"f").loadUserProfile(e))&&void 0!==t?t:new pR},kR.defaultNickname="Anonymous";const ER=kR;var SR,MR,TR,AR,CR,PR,RR,LR,IR,NR,DR,UR,BR,OR,zR,FR,WR,HR,VR,GR=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class jR{constructor(){SR.add(this)}migrate(e){GR(MR,MR,"f",TR)||GR(MR,MR,"f",AR)||GR(this,SR,"m",BR).call(this)||(GR(this,SR,"m",PR).call(this,e),GR(this,SR,"m",RR).call(this,e),GR(this,SR,"m",LR).call(this,e),GR(this,SR,"m",UR).call(this))}saveRecord(e,t,n,i,r){if(!Number.isSafeInteger(e)||e<0)throw"Profile slot is invalid";try{localStorage.setItem(GR(MR,MR,"f",OR)+e+"_"+t,JSON.stringify({uploadId:n,frames:i.numberOfFrames.toString(),recording:r.serialize()}))}catch(e){console.error(e)}}loadRecord(e,t){if(!Number.isSafeInteger(e)||e<0)throw"Profile slot is invalid";try{const n=localStorage.getItem(GR(MR,MR,"f",OR)+e+"_"+t);if(null==n)return null;const i=JSON.parse(n);if("object"!=typeof i)return null;if(!("uploadId"in i))return null;let r;if(null==i.uploadId)r=null;else if(r=Number.parseInt(i.uploadId,10),!Number.isSafeInteger(r))return null;if(!("frames"in i))return null;const a=Number.parseInt(i.frames,10);if(!Number.isSafeInteger(a))return null;const o=new rp(a);if(!("recording"in i))return null;const s=Ag.deserialize(i.recording);return null==s?null:{uploadId:r,time:o,recording:s}}catch(e){console.error(e)}return null}deleteAllRecords(e){if(!Number.isSafeInteger(e)||e<0)throw"Profile slot is invalid";try{Object.keys(localStorage).forEach((t=>{t.startsWith(GR(MR,MR,"f",OR)+e+"_")&&localStorage.removeItem(t)}))}catch(e){console.error(e)}}saveTrack(e,t,n){const i=t.toSaveString(n);try{return localStorage.setItem(GR(MR,MR,"f",zR)+e,JSON.stringify({data:i,saveTime:(new Date).getTime()})),!0}catch(e){return console.error(e),!1}}loadTrack(e,t){let n,i;try{const t=localStorage.getItem(GR(MR,MR,"f",zR)+e);if(null==t)return null;const r=JSON.parse(t);if("string"!=typeof r.data)return null;if("number"!=typeof r.saveTime)return null;n=r.data,i=r.saveTime}catch(e){return console.error(e),null}const r=Py.fromSaveString(n,t);return null==r?null:{trackData:r,saveTime:i}}deleteTrack(e){try{return localStorage.removeItem(GR(MR,MR,"f",zR)+e),!0}catch(e){return console.error(e),!1}}checkTrackExists(e){try{return null!=localStorage.getItem(GR(MR,MR,"f",zR)+e)}catch(e){return null}}getAllTrackNames(){let e;try{e=Object.keys(localStorage)}catch(e){return console.error(e),null}return e.filter((e=>e.startsWith(GR(MR,MR,"f",zR)))).map((e=>e.substring(GR(MR,MR,"f",zR).length)))}saveUserProfileSlot(e){if(!Number.isSafeInteger(e)||e<0)throw"Profile slot is invalid";try{localStorage.setItem(GR(MR,MR,"f",FR),JSON.stringify(e))}catch(e){console.error(e)}}loadUserProfileSlot(){try{const e=localStorage.getItem(GR(MR,MR,"f",FR));if(null!=e)try{const t=JSON.parse(e);if(!Number.isSafeInteger(t)||t<0)throw"Profile slot is invalid";return t}catch(e){console.error(e)}}catch(e){console.error(e)}return null}saveUserProfile(e,t,n,i){if(!Number.isSafeInteger(e)||e<0)throw"Profile slot is invalid";try{localStorage.setItem(GR(MR,MR,"f",WR)+e,JSON.stringify({token:t,nickname:n,carColors:i.serialize()}))}catch(e){console.error(e)}}loadUserProfile(e){if(!Number.isSafeInteger(e)||e<0)throw"Profile slot is invalid";try{const t=localStorage.getItem(GR(MR,MR,"f",WR)+e);if(null!=t)try{const e=JSON.parse(t);if("object"!=typeof e)throw"User profile is not an object";if("string"!=typeof e.token)throw"User profile token field has invalid type";if("string"!=typeof e.nickname)throw"User profile nickname field has invalid type";if("string"!=typeof e.carColors)throw"User profile carColors field has invalid type";return{token:e.token,nickname:e.nickname,carColors:wu.deserialize(e.carColors)}}catch(e){console.error(e)}}catch(e){console.error(e)}return null}deleteUserProfile(e){try{localStorage.removeItem(GR(MR,MR,"f",WR)+e)}catch(e){console.error(e)}}saveSettings(e){try{const t=[];for(const[n,i]of e.entries())t.push([Jh[n],i]);localStorage.setItem(GR(MR,MR,"f",HR),JSON.stringify(t))}catch(e){console.error(e)}}loadSettings(){try{const e=localStorage.getItem(GR(MR,MR,"f",HR));if(null==e)return null;const t=JSON.parse(e);if(!Array.isArray(t))return null;const n=[];return t.forEach((e=>{if(!Array.isArray(e))return;if(2!=e.length)return;if("string"!=typeof e[0])return;const t=e[0],i=Jh[t];if(null==i)return;const r=e[1];"string"==typeof e[1]&&n.push([i,r])})),n}catch(e){console.error(e)}return null}saveKeyBindings(e){try{const t=[];for(const[n,i]of e.entries())t.push([Lb[n],i]);localStorage.setItem(GR(MR,MR,"f",VR),JSON.stringify(t))}catch(e){console.error(e)}}loadKeyBindings(){try{const e=localStorage.getItem(GR(MR,MR,"f",VR));if(null==e)return null;const t=JSON.parse(e);if(!Array.isArray(t))return null;const n=[];return t.forEach((e=>{if(!Array.isArray(e))return;if(2!=e.length)return;if("string"!=typeof e[0])return;const t=e[0],i=Lb[t];if(null==i)return;const r=e[1];Array.isArray(r)&&2==r.length&&(null!=r[0]&&"string"!=typeof r[0]||null!=r[1]&&"string"!=typeof r[1]||n.push([i,r]))})),n}catch(e){console.error(e)}return null}}MR=jR,SR=new WeakSet,PR=function(e){try{Object.keys(localStorage).forEach((t=>{if("car_colors"==t)try{const e=localStorage.getItem(t);if(null!=e){const n=JSON.parse(e),i=new wu(new tr(n[0]),new tr(n[1]),new tr(n[2]),new tr(n[3]));GR(this,SR,"m",NR).call(this,i),localStorage.removeItem(t)}}catch(e){console.error(e)}if(t.startsWith("record_"))try{localStorage.removeItem(t)}catch(e){console.error(e)}if(t.startsWith("custom_track_"))try{const n=localStorage.getItem(t);if(null!=n){const i=xy(JSON.parse(n),e);if(null!=i){const{trackName:n,trackData:r}=i;this.saveTrack(n,r,e)&&localStorage.removeItem(t)}}}catch(e){console.error(e)}}))}catch(e){console.error(e)}},RR=function(e){try{Object.keys(localStorage).forEach((t=>{if("v1_car"==t)try{const e=localStorage.getItem(t);if(null!=e){const n=JSON.parse(e),i=new wu(new tr(n[0]),new tr(n[1]),new tr(n[2]),new tr(n[3]));GR(this,SR,"m",NR).call(this,i),localStorage.removeItem(t)}}catch(e){console.error(e)}if(t.startsWith("v1_record_"))try{localStorage.removeItem(t)}catch(e){console.error(e)}if(t.startsWith("v1_track_"))try{const n=localStorage.getItem(t);if(null!=n){const i=t.substring(9),r=_y(n,e);if(null==r)throw"Failed to load v1 track for migration";if(!this.saveTrack(i,r,e))throw"Failed to save v1 track for migration";localStorage.removeItem(t)}}catch(e){console.error(e)}}))}catch(e){console.error(e)}},LR=function(e){try{Object.keys(localStorage).forEach((t=>{if("v2_car"==t)try{const e=localStorage.getItem(t);if(null!=e){const n=wu.deserialize(e);GR(this,SR,"m",NR).call(this,n),localStorage.removeItem(t)}}catch(e){console.error(e)}if("v2_user"==t)try{const e=localStorage.getItem(t);if(null!=e){const n=JSON.parse(e);if(Array.isArray(n)||"object"!=typeof n)throw"User profile is not an object";const i=n.token;if(null!=i&&"string"!=typeof i)throw"User profile token is not a string";const r=n.nickname;if("string"!=typeof r)throw"User profile nickname is not a string";const a=wu.random();GR(this,SR,"m",IR).call(this,i,r,a),localStorage.removeItem(t)}}catch(e){console.error(e)}if(t.startsWith("v2_record_"))try{localStorage.removeItem(t)}catch(e){console.error(e)}if(t.startsWith("v2_track_"))try{const n=localStorage.getItem(t);if(null!=n){const i=t.substring(9),r=ky(n,e);if(null==r)throw"Failed to load v2 track for migration";if(!this.saveTrack(i,r,e))throw"Failed to save v2 track for migration";localStorage.removeItem(t)}}catch(e){console.error(e)}}))}catch(e){console.error(e)}},IR=function(e,t,n){var i;const r=this.loadUserProfile(0);null==r?this.saveUserProfile(0,e,t,n):this.saveUserProfile(0,null!==(i=r.token)&&void 0!==i?i:e,r.nickname,r.carColors)},NR=function(e){const t=this.loadUserProfile(0);null==t?this.saveUserProfile(0,null,ER.defaultNickname,e):this.saveUserProfile(0,t.token,t.nickname,e)},UR=function(){try{localStorage.setItem(GR(MR,MR,"f",DR),"")}catch(e){console.error(e)}},BR=function(){try{return null!=localStorage.getItem(GR(MR,MR,"f",DR))}catch(e){console.error(e)}return!1},TR={value:"0.0.0"==wC.rE},AR={value:wC.rE.toLowerCase().includes("beta")},CR={value:"polytrack_v3_"+(GR(MR,MR,"f",TR)?"dev_":"")+(GR(MR,MR,"f",AR)?"beta_":"")},DR={value:GR(MR,MR,"f",CR)+"migrated"},OR={value:GR(MR,MR,"f",CR)+"record_"},zR={value:GR(MR,MR,"f",CR)+"track_"},FR={value:GR(MR,MR,"f",CR)+"user_slot"},WR={value:GR(MR,MR,"f",CR)+"user_"},HR={value:GR(MR,MR,"f",CR)+"settings"},VR={value:GR(MR,MR,"f",CR)+"key_bindings"};const qR=jR;var XR,YR,KR,ZR,JR,QR,$R,eL=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},tL=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};class nL{constructor(){XR.add(this),KR.set(this,void 0),ZR.set(this,!1),JR.set(this,null);const e=document.getElementById("ui");if(null==e)throw"Failed to find UI element";eL(this,KR,e,"f"),window.addEventListener("mousemove",(()=>{document.body.classList.remove("hide-cursor"),tL(this,ZR,"f")&&(null!=tL(this,JR,"f")&&clearTimeout(tL(this,JR,"f")),eL(this,JR,setTimeout((()=>{document.body.classList.add("hide-cursor"),eL(this,JR,null,"f")}),tL(YR,YR,"f",QR)),"f"))})),window.addEventListener("resize",(()=>{tL(this,XR,"m",$R).call(this)})),tL(this,XR,"m",$R).call(this)}setCursorHiddenWhenInactive(e){eL(this,ZR,e,"f"),e?eL(this,JR,setTimeout((()=>{document.body.classList.add("hide-cursor"),eL(this,JR,null,"f")}),tL(YR,YR,"f",QR)),"f"):(document.body.classList.remove("hide-cursor"),null!=tL(this,JR,"f")&&(clearTimeout(tL(this,JR,"f")),eL(this,JR,null,"f")))}}YR=nL,KR=new WeakMap,ZR=new WeakMap,JR=new WeakMap,XR=new WeakSet,$R=function(){const e=Math.max(.01,Math.min(window.innerWidth,1.4375*window.innerHeight)/1150);e<1?(tL(this,KR,"f").style.width="calc(100% / "+e+")",tL(this,KR,"f").style.height="calc(100% / "+e+")",tL(this,KR,"f").style.transform="scale("+e+")"):(tL(this,KR,"f").style.width="",tL(this,KR,"f").style.height="",tL(this,KR,"f").style.transform="")},QR={value:1e3};const iL=nL;var rL,aL,oL,sL=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},lL=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};const cL="https://vps.kodub.com:43273/";rL=new WeakMap,aL=new WeakMap,oL=new WeakMap;const hL=class{constructor(e){rL.set(this,void 0),this.submitAllowed=!1,aL.set(this,2e4),oL.set(this,1e4),sL(this,rL,e,"f")}getLeaderboard(e,t,n,i){const r=lL(this,rL,"f").getTokenHash();let a=cL+"leaderboard?version="+wC.rE+"&trackId="+e+"&skip="+t+"&amount="+n+"&onlyVerified="+i;return null!=r&&(a+="&userTokenHash="+encodeURIComponent(r)),new Promise(((e,t)=>{const n=new XMLHttpRequest;n.timeout=lL(this,aL,"f"),n.overrideMimeType("text/plain"),n.onreadystatechange=()=>{if(n.readyState==XMLHttpRequest.DONE)if(200==n.status)try{const i=JSON.parse(n.responseText),r=i.total;if("number"!=typeof r)return void t("Total is not a number");if(!Number.isSafeInteger(r))return void t("Total is not a safe integer");const a=i.entries;if(!Array.isArray(a))return void t("Entries is not an array");const o=[];for(let e=0;e{const i=new XMLHttpRequest;i.timeout=lL(this,aL,"f"),i.overrideMimeType("text/plain"),i.onreadystatechange=()=>{if(i.readyState==XMLHttpRequest.DONE)if(200==i.status)try{const t=JSON.parse(i.responseText);if("string"!=typeof t.recording)return void n("JSON recording field has incorrect type");const r=Ag.deserialize(t.recording);if(null==r)return void n("Failed to deserialize recording");let a=null;if(null!=t.verifiedState){if("boolean"!=typeof t.verifiedState)return void n("JSON verifiedState field has incorrect type");a=1==t.verifiedState}if("number"!=typeof t.frames)return void n("JSON frames field has incorrect type");const o=t.frames;if(!Number.isSafeInteger(o))return void n("JSON frames is not a safe integer");const s=new rp(o);if("string"!=typeof t.carColors)return void n("JSON carColors field has incorrect type");const l=wu.deserialize(t.carColors);e({recording:r,time:s,verifiedState:a,carColors:l})}catch(e){n("Unknown error: "+e)}else n("Failed to connect to server, status: "+i.status)},i.open("GET",t,!0),i.send()}))}submitLeaderboard(e,t,n,i){return new Promise(((r,a)=>{const o=lL(this,rL,"f").getToken();if(this.submitAllowed&&null!=o){const s=lL(this,rL,"f").getNickname(),l=n.serialize();if(l.length>=lL(this,oL,"f"))a("Recording is too large");else{const n=cL+"leaderboard",c="version="+wC.rE+"&userToken="+encodeURIComponent(o)+"&name="+encodeURIComponent(s)+"&carColors="+i.serialize()+"&trackId="+e+"&frames="+t.numberOfFrames+"&recording="+l,h=new XMLHttpRequest;h.timeout=lL(this,aL,"f"),h.overrideMimeType("text/plain"),h.onreadystatechange=()=>{if(4==h.readyState)if(200==h.status)try{const e=JSON.parse(h.responseText);if(null==e)r({uploadId:null});else{const t=Number.parseInt(e,10);Number.isSafeInteger(t)?r({uploadId:t}):a("UploadId is not a safe integer")}}catch(e){a("Unknown error: "+e)}else a("Failed to connect to server, status: "+h.status)},h.open("POST",n,!0),h.send(c)}}else r({uploadId:null})}))}submitUserProfile(e,t,n){return new Promise(((i,r)=>{if(this.submitAllowed&&null!=e){const a=cL+"user",o="version="+wC.rE+"&userToken="+encodeURIComponent(e)+"&name="+encodeURIComponent(t)+"&carColors="+n.serialize(),s=new XMLHttpRequest;s.timeout=lL(this,aL,"f"),s.overrideMimeType("text/plain"),s.onreadystatechange=()=>{4==s.readyState&&(200==s.status?i():r("Failed to connect to server, status: "+s.status))},s.open("POST",a,!0),s.send(o)}else i()}))}verifyRecordings(e,t,n,i){return new Promise(((r,a)=>{if(this.submitAllowed)if(null==e)a("No user token");else{const o=cL+"verifyRecordings",s="version="+wC.rE+"&userToken="+encodeURIComponent(e)+(null!=t?"&trackId="+t:"")+"&maxFrames="+n.numberOfFrames+"&recordings="+encodeURIComponent(JSON.stringify(i)),l=new XMLHttpRequest;l.timeout=lL(this,aL,"f"),l.overrideMimeType("text/plain"),l.onreadystatechange=()=>{if(4==l.readyState)if(200==l.status)try{if(""==l.responseText)return void r({unverifiedRecordings:[],exhaustive:!0});const e=JSON.parse(l.responseText);if(!("exhaustive"in e))return void a('Field "exhaustive" does not exist');const t=1==e.exhaustive;if(!("unverifiedRecordings"in e))return void a('Field "unverifiedRecordings" does not exist');const n=e.unverifiedRecordings;if(!Array.isArray(n))return void a('Field "unverifiedRecordings" is not an array');for(let e=0;e{if(null==e)n("No user token");else{const i="",r=new XMLHttpRequest;r.timeout=lL(this,aL,"f"),r.overrideMimeType("text/plain"),r.onreadystatechange=()=>{if(r.readyState==XMLHttpRequest.DONE)if(200==r.status)try{const e=JSON.parse(r.responseText);if(null==e)return void t(null);const i=e.name;if("string"!=typeof i)return void n("Name is not a string");const a=JA(i);if(0==a||a>50)return void n("Name as invalid length");const o=e.carColors;if("string"!=typeof o)return void n("CarColors data is not a string");const s=wu.deserialize(o),l=e.isVerifier;if("boolean"!=typeof l)return void n("IsVerifier is not a boolean");t({name:i,carColors:s,isVerifier:l})}catch(e){n("Unknown error: "+e)}else n("Failed to connect to server, status: "+r.status)},r.open("GET",i,!0),r.send()}}))}};var dL,uL,pL,fL,mL,gL=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},vL=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};uL=new WeakMap,pL=new WeakMap,fL=new WeakMap,dL=new WeakSet,mL=function(e){e.forEach((([e,t])=>{if(!vL(this,fL,"f").has(e))throw"Key binding is missing";vL(this,fL,"f").set(e,t)}))};const wL=class{constructor(e){dL.add(this),uL.set(this,void 0),pL.set(this,this.defaultSettings()),fL.set(this,this.defaultKeyBindings()),gL(this,uL,e,"f");const t=e.loadSettings();null!=t&&this.updateSettings(t);const n=e.loadKeyBindings();null!=n&&vL(this,dL,"m",mL).call(this,n)}defaultSettings(){return new Map([[Jh.ImperialUnitsEnabled,"false"],[Jh.ResetHintEnabled,"true"],[Jh.GhostCarEnabled,"true"],[Jh.CockpitCameraToggle,"true"],[Jh.CheckpointsPosition,"false"],[Jh.TimerPosition,"false"],[Jh.SpeedometerPosition,"false"],[Jh.Language,"en-US"],[Jh.CarShadowQuality,"2048"],[Jh.TrackShadowEnabled,"true"],[Jh.CloudsEnabled,"true"],[Jh.ParticlesEnabled,"true"],[Jh.SkidmarksEnabled,"true"],[Jh.RenderScale,"1"],[Jh.Antialiasing,"true"],[Jh.SoundEffectVolume,"1"],[Jh.MusicVolume,"1"],[Jh.CheckpointVolume,"1"]])}defaultKeyBindings(){return new Map([[Lb.VehicleAccelerate,["KeyW","ArrowUp"]],[Lb.VehicleTurnRight,["KeyD","ArrowRight"]],[Lb.VehicleBrake,["KeyS","ArrowDown"]],[Lb.VehicleTurnLeft,["KeyA","ArrowLeft"]],[Lb.VehicleReset,["KeyR","Enter"]],[Lb.VehicleCockpitCamera,["KeyC","KeyM"]],[Lb.ToggleUI,["KeyH",null]],[Lb.EditorRotate,["KeyR","Space"]],[Lb.EditorHeightModifier,["ShiftLeft","ShiftRight"]],[Lb.EditorDelete,["Delete","KeyX"]],[Lb.EditorMoveForwards,["KeyW","ArrowUp"]],[Lb.EditorMoveRight,["KeyD","ArrowRight"]],[Lb.EditorMoveBackwards,["KeyS","ArrowDown"]],[Lb.EditorMoveLeft,["KeyA","ArrowLeft"]],[Lb.EditorRotateLeft,["KeyQ",null]],[Lb.EditorRotateRight,["KeyE",null]],[Lb.EditorMoveDown,["KeyZ",null]],[Lb.EditorMoveUp,["KeyC",null]],[Lb.EditorTest,["KeyT",null]],[Lb.EditorPick,["KeyG",null]],[Lb.ToggleFpsCounter,["Comma",null]],[Lb.ToggleSpectatorCamera,["Period",null]],[Lb.SpectatorMoveForwards,["KeyW","ArrowUp"]],[Lb.SpectatorMoveRight,["KeyD","ArrowRight"]],[Lb.SpectatorMoveBackwards,["KeyS","ArrowDown"]],[Lb.SpectatorMoveLeft,["KeyA","ArrowLeft"]],[Lb.SpectatorSpeedModifier,["ShiftLeft","ShiftRight"]]])}getSettings(){return Array.from(vL(this,pL,"f"))}getSetting(e){const t=vL(this,pL,"f").get(e);if(null==t)throw"Setting name is missing";return t}getSettingBoolean(e){return"true"==this.getSetting(e)}getSettingFloat(e){return parseFloat(this.getSetting(e))}getSettingInteger(e){return parseInt(this.getSetting(e),10)}updateSettings(e){e.forEach((([e,t])=>{if(!vL(this,pL,"f").has(e))throw"Setting name is missing";vL(this,pL,"f").set(e,t)}))}saveSettings(){vL(this,uL,"f").saveSettings(vL(this,pL,"f"))}getKeyBindings(e){var t;return null!==(t=vL(this,fL,"f").get(e))&&void 0!==t?t:[null,null]}setKeyBindings(e){vL(this,dL,"m",mL).call(this,e),vL(this,uL,"f").saveKeyBindings(vL(this,fL,"f"))}checkKeyBinding(e,t){var n;const i=null!==(n=vL(this,fL,"f").get(t))&&void 0!==n?n:[];for(let t=0;t{CL(this,xL,"m",TL).call(this,e)}))):AL(this,_L,null,"f")}dispose(){CL(this,kL,"f").terminate(),AL(this,EL,!0,"f")}validate(e,t,n){return new Promise(((i,r)=>{var a,o;const s=e.getStartTransform();if(null==s)i(!1);else{const l=iT.createMountainVertices(e.getBounds());if(null==CL(this,_L,"f"))throw"TrackPartManager is not initialized";if(null==Uv.models)throw"Car collision model not loaded";const c=(AL(this,SL,(o=CL(this,SL,"f"),a=o++,o),"f"),a),h=setInterval((()=>{CL(this,EL,"f")&&(clearInterval(h),r("Simulation has been disposed"))}),10),d=e=>{e.data.messageType==bL.VerifyResult&&e.data.carId==c&&(clearInterval(h),CL(this,kL,"f").removeEventListener("message",d),i(e.data.result))};CL(this,kL,"f").addEventListener("message",d),CL(this,kL,"f").postMessage({messageType:bL.Verify,mountainVertices:l.vertices,mountainOffset:{x:l.offset.x,y:l.offset.y,z:l.offset.z},trackData:e.toSaveString(CL(this,_L,"f")),carId:c,carCollisionShapeVertices:Uv.models.collisionShapeVertices,carMassOffset:Uv.massOffset,carRecording:t.serialize(),carPosition:{x:s.position.x,y:s.position.y,z:s.position.z},carQuaternion:{x:s.quaternion.x,y:s.quaternion.y,z:s.quaternion.z,w:s.quaternion.w},targetFrames:n.numberOfFrames})}}))}testDeterminism(){return new Promise((e=>{const t=n=>{if(n.data.messageType===bL.DeterminismResult)CL(this,kL,"f").removeEventListener("message",t),e(n.data.isDeterminstic)};CL(this,kL,"f").addEventListener("message",t),CL(this,kL,"f").postMessage({messageType:bL.TestDeterminism})}))}createCar(e,t,n,i,r,a){var o,s;if(null==CL(this,_L,"f"))throw"TrackPartManager is not initialized";if(null==Uv.models)throw"Car collision model not loaded";const l=(AL(this,SL,(s=CL(this,SL,"f"),o=s++,s),"f"),o),c=e=>{if(e.data.messageType==bL.UpdateResult){e.data.carStates.forEach((e=>{e.id==l&&a(e)}))}};CL(this,kL,"f").addEventListener("message",c),CL(this,ML,"f").set(l,c),CL(this,kL,"f").postMessage({messageType:bL.CreateCar,mountainVertices:t,mountainOffset:{x:n.x,y:n.y,z:n.z},trackData:i.toSaveString(CL(this,_L,"f")),carId:l,carCollisionShapeVertices:Uv.models.collisionShapeVertices,carMassOffset:Uv.massOffset,carPosition:{x:e.position.x,y:e.position.y,z:e.position.z},carQuaternion:{x:e.quaternion.x,y:e.quaternion.y,z:e.quaternion.z,w:e.quaternion.w},carRecording:null==r?void 0:r.serialize()});const h=.11898833513259888,d=[new Un(.627909,.15101166486740114,1.3478).applyQuaternion(e.quaternion).add(e.position),new Un(-.627909,.15101166486740114,1.3478).applyQuaternion(e.quaternion).add(e.position),new Un(.720832,.15101166486740114,-1.52686).applyQuaternion(e.quaternion).add(e.position),new Un(-.720832,.15101166486740114,-1.52686).applyQuaternion(e.quaternion).add(e.position)],u=[(new Dn).setFromEuler((new _i).set(0,Math.PI,0)).multiply(e.quaternion),(new Dn).setFromEuler((new _i).set(0,Math.PI,0)).multiply(e.quaternion),(new Dn).setFromEuler((new _i).set(0,Math.PI,0)).multiply(e.quaternion),(new Dn).setFromEuler((new _i).set(0,Math.PI,0)).multiply(e.quaternion)];return{id:l,frames:0,totalFrames:0,speedKmh:0,hasStarted:!1,hasFinished:!1,nextCheckpointIndex:0,position:{x:e.position.x,y:e.position.y,z:e.position.z},quaternion:{x:e.quaternion.x,y:e.quaternion.y,z:e.quaternion.z,w:e.quaternion.w},collisionImpulses:[],wheelInContact:[!1,!1,!1,!1],wheelSuspensionLength:[h,h,h,h],wheelSuspensionVelocity:[0,0,0,0],wheelRotation:[0,0,0,0],wheelDeltaRotation:[0,0,0,0],wheelSkidInfo:[0,0,0,0],wheelPosition:d,wheelQuaternion:u,brakeLightEnabled:!1,controls:{up:!1,right:!1,down:!1,left:!1}}}deleteCar(e){CL(this,kL,"f").postMessage({messageType:bL.DeleteCar,carId:e});const t=CL(this,ML,"f").get(e);if(null==t)throw"Deleting non-existant car";CL(this,kL,"f").removeEventListener("message",t),CL(this,ML,"f").delete(e)}startCar(e,t){CL(this,kL,"f").postMessage({messageType:bL.StartCar,carId:e,targetSimulationTimeFrames:null==t?void 0:t.numberOfFrames})}controlCar(e,t,n,i,r){CL(this,kL,"f").postMessage({messageType:bL.ControlCar,carId:e,up:t,right:n,down:i,left:r})}pauseCar(e,t){CL(this,kL,"f").postMessage({messageType:bL.PauseCar,carId:e,isPaused:t})}};var RL=n(796),LL={};LL.styleTagTransform=u(),LL.setAttributes=l(),LL.insert=o().bind(null,"head"),LL.domAPI=r(),LL.insertStyleElement=h();t()(RL.A,LL);RL.A&&RL.A.locals&&RL.A.locals;var IL,NL,DL,UL,BL=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},OL=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};IL=new WeakMap,NL=new WeakMap,DL=new WeakMap,UL=new WeakMap;const zL=class{constructor(e,t){IL.set(this,void 0),NL.set(this,void 0),DL.set(this,void 0),UL.set(this,void 0),BL(this,IL,document.getElementById("ui"),"f"),BL(this,NL,document.createElement("div"),"f"),OL(this,NL,"f").className="verifier-ui",OL(this,IL,"f").appendChild(OL(this,NL,"f")),BL(this,DL,document.createElement("p"),"f"),OL(this,NL,"f").appendChild(OL(this,DL,"f"));const n=document.createElement("button");n.className="button",n.textContent="Stop",n.addEventListener("click",(()=>{e.playUIClick(),t()})),OL(this,NL,"f").appendChild(n),window.addEventListener("keydown",BL(this,UL,(e=>{"Escape"==e.code&&(t(),e.preventDefault())}),"f"))}dispose(){OL(this,IL,"f").removeChild(OL(this,NL,"f")),window.removeEventListener("keydown",OL(this,UL,"f"))}setText(e){OL(this,DL,"f").textContent=e}};var FL,WL,HL,VL,GL,jL,qL,XL,YL,KL,ZL,JL,QL,$L,eI,tI,nI,iI,rI,aI,oI,sI,lI,cI,hI,dI,uI,pI,fI=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},mI=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};WL=new WeakMap,HL=new WeakMap,VL=new WeakMap,GL=new WeakMap,jL=new WeakMap,qL=new WeakMap,XL=new WeakMap,YL=new WeakMap,KL=new WeakMap,ZL=new WeakMap,JL=new WeakMap,QL=new WeakMap,$L=new WeakMap,eI=new WeakMap,tI=new WeakMap,nI=new WeakMap,iI=new WeakMap,rI=new WeakMap,aI=new WeakMap,oI=new WeakMap,sI=new WeakMap,lI=new WeakMap,cI=new WeakMap,hI=new WeakMap,FL=new WeakSet,dI=function(e){const t=mI(this,KL,"f").slice();do{const n=Math.floor(Math.random()*t.length),i=t.splice(n,1)[0];if(e>i.timeout)return i}while(t.length>0);return null},uI=function(){var e;const t=new Date;if(!mI(this,QL,"f")&&mI(this,JL,"f").length=mI(this,lI,"f")){fI(this,QL,!0,"f"),fI(this,$L,t,"f");const n=mI(this,FL,"m",dI).call(this,t);null!=n||mI(this,ZL,"f").length>0&&0==mI(this,JL,"f").length||mI(this,ZL,"f").length>mI(this,oI,"f")?mI(this,GL,"f").verifyRecordings(mI(this,qL,"f"),null!==(e=null==n?void 0:n.id)&&void 0!==e?e:null,mI(this,cI,"f"),mI(this,ZL,"f")).then((({unverifiedRecordings:e,exhaustive:i})=>{mI(this,ZL,"f").length=0,null!=n&&(fI(this,JL,mI(this,JL,"f").concat(e.map((({id:e,recording:t,frames:i})=>({trackData:n.data,recordingId:e,recording:Ag.deserialize(t),time:new rp(i)})))),"f"),i&&(n.timeout=new Date(t.getTime()+Math.floor(6e4*(30+30*Math.random())))))})).catch((e=>{console.error(e),mI(this,GL,"f").getUser(mI(this,qL,"f")).then((e=>{null!=e&&e.isVerifier||fI(this,eI,!1,"f")}))})).finally((()=>{fI(this,QL,!1,"f")})):fI(this,QL,!1,"f")}},pI=function(){mI(this,jL,"f").hasLoaded()&&mI(this,eI,"f")&&(mI(this,FL,"m",uI).call(this),mI(this,YL,"f").forEach((e=>{var t;if(!e.isBusy&&mI(this,JL,"f").length>0){e.isBusy=!0;const{trackData:n,recordingId:i,recording:r,time:a}=mI(this,JL,"f").splice(0,1)[0];null==r?(mI(this,ZL,"f").push({id:i,verifiedState:!1}),e.isBusy=!1):(fI(this,iI,(t=mI(this,iI,"f"),++t),"f"),e.simulation.validate(n,r,a).then((e=>{var t,n;fI(this,rI,(t=mI(this,rI,"f"),++t),"f"),e||fI(this,aI,(n=mI(this,aI,"f"),++n),"f"),mI(this,ZL,"f").push({id:i,verifiedState:e})})).catch((e=>{if(!mI(this,nI,"f"))throw e})).finally((()=>{var t;e.isBusy=!1,fI(this,iI,(t=mI(this,iI,"f"),--t),"f")})))}})))};const gI=class{constructor(e,t,n,i,r,a,o,s,l){FL.add(this),WL.set(this,void 0),HL.set(this,void 0),VL.set(this,void 0),GL.set(this,void 0),jL.set(this,void 0),qL.set(this,void 0),XL.set(this,void 0),YL.set(this,[]),KL.set(this,[]),ZL.set(this,[]),JL.set(this,[]),QL.set(this,!1),$L.set(this,new Date),eI.set(this,!0),tI.set(this,void 0),nI.set(this,!1),iI.set(this,0),rI.set(this,0),aI.set(this,0),oI.set(this,100),sI.set(this,100),lI.set(this,1e3),cI.set(this,new rp(6e5)),hI.set(this,4),fI(this,WL,e,"f"),fI(this,HL,t,"f"),fI(this,VL,a,"f"),fI(this,GL,n,"f"),fI(this,jL,o,"f"),fI(this,qL,s,"f"),t.clear(),fI(this,XL,new zL(e,l),"f"),navigator&&navigator.hardwareConcurrency>0&&fI(this,hI,navigator.hardwareConcurrency,"f");for(let e=0;e{mI(this,KL,"f").push({id:e,name:t,data:n,timeout:new Date})})),fI(this,tI,setInterval((()=>{mI(this,FL,"m",pI).call(this)}),10),"f")}dispose(){fI(this,nI,!0,"f"),mI(this,XL,"f").dispose(),mI(this,YL,"f").forEach((e=>{e.simulation.dispose()})),mI(this,YL,"f").length=0,clearInterval(mI(this,tI,"f"))}update(e){if(mI(this,jL,"f").hasLoaded()){const e=new Date;let t="";mI(this,eI,"f")?(t+="Recordings are being verified...\n",t+="\nNumber of threads: "+mI(this,hI,"f"),t+="\n",t+="\nBacklog: "+mI(this,JL,"f").length,t+="\nProcessing: "+mI(this,iI,"f"),t+="\nRecordings verified: "+mI(this,rI,"f"),t+="\nInvalid recordings found: "+mI(this,aI,"f"),t+="\n",t+="\nTracks",mI(this,KL,"f").forEach((n=>{const i=e<=n.timeout;t+=i?"\n\tEmpty\t- "+n.name:"\n\tProcessing\t- "+n.name}))):t+="Error: User is no longer a verifier",mI(this,XL,"f").setText(t)}mI(this,WL,"f").update(e,!1,mI(this,HL,"f"),mI(this,VL,"f"))}},vI={Checkpoints:"النقاط التفتيشية","Checkpoint order":"ترتيب النقاط التفتيشية",Height:"الارتفاع",Exit:"خروج",Random:"عشوائي",Primary:"أساسي",Secondary:"ثانوي",Frame:"الإطار",Rims:"الجنوط",Test:"اختبار","Starting point is missing!":"نقطة البداية مفقودة!",Generate:"إنشاء","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"هل أنت متأكد من أنك تريد إنشاء مسار جديد؟\n\nسيتم فقدان المسار الحالي!",Load:"تحميل",Save:"حفظ","Are you sure you want to load a new track?\n\nYour current track will be lost!":"هل أنت متأكد من أنك تريد تحميل مسار جديد؟\n\nسيتم فقدان المسار الحالي!","Failed to save - Track name is needed!":"فشل الحفظ - اسم المسار مطلوب!","Track saved!":"تم حفظ المسار!","Failed to save!":"فشل الحفظ!",'Are you sure you want to overwrite "{0}"?':'هل أنت متأكد من أنك تريد الكتابة فوق "{0}"ØŸ',Export:"تصدير","Failed to export - Track name is needed!":"فشل التصدير - اسم المسار مطلوب!",Help:"مساعدة","Track name":"اسم المسار","Are you sure you want to exit the editor?":"هل أنت متأكد من أنك تريد الخروج من المحرر؟","All unsaved data will be lost!":"سيتم فقدان جميع البيانات غير المحفوظة!","How to use the editor":"كيفية استخدام المحرر","Camera controls":"ضوابط الكاميرا","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"يمكن تحريك الكاميرا بالنقر بزر الماوس الأيمن وسحب الماوس. قم بتدوير الكاميرا بالنقر على زر الماوس الأوسط (عجلة الماوس) أو بالضغط على مفتاح التحكم والنقر بزر الماوس الأيمن وسحب الماوس. قم بالتكبير والتصغير عن طريق تمرير عجلة الماوس.","Alternatively, the camera can also be controlled using the following keyboard keys:":"بدلاً من ذلك، يمكن أيضًا التحكم في الكاميرا باستخدام مفاتيح لوحة المفاتيح التالية:","Move forwards:":"تحرك للأمام:","Move backwards:":"تحرك للخلف:","Move left:":"تحرك لليسار:","Move right:":"تحرك لليمين:","Rotate left:":"تدوير لليسار:","Rotate right:":"تدوير لليمين:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"يمكن تغيير الارتفاع المحرر إما باستخدام اختيار الارتفاع في الزاوية السفلية اليسرى، أو بالضغط على مفتاح Shift وتمرير عجلة الماوس. بدلاً من ذلك، يمكنك استخدام مفاتيح لوحة المفاتيح التالية:","Move up:":"تحرك لأعلى:","Move down:":"تحرك لأسفل:",Editing:"تحرير","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"يمكن اختيار أجزاء المسار في القائمة الموجودة على اليمين وبعد ذلك يمكن وضعها بالنقر بزر الماوس الأيسر.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"بدلاً من ذلك، يمكن اختيار جزء المسار الذي يتم تحويمه حاليًا بواسطة الماوس باستخدام اختصار لوحة المفاتيح التالي:","The selected part can then be rotated using the following keyboard shortcut:":"يمكن بعد ذلك تدوير الجزء المحدد باستخدام اختصار لوحة المفاتيح التالي:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"يمكن حذف أجزاء المسار باستخدام أداة الحذف في القائمة الجانبية اليمنى أو بالضغط على المفتاح التالي:","Starting points, checkpoints and the finish line":"نقاط البداية ونقاط التفتيش وخط النهاية","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"يمكن اختيار نقاط البداية ونقاط التفتيش وخطوط النهاية جميعها في الفئة العليا في القائمة الجانبية اليمنى.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"يجب أن يحتوي كل مسار على نقطة بداية واحدة على الأقل. إذا كانت هناك نقاط بداية متعددة، فسيتم استخدام آخر نقطة تم وضعها.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"يجب وضع نقاط التفتيش بين نقطة البداية وخط النهاية. عند اختيار جزء مسار نقطة التفتيش، سيكون هناك أداة في الزاوية السفلية اليمنى لاختيار ترتيب نقطة التفتيش. يحدد هذا الترتيب الذي يجب أن تمر به نقاط التفتيش قبل القيادة إلى خط النهاية. لاحظ أنه من الممكن أن يكون هناك نقاط تفتيش متعددة بنفس ترتيب نقطة التفتيش.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"خط النهاية هو المكان الذي ينتهي فيه المسار ولكنه سيصبح نشطًا فقط بعد اجتياز جميع نقاط التفتيش. من الممكن أيضًا أن يكون هناك خطوط نهاية متعددة.","Starting point":"نقطة البداية",Checkpoint:"نقطة التفتيش","Finish line":"خط النهاية","Exporting the track":"تصدير المسار","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"عند الانتهاء من المسار، يمكن إدخال اسم للمسار في الزاوية العلوية اليسرى وبعد ذلك يمكن تصدير المسار باستخدام زر التصدير. سيظهر رمز المسار الذي يمكن إرساله إلى مستخدمين آخرين حتى يتمكنوا من استيراد وتشغيل المسار.",Close:"إغلاق","Not set":"غير محدد",or:"أو","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"يمكن تحريك الكاميرا بالنقر بزر الماوس الأيمن وسحب الماوس. قم بتدوير الكاميرا بالنقر على زر الماوس الأوسط (عجلة الماوس) أو بالضغط على مفتاح التحكم والنقر بزر الماوس الأيمن وسحب الماوس. قم بالتكبير والتصغير عن طريق تمرير عجلة الماوس.","The edited height can be changed by using the height selection in the bottom left corner.":"يمكن تغيير الارتفاع المحرر باستخدام اختيار الارتفاع في الزاوية السفلية اليسرى.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"يمكن اختيار أجزاء المسار في القائمة الموجودة على اليمين وبعد ذلك يمكن وضعها بالنقر على الشاشة.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"يمكن بعد ذلك تدوير الجزء المحدد بالنقر على زر الدوران في الزاوية السفلية اليسرى.","Track parts can be deleted by using the delete tool in the right side menu.":"يمكن حذف أجزاء المسار باستخدام أداة الحذف في القائمة الجانبية اليمنى.","Press [{0}] or [{1}] to restart":"اضغط [{0}] أو [{1}] لإعادة البدء","Press [{0}] to restart":"اضغط [{0}] لإعادة البدء",Leaderboard:"التصنيف",Back:"عودة","Error: Failed to load leaderboard":"خطأ: فشل تحميل التصنيف",Verified:"تم التحقق",Invalid:"غير صالح",Pending:"قيد الانتظار",Loading:"جاري التحميل","Failed to load recording":"فشل تحميل التسجيل",Ok:"موافق","Track is missing starting point":"المسار يفتقد نقطة البداية","Failed to create user token.":"فشل في إنشاء رمز المستخدم.","Leaderboard is disabled.":"تم تعطيل لوحة المتصدرين.","Please try another browser or device.":"يرجى محاولة متصفح أو جهاز آخر.","Computer determinism check failed.":"فشل فحص التحديد الحاسوبي.",Customize:"تخصيص",Editor:"المحرر",Settings:"الإعدادات",Profile:"الملف الشخصي",Play:"تشغيل",Version:"الإصدار","You cannot have duplicate user profiles":"لا يمكنك امتلاك ملفات تعريف مستخدم مكررة","Failed to create user profile":"فشل في إنشاء ملف تعريف المستخدم","This user profile does not exist on the server":"هذا الملف الشخصي للمستخدم غير موجود على الخادم","Failed to download user profile from the server":"فشل في تحميل ملف تعريف المستخدم من الخادم","User token is invalid":"رمز المستخدم غير صالح","Are you sure you want to display your private key?":"هل أنت متأكد أنك تريد عرض المفتاح الخاص؟","DO NOT SHARE THIS KEY WITH ANYONE.":"لا تشارك هذا المفتاح مع أي شخص.","You need a free user profile slot to import a new user profile":"تحتاج إلى فتحة ملف تعريف مستخدم فارغة لاستيراد ملف تعريف مستخدم جديد",Nickname:"اسم المستخدم","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"اختر اسم مستخدم ليظهر في التصنيف. يمكنك تغيير اسم المستخدم في أي وقت.",Cancel:"إلغاء",Confirm:"تأكيد",Verifier:"التحقق","User ID":"معرف المستخدم",Profiles:"الملفات",'Are you sure you would like to delete "{0}"?':'هل أنت متأكد أنك تريد حذف "{0}"ØŸ',Reset:"إعادة تعيين",Apply:"تطبيق",Gameplay:"أسلوب اللعب",Units:"الوحدات",Metric:"متري",Imperial:"إمبراطوري","Reset hint":"إعادة تعيين التلميح",Disabled:"معطل",Enabled:"مفعل","Ghost car":"سيارة الشبح","Cockpit camera mode":"وضع الكاميرا في القمرة",Hold:"استمرار",Toggle:"تبديل","Checkpoints position":"موقع النقاط الفارقة","Timer position":"موقع المؤقت","Speedometer position":"موقع عداد السرعة",Bottom:"أسفل",Top:"أعلى",Language:"اللغة",Graphics:"الجرافيكس","Car shadow":"ظل السيارة","Track shadow":"ظل المسار",Off:"إيقاف",On:"تشغيل",Low:"منخفض",Medium:"متوسط",High:"عالي",Clouds:"السحب",Particles:"الجسيمات",Skidmarks:"علامات الانزلاق","Render scale":"مقياس الرسم","Anti-aliasing (requires restart)":"تمويه الحواف (يتطلب إعادة التشغيل)",Audio:"الصوت","Sound effect volume":"مستوى تأثير الصوت","Music volume":"مستوى الموسيقى","Checkpoint volume":"مستوى نقطة التفتيش",Controls:"التحكم","Vehicle accelerate":"تسريع السيارة","Vehicle brake":"فرملة السيارة","Vehicle turn left":"دوران السيارة لليسار","Vehicle turn right":"دوران السيارة لليمين","Vehicle reset":"إعادة تعيين السيارة","Vehicle cockpit camera":"كاميرا قمرة السيارة","Hide UI":"إخفاء واجهة المستخدم","Editor rotate part":"تدوير الجزء في المحرر","Editor height modifier":"معدل الارتفاع في المحرر","Editor delete part":"حذف الجزء في المحرر","Editor forwards":"الانتقال للأمام في المحرر","Editor backwards":"الانتقال للخلف في المحرر","Editor left":"الانتقال لليسار في المحرر","Editor right":"الانتقال لليمين في المحرر","Editor rotate left":"تدوير المحرر إلى اليسار","Editor rotate right":"تدوير المحرر إلى اليمين","Editor move down":"تحريك المحرر للأسفل","Editor move up":"تحريك المحرر للأعلى","Editor test":"اختبار المحرر","Editor pick":"اختيار المحرر","Toggle FPS counter":"تبديل عداد الإطارات في الثانية","Toggle spectator camera":"تبديل كاميرا المشاهد","Spectator forwards":"الانتقال للأمام كمشاهد","Spectator backwards":"الانتقال للخلف كمشاهد","Spectator left":"الانتقال لليسار كمشاهد","Spectator right":"الانتقال لليمين كمشاهد","Spectator speed modifier":"معدل سرعة المشاهد","Press any key...\n\nPress [Escape] to cancel.":"اضغط على أي مفتاح...\n\nاضغط [إلغاء] للإلغاء.",Clear:"مسح","New record":"رقم قياسي جديد",Record:"الرقم القياسي",Current:"الحالي",Difference:"الفارق",Copy:"نسخ",Import:"استيراد","Failed to import track":"فشل استيراد المسار",'The track "{0}" already exists. Do you wish to overwrite it?':'المسار "{0}" موجود بالفعل. هل ترغب في الكتابة فوقه؟',Overwrite:"الكتابة فوقه","Paste track data here...":"الصق بيانات المسار هنا...",Rank:"التصنيف","No record":"لا يوجد تسجيل","Standard tracks":"المسارات القياسية","Custom tracks":"المسارات المخصصة",'Are you sure you want to delete "{0}"?':'هل أنت متأكد من أنك تريد حذف "{0}"ØŸ',Delete:"حذف"},wI={Checkpoints:"Kontrollpunkte","Checkpoint order":"Kontrollpunktreihenfolge",Height:"Höhe",Exit:"Beenden",Random:"Zufällig",Primary:"Primär",Secondary:"Sekundär",Frame:"Rahmen",Rims:"Felgen",Test:"Test","Starting point is missing!":"Startpunkt fehlt!",Generate:"Generieren","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Sind Sie sicher, dass Sie eine neue Strecke generieren möchten?\n\nIhre aktuelle Strecke geht verloren!",Load:"Laden",Save:"Speichern","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Sind Sie sicher, dass Sie eine neue Strecke laden möchten?\n\nIhre aktuelle Strecke geht verloren!","Failed to save - Track name is needed!":"Speichern fehlgeschlagen - Streckenname erforderlich!","Track saved!":"Strecke gespeichert!","Failed to save!":"Speichern fehlgeschlagen!",'Are you sure you want to overwrite "{0}"?':'Sind Sie sicher, dass Sie "{0}" überschreiben möchten?',Export:"Exportieren","Failed to export - Track name is needed!":"Export fehlgeschlagen - Streckenname erforderlich!",Help:"Hilfe","Track name":"Streckenname","Are you sure you want to exit the editor?":"Sind Sie sicher, dass Sie den Editor verlassen möchten?","All unsaved data will be lost!":"Alle nicht gespeicherten Daten gehen verloren!","How to use the editor":"Wie man den Editor benutzt","Camera controls":"Kamerasteuerung","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"Die Kamera kann durch Rechtsklick und Ziehen der Maus bewegt werden. Drehen Sie die Kamera, indem Sie die mittlere Maustaste (Mausrad) klicken oder die Steuerungstaste gedrückt halten und mit der rechten Maustaste ziehen. Zoomen Sie mit dem Mausrad rein und raus.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Alternativ kann die Kamera auch mit den folgenden Tasten gesteuert werden:","Move forwards:":"Nach vorne bewegen:","Move backwards:":"Nach hinten bewegen:","Move left:":"Nach links bewegen:","Move right:":"Nach rechts bewegen:","Rotate left:":"Nach links drehen:","Rotate right:":"Nach rechts drehen:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"Die bearbeitete Höhe kann entweder durch Verwendung der Höhenauswahl in der unteren linken Ecke geändert werden oder indem Sie die Umschalttaste gedrückt halten und das Mausrad scrollen. Alternativ können Sie die folgenden Tasten verwenden:","Move up:":"Nach oben bewegen:","Move down:":"Nach unten bewegen:",Editing:"Bearbeiten","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Streckenteile können im Menü auf der rechten Seite ausgewählt werden, danach können sie durch Linksklick mit der Maus platziert werden.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Alternativ kann das Streckenteil, über das die Maus gerade schwebt, mit der folgenden Tastenkombination ausgewählt werden:","The selected part can then be rotated using the following keyboard shortcut:":"Das ausgewählte Teil kann dann mit der folgenden Tastenkombination gedreht werden:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Streckenteile können mit dem Löschwerkzeug im Menü auf der rechten Seite gelöscht werden oder indem Sie die folgende Taste gedrückt halten:","Starting points, checkpoints and the finish line":"Startpunkte, Kontrollpunkte und die Ziellinie","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Startpunkte, Kontrollpunkte und Ziellinien können alle in der obersten Kategorie im Menü auf der rechten Seite ausgewählt werden.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Jede Strecke muss mindestens einen Startpunkt haben. Wenn es mehrere Startpunkte gibt, wird der zuletzt platzierte verwendet.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Kontrollpunkte sollten zwischen dem Startpunkt und der Ziellinie platziert werden. Wenn ein Kontrollpunkt-Streckenteil ausgewählt ist, gibt es unten rechts ein Werkzeug, um die Reihenfolge des Kontrollpunkts auszuwählen. Dies bestimmt die Reihenfolge, in der die Kontrollpunkte passiert werden müssen, bevor man zur Ziellinie fährt. Beachten Sie, dass es möglich ist, mehrere Kontrollpunkte mit derselben Kontrollpunkt-Reihenfolge zu haben.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"Die Ziellinie ist der Ort, an dem die Strecke endet, wird aber erst aktiv, nachdem alle Kontrollpunkte passiert wurden. Es ist auch möglich, mehrere Ziellinien zu haben.","Starting point":"Startpunkt",Checkpoint:"Kontrollpunkt","Finish line":"Ziellinie","Exporting the track":"Exportieren der Strecke","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Wenn die Strecke fertig ist, kann oben links ein Name für die Strecke eingegeben werden, danach kann die Strecke mit dem Export-Button exportiert werden. Dadurch wird ein Streckencode angezeigt, der an andere Benutzer gesendet werden kann, damit sie die Strecke importieren und spielen können.",Close:"Schließen","Not set":"Nicht festgelegt",or:"oder","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"Die Kamera kann durch Ziehen mit einem Finger bewegt werden. Drehen Sie die Kamera, indem Sie mit zwei Fingern ziehen. Zoomen Sie rein und raus, indem Sie kneifen.","The edited height can be changed by using the height selection in the bottom left corner.":"Die bearbeitete Höhe kann durch Verwendung der Höhenauswahl in der unteren linken Ecke geändert werden.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Streckenteile können im Menü auf der rechten Seite ausgewählt werden, danach können sie durch Antippen des Bildschirms platziert werden.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"Das ausgewählte Teil kann dann durch Antippen der Drehen-Schaltfläche in der unteren linken Ecke gedreht werden.","Track parts can be deleted by using the delete tool in the right side menu.":"Streckenteile können mit dem Löschwerkzeug im Menü auf der rechten Seite gelöscht werden.","Press [{0}] or [{1}] to restart":"Drücken Sie [{0}] oder [{1}] zum Neustarten","Press [{0}] to restart":"Drücken Sie [{0}] zum Neustarten",Leaderboard:"Bestenliste",Back:"Zurück","Error: Failed to load leaderboard":"Fehler: Laden der Bestenliste fehlgeschlagen",Verified:"Verifiziert",Invalid:"Ungültig",Pending:"Ausstehend",Loading:"Laden","Failed to load recording":"Laden der Aufnahme fehlgeschlagen",Ok:"Ok","Track is missing starting point":"Strecke hat keinen Startpunkt","Failed to create user token.":"Fehler beim Erstellen des Benutzer-Token.","Leaderboard is disabled.":"Bestenliste ist deaktiviert.","Please try another browser or device.":"Bitte versuchen Sie einen anderen Browser oder ein anderes Gerät.","Computer determinism check failed.":"Der Computer-Determinismus-Check ist fehlgeschlagen.",Customize:"Anpassen",Editor:"Editor",Settings:"Einstellungen",Profile:"Profil",Play:"Spielen",Version:"Version","You cannot have duplicate user profiles":"Sie können keine doppelten Benutzerprofile haben","Failed to create user profile":"Benutzerprofil konnte nicht erstellt werden","This user profile does not exist on the server":"Dieses Benutzerprofil existiert nicht auf dem Server","Failed to download user profile from the server":"Benutzerprofil konnte nicht vom Server heruntergeladen werden","User token is invalid":"Benutzertoken ist ungültig","Are you sure you want to display your private key?":"Möchten Sie Ihren privaten Schlüssel wirklich anzeigen?","DO NOT SHARE THIS KEY WITH ANYONE.":"TEILEN SIE DIESEN SCHLÜSSEL NICHT MIT JEMANDEM.","You need a free user profile slot to import a new user profile":"Sie benötigen einen freien Benutzerprofil-Slot, um ein neues Benutzerprofil zu importieren",Nickname:"Spitzname","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Wählen Sie einen Spitznamen, der in der Bestenliste angezeigt wird. Ihr Spitzname kann jederzeit geändert werden.",Cancel:"Abbrechen",Confirm:"Bestätigen",Verifier:"Verifizierer","User ID":"Benutzer-ID",Profiles:"Profile",'Are you sure you would like to delete "{0}"?':'Möchten Sie "{0}" wirklich löschen?',Reset:"Zurücksetzen",Apply:"Anwenden",Gameplay:"Spielablauf",Units:"Einheiten",Metric:"Metrisch",Imperial:"Imperial","Reset hint":"Hinweis zurücksetzen",Disabled:"Deaktiviert",Enabled:"Aktiviert","Ghost car":"Geisterauto","Cockpit camera mode":"Cockpit-Kameramodus",Hold:"Halten",Toggle:"Umschalten","Checkpoints position":"Position der Kontrollpunkte","Timer position":"Position des Timers","Speedometer position":"Position des Tachometers",Bottom:"Unten",Top:"Oben",Language:"Sprache",Graphics:"Grafik","Car shadow":"Auto-Schatten","Track shadow":"Strecken-Schatten",Off:"Aus",On:"An",Low:"Niedrig",Medium:"Mittel",High:"Hoch",Clouds:"Wolken",Particles:"Partikel",Skidmarks:"Reifenspuren","Render scale":"Render-Skalierung","Anti-aliasing (requires restart)":"Antialiasing (erfordert Neustart)",Audio:"Audio","Sound effect volume":"Lautstärke Soundeffekte","Music volume":"Lautstärke Musik","Checkpoint volume":"Lautstärke Kontrollpunkt",Controls:"Steuerung","Vehicle accelerate":"Fahrzeug beschleunigen","Vehicle brake":"Fahrzeug bremsen","Vehicle turn left":"Fahrzeug links lenken","Vehicle turn right":"Fahrzeug rechts lenken","Vehicle reset":"Fahrzeug zurücksetzen","Vehicle cockpit camera":"Fahrzeug-Cockpit-Kamera","Hide UI":"UI ausblenden","Editor rotate part":"Editor Teil drehen","Editor height modifier":"Editor Höhenmodifikator","Editor delete part":"Editor Teil löschen","Editor forwards":"Editor vorwärts","Editor backwards":"Editor rückwärts","Editor left":"Editor links","Editor right":"Editor rechts","Editor rotate left":"Editor nach links drehen","Editor rotate right":"Editor nach rechts drehen","Editor move down":"Editor nach unten bewegen","Editor move up":"Editor nach oben bewegen","Editor test":"Editor-Test","Editor pick":"Editor-Auswahl","Toggle FPS counter":"FPS-Zähler umschalten","Toggle spectator camera":"Zuschauer-Kamera umschalten","Spectator forwards":"Zuschauer vorwärts","Spectator backwards":"Zuschauer rückwärts","Spectator left":"Zuschauer links","Spectator right":"Zuschauer rechts","Spectator speed modifier":"Zuschauer-Geschwindigkeitsmodifikator","Press any key...\n\nPress [Escape] to cancel.":"Drücken Sie eine beliebige Taste...\n\nDrücken Sie [Escape], um abzubrechen.",Clear:"Löschen","New record":"Neuer Rekord",Record:"Rekord",Current:"Aktuell",Difference:"Differenz",Copy:"Kopieren",Import:"Importieren","Failed to import track":"Import der Strecke fehlgeschlagen",'The track "{0}" already exists. Do you wish to overwrite it?':'Die Strecke "{0}" existiert bereits. Möchten Sie sie überschreiben?',Overwrite:"Überschreiben","Paste track data here...":"Streckendaten hier einfügen...",Rank:"Rang","No record":"Kein Rekord","Standard tracks":"Standardstrecken","Custom tracks":"Benutzerdefinierte Strecken",'Are you sure you want to delete "{0}"?':'Sind Sie sicher, dass Sie "{0}" löschen möchten?',Delete:"Löschen"},yI={Checkpoints:"Checkpoints","Checkpoint order":"Checkpoint order",Height:"Height",Exit:"Exit",Random:"Random",Primary:"Primary",Secondary:"Secondary",Frame:"Frame",Rims:"Rims",Test:"Test","Starting point is missing!":"Starting point is missing!",Generate:"Generate","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Are you sure you want to generate a new track?\n\nYour current track will be lost!",Load:"Load",Save:"Save","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Are you sure you want to load a new track?\n\nYour current track will be lost!","Failed to save - Track name is needed!":"Failed to save - Track name is needed!","Track saved!":"Track saved!","Failed to save!":"Failed to save!",'Are you sure you want to overwrite "{0}"?':'Are you sure you want to overwrite "{0}"?',Export:"Export","Failed to export - Track name is needed!":"Failed to export - Track name is needed!",Help:"Help","Track name":"Track name","Are you sure you want to exit the editor?":"Are you sure you want to exit the editor?","All unsaved data will be lost!":"All unsaved data will be lost!","How to use the editor":"How to use the editor","Camera controls":"Camera controls","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Alternatively, the camera can also be controlled using the following keyboard keys:","Move forwards:":"Move forwards:","Move backwards:":"Move backwards:","Move left:":"Move left:","Move right:":"Move right:","Rotate left:":"Rotate left:","Rotate right:":"Rotate right:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:","Move up:":"Move up:","Move down:":"Move down:",Editing:"Editing","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:","The selected part can then be rotated using the following keyboard shortcut:":"The selected part can then be rotated using the following keyboard shortcut:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:","Starting points, checkpoints and the finish line":"Starting points, checkpoints and the finish line","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.","Starting point":"Starting point",Checkpoint:"Checkpoint","Finish line":"Finish line","Exporting the track":"Exporting the track","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.",Close:"Close","Not set":"Not set",or:"or","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.","The edited height can be changed by using the height selection in the bottom left corner.":"The edited height can be changed by using the height selection in the bottom left corner.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"The selected part can then be rotated by tapping the rotate button in the bottom left corner.","Track parts can be deleted by using the delete tool in the right side menu.":"Track parts can be deleted by using the delete tool in the right side menu.","Press [{0}] or [{1}] to restart":"Press [{0}] or [{1}] to restart","Press [{0}] to restart":"Press [{0}] to restart",Leaderboard:"Leaderboard",Back:"Back","Error: Failed to load leaderboard":"Error: Failed to load leaderboard",Verified:"Verified",Invalid:"Invalid",Pending:"Pending",Loading:"Loading","Failed to load recording":"Failed to load recording",Ok:"Ok","Track is missing starting point":"Track is missing starting point","Failed to create user token.":"Failed to create user token.","Leaderboard is disabled.":"Leaderboard is disabled.","Please try another browser or device.":"Please try another browser or device.","Computer determinism check failed.":"Computer determinism check failed.",Customize:"Customize",Editor:"Editor",Settings:"Settings",Profile:"Profile",Play:"Play",Version:"Version","You cannot have duplicate user profiles":"You cannot have duplicate user profiles","Failed to create user profile":"Failed to create user profile","This user profile does not exist on the server":"This user profile does not exist on the server","Failed to download user profile from the server":"Failed to download user profile from the server","User token is invalid":"User token is invalid","Are you sure you want to display your private key?":"Are you sure you want to display your private key?","DO NOT SHARE THIS KEY WITH ANYONE.":"DO NOT SHARE THIS KEY WITH ANYONE.","You need a free user profile slot to import a new user profile":"You need a free user profile slot to import a new user profile",Nickname:"Nickname","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.",Cancel:"Cancel",Confirm:"Confirm",Verifier:"Verifier","User ID":"User ID",Profiles:"Profiles",'Are you sure you would like to delete "{0}"?':'Are you sure you would like to delete "{0}"?',Reset:"Reset",Apply:"Apply",Gameplay:"Gameplay",Units:"Units",Metric:"Metric",Imperial:"Imperial","Reset hint":"Reset hint",Disabled:"Disabled",Enabled:"Enabled","Ghost car":"Ghost car","Cockpit camera mode":"Cockpit camera mode",Hold:"Hold",Toggle:"Toggle","Checkpoints position":"Checkpoints position","Timer position":"Timer position","Speedometer position":"Speedometer position",Bottom:"Bottom",Top:"Top",Language:"Language",Graphics:"Graphics","Car shadow":"Car shadow","Track shadow":"Track shadow",Off:"Off",On:"On",Low:"Low",Medium:"Medium",High:"High",Clouds:"Clouds",Particles:"Particles",Skidmarks:"Skidmarks","Render scale":"Render scale","Anti-aliasing (requires restart)":"Anti-aliasing (requires restart)",Audio:"Audio","Sound effect volume":"Sound effect volume","Music volume":"Music volume","Checkpoint volume":"Checkpoint volume",Controls:"Controls","Vehicle accelerate":"Vehicle accelerate","Vehicle brake":"Vehicle brake","Vehicle turn left":"Vehicle turn left","Vehicle turn right":"Vehicle turn right","Vehicle reset":"Vehicle reset","Vehicle cockpit camera":"Vehicle cockpit camera","Hide UI":"Hide UI","Editor rotate part":"Editor rotate part","Editor height modifier":"Editor height modifier","Editor delete part":"Editor delete part","Editor forwards":"Editor forwards","Editor backwards":"Editor backwards","Editor left":"Editor left","Editor right":"Editor right","Editor rotate left":"Editor rotate left","Editor rotate right":"Editor rotate right","Editor move down":"Editor move down","Editor move up":"Editor move up","Editor test":"Editor test","Editor pick":"Editor pick","Toggle FPS counter":"Toggle FPS counter","Toggle spectator camera":"Toggle spectator camera","Spectator forwards":"Spectator forwards","Spectator backwards":"Spectator backwards","Spectator left":"Spectator left","Spectator right":"Spectator right","Spectator speed modifier":"Spectator speed modifier","Press any key...\n\nPress [Escape] to cancel.":"Press any key...\n\nPress [Escape] to cancel.",Clear:"Clear","New record":"New record",Record:"Record",Current:"Current",Difference:"Difference",Copy:"Copy",Import:"Import","Failed to import track":"Failed to import track",'The track "{0}" already exists. Do you wish to overwrite it?':'The track "{0}" already exists. Do you wish to overwrite it?',Overwrite:"Overwrite","Paste track data here...":"Paste track data here...",Rank:"Rank","No record":"No record","Standard tracks":"Standard tracks","Custom tracks":"Custom tracks",'Are you sure you want to delete "{0}"?':'Are you sure you want to delete "{0}"?',Delete:"Delete"},bI={Checkpoints:"Puntos de control","Checkpoint order":"Orden de puntos de control",Height:"Altura",Exit:"Salir",Random:"Aleatorio",Primary:"Primario",Secondary:"Secundario",Frame:"Marco",Rims:"Llantas",Test:"Prueba","Starting point is missing!":"¡Falta el punto de inicio!",Generate:"Generar","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"¿Estás seguro de que deseas generar una nueva pista?\n\n¡Tu pista actual se perderá!",Load:"Cargar",Save:"Guardar","Are you sure you want to load a new track?\n\nYour current track will be lost!":"¿Estás seguro de que deseas cargar una nueva pista?\n\n¡Tu pista actual se perderá!","Failed to save - Track name is needed!":"Error al guardar: ¡Se necesita un nombre para la pista!","Track saved!":"¡Pista guardada!","Failed to save!":"Error al guardar!",'Are you sure you want to overwrite "{0}"?':'¿Estás seguro de que deseas sobrescribir "{0}"?',Export:"Exportar","Failed to export - Track name is needed!":"Error al exportar: ¡Se necesita un nombre para la pista!",Help:"Ayuda","Track name":"Nombre de la pista","Are you sure you want to exit the editor?":"¿Estás seguro de que deseas salir del editor?","All unsaved data will be lost!":"¡Se perderán todos los datos no guardados!","How to use the editor":"Cómo usar el editor","Camera controls":"Controles de la cámara","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"La cámara se puede mover haciendo clic derecho y arrastrando el ratón. Gira la cámara haciendo clic con el botón central del ratón (rueda del ratón) o manteniendo presionada la tecla de control y haciendo clic derecho y arrastrando el ratón. Acércate y aléjate desplazando la rueda del ratón.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Alternativamente, la cámara también se puede controlar usando las siguientes teclas del teclado:","Move forwards:":"Mover hacia adelante:","Move backwards:":"Mover hacia atrás:","Move left:":"Mover a la izquierda:","Move right:":"Mover a la derecha:","Rotate left:":"Girar a la izquierda:","Rotate right:":"Girar a la derecha:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"La altura editada se puede cambiar ya sea usando la selección de altura en la esquina inferior izquierda, o manteniendo presionada la tecla de mayúsculas y desplazando la rueda del ratón. Alternativamente, puedes usar las siguientes teclas del teclado:","Move up:":"Mover hacia arriba:","Move down:":"Mover hacia abajo:",Editing:"Edición","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Las partes de la pista se pueden seleccionar en el menú de la derecha, después de lo cual se pueden colocar haciendo clic izquierdo con el ratón.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Alternativamente, la parte de la pista actualmente sobrevolada por el ratón se puede seleccionar con el siguiente atajo de teclado:","The selected part can then be rotated using the following keyboard shortcut:":"La parte seleccionada se puede girar usando el siguiente atajo de teclado:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Las partes de la pista se pueden eliminar usando la herramienta de eliminación en el menú del lado derecho o manteniendo presionada la siguiente tecla:","Starting points, checkpoints and the finish line":"Puntos de inicio, puntos de control y la línea de meta","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Los puntos de inicio, puntos de control y líneas de meta se pueden seleccionar en la categoría superior del menú del lado derecho.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Cada pista debe tener al menos un punto de inicio. Si hay varios puntos de inicio, se usará el último colocado.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Los puntos de control deben colocarse entre el punto de inicio y la línea de meta. Cuando se selecciona una parte de la pista de punto de control, habrá una herramienta en la parte inferior derecha para seleccionar el orden del punto de control. Esto determina el orden en que se deben pasar los puntos de control antes de conducir hacia la línea de meta. Ten en cuenta que es posible tener varios puntos de control con el mismo orden de punto de control.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"La línea de meta es donde termina la pista, pero solo se activará después de que se hayan pasado todos los puntos de control. También es posible tener varias líneas de meta.","Starting point":"Punto de inicio",Checkpoint:"Punto de control","Finish line":"Línea de meta","Exporting the track":"Exportando la pista","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Cuando la pista esté terminada, se puede ingresar un nombre para la pista en la parte superior izquierda, después de lo cual se puede exportar la pista usando el botón de exportación. Esto revelará un código de pista que se puede enviar a otros usuarios para que puedan importar y jugar la pista.",Close:"Cerrar","Not set":"No establecido",or:"o","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"La cámara se puede mover arrastrando con un dedo. Gira la cámara arrastrando con dos dedos. Acércate y aléjate pellizcando.","The edited height can be changed by using the height selection in the bottom left corner.":"La altura editada se puede cambiar usando la selección de altura en la esquina inferior izquierda.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Las partes de la pista se pueden seleccionar en el menú de la derecha, después de lo cual se pueden colocar tocando la pantalla.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"La parte seleccionada se puede girar tocando el botón de rotación en la esquina inferior izquierda.","Track parts can be deleted by using the delete tool in the right side menu.":"Las partes de la pista se pueden eliminar usando la herramienta de eliminación en el menú del lado derecho.","Press [{0}] or [{1}] to restart":"Presiona [{0}] o [{1}] para reiniciar","Press [{0}] to restart":"Presiona [{0}] para reiniciar",Leaderboard:"Tabla de clasificación",Back:"Volver","Error: Failed to load leaderboard":"Error: No se pudo cargar la tabla de clasificación",Verified:"Verificado",Invalid:"Inválido",Pending:"Pendiente",Loading:"Cargando","Failed to load recording":"Error al cargar la grabación",Ok:"Aceptar","Track is missing starting point":"Falta el punto de inicio en la pista","Failed to create user token.":"No se pudo crear el token de usuario.","Leaderboard is disabled.":"El marcador está desactivado.","Please try another browser or device.":"Por favor, prueba otro navegador o dispositivo.","Computer determinism check failed.":"Falló la comprobación de determinismo del ordenador.",Customize:"Personalizar",Editor:"Editor",Settings:"Configuración",Profile:"Perfil",Play:"Jugar",Version:"Versión","You cannot have duplicate user profiles":"No puedes tener perfiles de usuario duplicados","Failed to create user profile":"No se pudo crear el perfil de usuario","This user profile does not exist on the server":"Este perfil de usuario no existe en el servidor","Failed to download user profile from the server":"No se pudo descargar el perfil de usuario desde el servidor","User token is invalid":"El token de usuario no es válido","Are you sure you want to display your private key?":"¿Estás seguro de que quieres mostrar tu clave privada?","DO NOT SHARE THIS KEY WITH ANYONE.":"NO COMPARTAS ESTA CLAVE CON NADIE.","You need a free user profile slot to import a new user profile":"Necesitas un espacio libre de perfil de usuario para importar un nuevo perfil de usuario",Nickname:"Apodo","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Elige un apodo para que aparezca en la tabla de clasificación. Puedes cambiar tu apodo en cualquier momento.",Cancel:"Cancelar",Confirm:"Confirmar",Verifier:"Verificador","User ID":"ID de usuario",Profiles:"Perfiles",'Are you sure you would like to delete "{0}"?':'¿Estás seguro de que quieres eliminar "{0}"?',Reset:"Restablecer",Apply:"Aplicar",Gameplay:"Jugabilidad",Units:"Unidades",Metric:"Métrico",Imperial:"Imperial","Reset hint":"Restablecer pista",Disabled:"Desactivado",Enabled:"Activado","Ghost car":"Coche fantasma","Cockpit camera mode":"Modo de cámara en la cabina",Hold:"Mantener",Toggle:"Alternar","Checkpoints position":"Posición de los puntos de control","Timer position":"Posición del temporizador","Speedometer position":"Posición del velocímetro",Bottom:"Inferior",Top:"Superior",Language:"Idioma",Graphics:"Gráficos","Car shadow":"Sombra del coche","Track shadow":"Sombra de la pista",Off:"Apagar",On:"Encender",Low:"Bajo",Medium:"Medio",High:"Alto",Clouds:"Nubes",Particles:"Partículas",Skidmarks:"Marcas de derrape","Render scale":"Escala de renderizado","Anti-aliasing (requires restart)":"Anti-aliasing (requiere reinicio)",Audio:"Audio","Sound effect volume":"Volumen de efectos de sonido","Music volume":"Volumen de música","Checkpoint volume":"Volumen de puntos de control",Controls:"Controles","Vehicle accelerate":"Acelerar vehículo","Vehicle brake":"Frenar vehículo","Vehicle turn left":"Girar vehículo a la izquierda","Vehicle turn right":"Girar vehículo a la derecha","Vehicle reset":"Reiniciar vehículo","Vehicle cockpit camera":"Cámara en el interior del vehículo","Hide UI":"Ocultar interfaz de usuario","Editor rotate part":"Rotar pieza del editor","Editor height modifier":"Modificador de altura del editor","Editor delete part":"Eliminar pieza del editor","Editor forwards":"Avanzar en el editor","Editor backwards":"Retroceder en el editor","Editor left":"Moverse a la izquierda en el editor","Editor right":"Moverse a la derecha en el editor","Editor rotate left":"Girar editor a la izquierda","Editor rotate right":"Girar editor a la derecha","Editor move down":"Mover editor hacia abajo","Editor move up":"Mover editor hacia arriba","Editor test":"Prueba de editor","Editor pick":"Selección del editor","Toggle FPS counter":"Alternar contador de FPS","Toggle spectator camera":"Alternar cámara de espectador","Spectator forwards":"Avanzar como espectador","Spectator backwards":"Retroceder como espectador","Spectator left":"Moverse a la izquierda como espectador","Spectator right":"Moverse a la derecha como espectador","Spectator speed modifier":"Modificador de velocidad de espectador","Press any key...\n\nPress [Escape] to cancel.":"Presiona cualquier tecla...\n\nPresiona [Escape] para cancelar.",Clear:"Borrar","New record":"Nuevo récord",Record:"Récord",Current:"Actual",Difference:"Diferencia",Copy:"Copiar",Import:"Importar","Failed to import track":"Error al importar la pista",'The track "{0}" already exists. Do you wish to overwrite it?':'La pista "{0}" ya existe. ¿Deseas sobrescribirla?',Overwrite:"Sobrescribir","Paste track data here...":"Pegar datos de la pista aquí...",Rank:"Rango","No record":"Sin récord","Standard tracks":"Pistas estándar","Custom tracks":"Pistas personalizadas",'Are you sure you want to delete "{0}"?':'¿Estás seguro de que deseas eliminar "{0}"?',Delete:"Eliminar"},xI={Checkpoints:"Points de contrôle","Checkpoint order":"Ordre des points de contrôle",Height:"Hauteur",Exit:"Quitter",Random:"Aléatoire",Primary:"Principal",Secondary:"Secondaire",Frame:"Cadre",Rims:"Jantes",Test:"Test","Starting point is missing!":"Point de départ manquant !",Generate:"Générer","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Êtes-vous sûr de vouloir générer une nouvelle piste ?\n\nVotre piste actuelle sera perdue !",Load:"Charger",Save:"Enregistrer","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Êtes-vous sûr de vouloir charger une nouvelle piste ?\n\nVotre piste actuelle sera perdue !","Failed to save - Track name is needed!":"Échec de l'enregistrement - Le nom de la piste est nécessaire !","Track saved!":"Piste enregistrée !","Failed to save!":"Échec de l'enregistrement !",'Are you sure you want to overwrite "{0}"?':'Êtes-vous sûr de vouloir écraser "{0}" ?',Export:"Exporter","Failed to export - Track name is needed!":"Échec de l'exportation - Le nom de la piste est nécessaire !",Help:"Aide","Track name":"Nom de la piste","Are you sure you want to exit the editor?":"Êtes-vous sûr de vouloir quitter l'éditeur ?","All unsaved data will be lost!":"Toutes les données non sauvegardées seront perdues !","How to use the editor":"Comment utiliser l'éditeur","Camera controls":"Contrôles de la caméra","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"La caméra peut être déplacée en cliquant avec le bouton droit et en faisant glisser la souris. Faites pivoter la caméra en cliquant sur le bouton central de la souris (molette) ou en maintenant la touche de contrôle enfoncée et en cliquant avec le bouton droit et en faisant glisser la souris. Zoomez en avant et en arrière en faisant défiler la molette de la souris.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Alternativement, la caméra peut également être contrôlée en utilisant les touches de clavier suivantes :","Move forwards:":"Avancer :","Move backwards:":"Reculer :","Move left:":"Déplacer à gauche :","Move right:":"Déplacer à droite :","Rotate left:":"Pivoter à gauche :","Rotate right:":"Pivoter à droite :","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"La hauteur modifiée peut être changée en utilisant la sélection de hauteur dans le coin inférieur gauche, ou en maintenant la touche Maj enfoncée et en faisant défiler la molette de la souris. Alternativement, vous pouvez utiliser les touches de clavier suivantes :","Move up:":"Monter :","Move down:":"Descendre :",Editing:"Édition","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Les parties de la piste peuvent être sélectionnées dans le menu de droite, après quoi elles peuvent être placées en cliquant avec le bouton gauche de la souris.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Alternativement, la partie de la piste actuellement survolée par la souris peut être sélectionnée avec le raccourci clavier suivant :","The selected part can then be rotated using the following keyboard shortcut:":"La partie sélectionnée peut ensuite être pivotée en utilisant le raccourci clavier suivant :","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Les parties de la piste peuvent être supprimées en utilisant l'outil de suppression dans le menu de droite ou en maintenant la touche suivante enfoncée :","Starting points, checkpoints and the finish line":"Points de départ, points de contrôle et ligne d'arrivée","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Les points de départ, les points de contrôle et les lignes d'arrivée peuvent tous être sélectionnés dans la catégorie la plus haute du menu de droite.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Chaque piste doit avoir au moins un point de départ. S'il y a plusieurs points de départ, le dernier placé sera utilisé.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Les points de contrôle doivent être placés entre le point de départ et la ligne d'arrivée. Lorsqu'une partie de la piste de point de contrôle est sélectionnée, il y aura un outil en bas à droite pour sélectionner l'ordre du point de contrôle. Cela détermine l'ordre dans lequel les points de contrôle doivent être passés avant de conduire jusqu'à la ligne d'arrivée. Notez qu'il est possible d'avoir plusieurs points de contrôle avec le même ordre de point de contrôle.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"La ligne d'arrivée est l'endroit où la piste se termine mais ne deviendra active qu'après que tous les points de contrôle aient été passés. Il est également possible d'avoir plusieurs lignes d'arrivée.","Starting point":"Point de départ",Checkpoint:"Point de contrôle","Finish line":"Ligne d'arrivée","Exporting the track":"Exportation de la piste","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Lorsque la piste est terminée, un nom pour la piste peut être entré en haut à gauche, après quoi la piste peut être exportée en utilisant le bouton d'exportation. Cela révélera un code de piste qui peut être envoyé à d'autres utilisateurs afin qu'ils puissent importer et jouer la piste.",Close:"Fermer","Not set":"Non défini",or:"ou","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"La caméra peut être déplacée en faisant glisser un doigt. Faites pivoter la caméra en faisant glisser deux doigts. Zoomez avant et arrière en pinçant.","The edited height can be changed by using the height selection in the bottom left corner.":"La hauteur modifiée peut être changée en utilisant la sélection de hauteur dans le coin inférieur gauche.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Les parties de la piste peuvent être sélectionnées dans le menu de droite, après quoi elles peuvent être placées en tapant sur l'écran.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"La partie sélectionnée peut ensuite être pivotée en tapant sur le bouton de rotation dans le coin inférieur gauche.","Track parts can be deleted by using the delete tool in the right side menu.":"Les parties de la piste peuvent être supprimées en utilisant l'outil de suppression dans le menu de droite.","Press [{0}] or [{1}] to restart":"Appuyez sur [{0}] ou [{1}] pour redémarrer","Press [{0}] to restart":"Appuyez sur [{0}] pour redémarrer",Leaderboard:"Classement",Back:"Retour","Error: Failed to load leaderboard":"Erreur : Échec du chargement du classement",Verified:"Vérifié",Invalid:"Invalide",Pending:"En attente",Loading:"Chargement","Failed to load recording":"Échec du chargement de l'enregistrement",Ok:"OK","Track is missing starting point":"La piste n'a pas de point de départ","Failed to create user token.":"Échec de la création du jeton d'utilisateur.","Leaderboard is disabled.":"Le classement est désactivé.","Please try another browser or device.":"Veuillez essayer un autre navigateur ou appareil.","Computer determinism check failed.":"Échec de la vérification du déterminisme de l'ordinateur.",Customize:"Personnaliser",Editor:"Éditeur",Settings:"Paramètres",Profile:"Profil",Play:"Jouer",Version:"Version","You cannot have duplicate user profiles":"Vous ne pouvez pas avoir de profils d'utilisateur en double","Failed to create user profile":"Échec de la création du profil utilisateur","This user profile does not exist on the server":"Ce profil utilisateur n'existe pas sur le serveur","Failed to download user profile from the server":"Échec du téléchargement du profil utilisateur depuis le serveur","User token is invalid":"Le jeton utilisateur n'est pas valide","Are you sure you want to display your private key?":"Êtes-vous sûr de vouloir afficher votre clé privée ?","DO NOT SHARE THIS KEY WITH ANYONE.":"NE PARTAGEZ PAS CETTE CLÉ AVEC PERSONNE.","You need a free user profile slot to import a new user profile":"Vous avez besoin d'un emplacement de profil utilisateur libre pour importer un nouveau profil utilisateur",Nickname:"Pseudonyme","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Choisissez un pseudonyme à afficher dans le classement. Vous pouvez changer votre pseudonyme à tout moment.",Cancel:"Annuler",Confirm:"Confirmer",Verifier:"Vérificateur","User ID":"ID utilisateur",Profiles:"Profils",'Are you sure you would like to delete "{0}"?':'Êtes-vous sûr de vouloir supprimer "{0}"?',Reset:"Réinitialiser",Apply:"Appliquer",Gameplay:"Jouabilité",Units:"Unités",Metric:"Métrique",Imperial:"Impérial","Reset hint":"Réinitialiser l'astuce",Disabled:"Désactivé",Enabled:"Activé","Ghost car":"Voiture fantôme","Cockpit camera mode":"Mode caméra cockpit",Hold:"Maintenir",Toggle:"Basculer","Checkpoints position":"Position des checkpoints","Timer position":"Position du minuteur","Speedometer position":"Position du compteur de vitesse",Bottom:"Bas",Top:"Haut",Language:"Langue",Graphics:"Graphismes","Car shadow":"Ombre de la voiture","Track shadow":"Ombre de la piste",Off:"Désactivé",On:"Activé",Low:"Faible",Medium:"Moyen",High:"Élevé",Clouds:"Nuages",Particles:"Particules",Skidmarks:"Marques de dérapage","Render scale":"Échelle de rendu","Anti-aliasing (requires restart)":"Anticrénelage (nécessite un redémarrage)",Audio:"Audio","Sound effect volume":"Volume des effets sonores","Music volume":"Volume de la musique","Checkpoint volume":"Volume des points de contrôle",Controls:"Commandes","Vehicle accelerate":"Accélérer le véhicule","Vehicle brake":"Freiner le véhicule","Vehicle turn left":"Tourner à gauche","Vehicle turn right":"Tourner à droite","Vehicle reset":"Réinitialiser le véhicule","Vehicle cockpit camera":"Caméra du cockpit du véhicule","Hide UI":"Masquer l'interface utilisateur","Editor rotate part":"Tourner la pièce de l'éditeur","Editor height modifier":"Modificateur de hauteur de l'éditeur","Editor delete part":"Supprimer la pièce de l'éditeur","Editor forwards":"Avancer dans l'éditeur","Editor backwards":"Reculer dans l'éditeur","Editor left":"Aller à gauche dans l'éditeur","Editor right":"Aller à droite dans l'éditeur","Editor rotate left":"Tourner l'éditeur à gauche","Editor rotate right":"Tourner l'éditeur à droite","Editor move down":"Déplacer l'éditeur vers le bas","Editor move up":"Déplacer l'éditeur vers le haut","Editor test":"Test de l'éditeur","Editor pick":"Sélection de l'éditeur","Toggle FPS counter":"Activer/désactiver le compteur FPS","Toggle spectator camera":"Activer/désactiver la caméra du spectateur","Spectator forwards":"Spectateur - Avancer","Spectator backwards":"Spectateur - Reculer","Spectator left":"Spectateur - Aller à gauche","Spectator right":"Spectateur - Aller à droite","Spectator speed modifier":"Modificateur de vitesse du spectateur","Press any key...\n\nPress [Escape] to cancel.":"Appuyez sur n'importe quelle touche...\n\nAppuyez sur [Échap] pour annuler.",Clear:"Effacer","New record":"Nouveau record",Record:"Record",Current:"Actuel",Difference:"Différence",Copy:"Copier",Import:"Importer","Failed to import track":"Échec de l'importation de la piste",'The track "{0}" already exists. Do you wish to overwrite it?':'La piste "{0}" existe déjà . Souhaitez-vous l\'écraser ?',Overwrite:"Écraser","Paste track data here...":"Collez les données de la piste ici...",Rank:"Classement","No record":"Pas de record","Standard tracks":"Pistes standard","Custom tracks":"Pistes personnalisées",'Are you sure you want to delete "{0}"?':'Êtes-vous sûr de vouloir supprimer "{0}" ?',Delete:"Supprimer"},_I={Checkpoints:"Checkpoint","Checkpoint order":"Ordine dei checkpoint",Height:"Altezza",Exit:"Esci",Random:"Casuale",Primary:"Primario",Secondary:"Secondario",Frame:"Telaio",Rims:"Cerchioni",Test:"Test","Starting point is missing!":"Punto di partenza mancante!",Generate:"Genera","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Sei sicuro di voler generare un nuovo percorso?\n\nIl tuo percorso attuale verrà perso!",Load:"Carica",Save:"Salva","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Sei sicuro di voler caricare un nuovo percorso?\n\nIl tuo percorso attuale verrà perso!","Failed to save - Track name is needed!":"Salvataggio non riuscito - È necessario un nome per il percorso!","Track saved!":"Percorso salvato!","Failed to save!":"Salvataggio non riuscito!",'Are you sure you want to overwrite "{0}"?':'Sei sicuro di voler sovrascrivere "{0}"?',Export:"Esporta","Failed to export - Track name is needed!":"Esportazione non riuscita - È necessario un nome per il percorso!",Help:"Aiuto","Track name":"Nome del percorso","Are you sure you want to exit the editor?":"Sei sicuro di voler uscire dall'editor?","All unsaved data will be lost!":"Tutti i dati non salvati andranno persi!","How to use the editor":"Come usare l'editor","Camera controls":"Controlli della telecamera","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"La telecamera può essere spostata facendo clic con il tasto destro del mouse e trascinando. Ruota la telecamera facendo clic con il pulsante centrale del mouse (rotella) o tenendo premuto il tasto di controllo e facendo clic con il tasto destro del mouse e trascinando. Zoom avanti e indietro scorrendo la rotella del mouse.","Alternatively, the camera can also be controlled using the following keyboard keys:":"In alternativa, la telecamera può essere controllata utilizzando i seguenti tasti della tastiera:","Move forwards:":"Muovi avanti:","Move backwards:":"Muovi indietro:","Move left:":"Muovi a sinistra:","Move right:":"Muovi a destra:","Rotate left:":"Ruota a sinistra:","Rotate right:":"Ruota a destra:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"L'altezza modificata può essere cambiata utilizzando la selezione dell'altezza nell'angolo in basso a sinistra, o tenendo premuto il tasto shift e scorrendo la rotella del mouse. In alternativa, puoi utilizzare i seguenti tasti della tastiera:","Move up:":"Muovi su:","Move down:":"Muovi giù:",Editing:"Modifica","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Le parti del percorso possono essere selezionate nel menu a destra, dopodiché possono essere posizionate facendo clic con il tasto sinistro del mouse.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"In alternativa, la parte del percorso attualmente sotto il cursore del mouse può essere selezionata con la seguente scorciatoia da tastiera:","The selected part can then be rotated using the following keyboard shortcut:":"La parte selezionata può quindi essere ruotata utilizzando la seguente scorciatoia da tastiera:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Le parti del percorso possono essere eliminate utilizzando lo strumento di eliminazione nel menu a destra o tenendo premuto il seguente tasto:","Starting points, checkpoints and the finish line":"Punti di partenza, checkpoint e linea di arrivo","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"I punti di partenza, i checkpoint e le linee di arrivo possono essere selezionati nella categoria più alta nel menu a destra.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Ogni percorso deve avere almeno un punto di partenza. Se ci sono più punti di partenza, verrà utilizzato l'ultimo posizionato.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"I checkpoint devono essere posizionati tra il punto di partenza e la linea di arrivo. Quando viene selezionata una parte del percorso checkpoint, ci sarà uno strumento in basso a destra per selezionare l'ordine del checkpoint. Questo determina l'ordine in cui i checkpoint devono essere superati prima di arrivare alla linea di arrivo. Nota che è possibile avere più checkpoint con lo stesso ordine di checkpoint.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"La linea di arrivo è dove finisce il percorso, ma diventerà attiva solo dopo che tutti i checkpoint sono stati superati. È anche possibile avere più linee di arrivo.","Starting point":"Punto di partenza",Checkpoint:"Checkpoint","Finish line":"Linea di arrivo","Exporting the track":"Esportazione del percorso","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Quando il percorso è terminato, è possibile inserire un nome per il percorso in alto a sinistra, dopodiché il percorso può essere esportato utilizzando il pulsante di esportazione. Questo rivelerà un codice del percorso che può essere inviato ad altri utenti in modo che possano importare e giocare il percorso.",Close:"Chiudi","Not set":"Non impostato",or:"o","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"La telecamera può essere spostata trascinando con un dito. Ruota la telecamera trascinando con due dita. Zoom avanti e indietro pizzicando.","The edited height can be changed by using the height selection in the bottom left corner.":"L'altezza modificata può essere cambiata utilizzando la selezione dell'altezza nell'angolo in basso a sinistra.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Le parti del percorso possono essere selezionate nel menu a destra, dopodiché possono essere posizionate toccando lo schermo.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"La parte selezionata può quindi essere ruotata toccando il pulsante di rotazione nell'angolo in basso a sinistra.","Track parts can be deleted by using the delete tool in the right side menu.":"Le parti del percorso possono essere eliminate utilizzando lo strumento di eliminazione nel menu a destra.","Press [{0}] or [{1}] to restart":"Premi [{0}] o [{1}] per riavviare","Press [{0}] to restart":"Premi [{0}] per riavviare",Leaderboard:"Classifica",Back:"Indietro","Error: Failed to load leaderboard":"Errore: impossibile caricare la classifica",Verified:"Verificato",Invalid:"Non valido",Pending:"In sospeso",Loading:"Caricamento","Failed to load recording":"Caricamento registrazione non riuscito",Ok:"Ok","Track is missing starting point":"Il percorso non ha un punto di partenza","Failed to create user token.":"Impossibile creare il token dell'utente.","Leaderboard is disabled.":"La classifica è disabilitata.","Please try another browser or device.":"Si prega di provare un altro browser o dispositivo.","Computer determinism check failed.":"Verifica del determinismo del computer fallita.",Customize:"Personalizza",Editor:"Editor",Settings:"Impostazioni",Profile:"Profilo",Play:"Gioca",Version:"Versione","You cannot have duplicate user profiles":"Non è possibile avere profili utente duplicati","Failed to create user profile":"Impossibile creare il profilo utente","This user profile does not exist on the server":"Questo profilo utente non esiste sul server","Failed to download user profile from the server":"Impossibile scaricare il profilo utente dal server","User token is invalid":"Token utente non valido","Are you sure you want to display your private key?":"Sei sicuro di voler mostrare la tua chiave privata?","DO NOT SHARE THIS KEY WITH ANYONE.":"NON CONDIVIDERE QUESTA CHIAVE CON NESSUNO.","You need a free user profile slot to import a new user profile":"Hai bisogno di uno slot di profilo utente libero per importare un nuovo profilo utente",Nickname:"Nickname","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Scegli un nickname da mostrare nella classifica. Puoi cambiarlo in qualsiasi momento.",Cancel:"Annulla",Confirm:"Conferma",Verifier:"Verificatore","User ID":"ID Utente",Profiles:"Profili",'Are you sure you would like to delete "{0}"?':'Sei sicuro di voler eliminare "{0}"?',Reset:"Resetta",Apply:"Applica",Gameplay:"Modalità di gioco",Units:"Unità ",Metric:"Metrico",Imperial:"Imperiale","Reset hint":"Resetta suggerimento",Disabled:"Disattivato",Enabled:"Attivato","Ghost car":"Auto fantasma","Cockpit camera mode":"Modalità telecamera cabina",Hold:"Tieni",Toggle:"Attiva/Disattiva","Checkpoints position":"Posizione dei checkpoint","Timer position":"Posizione del timer","Speedometer position":"Posizione del contagiri",Bottom:"In basso",Top:"In alto",Language:"Lingua",Graphics:"Grafica","Car shadow":"Ombra dell'auto","Track shadow":"Ombra del percorso",Off:"Disattivato",On:"Attivato",Low:"Basso",Medium:"Medio",High:"Alto",Clouds:"Nuvole",Particles:"Particelle",Skidmarks:"Segni di frenata","Render scale":"Scala di rendering","Anti-aliasing (requires restart)":"Anti-aliasing (richiede riavvio)",Audio:"Audio","Sound effect volume":"Volume degli effetti sonori","Music volume":"Volume della musica","Checkpoint volume":"Volume dei checkpoint",Controls:"Controlli","Vehicle accelerate":"Accelerare veicolo","Vehicle brake":"Frenare veicolo","Vehicle turn left":"Sterzare a sinistra","Vehicle turn right":"Sterzare a destra","Vehicle reset":"Riporta veicolo","Vehicle cockpit camera":"Visuale cabina veicolo","Hide UI":"Nascondi UI","Editor rotate part":"Ruota parte nell'editor","Editor height modifier":"Modifica altezza nell'editor","Editor delete part":"Elimina parte nell'editor","Editor forwards":"Avanti nell'editor","Editor backwards":"Indietro nell'editor","Editor left":"Sinistra nell'editor","Editor right":"Destra nell'editor","Editor rotate left":"Ruota editor a sinistra","Editor rotate right":"Ruota editor a destra","Editor move down":"Muovi editor verso il basso","Editor move up":"Muovi editor verso l'alto","Editor test":"Test dell'editor","Editor pick":"Scelta dell'editor","Toggle FPS counter":"Mostra contatore FPS","Toggle spectator camera":"Attiva/disattiva telecamera spettatore","Spectator forwards":"Avanti spettatore","Spectator backwards":"Indietro spettatore","Spectator left":"Sinistra spettatore","Spectator right":"Destra spettatore","Spectator speed modifier":"Modificatore velocità spettatore","Press any key...\n\nPress [Escape] to cancel.":"Premi un tasto qualsiasi...\n\nPremi [Esc] per annullare.",Clear:"Cancella","New record":"Nuovo record",Record:"Record",Current:"Attuale",Difference:"Differenza",Copy:"Copia",Import:"Importa","Failed to import track":"Importazione percorso non riuscita",'The track "{0}" already exists. Do you wish to overwrite it?':'Il percorso "{0}" esiste già . Vuoi sovrascriverlo?',Overwrite:"Sovrascrivi","Paste track data here...":"Incolla dati del percorso qui...",Rank:"Posizione","No record":"Nessun record","Standard tracks":"Percorsi standard","Custom tracks":"Percorsi personalizzati",'Are you sure you want to delete "{0}"?':'Sei sicuro di voler eliminare "{0}"?',Delete:"Elimina"},kI={Checkpoints:"チェックポイント","Checkpoint order":"ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã®é †åº",Height:"高さ",Exit:"終了",Random:"ランダム",Primary:"プライマリ",Secondary:"セカンダリ",Frame:"フレーム",Rims:"リム",Test:"テスト","Starting point is missing!":"スタート地点がありません!",Generate:"生成","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"新しいトラックを生成してもよろしいですか?\n\n現在のトラックは失われます!",Load:"読み込み",Save:"保存","Are you sure you want to load a new track?\n\nYour current track will be lost!":"新しいトラックを読み込んでもよろしいですか?\n\n現在のトラックは失われます!","Failed to save - Track name is needed!":"保存に失敗しました - トラック名が必要です!","Track saved!":"トラックが保存されました!","Failed to save!":"保存に失敗しました!",'Are you sure you want to overwrite "{0}"?':'"{0}" を上書きしてもよろしいですか?',Export:"エクスポート","Failed to export - Track name is needed!":"エクスポートに失敗しました - トラック名が必要です!",Help:"ヘルプ","Track name":"トラック名","Are you sure you want to exit the editor?":"エディタを終了してもよろしいですか?","All unsaved data will be lost!":"保存されていないデータはすべて失われます!","How to use the editor":"エディタの使い方","Camera controls":"カメラの操作方法","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"カメラは右クリックしてマウスをドラッグすることで移動できます。カメラを回転させるには、マウスの中ボタン(マウスホイール)をクリックするか、コントロールキーを押しながら右クリックしてマウスをドラッグします。マウスホイールをスクロールすることでズームインとズームアウトができます。","Alternatively, the camera can also be controlled using the following keyboard keys:":"また、以下のキーボードのキーを使用してカメラを制御することもできます:","Move forwards:":"前に移動:","Move backwards:":"後ろに移動:","Move left:":"左に移動:","Move right:":"右に移動:","Rotate left:":"左に回転:","Rotate right:":"右に回転:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"編集された高さは、左下隅の高さ選択を使用するか、Shiftキーを押しながらマウスホイールをスクロールすることで変更できます。また、以下のキーボードキーを使用することもできます:","Move up:":"上に移動:","Move down:":"下に移動:",Editing:"編集","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"トラックパーツは、右側のメニューで選択してから、マウスで左クリックすることで配置できます。","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"また、マウスで現在ホバーしているトラックパーツは、以下のキーボードショートカットで選択できます:","The selected part can then be rotated using the following keyboard shortcut:":"選択したパーツは、以下のキーボードショートカットを使用して回転させることができます:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"トラックパーツは、右側のメニューの削除ツールを使用するか、以下のキーを押しながら削除することができます:","Starting points, checkpoints and the finish line":"スタート地点、チェックポイント、フィニッシュライン","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"スタート地点、チェックポイント、フィニッシュラインは、右側のメニューの最上位カテゴリで選択できます。","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"各トラックには少なくとも1ã¤ã®ã‚¹ã‚¿ãƒ¼ãƒˆåœ°ç‚¹ãŒå¿…è¦ã§ã™ã€‚è¤‡æ•°ã®ã‚¹ã‚¿ãƒ¼ãƒˆåœ°ç‚¹ãŒã‚ã‚‹å ´åˆã¯ã€æœ€å¾Œã«é…ç½®ã•ã‚ŒãŸã‚‚ã®ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã¯ã€ã‚¹ã‚¿ãƒ¼ãƒˆåœ°ç‚¹ã¨ãƒ•ã‚£ãƒ‹ãƒƒã‚·ãƒ¥ãƒ©ã‚¤ãƒ³ã®é–“ã«é…ç½®ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã®ãƒˆãƒ©ãƒƒã‚¯ãƒ‘ãƒ¼ãƒ„ãŒé¸æŠžã•ã‚Œã‚‹ã¨ã€å³ä¸‹ã«ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã®é †åºã‚’é¸æŠžã™ã‚‹ãŸã‚ã®ãƒ„ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã‚’é€šéŽã™ã‚‹é †åºãŒæ±ºã¾ã‚Šã¾ã™ã€‚åŒã˜ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆé †åºã§è¤‡æ•°ã®ãƒã‚§ãƒƒã‚¯ãƒã‚¤ãƒ³ãƒˆã‚’æŒã¤ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"フィニッシュラインはトラックの終わりですが、すべてのチェックポイントを通過した後にのみアクティブになります。複数のフィニッシュラインを持つことも可能です。","Starting point":"スタート地点",Checkpoint:"チェックポイント","Finish line":"フィニッシュライン","Exporting the track":"トラックのエクスポート","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"トラックが完成したら、トップ左にトラックの名前を入力し、エクスポートボタンを使用してトラックをエクスポートできます。これにより、他のユーザーがトラックをインポートして再生できるトラックコードが表示されます。",Close:"閉じる","Not set":"未設定",or:"または","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"カメラは1本の指でドラッグすることで移動できます。カメラを回転させるには、2本の指でドラッグします。ピンチインとピンチアウトでズームインとズームアウトができます。","The edited height can be changed by using the height selection in the bottom left corner.":"編集された高さは、左下隅の高さ選択を使用することで変更できます。","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"トラックパーツは、右側のメニューで選択してから、画面をタップすることで配置できます。","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"選択したパーツは、左下隅の回転ボタンをタップすることで回転させることができます。","Track parts can be deleted by using the delete tool in the right side menu.":"トラックパーツは、右側のメニューの削除ツールを使用することで削除できます。","Press [{0}] or [{1}] to restart":"[{0}] または [{1}] を押して再起動","Press [{0}] to restart":"[{0}] を押して再起動",Leaderboard:"リーダーボード",Back:"戻る","Error: Failed to load leaderboard":"エラー:リーダーボードの読み込みに失敗しました",Verified:"検証済み",Invalid:"無効",Pending:"保留中",Loading:"読み込み中","Failed to load recording":"録画の読み込みに失敗しました",Ok:"OK","Track is missing starting point":"トラックにスタート地点がありません","Failed to create user token.":"ユーザートークンの作成に失敗しました。","Leaderboard is disabled.":"リーダーボードは無効です。","Please try another browser or device.":"別のブラウザまたはデバイスをお試しください。","Computer determinism check failed.":"コンピューターの決定論チェックに失敗しました。",Customize:"カスタマイズ",Editor:"エディタ",Settings:"設定",Profile:"プロフィール",Play:"再生",Version:"バージョン","You cannot have duplicate user profiles":"重複するユーザープロファイルを持つことはできません","Failed to create user profile":"ユーザープロファイルの作成に失敗しました","This user profile does not exist on the server":"このユーザープロファイルはサーバーに存在しません","Failed to download user profile from the server":"サーバーからユーザープロファイルをダウンロードできませんでした","User token is invalid":"ユーザートークンが無効です","Are you sure you want to display your private key?":"本当に秘密鍵を表示しますか?","DO NOT SHARE THIS KEY WITH ANYONE.":"この鍵を誰とも共有しないでください。","You need a free user profile slot to import a new user profile":"新しいユーザープロファイルをインポートするには空きユーザープロファイルスロットが必要です",Nickname:"ニックネーム","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"リーダーボードに表示されるニックネームを選択してください。ニックネームはいつでも変更できます。",Cancel:"キャンセル",Confirm:"確認",Verifier:"検証者","User ID":"ユーザーID",Profiles:"プロフィール",'Are you sure you would like to delete "{0}"?':'"{0}"を削除してもよろしいですか?',Reset:"リセット",Apply:"適用",Gameplay:"ゲームプレイ",Units:"単位",Metric:"メトリック",Imperial:"インペリアル","Reset hint":"ヒントをリセット",Disabled:"無効",Enabled:"有効","Ghost car":"ゴーストカー","Cockpit camera mode":"コクピットカメラモード",Hold:"押し続ける",Toggle:"トグル","Checkpoints position":"チェックポイントの位置","Timer position":"タイマーの位置","Speedometer position":"速度計の位置",Bottom:"下",Top:"上",Language:"言語",Graphics:"グラフィック","Car shadow":"車の影","Track shadow":"トラックの影",Off:"オフ",On:"オン",Low:"低",Medium:"中",High:"高",Clouds:"雲",Particles:"パーティクル",Skidmarks:"スキッドマーク","Render scale":"レンダースケール","Anti-aliasing (requires restart)":"アンチエイリアシング(再起動が必要)",Audio:"オーディオ","Sound effect volume":"効果音の音量","Music volume":"音楽の音量","Checkpoint volume":"チェックポイントの音量",Controls:"コントロール","Vehicle accelerate":"è»Šã®åŠ é€Ÿ","Vehicle brake":"車のブレーキ","Vehicle turn left":"車を左に曲げる","Vehicle turn right":"車を右に曲げる","Vehicle reset":"車のリセット","Vehicle cockpit camera":"車のコクピットカメラ","Hide UI":"UIを非表示","Editor rotate part":"エディタのパーツ回転","Editor height modifier":"エディタの高さ調整","Editor delete part":"エディタのパーツ削除","Editor forwards":"エディタ前進","Editor backwards":"エディタ後退","Editor left":"エディタ左","Editor right":"エディタ右","Editor rotate left":"エディタを左に回転","Editor rotate right":"エディタを右に回転","Editor move down":"エディタを下に移動","Editor move up":"エディタを上に移動","Editor test":"エディターテスト","Editor pick":"エディター選択","Toggle FPS counter":"FPSカウンターの切り替え","Toggle spectator camera":"観戦カメラの切り替え","Spectator forwards":"観戦者前進","Spectator backwards":"観戦者後退","Spectator left":"観戦者左","Spectator right":"観戦者右","Spectator speed modifier":"観戦者速度調整","Press any key...\n\nPress [Escape] to cancel.":"任意のキーを押してください...\n\n[Escape] を押してキャンセル。",Clear:"クリア","New record":"新記録",Record:"記録",Current:"現在",Difference:"差分",Copy:"コピー",Import:"インポート","Failed to import track":"トラックのインポートに失敗しました",'The track "{0}" already exists. Do you wish to overwrite it?':"トラック「{0}」は既に存在します。上書きしますか?",Overwrite:"上書き","Paste track data here...":"トラックデータをここに貼り付けてください...",Rank:"ランク","No record":"記録なし","Standard tracks":"標準トラック","Custom tracks":"カスタムトラック",'Are you sure you want to delete "{0}"?':'"{0}" を削除してもよろしいですか?',Delete:"削除"},EI={Checkpoints:"체크포인트","Checkpoint order":"체크포인트 순서",Height:"높이",Exit:"나가기",Random:"랜덤",Primary:"기본",Secondary:"ë³´ì¡°",Frame:"í”„ë ˆìž„",Rims:"림",Test:"테스트","Starting point is missing!":"출발 ì§€ì ì´ 없습니다!",Generate:"생성","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"새로운 트랙을 ìƒì„±í•˜ì‹œê² ìŠµë‹ˆê¹Œ?\n\n현재 트랙은 손실됩니다!",Load:"불러오기",Save:"ì €ìž¥","Are you sure you want to load a new track?\n\nYour current track will be lost!":"새로운 트랙을 ë¶ˆëŸ¬ì˜¤ì‹œê² ìŠµë‹ˆê¹Œ?\n\n현재 트랙은 손실됩니다!","Failed to save - Track name is needed!":"ì €ìž¥ 실패 - 트랙 이름이 필요합니다!","Track saved!":"트랙이 ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤!","Failed to save!":"ì €ìž¥ 실패!",'Are you sure you want to overwrite "{0}"?':'"{0}"을(를) ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ?',Export:"내보내기","Failed to export - Track name is needed!":"내보내기 실패 - 트랙 이름이 필요합니다!",Help:"도움말","Track name":"트랙 이름","Are you sure you want to exit the editor?":"편집기를 ë‚˜ê°€ì‹œê² ìŠµë‹ˆê¹Œ?","All unsaved data will be lost!":"ì €ìž¥ë˜ì§€ 않은 ëª¨ë“ ë°ì´í„°ê°€ 손실됩니다!","How to use the editor":"에디터 사용 방법","Camera controls":"카메라 컨트롤","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"카메라는 마우스 오른쪽 버튼을 í´ë¦­í•˜ê³ ë“œëž˜ê·¸í•˜ì—¬ ì´ë™í• ìˆ˜ 있습니다. 카메라를 íšŒì „í•˜ë ¤ë©´ 마우스 중간 버튼(íœ )을 클릭하거나 컨트롤 키를 누른 상태에서 마우스 오른쪽 버튼을 í´ë¦­í•˜ê³ ë“œëž˜ê·¸í•˜ë©´ 됩니다. 마우스 íœ ì„ 스크롤하여 확대 및 ì¶•ì†Œí• ìˆ˜ 있습니다.","Alternatively, the camera can also be controlled using the following keyboard keys:":"또는 다음 키보드 키를 사용하여 카메라를 ì œì–´í• ìˆ˜ë„ 있습니다.","Move forwards:":"앞으로 이동:","Move backwards:":"뒤로 이동:","Move left:":"왼쪽으로 이동:","Move right:":"오른쪽으로 이동:","Rotate left:":"왼쪽으로 íšŒì „:","Rotate right:":"오른쪽으로 íšŒì „:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"편집된 높이는 왼쪽 하단 모서리의 높이 ì„ íƒì„ 사용하거나 Shift 키를 누른 상태에서 마우스 íœ ì„ 스크롤하여 ë³€ê²½í• ìˆ˜ 있습니다. 또는 다음 키보드 키를 ì‚¬ìš©í• ìˆ˜ë„ 있습니다.","Move up:":"위로 이동:","Move down:":"아래로 이동:",Editing:"편집","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"트랙 부품은 오른쪽 메뉴에서 ì„ íƒí•œ 후 마우스로 왼쪽 클릭하여 ë°°ì¹˜í• ìˆ˜ 있습니다.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"또는 현재 마우스로 ê°€ë¦¬í‚¤ê³ ìžˆëŠ” 트랙 부품을 다음 키보드 단축키로 ì„ íƒí• ìˆ˜ë„ 있습니다.","The selected part can then be rotated using the following keyboard shortcut:":"ì„ íƒí•œ 부품은 다음 키보드 단축키를 사용하여 íšŒì „í• ìˆ˜ 있습니다.","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"트랙 부품은 오른쪽 메뉴의 ì‚­ì œ 도구를 사용하거나 다음 키를 누른 상태에서 ì‚­ì œí• ìˆ˜ 있습니다.","Starting points, checkpoints and the finish line":"시작 ì§€ì , 체크포인트 및 완주 ì„ ","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"시작 ì§€ì , 체크포인트 및 완주 ì„ ì€ 모두 오른쪽 메뉴의 가장 상위 ì¹´í…Œê³ ë¦¬ì—ì„œ ì„ íƒí• ìˆ˜ 있습니다.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"각 트랙은 최소한 하나의 시작 ì§€ì ì´ 있어야 합니다. 여러 개의 시작 ì§€ì ì´ 있는 경우 마지막으로 배치된 ì§€ì ì´ 사용됩니다.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"체크포인트는 시작 ì§€ì ê³¼ 완주 ì„ ì‚¬ì´ì— 배치되어야 합니다. 체크포인트 트랙 부품이 ì„ íƒë˜ë©´ 하단 오른쪽에 체크포인트 순서를 ì„ íƒí• ìˆ˜ 있는 도구가 있습니다. 이는 완주 ì„ ìœ¼ë¡œ 이동하기 ì „ì— 체크포인트를 통과해야 하는 순서를 ê²°ì •í•©ë‹ˆë‹¤. 동일한 체크포인트 순서를 가진 여러 개의 체크포인트를 가질 수 있다는 ì ì— ìœ ì˜í•˜ì„¸ìš”.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"완주 ì„ ì€ 트랙이 끝나는 곳이지만 ëª¨ë“ ì²´í¬í¬ì¸íŠ¸ë¥¼ 통과한 후에만 활성화됩니다. 여러 개의 완주 ì„ ì„ 가질 수도 있습니다.","Starting point":"시작 ì§€ì ",Checkpoint:"체크포인트","Finish line":"완주 ì„ ","Exporting the track":"트랙 내보내기","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"트랙이 완성되면 왼쪽 상단에 트랙 이름을 ìž…ë ¥í•œ 후 내보내기 버튼을 사용하여 트랙을 내보낼 수 있습니다. ì´ë ‡ê²Œ 하면 다른 사용자가 트랙을 ê°€ì ¸ì™€ì„œ ìž¬ìƒí• ìˆ˜ 있는 트랙 코드가 표시됩니다.",Close:"닫기","Not set":"ì„¤ì •ë˜ì§€ 않음",or:"또는","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"카메라는 한 손가락으로 드래그하여 ì´ë™í• ìˆ˜ 있습니다. 카메라를 두 손가락으로 드래그하여 íšŒì „í• ìˆ˜ 있습니다. 확대 및 ì¶•ì†Œí•˜ë ¤ë©´ 핀치 동작을 사용하십시오.","The edited height can be changed by using the height selection in the bottom left corner.":"편집된 높이는 왼쪽 하단의 높이 ì„ íƒì„ 사용하여 ë³€ê²½í• ìˆ˜ 있습니다.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"트랙 부품은 오른쪽 메뉴에서 ì„ íƒí•œ 후 화면을 탭하여 ë°°ì¹˜í• ìˆ˜ 있습니다.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"ì„ íƒí•œ 부품은 왼쪽 하단의 íšŒì „ 버튼을 탭하여 íšŒì „í• ìˆ˜ 있습니다.","Track parts can be deleted by using the delete tool in the right side menu.":"트랙 부품은 오른쪽 메뉴의 ì‚­ì œ 도구를 사용하여 ì‚­ì œí• ìˆ˜ 있습니다.","Press [{0}] or [{1}] to restart":"[{0}] 또는 [{1}]을(를) 눌러 다시 시작","Press [{0}] to restart":"[{0}]을(를) 눌러 다시 시작",Leaderboard:"리더보드",Back:"뒤로","Error: Failed to load leaderboard":"오류: 리더보드 불러오기 실패",Verified:"확인됨",Invalid:"ìœ íš¨í•˜ì§€ 않음",Pending:"대기 중",Loading:"로딩 중","Failed to load recording":"녹화 불러오기 실패",Ok:"확인","Track is missing starting point":"트랙에 출발 ì§€ì ì´ 없습니다","Failed to create user token.":"사용자 í† í° 생성 실패.","Leaderboard is disabled.":"리더보드가 비활성화되었습니다.","Please try another browser or device.":"다른 ë¸Œë¼ìš°ì €ë‚˜ 기기를 시도해보십시오.","Computer determinism check failed.":"컴퓨터 ê²°ì •ë¡ ê²€ì‚¬ 실패.",Customize:"사용자 ì„¤ì •",Editor:"편집기",Settings:"ì„¤ì •",Profile:"프로필",Play:"재생",Version:"ë²„ì „","You cannot have duplicate user profiles":"중복 사용자 프로필을 가질 수 없습니다","Failed to create user profile":"사용자 프로필 생성에 실패했습니다","This user profile does not exist on the server":"이 사용자 프로필은 서버에 존재하지 않습니다","Failed to download user profile from the server":"서버에서 사용자 프로필을 다운로드하지 못했습니다","User token is invalid":"사용자 í† í°ì´ ìœ íš¨í•˜ì§€ 않습니다","Are you sure you want to display your private key?":"개인 키를 í‘œì‹œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?","DO NOT SHARE THIS KEY WITH ANYONE.":"이 키를 아무와도 ê³µìœ í•˜ì§€ 마십시오.","You need a free user profile slot to import a new user profile":"새로운 사용자 프로필을 ê°€ì ¸ì˜¤ë ¤ë©´ 빈 사용자 프로필 슬롯이 필요합니다",Nickname:"닉네임","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"리더보드에 í‘œì‹œë ë‹‰ë„¤ìž„ì„ ì„ íƒí•˜ì‹­ì‹œì˜¤. 닉네임은 ì–¸ì œë“ ì§€ ë³€ê²½í• ìˆ˜ 있습니다.",Cancel:"취소",Confirm:"확인",Verifier:"확인자","User ID":"사용자 ID",Profiles:"프로필",'Are you sure you would like to delete "{0}"?':'"{0}"를 ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?',Reset:"ìž¬ì„¤ì •",Apply:"ì ìš©",Gameplay:"게임 í”Œë ˆì´",Units:"단위",Metric:"미터법",Imperial:"영국/미국 단위","Reset hint":"힌트 ìž¬ì„¤ì •",Disabled:"비활성화",Enabled:"활성화","Ghost car":"ìœ ë ¹ 자동차","Cockpit camera mode":"콕핏 카메라 모드",Hold:"ìœ ì§€",Toggle:"ì „í™˜","Checkpoints position":"체크포인트 위치","Timer position":"타이머 위치","Speedometer position":"속도계 위치",Bottom:"하단",Top:"상단",Language:"언어",Graphics:"그래픽","Car shadow":"자동차 그림자","Track shadow":"트랙 그림자",Off:"끄기",On:"켜기",Low:"낮음",Medium:"중간",High:"높음",Clouds:"구름",Particles:"파티클",Skidmarks:"스키드 마크","Render scale":"ë Œë”ë§ 스케일","Anti-aliasing (requires restart)":"안티 앨리어싱 (재시작 í•„ìš”)",Audio:"오디오","Sound effect volume":"사운드 효과 볼륨","Music volume":"음악 볼륨","Checkpoint volume":"체크포인트 볼륨",Controls:"컨트롤","Vehicle accelerate":"차량 가속","Vehicle brake":"차량 ë¸Œë ˆì´í¬","Vehicle turn left":"차량 왼쪽 íšŒì „","Vehicle turn right":"차량 오른쪽 íšŒì „","Vehicle reset":"차량 초기화","Vehicle cockpit camera":"차량 코크핏 카메라","Hide UI":"UI 숨기기","Editor rotate part":"편집기 부품 íšŒì „","Editor height modifier":"편집기 높이 ìˆ˜ì •ê¸°","Editor delete part":"편집기 부품 ì‚­ì œ","Editor forwards":"편집기 앞으로","Editor backwards":"편집기 뒤로","Editor left":"편집기 왼쪽","Editor right":"편집기 오른쪽","Editor rotate left":"편집기 왼쪽으로 íšŒì „","Editor rotate right":"편집기 오른쪽으로 íšŒì „","Editor move down":"편집기 아래로 이동","Editor move up":"편집기 위로 이동","Editor test":"편집기 테스트","Editor pick":"편집기 ì„ íƒ","Toggle FPS counter":"FPS ì¹´ìš´í„° ì „í™˜","Toggle spectator camera":"스펙테이터 카메라 ì „í™˜","Spectator forwards":"스펙테이터 앞으로","Spectator backwards":"스펙테이터 뒤로","Spectator left":"스펙테이터 왼쪽","Spectator right":"스펙테이터 오른쪽","Spectator speed modifier":"스펙테이터 속도 ìˆ˜ì •ê¸°","Press any key...\n\nPress [Escape] to cancel.":"아무 키나 누르십시오...\n\n[Escape]를 눌러 취소하십시오.",Clear:"지우기","New record":"새 기록",Record:"기록",Current:"현재",Difference:"차이",Copy:"복사",Import:"ê°€ì ¸ì˜¤ê¸°","Failed to import track":"트랙 ê°€ì ¸ì˜¤ê¸° 실패",'The track "{0}" already exists. Do you wish to overwrite it?':'"{0}" 트랙이 이미 존재합니다. ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ?',Overwrite:"덮어쓰기","Paste track data here...":"트랙 데이터를 여기에 붙여넣으십시오...",Rank:"순위","No record":"기록 없음","Standard tracks":"표준 트랙","Custom tracks":"사용자 ì •ì˜ 트랙",'Are you sure you want to delete "{0}"?':'"{0}"을(를) ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?',Delete:"ì‚­ì œ"},SI={Checkpoints:"Punkty kontrolne","Checkpoint order":"Kolejność punktów kontrolnych",Height:"Wysokość",Exit:"WyjÅ›cie",Random:"Losowe",Primary:"Główny",Secondary:"Dodatkowy",Frame:"Rama",Rims:"ObrÄ™cze",Test:"Test","Starting point is missing!":"Brak punktu startowego!",Generate:"Generuj","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Czy na pewno chcesz wygenerować nowÄ… trasÄ™?\n\nTwoja obecna trasa zostanie utracona!",Load:"Wczytaj",Save:"Zapisz","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Czy na pewno chcesz wczytać nowÄ… trasÄ™?\n\nTwoja obecna trasa zostanie utracona!","Failed to save - Track name is needed!":"Nie udaÅ‚o siÄ™ zapisać - Wymagana nazwa trasy!","Track saved!":"Trasa zostaÅ‚a zapisana!","Failed to save!":"Nie udaÅ‚o siÄ™ zapisać!",'Are you sure you want to overwrite "{0}"?':"Czy na pewno chcesz nadpisać „{0}”?",Export:"Eksportuj","Failed to export - Track name is needed!":"Nie udaÅ‚o siÄ™ wyeksportować - Wymagana nazwa trasy!",Help:"Pomoc","Track name":"Nazwa trasy","Are you sure you want to exit the editor?":"Czy na pewno chcesz wyjść z edytora?","All unsaved data will be lost!":"Wszystkie niezapisane dane zostanÄ… utracone!","How to use the editor":"Jak korzystać z edytora","Camera controls":"Sterowanie kamerÄ…","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"KamerÄ™ można przesuwać, klikajÄ…c prawym przyciskiem myszy i przeciÄ…gajÄ…c. Obróć kamerÄ™, klikajÄ…c Å›rodkowy przycisk myszy (koÅ‚o myszy) lub przytrzymujÄ…c klawisz Ctrl i klikajÄ…c prawym przyciskiem myszy i przeciÄ…gajÄ…c. Przybliż i oddal obraz, przewijajÄ…c kółko myszy.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Alternatywnie, kamerÄ… można również sterować za pomocÄ… nastÄ™pujÄ…cych klawiszy na klawiaturze:","Move forwards:":"Poruszaj siÄ™ do przodu:","Move backwards:":"Poruszaj siÄ™ do tyÅ‚u:","Move left:":"Poruszaj siÄ™ w lewo:","Move right:":"Poruszaj siÄ™ w prawo:","Rotate left:":"Obróć w lewo:","Rotate right:":"Obróć w prawo:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"EdytowanÄ… wysokość można zmienić, korzystajÄ…c z wyboru wysokoÅ›ci w lewym dolnym rogu lub przytrzymujÄ…c klawisz Shift i przewijajÄ…c kółko myszy. Alternatywnie można użyć nastÄ™pujÄ…cych klawiszy na klawiaturze:","Move up:":"PrzesuÅ„ w górÄ™:","Move down:":"PrzesuÅ„ w dół:",Editing:"Edycja","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Części toru można wybrać w menu po prawej stronie, a nastÄ™pnie można je umieÅ›cić, klikajÄ…c lewym przyciskiem myszy.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Alternatywnie, aktualnie zaznaczonÄ… część toru można wybrać za pomocÄ… nastÄ™pujÄ…cego skrótu klawiaturowego:","The selected part can then be rotated using the following keyboard shortcut:":"WybranÄ… część można nastÄ™pnie obrócić za pomocÄ… nastÄ™pujÄ…cego skrótu klawiaturowego:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Części toru można usunąć, korzystajÄ…c z narzÄ™dzia usuwania w menu po prawej stronie lub przytrzymujÄ…c nastÄ™pujÄ…cy klawisz:","Starting points, checkpoints and the finish line":"Punkty startowe, punkty kontrolne i linia mety","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Punkty startowe, punkty kontrolne i linie mety można wybrać we wszystkich kategoriach w menu po prawej stronie.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Każda trasa musi mieć co najmniej jeden punkt startowy. JeÅ›li istnieje wiele punktów startowych, zostanie użyty ostatnio umieszczony.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Punkty kontrolne powinny być umieszczone miÄ™dzy punktem startowym a liniÄ… mety. Po wybraniu części toru punktu kontrolnego pojawi siÄ™ narzÄ™dzie w prawym dolnym rogu, które pozwoli wybrać kolejność punktu kontrolnego. OkreÅ›la to kolejność, w jakiej punkty kontrolne muszÄ… być przechodzone przed dojazdem do linii mety. Zauważ, że możliwe jest posiadanie wielu punktów kontrolnych o tej samej kolejnoÅ›ci.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"Linia mety to miejsce, gdzie koÅ„czy siÄ™ tor, ale staje siÄ™ aktywna dopiero po przejÅ›ciu wszystkich punktów kontrolnych. Możliwe jest również posiadanie wielu linii mety.","Starting point":"Punkt startowy",Checkpoint:"Punkt kontrolny","Finish line":"Linia mety","Exporting the track":"Eksportowanie trasy","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Po zakoÅ„czeniu trasy można wprowadzić jej nazwÄ™ w lewym górnym rogu, a nastÄ™pnie można jÄ… wyeksportować, korzystajÄ…c z przycisku eksportu. To ujawni kod trasy, który można przesÅ‚ać innym użytkownikom, aby mogli zaimportować i odtworzyć trasÄ™.",Close:"Zamknij","Not set":"Nie ustawiono",or:"lub","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"KamerÄ™ można przesuwać, przeciÄ…gajÄ…c jednym palcem. Obróć kamerÄ™, przeciÄ…gajÄ…c dwoma palcami. Przybliż i oddal obraz, Å›ciskajÄ…c palcami.","The edited height can be changed by using the height selection in the bottom left corner.":"EdytowanÄ… wysokość można zmienić, korzystajÄ…c z wyboru wysokoÅ›ci w lewym dolnym rogu.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Części toru można wybrać w menu po prawej stronie, a nastÄ™pnie można je umieÅ›cić, dotykajÄ…c ekranu.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"WybranÄ… część można nastÄ™pnie obrócić, dotykajÄ…c przycisku obracania w lewym dolnym rogu.","Track parts can be deleted by using the delete tool in the right side menu.":"Części toru można usunąć, korzystajÄ…c z narzÄ™dzia usuwania w menu po prawej stronie.","Press [{0}] or [{1}] to restart":"NaciÅ›nij [{0}] lub [{1}] aby zrestartować","Press [{0}] to restart":"NaciÅ›nij [{0}] aby zrestartować",Leaderboard:"Tabela wyników",Back:"Powrót","Error: Failed to load leaderboard":"Błąd: Nie można wczytać tabeli wyników",Verified:"Zweryfikowany",Invalid:"NieprawidÅ‚owy",Pending:"OczekujÄ…cy",Loading:"Ładowanie","Failed to load recording":"Nie udaÅ‚o siÄ™ wczytać nagrania",Ok:"Ok","Track is missing starting point":"Brak punktu startowego na trasie","Failed to create user token.":"Nie udaÅ‚o siÄ™ utworzyć tokenu użytkownika.","Leaderboard is disabled.":"Tablica wyników jest wyłączona.","Please try another browser or device.":"ProszÄ™ spróbować innÄ… przeglÄ…darkÄ™ lub urzÄ…dzenie.","Computer determinism check failed.":"Nie udaÅ‚o siÄ™ sprawdzić determinizmu komputera.",Customize:"Dostosuj",Editor:"Edytor",Settings:"Ustawienia",Profile:"Profil",Play:"Graj",Version:"Wersja","You cannot have duplicate user profiles":"Nie możesz mieć zduplikowanych profili użytkownika","Failed to create user profile":"Nie udaÅ‚o siÄ™ utworzyć profilu użytkownika","This user profile does not exist on the server":"Ten profil użytkownika nie istnieje na serwerze","Failed to download user profile from the server":"Nie udaÅ‚o siÄ™ pobrać profilu użytkownika z serwera","User token is invalid":"Token użytkownika jest nieprawidÅ‚owy","Are you sure you want to display your private key?":"Czy na pewno chcesz wyÅ›wietlić swój klucz prywatny?","DO NOT SHARE THIS KEY WITH ANYONE.":"NIE UDOSTĘPNIAJ TEGO KLUCZA NIKOMU.","You need a free user profile slot to import a new user profile":"Potrzebujesz wolnego miejsca na profil użytkownika, aby zaimportować nowy profil użytkownika",Nickname:"Pseudonim","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Wybierz pseudonim, który bÄ™dzie wyÅ›wietlany w tabeli wyników. Możesz go zmieniać w dowolnym momencie.",Cancel:"Anuluj",Confirm:"Potwierdź",Verifier:"Weryfikator","User ID":"ID użytkownika",Profiles:"Profile",'Are you sure you would like to delete "{0}"?':'Czy na pewno chcesz usunąć "{0}"?',Reset:"Resetuj",Apply:"Zastosuj",Gameplay:"Rozgrywka",Units:"Jednostki",Metric:"Metryczne",Imperial:"Imperialne","Reset hint":"Resetuj wskazówkÄ™",Disabled:"Wyłączone",Enabled:"Włączone","Ghost car":"Duch samochodu","Cockpit camera mode":"Tryb kamery kokpitu",Hold:"Przytrzymaj",Toggle:"Przełącz","Checkpoints position":"Pozycja punktów kontrolnych","Timer position":"Pozycja timera","Speedometer position":"Pozycja licznika prÄ™dkoÅ›ci",Bottom:"Dół",Top:"Góra",Language:"JÄ™zyk",Graphics:"Grafika","Car shadow":"CieÅ„ samochodu","Track shadow":"CieÅ„ trasy",Off:"Wyłącz",On:"Włącz",Low:"Niska",Medium:"Åšrednia",High:"Wysoka",Clouds:"Chmury",Particles:"CzÄ…steczki",Skidmarks:"Åšlady opon","Render scale":"Skala renderowania","Anti-aliasing (requires restart)":"Anti-aliasing (wymaga restartu)",Audio:"DźwiÄ™k","Sound effect volume":"GÅ‚oÅ›ność efektów dźwiÄ™kowych","Music volume":"GÅ‚oÅ›ność muzyki","Checkpoint volume":"GÅ‚oÅ›ność punktów kontrolnych",Controls:"Sterowanie","Vehicle accelerate":"Przyspiesz pojazd","Vehicle brake":"Hamuj pojazd","Vehicle turn left":"Skręć pojazd w lewo","Vehicle turn right":"Skręć pojazd w prawo","Vehicle reset":"Zresetuj pojazd","Vehicle cockpit camera":"Kamera kokpitu pojazdu","Hide UI":"Ukryj interfejs użytkownika","Editor rotate part":"Obróć część w edytorze","Editor height modifier":"Modyfikator wysokoÅ›ci w edytorze","Editor delete part":"UsuÅ„ część w edytorze","Editor forwards":"Edytor do przodu","Editor backwards":"Edytor do tyÅ‚u","Editor left":"Edytor w lewo","Editor right":"Edytor w prawo","Editor rotate left":"Obróć edytor w lewo","Editor rotate right":"Obróć edytor w prawo","Editor move down":"PrzesuÅ„ edytor w dół","Editor move up":"PrzesuÅ„ edytor w górÄ™","Editor test":"Test edytora","Editor pick":"Wybór edytora","Toggle FPS counter":"Przełącz licznik FPS","Toggle spectator camera":"Przełącz kamerÄ™ widza","Spectator forwards":"Widz do przodu","Spectator backwards":"Widz do tyÅ‚u","Spectator left":"Widz w lewo","Spectator right":"Widz w prawo","Spectator speed modifier":"Modyfikator prÄ™dkoÅ›ci widza","Press any key...\n\nPress [Escape] to cancel.":"NaciÅ›nij dowolny klawisz...\n\nNaciÅ›nij [Escape], aby anulować.",Clear:"Wyczyść","New record":"Nowy rekord",Record:"Rekord",Current:"Aktualny",Difference:"Różnica",Copy:"Kopiuj",Import:"Importuj","Failed to import track":"Import trasy nie powiódÅ‚ siÄ™",'The track "{0}" already exists. Do you wish to overwrite it?':"Trasa „{0}” już istnieje. Czy chcesz jÄ… nadpisać?",Overwrite:"Nadpisz","Paste track data here...":"Wklej dane trasy tutaj...",Rank:"Ranking","No record":"Brak rekordu","Standard tracks":"Standardowe trasy","Custom tracks":"Niestandardowe trasy",'Are you sure you want to delete "{0}"?':"Czy na pewno chcesz usunąć „{0}”?",Delete:"UsuÅ„"},MI={Checkpoints:"Pontos de Verificação","Checkpoint order":"Ordem dos Pontos de Verificação",Height:"Altura",Exit:"Sair",Random:"Aleatório",Primary:"Principal",Secondary:"Secundário",Frame:"Estrutura",Rims:"Aros",Test:"Testar","Starting point is missing!":"Ponto de partida está faltando!",Generate:"Gerar","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Tem certeza de que deseja gerar uma nova pista?\n\nSua pista atual será perdida!",Load:"Carregar",Save:"Salvar","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Tem certeza de que deseja carregar uma nova pista?\n\nSua pista atual será perdida!","Failed to save - Track name is needed!":"Falha ao salvar - Nome da pista é necessário!","Track saved!":"Pista salva!","Failed to save!":"Falha ao salvar!",'Are you sure you want to overwrite "{0}"?':'Tem certeza de que deseja sobrescrever "{0}"?',Export:"Exportar","Failed to export - Track name is needed!":"Falha ao exportar - Nome da pista é necessário!",Help:"Ajuda","Track name":"Nome da pista","Are you sure you want to exit the editor?":"Tem certeza de que deseja sair do editor?","All unsaved data will be lost!":"Todos os dados não salvos serão perdidos!","How to use the editor":"Como usar o editor","Camera controls":"Controles da câmera","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"A câmera pode ser movida clicando com o botão direito do mouse e arrastando. Gire a câmera clicando no botão do meio do mouse (roda do mouse) ou segurando a tecla de controle e clicando com o botão direito do mouse e arrastando. Amplie e reduza o zoom rolando a roda do mouse.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Alternativamente, a câmera também pode ser controlada usando as seguintes teclas do teclado:","Move forwards:":"Mover para frente:","Move backwards:":"Mover para trás:","Move left:":"Mover para a esquerda:","Move right:":"Mover para a direita:","Rotate left:":"Girar para a esquerda:","Rotate right:":"Girar para a direita:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"A altura editada pode ser alterada usando a seleção de altura no canto inferior esquerdo ou segurando a tecla shift e rolando a roda do mouse. Alternativamente, você pode usar as seguintes teclas do teclado:","Move up:":"Mover para cima:","Move down:":"Mover para baixo:",Editing:"Edição","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"As partes da pista podem ser selecionadas no menu à direita e, em seguida, podem ser colocadas clicando com o botão esquerdo do mouse.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Alternativamente, a parte da pista atualmente destacada pelo mouse pode ser selecionada com o seguinte atalho de teclado:","The selected part can then be rotated using the following keyboard shortcut:":"A parte selecionada pode então ser girada usando o seguinte atalho de teclado:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"As partes da pista podem ser excluídas usando a ferramenta de exclusão no menu lateral direito ou segurando a seguinte tecla:","Starting points, checkpoints and the finish line":"Pontos de partida, checkpoints e linha de chegada","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Pontos de partida, checkpoints e linhas de chegada podem ser selecionados na categoria mais alta do menu lateral direito.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Cada pista deve ter pelo menos um ponto de partida. Se houver vários pontos de partida, o último colocado será usado.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Os checkpoints devem ser colocados entre o ponto de partida e a linha de chegada. Quando uma parte da pista de checkpoint é selecionada, haverá uma ferramenta no canto inferior direito para selecionar a ordem do checkpoint. Isso determina a ordem em que os checkpoints devem ser passados antes de dirigir até a linha de chegada. Observe que é possível ter vários checkpoints com a mesma ordem de checkpoint.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"A linha de chegada é onde a pista termina, mas só se tornará ativa depois que todos os checkpoints forem passados. Também é possível ter várias linhas de chegada.","Starting point":"Ponto de partida",Checkpoint:"Checkpoint","Finish line":"Linha de chegada","Exporting the track":"Exportando a pista","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Quando a pista estiver pronta, um nome para a pista pode ser inserido no canto superior esquerdo e, em seguida, a pista pode ser exportada usando o botão de exportação. Isso revelará um código de pista que pode ser enviado para outros usuários para que eles possam importar e jogar a pista.",Close:"Fechar","Not set":"Não definido",or:"ou","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"A câmera pode ser movida arrastando com um dedo. Gire a câmera arrastando com dois dedos. Amplie e reduza o zoom beliscando.","The edited height can be changed by using the height selection in the bottom left corner.":"A altura editada pode ser alterada usando a seleção de altura no canto inferior esquerdo.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"As partes da pista podem ser selecionadas no menu à direita e, em seguida, podem ser colocadas tocando na tela.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"A parte selecionada pode então ser girada tocando no botão de rotação no canto inferior esquerdo.","Track parts can be deleted by using the delete tool in the right side menu.":"As partes da pista podem ser excluídas usando a ferramenta de exclusão no menu lateral direito.","Press [{0}] or [{1}] to restart":"Pressione [{0}] ou [{1}] para reiniciar","Press [{0}] to restart":"Pressione [{0}] para reiniciar",Leaderboard:"Quadro de Líderes",Back:"Voltar","Error: Failed to load leaderboard":"Erro: Falha ao carregar o quadro de líderes",Verified:"Verificado",Invalid:"Inválido",Pending:"Pendente",Loading:"Carregando","Failed to load recording":"Falha ao carregar a gravação",Ok:"Ok","Track is missing starting point":"Pista está sem ponto de partida","Failed to create user token.":"Falha ao criar o token do usuário.","Leaderboard is disabled.":"O ranking está desativado.","Please try another browser or device.":"Por favor, tente outro navegador ou dispositivo.","Computer determinism check failed.":"Falha na verificação de determinismo do computador.",Customize:"Personalizar",Editor:"Editor",Settings:"Configurações",Profile:"Perfil",Play:"Jogar",Version:"Versão","You cannot have duplicate user profiles":"Você não pode ter perfis de usuário duplicados","Failed to create user profile":"Falha ao criar perfil de usuário","This user profile does not exist on the server":"Este perfil de usuário não existe no servidor","Failed to download user profile from the server":"Falha ao baixar perfil de usuário do servidor","User token is invalid":"Token de usuário inválido","Are you sure you want to display your private key?":"Tem certeza de que deseja exibir sua chave privada?","DO NOT SHARE THIS KEY WITH ANYONE.":"NÃO COMPARTILHE ESTA CHAVE COM NINGUÉM.","You need a free user profile slot to import a new user profile":"Você precisa de um slot de perfil de usuário livre para importar um novo perfil de usuário",Nickname:"Apelido","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Escolha um apelido para ser exibido no quadro de líderes. Seu apelido pode ser alterado a qualquer momento.",Cancel:"Cancelar",Confirm:"Confirmar",Verifier:"Verificador","User ID":"ID de Usuário",Profiles:"Perfis",'Are you sure you would like to delete "{0}"?':'Tem certeza de que deseja excluir "{0}"?',Reset:"Redefinir",Apply:"Aplicar",Gameplay:"Jogabilidade",Units:"Unidades",Metric:"Métrico",Imperial:"Imperial","Reset hint":"Redefinir dica",Disabled:"Desativado",Enabled:"Ativado","Ghost car":"Carro Fantasma","Cockpit camera mode":"Modo de câmera do cockpit",Hold:"Manter",Toggle:"Alternar","Checkpoints position":"Posição dos checkpoints","Timer position":"Posição do temporizador","Speedometer position":"Posição do velocímetro",Bottom:"Inferior",Top:"Superior",Language:"Idioma",Graphics:"Gráficos","Car shadow":"Sombra do Carro","Track shadow":"Sombra da Pista",Off:"Desligado",On:"Ligado",Low:"Baixo",Medium:"Médio",High:"Alto",Clouds:"Nuvens",Particles:"Partículas",Skidmarks:"Marcas de Derrapagem","Render scale":"Escala de Renderização","Anti-aliasing (requires restart)":"Anti-aliasing (requer reinício)",Audio:"Áudio","Sound effect volume":"Volume de Efeitos Sonoros","Music volume":"Volume de Música","Checkpoint volume":"Volume dos Pontos de Verificação",Controls:"Controles","Vehicle accelerate":"Acelerar Veículo","Vehicle brake":"Freio do Veículo","Vehicle turn left":"Virar à Esquerda","Vehicle turn right":"Virar à Direita","Vehicle reset":"Redefinir Veículo","Vehicle cockpit camera":"Câmera Interna do Veículo","Hide UI":"Esconder UI","Editor rotate part":"Girar Peça do Editor","Editor height modifier":"Modificador de Altura do Editor","Editor delete part":"Excluir Peça do Editor","Editor forwards":"Avançar no Editor","Editor backwards":"Retroceder no Editor","Editor left":"Mover à Esquerda no Editor","Editor right":"Mover à Direita no Editor","Editor rotate left":"Girar o editor para a esquerda","Editor rotate right":"Girar o editor para a direita","Editor move down":"Mover o editor para baixo","Editor move up":"Mover o editor para cima","Editor test":"Teste de editor","Editor pick":"Escolha do editor","Toggle FPS counter":"Alternar Contador de FPS","Toggle spectator camera":"Alternar Câmera de Espectador","Spectator forwards":"Avançar como Espectador","Spectator backwards":"Retroceder como Espectador","Spectator left":"Mover à Esquerda como Espectador","Spectator right":"Mover à Direita como Espectador","Spectator speed modifier":"Modificador de Velocidade do Espectador","Press any key...\n\nPress [Escape] to cancel.":"Pressione qualquer tecla...\n\nPressione [Escape] para cancelar.",Clear:"Limpar","New record":"Novo recorde",Record:"Recorde",Current:"Atual",Difference:"Diferença",Copy:"Copiar",Import:"Importar","Failed to import track":"Falha ao importar a pista",'The track "{0}" already exists. Do you wish to overwrite it?':'A pista "{0}" já existe. Deseja sobrescrevê-la?',Overwrite:"Sobrescrever","Paste track data here...":"Cole os dados da pista aqui...",Rank:"Classificação","No record":"Sem recorde","Standard tracks":"Pistas Padrão","Custom tracks":"Pistas Personalizadas",'Are you sure you want to delete "{0}"?':'Tem certeza de que deseja excluir "{0}"?',Delete:"Excluir"},TI={Checkpoints:"Pontos de Verificação","Checkpoint order":"Ordem dos Pontos de Verificação",Height:"Altura",Exit:"Sair",Random:"Aleatório",Primary:"Primário",Secondary:"Secundário",Frame:"Estrutura",Rims:"Aros",Test:"Testar","Starting point is missing!":"Ponto de partida em falta!",Generate:"Gerar","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Tem a certeza de que deseja gerar uma nova pista?\n\nA pista atual será perdida!",Load:"Carregar",Save:"Guardar","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Tem a certeza de que deseja carregar uma nova pista?\n\nA pista atual será perdida!","Failed to save - Track name is needed!":"Falha ao guardar - É necessário um nome para a pista!","Track saved!":"Pista guardada!","Failed to save!":"Falha ao guardar!",'Are you sure you want to overwrite "{0}"?':'Tem a certeza de que deseja substituir "{0}"?',Export:"Exportar","Failed to export - Track name is needed!":"Falha ao exportar - É necessário um nome para a pista!",Help:"Ajuda","Track name":"Nome da pista","Are you sure you want to exit the editor?":"Tem a certeza de que deseja sair do editor?","All unsaved data will be lost!":"Todos os dados não guardados serão perdidos!","How to use the editor":"Como usar o editor","Camera controls":"Controlos da câmera","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"A câmera pode ser movida clicando com o botão direito do mouse e arrastando. Rode a câmera clicando no botão do meio do mouse (roda do mouse) ou segurando a tecla de controle e clicando com o botão direito do mouse e arrastando. Aproxime e afaste o zoom rolando a roda do mouse.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Alternativamente, a câmera também pode ser controlada usando as seguintes teclas do teclado:","Move forwards:":"Mover para a frente:","Move backwards:":"Mover para trás:","Move left:":"Mover para a esquerda:","Move right:":"Mover para a direita:","Rotate left:":"Rodar para a esquerda:","Rotate right:":"Rodar para a direita:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"A altura editada pode ser alterada usando a seleção de altura no canto inferior esquerdo ou segurando a tecla shift e rolando a roda do mouse. Alternativamente, você pode usar as seguintes teclas do teclado:","Move up:":"Mover para cima:","Move down:":"Mover para baixo:",Editing:"Edição","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"As partes da pista podem ser selecionadas no menu à direita e depois podem ser colocadas clicando com o botão esquerdo do mouse.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Alternativamente, a parte da pista atualmente destacada pelo mouse pode ser selecionada com o seguinte atalho de teclado:","The selected part can then be rotated using the following keyboard shortcut:":"A parte selecionada pode então ser girada usando o seguinte atalho de teclado:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"As partes da pista podem ser excluídas usando a ferramenta de exclusão no menu lateral direito ou segurando a seguinte tecla:","Starting points, checkpoints and the finish line":"Pontos de partida, checkpoints e linha de chegada","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Pontos de partida, checkpoints e linhas de chegada podem ser selecionados na categoria mais alta do menu lateral direito.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Cada pista deve ter pelo menos um ponto de partida. Se houver vários pontos de partida, o último colocado será usado.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Os checkpoints devem ser colocados entre o ponto de partida e a linha de chegada. Quando uma parte da pista de checkpoint é selecionada, haverá uma ferramenta no canto inferior direito para selecionar a ordem do checkpoint. Isso determina a ordem em que os checkpoints devem ser passados antes de dirigir até a linha de chegada. Observe que é possível ter vários checkpoints com a mesma ordem de checkpoint.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"A linha de chegada é onde a pista termina, mas só se tornará ativa depois que todos os checkpoints forem passados. Também é possível ter várias linhas de chegada.","Starting point":"Ponto de partida",Checkpoint:"Checkpoint","Finish line":"Linha de chegada","Exporting the track":"Exportando a pista","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Quando a pista estiver pronta, um nome para a pista pode ser inserido no canto superior esquerdo, após o qual a pista pode ser exportada usando o botão de exportação. Isso revelará um código de pista que pode ser enviado para outros usuários para que eles possam importar e jogar a pista.",Close:"Fechar","Not set":"Não definido",or:"ou","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"A câmera pode ser movida arrastando com um dedo. Rode a câmera arrastando com dois dedos. Aproxime e afaste o zoom beliscando.","The edited height can be changed by using the height selection in the bottom left corner.":"A altura editada pode ser alterada usando a seleção de altura no canto inferior esquerdo.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"As partes da pista podem ser selecionadas no menu à direita e depois podem ser colocadas tocando na tela.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"A parte selecionada pode então ser girada tocando no botão de rotação no canto inferior esquerdo.","Track parts can be deleted by using the delete tool in the right side menu.":"As partes da pista podem ser excluídas usando a ferramenta de exclusão no menu lateral direito.","Press [{0}] or [{1}] to restart":"Pressione [{0}] ou [{1}] para reiniciar","Press [{0}] to restart":"Pressione [{0}] para reiniciar",Leaderboard:"Tabela de Classificação",Back:"Voltar","Error: Failed to load leaderboard":"Erro: Falha ao carregar a tabela de classificação",Verified:"Verificado",Invalid:"Inválido",Pending:"Pendente",Loading:"A Carregar","Failed to load recording":"Falha ao carregar a gravação",Ok:"Ok","Track is missing starting point":"A pista não tem ponto de partida","Failed to create user token.":"Falha ao criar o token de utilizador.","Leaderboard is disabled.":"O leaderboard está desativado.","Please try another browser or device.":"Por favor, tente outro navegador ou dispositivo.","Computer determinism check failed.":"Falha na verificação de determinismo do computador.",Customize:"Personalizar",Editor:"Editor",Settings:"Definições",Profile:"Perfil",Play:"Jogar",Version:"Versão","You cannot have duplicate user profiles":"Não pode ter perfis de utilizador duplicados","Failed to create user profile":"Falha ao criar o perfil de utilizador","This user profile does not exist on the server":"Este perfil de utilizador não existe no servidor","Failed to download user profile from the server":"Falha ao descarregar o perfil de utilizador do servidor","User token is invalid":"Token de utilizador inválido","Are you sure you want to display your private key?":"Tem a certeza de que pretende mostrar a sua chave privada?","DO NOT SHARE THIS KEY WITH ANYONE.":"NÃO PARTILHE ESTA CHAVE COM NINGUÉM.","You need a free user profile slot to import a new user profile":"Necessita de um slot de perfil de utilizador livre para importar um novo perfil de utilizador",Nickname:"Alcunha","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Escolha uma alcunha para ser exibida na tabela de classificação. A sua alcunha pode ser alterada a qualquer momento.",Cancel:"Cancelar",Confirm:"Confirmar",Verifier:"Verificador","User ID":"ID de Utilizador",Profiles:"Perfis",'Are you sure you would like to delete "{0}"?':'Tem a certeza de que pretende eliminar "{0}"?',Reset:"Repor",Apply:"Aplicar",Gameplay:"Jogabilidade",Units:"Unidades",Metric:"Métrico",Imperial:"Imperial","Reset hint":"Repor dica",Disabled:"Desativado",Enabled:"Ativado","Ghost car":"Carro Fantasma","Cockpit camera mode":"Modo da câmera de cabine",Hold:"Manter",Toggle:"Alternar","Checkpoints position":"Posição dos checkpoints","Timer position":"Posição do temporizador","Speedometer position":"Posição do velocímetro",Bottom:"Inferior",Top:"Superior",Language:"Idioma",Graphics:"Gráficos","Car shadow":"Sombra do Carro","Track shadow":"Sombra da Pista",Off:"Desligado",On:"Ligado",Low:"Baixo",Medium:"Médio",High:"Alto",Clouds:"Nuvens",Particles:"Partículas",Skidmarks:"Marcas de Derrapagem","Render scale":"Escala de Renderização","Anti-aliasing (requires restart)":"Anti-aliasing (necessita de reiniciar)",Audio:"Áudio","Sound effect volume":"Volume dos Efeitos Sonoros","Music volume":"Volume da Música","Checkpoint volume":"Volume dos Pontos de Verificação",Controls:"Controlos","Vehicle accelerate":"Acelerar Veículo","Vehicle brake":"Travar Veículo","Vehicle turn left":"Virar à Esquerda","Vehicle turn right":"Virar à Direita","Vehicle reset":"Reiniciar Veículo","Vehicle cockpit camera":"Câmara do Cockpit do Veículo","Hide UI":"Esconder UI","Editor rotate part":"Rodar Peça do Editor","Editor height modifier":"Modificador de Altura do Editor","Editor delete part":"Eliminar Peça do Editor","Editor forwards":"Frente do Editor","Editor backwards":"Trás do Editor","Editor left":"Esquerda do Editor","Editor right":"Direita do Editor","Editor rotate left":"Rodar o editor para a esquerda","Editor rotate right":"Rodar o editor para a direita","Editor move down":"Mover o editor para baixo","Editor move up":"Mover o editor para cima","Editor test":"Teste de editor","Editor pick":"Escolha do editor","Toggle FPS counter":"Alternar Contador de FPS","Toggle spectator camera":"Alternar Câmara de Espectador","Spectator forwards":"Frente do Espectador","Spectator backwards":"Trás do Espectador","Spectator left":"Esquerda do Espectador","Spectator right":"Direita do Espectador","Spectator speed modifier":"Modificador de Velocidade do Espectador","Press any key...\n\nPress [Escape] to cancel.":"Pressione qualquer tecla...\n\nPressione [Escape] para cancelar.",Clear:"Limpar","New record":"Novo Recorde",Record:"Recorde",Current:"Atual",Difference:"Diferença",Copy:"Copiar",Import:"Importar","Failed to import track":"Falha ao importar a pista",'The track "{0}" already exists. Do you wish to overwrite it?':'A pista "{0}" já existe. Deseja substituí-la?',Overwrite:"Substituir","Paste track data here...":"Cole os dados da pista aqui...",Rank:"Classificação","No record":"Sem Registo","Standard tracks":"Pistas Padrão","Custom tracks":"Pistas Personalizadas",'Are you sure you want to delete "{0}"?':'Tem a certeza de que deseja eliminar "{0}"?',Delete:"Eliminar"},AI={Checkpoints:"Контрольные точки","Checkpoint order":"Порядок контрольных точек",Height:"Высота",Exit:"Выход",Random:"Случайный",Primary:"Основной",Secondary:"Вторичный",Frame:"Каркас",Rims:"Диски",Test:"Тест","Starting point is missing!":"Отсутствует стартовая точка!",Generate:"Генерировать","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Ð’Ñ‹ уверены, что хотите создать новую трассу?\n\nВаша текущая трасса будет потеряна!",Load:"Загрузить",Save:"Сохранить","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Ð’Ñ‹ уверены, что хотите загрузить новую трассу?\n\nВаша текущая трасса будет потеряна!","Failed to save - Track name is needed!":"Не удалось сохранить - требуется имя трассы!","Track saved!":"Трасса сохранена!","Failed to save!":"Не удалось сохранить!",'Are you sure you want to overwrite "{0}"?':'Ð’Ñ‹ уверены, что хотите перезаписать "{0}"?',Export:"Экспорт","Failed to export - Track name is needed!":"Не удалось экспортировать - требуется имя трассы!",Help:"Помощь","Track name":"Имя трассы","Are you sure you want to exit the editor?":"Ð’Ñ‹ уверены, что хотите выйти из редактора?","All unsaved data will be lost!":"Все несохраненные данные будут потеряны!","How to use the editor":"Как использовать редактор","Camera controls":"Управление камерой","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"Камеру можно перемещать, щелкая правой кнопкой мыши и перетаскивая мышь. Вращайте камеру, щелкнув средней кнопкой мыши (колесиком) или удерживая клавишу Ctrl и щелкнув правой кнопкой мыши и перетаскивая мышь. Масштабируйте внутрь и наружу, прокручивая колесико мыши.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Кроме того, камеру можно управлять с помощью следующих клавиш клавиатуры:","Move forwards:":"Двигаться вперед:","Move backwards:":"Двигаться назад:","Move left:":"Двигаться влево:","Move right:":"Двигаться вправо:","Rotate left:":"Повернуть влево:","Rotate right:":"Повернуть вправо:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"Изменять высоту редактируемой части можно с помощью выбора высоты в левом нижнем углу или удерживая клавишу Shift и прокручивая колесико мыши. Кроме того, можно использовать следующие клавиши клавиатуры:","Move up:":"Двигаться вверх:","Move down:":"Двигаться вниз:",Editing:"Редактирование","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Части трассы можно выбирать в меню справа, после чего их можно размещать, щелкнув левой кнопкой мыши.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Кроме того, текущую часть трассы, на которую указывает мышь, можно выбрать с помощью следующей комбинации клавиш:","The selected part can then be rotated using the following keyboard shortcut:":"Выбранную часть можно повернуть с помощью следующей комбинации клавиш:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Части трассы можно удалять с помощью инструмента удаления в правом меню или удерживая следующую клавишу:","Starting points, checkpoints and the finish line":"Стартовые точки, контрольные точки и финишная линия","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Стартовые точки, контрольные точки и финишные линии можно выбрать в верхней категории правого меню.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Каждая трасса должна иметь как минимум одну стартовую точку. Если есть несколько стартовых точек, будет использована последняя размещенная.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Контрольные точки следует размещать между стартовой точкой и финишной линией. При выборе части трассы контрольной точки в правом нижнем углу появится инструмент для выбора порядка контрольной точки. Это определяет порядок, в котором контрольные точки должны быть пройдены перед движением к финишной линии. Обратите внимание, что возможно наличие нескольких контрольных точек с одним и тем же порядком контрольных точек.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"Финишная линия - это место, где заканчивается трасса, но она становится активной только после прохождения всех контрольных точек. Также возможно наличие нескольких финишных линий.","Starting point":"Стартовая точка",Checkpoint:"Контрольная точка","Finish line":"Финишная линия","Exporting the track":"Экспорт трассы","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Когда трасса готова, в верхнем левом углу можно ввести имя трассы, после чего трассу можно экспортировать с помощью кнопки экспорта. Это позволит получить код трассы, который можно отправить другим пользователям, чтобы они могли импортировать и играть на трассе.",Close:"Закрыть","Not set":"Не установлено",or:"или","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"Камеру можно перемещать, перетаскивая одним пальцем. Вращайте камеру, перетаскивая двумя пальцами. Масштабируйте внутрь и наружу, сжимая и разжимая пальцами.","The edited height can be changed by using the height selection in the bottom left corner.":"Изменять высоту редактируемой части можно с помощью выбора высоты в левом нижнем углу.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Части трассы можно выбирать в меню справа, после чего их можно размещать, касаясь экрана.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"Выбранную часть можно повернуть, касаясь кнопки поворота в левом нижнем углу.","Track parts can be deleted by using the delete tool in the right side menu.":"Части трассы можно удалять с помощью инструмента удаления в правом меню.","Press [{0}] or [{1}] to restart":"Нажмите [{0}] или [{1}] для перезапуска","Press [{0}] to restart":"Нажмите [{0}] для перезапуска",Leaderboard:"Таблица лидеров",Back:"Назад","Error: Failed to load leaderboard":"Ошибка: не удалось загрузить таблицу лидеров",Verified:"Подтверждено",Invalid:"Недействительно",Pending:"Ð’ ожидании",Loading:"Загрузка","Failed to load recording":"Не удалось загрузить запись",Ok:"Ок","Track is missing starting point":"Отсутствует стартовая точка на трассе","Failed to create user token.":"Не удалось создать токен пользователя.","Leaderboard is disabled.":"Таблица лидеров отключена.","Please try another browser or device.":"Пожалуйста, попробуйте другой браузер или устройство.","Computer determinism check failed.":"Проверка детерминизма компьютера не удалась.",Customize:"Настройка",Editor:"Редактор",Settings:"Настройки",Profile:"Профиль",Play:"Играть",Version:"Версия","You cannot have duplicate user profiles":"Нельзя иметь дублирующиеся профили пользователей","Failed to create user profile":"Не удалось создать профиль пользователя","This user profile does not exist on the server":"Этот профиль пользователя не существует на сервере","Failed to download user profile from the server":"Не удалось загрузить профиль пользователя с сервера","User token is invalid":"Недействительный токен пользователя","Are you sure you want to display your private key?":"Ð’Ñ‹ уверены, что хотите отобразить свой личный ключ?","DO NOT SHARE THIS KEY WITH ANYONE.":"НЕ ДЕЛИТЕСЬ ЭТИМ КЛЮЧОМ НИ С КЕМ.","You need a free user profile slot to import a new user profile":"Вам нужен свободный слот профиля пользователя для импорта нового профиля пользователя",Nickname:"Никнейм","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Выберите никнейм, который будет отображаться в таблице лидеров. Ð’Ñ‹ можете изменить никнейм в любое время.",Cancel:"Отмена",Confirm:"Подтвердить",Verifier:"Подтверждающий","User ID":"Идентификатор пользователя",Profiles:"Профили",'Are you sure you would like to delete "{0}"?':'Ð’Ñ‹ уверены, что хотите удалить "{0}"?',Reset:"Сброс",Apply:"Применить",Gameplay:"Игровой процесс",Units:"Единицы измерения",Metric:"Метрическая",Imperial:"Имперская","Reset hint":"Сбросить подсказку",Disabled:"Выключено",Enabled:"Включено","Ghost car":"Призрачная машина","Cockpit camera mode":"Режим кабины",Hold:"Удерживать",Toggle:"Переключить","Checkpoints position":"Позиция контрольных точек","Timer position":"Позиция таймера","Speedometer position":"Позиция спидометра",Bottom:"Снизу",Top:"Сверху",Language:"Язык",Graphics:"Графика","Car shadow":"Тень автомобиля","Track shadow":"Тень трассы",Off:"Выключено",On:"Включено",Low:"Низкая",Medium:"Средняя",High:"Высокая",Clouds:"Облака",Particles:"Частицы",Skidmarks:"Отметины от скольжения","Render scale":"Масштаб рендера","Anti-aliasing (requires restart)":"Сглаживание (требуется перезапуск)",Audio:"Звук","Sound effect volume":"Громкость звуковых эффектов","Music volume":"Громкость музыки","Checkpoint volume":"Громкость контрольных точек",Controls:"Управление","Vehicle accelerate":"Ускорение автомобиля","Vehicle brake":"Торможение автомобиля","Vehicle turn left":"Поворот влево автомобиля","Vehicle turn right":"Поворот вправо автомобиля","Vehicle reset":"Сброс автомобиля","Vehicle cockpit camera":"Камера кабины автомобиля","Hide UI":"Скрыть интерфейс","Editor rotate part":"Поворот части в редакторе","Editor height modifier":"Модификатор высоты в редакторе","Editor delete part":"Удаление части в редакторе","Editor forwards":"Перемещение вперед в редакторе","Editor backwards":"Перемещение назад в редакторе","Editor left":"Перемещение влево в редакторе","Editor right":"Перемещение вправо в редакторе","Editor rotate left":"Повернуть редактор влево","Editor rotate right":"Повернуть редактор вправо","Editor move down":"Переместить редактор вниз","Editor move up":"Переместить редактор вверх","Editor test":"Тест редактора","Editor pick":"Выбор редактора","Toggle FPS counter":"Переключить счетчик FPS","Toggle spectator camera":"Переключить камеру наблюдателя","Spectator forwards":"Перемещение наблюдателя вперед","Spectator backwards":"Перемещение наблюдателя назад","Spectator left":"Перемещение наблюдателя влево","Spectator right":"Перемещение наблюдателя вправо","Spectator speed modifier":"Модификатор скорости наблюдателя","Press any key...\n\nPress [Escape] to cancel.":"Нажмите любую клавишу...\n\nНажмите [Escape], чтобы отменить.",Clear:"Очистить","New record":"Новый рекорд",Record:"Рекорд",Current:"Текущее",Difference:"Разница",Copy:"Копировать",Import:"Импортировать","Failed to import track":"Не удалось импортировать трассу",'The track "{0}" already exists. Do you wish to overwrite it?':'Трасса "{0}" уже существует. Хотите перезаписать её?',Overwrite:"Перезаписать","Paste track data here...":"Вставьте данные трассы сюда...",Rank:"Ранг","No record":"Нет рекорда","Standard tracks":"Стандартные трассы","Custom tracks":"Пользовательские трассы",'Are you sure you want to delete "{0}"?':'Ð’Ñ‹ уверены, что хотите удалить "{0}"?',Delete:"Удалить"},CI={Checkpoints:"Kontroller","Checkpoint order":"Kontrol noktası sırası",Height:"Yükseklik",Exit:"Çıkış",Random:"Rastgele",Primary:"Birincil",Secondary:"İkincil",Frame:"Çerçeve",Rims:"Jantlar",Test:"Test","Starting point is missing!":"BaÅŸlangıç noktası eksik!",Generate:"OluÅŸtur","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Yeni bir rota oluÅŸturmak istediÄŸinizden emin misiniz?\n\nMevcut rotanız kaybolacak!",Load:"Yükle",Save:"Kaydet","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Yeni bir rota yüklemek istediÄŸinizden emin misiniz?\n\nMevcut rotanız kaybolacak!","Failed to save - Track name is needed!":"Kaydetme baÅŸarısız - Rota adı gerekiyor!","Track saved!":"Rota kaydedildi!","Failed to save!":"Kaydetme baÅŸarısız!",'Are you sure you want to overwrite "{0}"?':'"{0}" üzerine yazmak istediÄŸinizden emin misiniz?',Export:"Dışa Aktar","Failed to export - Track name is needed!":"Dışa aktarma baÅŸarısız - Rota adı gerekiyor!",Help:"Yardım","Track name":"Rota adı","Are you sure you want to exit the editor?":"Editörden çıkmak istediÄŸinizden emin misiniz?","All unsaved data will be lost!":"Tüm kaydedilmemiÅŸ veriler kaybolacak!","How to use the editor":"Editörü nasıl kullanılır","Camera controls":"Kamera kontrolleri","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"Kamerayı saÄŸ tıklayarak ve fareyi sürükleyerek hareket ettirebilirsiniz. Kamerayı orta fare düğmesine (fare tekerleÄŸi) tıklayarak veya kontrol tuÅŸunu basılı tutarak saÄŸ tıklayarak ve fareyi sürükleyerek döndürebilirsiniz. Fare tekerleÄŸi ile yakınlaÅŸtırma ve uzaklaÅŸtırma yapabilirsiniz.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Alternatif olarak, kamera aÅŸağıdaki klavye tuÅŸları kullanılarak da kontrol edilebilir:","Move forwards:":"İleri hareket et:","Move backwards:":"Geri hareket et:","Move left:":"Sola hareket et:","Move right:":"SaÄŸa hareket et:","Rotate left:":"Sola döndür:","Rotate right:":"SaÄŸa döndür:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"Düzenlenen yükseklik, sol alt köşedeki yükseklik seçimini kullanarak veya Shift tuÅŸunu basılı tutarak ve fare tekerleÄŸini kaydırarak deÄŸiÅŸtirilebilir. Alternatif olarak, aÅŸağıdaki klavye tuÅŸlarını kullanabilirsiniz:","Move up:":"Yukarı hareket et:","Move down:":"AÅŸağı hareket et:",Editing:"Düzenleme","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Parçalar, fareyle sol tıklayarak yerleÅŸtirilebilecekleri saÄŸ taraftaki menüden seçilebilir.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Alternatif olarak, fare tarafından üzerine gelinen rota parçası aÅŸağıdaki klavye kısayoluyla seçilebilir:","The selected part can then be rotated using the following keyboard shortcut:":"Seçilen parça aÅŸağıdaki klavye kısayoluyla döndürülebilir:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Rota parçaları, saÄŸ taraftaki menüdeki silme aracı kullanılarak veya aÅŸağıdaki tuÅŸa basılı tutarak silinebilir:","Starting points, checkpoints and the finish line":"BaÅŸlangıç noktaları, kontrol noktaları ve bitiÅŸ çizgisi","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"BaÅŸlangıç noktaları, kontrol noktaları ve bitiÅŸ çizgileri, saÄŸ taraftaki menünün en üst kategorisinde seçilebilir.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Her rota en az bir baÅŸlangıç noktasına sahip olmalıdır. Birden fazla baÅŸlangıç noktası varsa, en son yerleÅŸtirilen kullanılacaktır.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Kontrol noktaları, baÅŸlangıç noktası ile bitiÅŸ çizgisi arasına yerleÅŸtirilmelidir. Bir kontrol noktası rota parçası seçildiÄŸinde, kontrol noktasının sırasını seçmek için saÄŸ alt köşede bir araç bulunur. Bu, kontrol noktalarının bitiÅŸ çizgisine gitmeden önce geçilmesi gereken sırayı belirler. Aynı kontrol noktası sırasına sahip birden fazla kontrol noktası olabileceÄŸine dikkat edin.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"BitiÅŸ çizgisi, rotanın bittiÄŸi yerdir, ancak tüm kontrol noktaları geçildikten sonra aktif hale gelir. Birden fazla bitiÅŸ çizgisi de olabilir.","Starting point":"BaÅŸlangıç noktası",Checkpoint:"Kontrol noktası","Finish line":"BitiÅŸ çizgisi","Exporting the track":"Rotanın dışa aktarılması","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Rota tamamlandığında, rota için bir ad girilebilir ve ardından rota düğmesini kullanarak rota dışa aktarılabilir. Bu, diÄŸer kullanıcılara gönderilebilecek bir rota kodunu ortaya çıkarır, böylece rota içe aktarılabilir ve oynanabilir.",Close:"Kapat","Not set":"Ayarlanmadı",or:"veya","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"Kamerayı bir parmakla sürükleyerek hareket ettirebilirsiniz. Kamerayı iki parmakla sürükleyerek döndürebilirsiniz. YakınlaÅŸtırmak ve uzaklaÅŸtırmak için sıkıştırabilirsiniz.","The edited height can be changed by using the height selection in the bottom left corner.":"Düzenlenen yükseklik, sol alt köşedeki yükseklik seçimi kullanılarak deÄŸiÅŸtirilebilir.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Parçalar, ekrana dokunarak yerleÅŸtirilebilecekleri saÄŸ taraftaki menüden seçilebilir.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"Seçilen parça, sol alt köşedeki döndür düğmesine dokunarak döndürülebilir.","Track parts can be deleted by using the delete tool in the right side menu.":"Parçalar, saÄŸ taraftaki menüdeki silme aracı kullanılarak silinebilir.","Press [{0}] or [{1}] to restart":"Yeniden baÅŸlatmak için [{0}] veya [{1}] tuÅŸuna basın","Press [{0}] to restart":"Yeniden baÅŸlatmak için [{0}] tuÅŸuna basın",Leaderboard:"Liderlik Tablosu",Back:"Geri","Error: Failed to load leaderboard":"Hata: Liderlik tablosu yüklenemedi",Verified:"DoÄŸrulandı",Invalid:"Geçersiz",Pending:"Beklemede",Loading:"Yükleniyor","Failed to load recording":"Kayıt yüklenemedi",Ok:"Tamam","Track is missing starting point":"Rota baÅŸlangıç noktası eksik","Failed to create user token.":"Kullanıcı jetonu oluÅŸturulamadı.","Leaderboard is disabled.":"Liderlik tablosu devre dışı.","Please try another browser or device.":"Lütfen baÅŸka bir tarayıcı veya cihaz deneyin.","Computer determinism check failed.":"Bilgisayar belirlenim kontrolü baÅŸarısız oldu.",Customize:"ÖzelleÅŸtir",Editor:"Editör",Settings:"Ayarlar",Profile:"Profil",Play:"Oyna",Version:"Sürüm","You cannot have duplicate user profiles":"Çift kullanıcı profili oluÅŸturamazsınız","Failed to create user profile":"Kullanıcı profili oluÅŸturulamadı","This user profile does not exist on the server":"Bu kullanıcı profili sunucuda mevcut deÄŸil","Failed to download user profile from the server":"Kullanıcı profili sunucudan indirilemedi","User token is invalid":"Kullanıcı belirteci geçersiz","Are you sure you want to display your private key?":"Gizli anahtarınızı göstermek istediÄŸinizden emin misiniz?","DO NOT SHARE THIS KEY WITH ANYONE.":"BU ANAHTARI KİMSEYLE PAYLAÅžMAYIN.","You need a free user profile slot to import a new user profile":"Yeni bir kullanıcı profili eklemek için boÅŸ bir kullanıcı profili yuvasına ihtiyacınız var",Nickname:"Kullanıcı Adı","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Liderlik tablosunda gösterilecek bir kullanıcı adı seçin. Kullanıcı adınızı istediÄŸiniz zaman deÄŸiÅŸtirebilirsiniz.",Cancel:"İptal",Confirm:"Onayla",Verifier:"DoÄŸrulayıcı","User ID":"Kullanıcı KimliÄŸi",Profiles:"Profiller",'Are you sure you would like to delete "{0}"?':'"{0}" silmek istediÄŸinizden emin misiniz?',Reset:"Sıfırla",Apply:"Uygula",Gameplay:"Oynanış",Units:"Birimler",Metric:"Metrik",Imperial:"İngiliz","Reset hint":"İpucunu sıfırla",Disabled:"Devre Dışı",Enabled:"Etkin","Ghost car":"Hayalet araba","Cockpit camera mode":"Kokpit kamera modu",Hold:"Basılı Tut",Toggle:"DeÄŸiÅŸtir","Checkpoints position":"Kontrol noktaları pozisyonu","Timer position":"Kronometre pozisyonu","Speedometer position":"Hız göstergesi pozisyonu",Bottom:"Alt",Top:"Üst",Language:"Dil",Graphics:"Grafikler","Car shadow":"Araba gölgesi","Track shadow":"Rota gölgesi",Off:"Kapalı",On:"Açık",Low:"Düşük",Medium:"Orta",High:"Yüksek",Clouds:"Bulutlar",Particles:"Partiküller",Skidmarks:"Lastik izleri","Render scale":"Görüntü ölçeÄŸi","Anti-aliasing (requires restart)":"Kenar yumuÅŸatma (yeniden baÅŸlatma gerektirir)",Audio:"Ses","Sound effect volume":"Ses efekti ses seviyesi","Music volume":"Müzik ses seviyesi","Checkpoint volume":"Kontrol noktası ses seviyesi",Controls:"Kontroller","Vehicle accelerate":"Araç hızlandır","Vehicle brake":"Araç fren","Vehicle turn left":"Araç sola dön","Vehicle turn right":"Araç saÄŸa dön","Vehicle reset":"Araç sıfırla","Vehicle cockpit camera":"Araç kokpit kamerası","Hide UI":"UI'ı Gizle","Editor rotate part":"Editör parçayı döndür","Editor height modifier":"Editör yükseklik düzenleyici","Editor delete part":"Editör parça sil","Editor forwards":"Editör ileri","Editor backwards":"Editör geri","Editor left":"Editör sola","Editor right":"Editör saÄŸa","Editor rotate left":"Editörü sola döndür","Editor rotate right":"Editörü saÄŸa döndür","Editor move down":"Editörü aÅŸağı taşı","Editor move up":"Editörü yukarı taşı","Editor test":"Editör testi","Editor pick":"Editör seçimi","Toggle FPS counter":"FPS sayacını aç/kapat","Toggle spectator camera":"İzleyici kamerasını aç/kapat","Spectator forwards":"İzleyici ileri","Spectator backwards":"İzleyici geri","Spectator left":"İzleyici sola","Spectator right":"İzleyici saÄŸa","Spectator speed modifier":"İzleyici hız düzenleyici","Press any key...\n\nPress [Escape] to cancel.":"Herhangi bir tuÅŸa basın...\n\nİptal etmek için [Escape] tuÅŸuna basın",Clear:"Temizle","New record":"Yeni kayıt",Record:"Kayıt",Current:"Mevcut",Difference:"Fark",Copy:"Kopyala",Import:"İçe Aktar","Failed to import track":"Rota içe aktarma baÅŸarısız oldu",'The track "{0}" already exists. Do you wish to overwrite it?':'"{0}" rota zaten var. Üzerine yazmak istiyor musunuz?',Overwrite:"Üzerine yaz","Paste track data here...":"Rota verilerini buraya yapıştır...",Rank:"Sıra","No record":"Kayıt yok","Standard tracks":"Standart rotalar","Custom tracks":"Özel rotalar",'Are you sure you want to delete "{0}"?':'"{0}" silmek istediÄŸinizden emin misiniz?',Delete:"Sil"},PI={Checkpoints:"Пункти контролю","Checkpoint order":"Порядок пунктів контролю",Height:"Висота",Exit:"Вихід",Random:"Випадково",Primary:"Основний",Secondary:"Додатковий",Frame:"Рама",Rims:"Дисків",Test:"Тест","Starting point is missing!":"Відсутня стартова точка!",Generate:"Генерувати","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"Ви впевнені, що хочете згенерувати новий трек?\n\nВаш поточний трек буде втрачено!",Load:"Завантажити",Save:"Зберегти","Are you sure you want to load a new track?\n\nYour current track will be lost!":"Ви впевнені, що хочете завантажити новий трек?\n\nВаш поточний трек буде втрачено!","Failed to save - Track name is needed!":"Не вдалося зберегти - потрібно вказати назву треку!","Track saved!":"Трек збережено!","Failed to save!":"Не вдалося зберегти!",'Are you sure you want to overwrite "{0}"?':'Ви впевнені, що хочете перезаписати "{0}"?',Export:"Експорт","Failed to export - Track name is needed!":"Не вдалося експортувати - потрібно вказати назву треку!",Help:"Довідка","Track name":"Назва треку","Are you sure you want to exit the editor?":"Ви впевнені, що хочете вийти з редактора?","All unsaved data will be lost!":"Всі не збережені дані будуть втрачені!","How to use the editor":"Як користуватися редактором","Camera controls":"Управління камерою","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"Камеру можна переміщувати, натискаючи праву кнопку миші Ñ– перетягуючи Ñ—Ñ—. Повертайте камеру, натискаючи середню кнопку миші (колесо миші) або утримуючи клавішу Control Ñ– натискаючи праву кнопку миші Ñ– перетягуючи Ñ—Ñ—. Збільшуйте та зменшуйте масштаб, прокручуючи колесо миші.","Alternatively, the camera can also be controlled using the following keyboard keys:":"Також камеру можна керувати за допомогою наступних клавіш на клавіатурі:","Move forwards:":"Рухатися вперед:","Move backwards:":"Рухатися назад:","Move left:":"Рухатися вліво:","Move right:":"Рухатися вправо:","Rotate left:":"Повернути вліво:","Rotate right:":"Повернути вправо:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"Редаговану висоту можна змінити, використовуючи вибір висоти в нижньому лівому куті або утримуючи клавішу Shift Ñ– прокручуючи колесо миші. Альтернативно, ви можете використовувати наступні клавіші на клавіатурі:","Move up:":"Рухатися вгору:","Move down:":"Рухатися вниз:",Editing:"Редагування","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"Частини треку можна вибрати в меню справа, після чого Ñ—Ñ… можна розмістити, натиснувши ліву кнопку миші.","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"Альтернативно, частину треку, над якою зараз знаходиться курсор миші, можна вибрати за допомогою наступної комбінації клавіш на клавіатурі:","The selected part can then be rotated using the following keyboard shortcut:":"Вибрану частину можна повернути за допомогою наступної комбінації клавіш на клавіатурі:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"Частини треку можна видалити, використовуючи інструмент видалення в бічному меню справа або утримуючи наступну клавішу:","Starting points, checkpoints and the finish line":"Стартові точки, контрольні пункти та фінішна лінія","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"Стартові точки, контрольні пункти та фінішна лінія можуть бути вибрані в найвищій категорії в бічному меню справа.","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"Кожен трек повинен мати принаймні одну стартову точку. Якщо Ñ” кілька стартових точок, буде використана остання розміщена.","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"Контрольні пункти слід розміщувати між стартовою точкою та фінішною лінією. Коли вибрана частина треку контрольного пункту, внизу справа з'явиться інструмент для вибору порядку контрольного пункту. Це визначає порядок, в якому контрольні пункти повинні бути пройдені перед рухом до фінішної лінії. Зверніть увагу, що можливо мати кілька контрольних пунктів з однаковим порядком контрольних пунктів.","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"Фінішна лінія - це місце, де закінчується трек, але вона стане активною лише після проходження всіх контрольних пунктів. Також можливо мати кілька фінішних ліній.","Starting point":"Стартова точка",Checkpoint:"Контрольний пункт","Finish line":"Фінішна лінія","Exporting the track":"Експорт треку","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"Коли трек готовий, вгорі зліва можна ввести назву треку, після чого трек можна експортувати, використовуючи кнопку експорту. Це розкриє код треку, який можна надіслати іншим користувачам, щоб вони могли імпортувати й грати трек.",Close:"Закрити","Not set":"Не встановлено",or:"або","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"Камеру можна переміщувати, перетягуючи одним пальцем. Повертайте камеру, перетягуючи двома пальцями. Збільшуйте та зменшуйте масштаб, стискаючи пальці.","The edited height can be changed by using the height selection in the bottom left corner.":"Редаговану висоту можна змінити, використовуючи вибір висоти в нижньому лівому куті.","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"Частини треку можна вибрати в меню справа, після чого Ñ—Ñ… можна розмістити, натиснувши на екран.","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"Вибрану частину можна повернути, натиснувши кнопку повороту в нижньому лівому куті.","Track parts can be deleted by using the delete tool in the right side menu.":"Частини треку можна видалити, використовуючи інструмент видалення в бічному меню справа.","Press [{0}] or [{1}] to restart":"Натисніть [{0}] або [{1}] для перезапуску","Press [{0}] to restart":"Натисніть [{0}] для перезапуску",Leaderboard:"Таблиця лідерів",Back:"Назад","Error: Failed to load leaderboard":"Помилка: не вдалося завантажити таблицю лідерів",Verified:"Підтверджено",Invalid:"Недійсний",Pending:"Очікує на підтвердження",Loading:"Завантаження","Failed to load recording":"Не вдалося завантажити запис",Ok:"Ок","Track is missing starting point":"Ð’ треку відсутня стартова точка","Failed to create user token.":"Не вдалося створити токен користувача.","Leaderboard is disabled.":"Таблиця лідерів вимкнена.","Please try another browser or device.":"Будь ласка, спробуйте інший браузер або пристрій.","Computer determinism check failed.":"Перевірка детермінізму комп'ютера не вдалася.",Customize:"Налаштувати",Editor:"Редактор",Settings:"Налаштування",Profile:"Профіль",Play:"Грати",Version:"Версія","You cannot have duplicate user profiles":"Ви не можете мати дубльовані профілі користувачів","Failed to create user profile":"Не вдалося створити профіль користувача","This user profile does not exist on the server":"Цей профіль користувача не існує на сервері","Failed to download user profile from the server":"Не вдалося завантажити профіль користувача з сервера","User token is invalid":"Недійсний токен користувача","Are you sure you want to display your private key?":"Ви впевнені, що хочете відобразити свій приватний ключ?","DO NOT SHARE THIS KEY WITH ANYONE.":"НЕ ДІЛІТЬСЯ ЦИМ КЛЮЧЕМ З КИМБУДЬ.","You need a free user profile slot to import a new user profile":"Вам потрібен вільний слот профілю користувача для імпорту нового профілю користувача",Nickname:"Псевдонім","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"Виберіть псевдонім для відображення в таблиці лідерів. Ви можете змінити псевдонім в будь-який час.",Cancel:"Скасувати",Confirm:"Підтвердити",Verifier:"Підтверджувач","User ID":"ID користувача",Profiles:"Профілі",'Are you sure you would like to delete "{0}"?':'Ви впевнені, що хочете видалити "{0}"?',Reset:"Скинути",Apply:"Застосувати",Gameplay:"Ігровий процес",Units:"Одиниці вимірювання",Metric:"Метричні",Imperial:"Імперські","Reset hint":"Скинути підказку",Disabled:"Вимкнено",Enabled:"Увімкнено","Ghost car":"Привид автомобіля","Cockpit camera mode":"Режим кабіни кокпіту",Hold:"Тримати",Toggle:"Перемикання","Checkpoints position":"Позиція контрольних точок","Timer position":"Позиція таймера","Speedometer position":"Позиція вимірювача швидкості",Bottom:"Знизу",Top:"Зверху",Language:"Мова",Graphics:"Графіка","Car shadow":"Тінь автомобіля","Track shadow":"Тінь треку",Off:"Вимкнено",On:"Увімкнено",Low:"Низькі",Medium:"Середні",High:"Високі",Clouds:"Хмари",Particles:"Частинки",Skidmarks:"Сліди","Render scale":"Масштаб рендерингу","Anti-aliasing (requires restart)":"Антиаліасинг (потребує перезапуску)",Audio:"Звук","Sound effect volume":"Гучність звукових ефектів","Music volume":"Гучність музики","Checkpoint volume":"Гучність пунктів контролю",Controls:"Управління","Vehicle accelerate":"Прискорення автомобіля","Vehicle brake":"Гальмо автомобіля","Vehicle turn left":"Поворот вліво автомобіля","Vehicle turn right":"Поворот вправо автомобіля","Vehicle reset":"Скидання автомобіля","Vehicle cockpit camera":"Камера кабіни автомобіля","Hide UI":"Сховати інтерфейс користувача","Editor rotate part":"Поворот частини редактора","Editor height modifier":"Модифікатор висоти редактора","Editor delete part":"Видалення частини редактора","Editor forwards":"Рух вперед редактора","Editor backwards":"Рух назад редактора","Editor left":"Рух вліво редактора","Editor right":"Рух вправо редактора","Editor rotate left":"Обертати редактор вліво","Editor rotate right":"Обертати редактор вправо","Editor move down":"Переміщувати редактор вниз","Editor move up":"Переміщувати редактор вгору","Editor test":"Тест редактора","Editor pick":"Вибір редактора","Toggle FPS counter":"Перемикач лічильника FPS","Toggle spectator camera":"Перемикач камери спостерігача","Spectator forwards":"Рух вперед спостерігача","Spectator backwards":"Рух назад спостерігача","Spectator left":"Рух вліво спостерігача","Spectator right":"Рух вправо спостерігача","Spectator speed modifier":"Модифікатор швидкості спостерігача","Press any key...\n\nPress [Escape] to cancel.":"Натисніть будь-яку клавішу...\n\nНатисніть [Escape], щоб скасувати.",Clear:"Очистити","New record":"Новий рекорд",Record:"Рекорд",Current:"Поточний",Difference:"Різниця",Copy:"Копіювати",Import:"Імпортувати","Failed to import track":"Не вдалося імпортувати трек",'The track "{0}" already exists. Do you wish to overwrite it?':'Трек "{0}" вже існує. Бажаєте перезаписати його?',Overwrite:"Перезаписати","Paste track data here...":"Вставте дані треку сюди...",Rank:"Ранг","No record":"Немає записів","Standard tracks":"Стандартні треки","Custom tracks":"Власні треки",'Are you sure you want to delete "{0}"?':'Ви впевнені, що хочете видалити "{0}"?',Delete:"Видалити"},RI={Checkpoints:"检查点","Checkpoint order":"检查点顺序",Height:"高度",Exit:"退出",Random:"随机",Primary:"主要",Secondary:"次要",Frame:"框架",Rims:"轮辋",Test:"测试","Starting point is missing!":"起点缺失!",Generate:"生成","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"确定要生成新赛道吗?\n\n当前赛道将丢失!",Load:"åŠ è½½",Save:"保存","Are you sure you want to load a new track?\n\nYour current track will be lost!":"ç¡®å®šè¦åŠ è½½æ–°èµ›é“å—ï¼Ÿ\n\n当前赛道将丢失!","Failed to save - Track name is needed!":"保存失败 - 需要赛道名称!","Track saved!":"赛道已保存!","Failed to save!":"保存失败!",'Are you sure you want to overwrite "{0}"?':'确定要覆盖 "{0}" 吗?',Export:"导出","Failed to export - Track name is needed!":"导出失败 - 需要赛道名称!",Help:"帮助","Track name":"赛道名称","Are you sure you want to exit the editor?":"确定要退出编辑器吗?","All unsaved data will be lost!":"所有未保存的数据将丢失!","How to use the editor":"如何使用编辑器","Camera controls":"相机控制","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"å¯ä»¥é€šè¿‡å³é”®å•å‡»å¹¶æ‹–åŠ¨é¼ æ ‡æ¥ç§»åŠ¨ç›¸æœºã€‚é€šè¿‡å•å‡»ä¸­é—´é¼ æ ‡æŒ‰é’®ï¼ˆé¼ æ ‡æ»šè½®ï¼‰æˆ–æŒ‰ä½Ctrlé”®å¹¶å³é”®å•å‡»å¹¶æ‹–åŠ¨é¼ æ ‡æ¥æ—‹è½¬ç›¸æœºã€‚é€šè¿‡æ»šåŠ¨é¼ æ ‡æ»šè½®è¿›è¡Œç¼©æ”¾ã€‚","Alternatively, the camera can also be controlled using the following keyboard keys:":"或者,还可以使用以下键盘按键来控制相机:","Move forwards:":"向前移动:","Move backwards:":"向后移动:","Move left:":"向左移动:","Move right:":"向右移动:","Rotate left:":"向左旋转:","Rotate right:":"向右旋转:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"可以通过使用左下角的高度选择器来更改编辑的高度,也可以按住Shifté”®å¹¶æ»šåŠ¨é¼ æ ‡æ»šè½®ã€‚æˆ–è€…ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨ä»¥ä¸‹é”®ç›˜æŒ‰é”®ï¼š","Move up:":"向上移动:","Move down:":"向下移动:",Editing:"编辑","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"å¯ä»¥åœ¨å³ä¾§èœå•ä¸­é€‰æ‹©è½¨é“éƒ¨ä»¶ï¼Œç„¶åŽå¯ä»¥ä½¿ç”¨é¼ æ ‡å·¦é”®å•å‡»æ”¾ç½®ã€‚","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"æˆ–è€…ï¼Œå¯ä»¥ä½¿ç”¨ä»¥ä¸‹é”®ç›˜å¿«æ·é”®é€‰æ‹©å½“å‰é¼ æ ‡æ‚¬åœçš„è½¨é“éƒ¨ä»¶ï¼š","The selected part can then be rotated using the following keyboard shortcut:":"然后可以使用以下键盘快捷键旋转所选部件:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"å¯ä»¥ä½¿ç”¨å³ä¾§èœå•ä¸­çš„åˆ é™¤å·¥å…·æˆ–æŒ‰ä½ä»¥ä¸‹é”®æ¥åˆ é™¤è½¨é“éƒ¨ä»¶ï¼š","Starting points, checkpoints and the finish line":"起点、检查点和终点","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"起点、检查点和终点都可以在右侧菜单的最上方类别中选择。","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"每个赛道必须至少有一个起点。如果有多个起点,则将使用最后放置的起点。","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"检查点应该放置在起点和终点之间。当选择检查点轨道部件时,底部右侧将有一个工具来选择检查点的顺序。这决定了在驶向终点之前必须通过检查点的顺序。请注意,可以有多个具有相同检查点顺序的检查点。","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"终点是赛道结束的地方,但只有在通过所有检查点后才会变为活动状态。也可以有多个终点。","Starting point":"起点",Checkpoint:"检查点","Finish line":"终点","Exporting the track":"导出赛道","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"å½“èµ›é“å®ŒæˆåŽï¼Œå¯ä»¥åœ¨å·¦ä¸Šè§’è¾“å…¥èµ›é“åç§°ï¼Œç„¶åŽå¯ä»¥ä½¿ç”¨å¯¼å‡ºæŒ‰é’®å¯¼å‡ºèµ›é“ã€‚è¿™å°†æ˜¾ç¤ºä¸€ä¸ªèµ›é“ä»£ç ï¼Œå¯ä»¥å°†å…¶å‘é€ç»™å…¶ä»–ç”¨æˆ·ï¼Œä»¥ä¾¿ä»–ä»¬å¯ä»¥å¯¼å…¥å’Œæ’­æ”¾èµ›é“ã€‚",Close:"关闭","Not set":"未设置",or:"或","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"ç›¸æœºå¯ä»¥é€šè¿‡ç”¨ä¸€æ ¹æ‰‹æŒ‡æ‹–åŠ¨æ¥ç§»åŠ¨ã€‚é€šè¿‡ç”¨ä¸¤æ ¹æ‰‹æŒ‡æ‹–åŠ¨æ¥æ—‹è½¬ç›¸æœºã€‚é€šè¿‡æåˆæ¥æ”¾å¤§å’Œç¼©å°ã€‚","The edited height can be changed by using the height selection in the bottom left corner.":"可以通过使用左下角的高度选择器来更改编辑的高度。","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"可以在右侧菜单中选择轨道部件,然后可以通过点击屏幕来放置。","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"然后可以通过点击左下角的旋转按钮来旋转所选部件。","Track parts can be deleted by using the delete tool in the right side menu.":"å¯ä»¥ä½¿ç”¨å³ä¾§èœå•ä¸­çš„åˆ é™¤å·¥å…·æ¥åˆ é™¤è½¨é“éƒ¨ä»¶ã€‚","Press [{0}] or [{1}] to restart":"按 [{0}] 或 [{1}] 重新开始","Press [{0}] to restart":"按 [{0}] 重新开始",Leaderboard:"排行榜",Back:"返回","Error: Failed to load leaderboard":"é”™è¯¯ï¼šåŠ è½½æŽ’è¡Œæ¦œå¤±è´¥",Verified:"已验证",Invalid:"æ— æ•ˆ",Pending:"待处理",Loading:"åŠ è½½ä¸­","Failed to load recording":"åŠ è½½å½•åƒå¤±è´¥",Ok:"确定","Track is missing starting point":"赛道缺失起点","Failed to create user token.":"æ— æ³•åˆ›å»ºç”¨æˆ·ä»¤ç‰Œã€‚","Leaderboard is disabled.":"排行榜已禁用。","Please try another browser or device.":"请尝试其他浏览器或设备。","Computer determinism check failed.":"计算机确定性检查失败。",Customize:"自定义",Editor:"编辑器",Settings:"设置",Profile:"个人资料",Play:"游戏",Version:"版本","You cannot have duplicate user profiles":"您不能拥有重复的用户配置文件","Failed to create user profile":"创建用户配置文件失败","This user profile does not exist on the server":"服务器上不存在此用户配置文件","Failed to download user profile from the server":"æ— æ³•ä»ŽæœåŠ¡å™¨ä¸‹è½½ç”¨æˆ·é…ç½®æ–‡ä»¶","User token is invalid":"ç”¨æˆ·ä»¤ç‰Œæ— æ•ˆ","Are you sure you want to display your private key?":"确定要显示您的私钥吗?","DO NOT SHARE THIS KEY WITH ANYONE.":"请勿与任何人分享此密钥。","You need a free user profile slot to import a new user profile":"您需要一个空闲的用户配置文件槽来导入新的用户配置文件",Nickname:"昵称","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"选择在排行榜中显示的昵称。您可以随时更改昵称。",Cancel:"取消",Confirm:"确认",Verifier:"验证器","User ID":"用户ID",Profiles:"配置文件",'Are you sure you would like to delete "{0}"?':'æ‚¨ç¡®å®šè¦åˆ é™¤ "{0}" 吗?',Reset:"重置",Apply:"应用",Gameplay:"游戏方式",Units:"单位",Metric:"公制",Imperial:"英制","Reset hint":"重置提示",Disabled:"禁用",Enabled:"启用","Ghost car":"幽灵车","Cockpit camera mode":"座舱摄像头模式",Hold:"按住",Toggle:"切换","Checkpoints position":"检查点位置","Timer position":"计时器位置","Speedometer position":"速度表位置",Bottom:"底部",Top:"顶部",Language:"语言",Graphics:"图形","Car shadow":"车辆阴影","Track shadow":"赛道阴影",Off:"关闭",On:"打开",Low:"低",Medium:"中",High:"高",Clouds:"云",Particles:"粒子",Skidmarks:"打滑痕迹","Render scale":"渲染比例","Anti-aliasing (requires restart)":"抗锯齿(需要重启)",Audio:"音频","Sound effect volume":"音效音量","Music volume":"音乐音量","Checkpoint volume":"检查点音量",Controls:"控制","Vehicle accelerate":"è½¦è¾†åŠ é€Ÿ","Vehicle brake":"车辆刹车","Vehicle turn left":"车辆左转","Vehicle turn right":"车辆右转","Vehicle reset":"车辆重置","Vehicle cockpit camera":"车辆驾驶舱摄像机","Hide UI":"隐藏用户界面","Editor rotate part":"编辑器旋转零件","Editor height modifier":"编辑器高度调整器","Editor delete part":"ç¼–è¾‘å™¨åˆ é™¤é›¶ä»¶","Editor forwards":"编辑器前进","Editor backwards":"编辑器后退","Editor left":"编辑器左转","Editor right":"编辑器右转","Editor rotate left":"编辑器向左旋转","Editor rotate right":"编辑器向右旋转","Editor move down":"编辑器向下移动","Editor move up":"编辑器向上移动","Editor test":"编辑器测试","Editor pick":"编辑器精选","Toggle FPS counter":"切换FPS计数器","Toggle spectator camera":"切换旁观摄像机","Spectator forwards":"旁观前进","Spectator backwards":"旁观后退","Spectator left":"旁观左转","Spectator right":"旁观右转","Spectator speed modifier":"旁观速度调整器","Press any key...\n\nPress [Escape] to cancel.":"按任意键...\n\n按 [Escape] 取消。",Clear:"清除","New record":"新记录",Record:"记录",Current:"当前",Difference:"差异",Copy:"复制",Import:"导入","Failed to import track":"导入赛道失败",'The track "{0}" already exists. Do you wish to overwrite it?':'赛道 "{0}" 已存在。您是否要覆盖它?',Overwrite:"覆盖","Paste track data here...":"在此粘贴赛道数据...",Rank:"排名","No record":"æ— è®°å½•","Standard tracks":"æ ‡å‡†èµ›é“","Custom tracks":"自定义赛道",'Are you sure you want to delete "{0}"?':'ç¡®å®šè¦åˆ é™¤ "{0}" 吗?',Delete:"åˆ é™¤"},LI={Checkpoints:"檢查點","Checkpoint order":"æª¢æŸ¥é»žé †åº",Height:"高度",Exit:"退出",Random:"隨機",Primary:"主要",Secondary:"次要",Frame:"框架",Rims:"輪框",Test:"測試","Starting point is missing!":"起點缺失!",Generate:"生成","Are you sure you want to generate a new track?\n\nYour current track will be lost!":"您確定要生成新賽道嗎?\n\n您當前的賽道將會丟失!",Load:"載入",Save:"保存","Are you sure you want to load a new track?\n\nYour current track will be lost!":"您確定要載入新賽道嗎?\n\n您當前的賽道將會丟失!","Failed to save - Track name is needed!":"保存失敗 - 需要賽道名稱!","Track saved!":"賽道已保存!","Failed to save!":"保存失敗!",'Are you sure you want to overwrite "{0}"?':'您確定要覆蓋 "{0}" 嗎?',Export:"匯出","Failed to export - Track name is needed!":"匯出失敗 - 需要賽道名稱!",Help:"幫助","Track name":"賽道名稱","Are you sure you want to exit the editor?":"您確定要退出編輯器嗎?","All unsaved data will be lost!":"所有未儲存的資料將遺失!","How to use the editor":"如何使用編輯器","Camera controls":"攝影機控制","The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.":"æ”å½±æ©Ÿå¯ä»¥é€šéŽå³éµé»žæ“Šä¸¦æ‹–å‹•é¼ æ¨™ä¾†ç§»å‹•ã€‚é€šéŽé»žæ“Šä¸­é–“çš„é¼ æ¨™æŒ‰éˆ•ï¼ˆæ»¾è¼ªï¼‰æˆ–æŒ‰ä½Ctrléµä¸¦å³éµé»žæ“Šä¸¦æ‹–å‹•é¼ æ¨™ä¾†æ—‹è½‰æ”å½±æ©Ÿã€‚é€šéŽæ»¾å‹•é¼ æ¨™æ»¾è¼ªä¾†æ”¾å¤§å’Œç¸®å°ã€‚","Alternatively, the camera can also be controlled using the following keyboard keys:":"或者,攝影機也可以使用以下鍵盤按鍵進行控制:","Move forwards:":"向前移動:","Move backwards:":"向後移動:","Move left:":"向左移動:","Move right:":"向右移動:","Rotate left:":"向左旋轉:","Rotate right:":"向右旋轉:","The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:":"可以通過使用左下角的高度選擇器來更改編輯的高度,也可以按住Shiftéµä¸¦æ»¾å‹•é¼ æ¨™æ»¾è¼ªã€‚æˆ–è€…ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨ä»¥ä¸‹éµç›¤æŒ‰éµï¼š","Move up:":"向上移動:","Move down:":"向下移動:",Editing:"編輯","Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.":"å¯ä»¥åœ¨å³å´çš„èœå–®ä¸­é¸æ“‡è»Œé“éƒ¨ä»¶ï¼Œç„¶å¾Œå¯ä»¥ä½¿ç”¨é¼ æ¨™å·¦éµé»žæ“Šæ”¾ç½®ã€‚","Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:":"æˆ–è€…ï¼Œå¯ä»¥ä½¿ç”¨ä»¥ä¸‹éµç›¤å¿«æ·éµé¸æ“‡ç•¶å‰é¼ æ¨™æ‡¸åœçš„è»Œé“éƒ¨ä»¶ï¼š","The selected part can then be rotated using the following keyboard shortcut:":"然後可以使用以下鍵盤快捷鍵旋轉所選部分:","Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:":"可以使用右側菜單中的刪除工具或按住以下鍵來刪除軌道部件:","Starting points, checkpoints and the finish line":"起點、檢查點和終點","Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.":"起點、檢查點和終點都可以在右側菜單的最上方類別中選擇。","Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.":"æ¯å€‹è³½é“å¿…é ˆè‡³å°‘æœ‰ä¸€å€‹èµ·é»žã€‚å¦‚æžœæœ‰å¤šå€‹èµ·é»žï¼Œå‰‡ä½¿ç”¨æœ€å¾Œæ”¾ç½®çš„èµ·é»žã€‚","Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.":"æª¢æŸ¥é»žæ‡‰è©²æ”¾ç½®åœ¨èµ·é»žå’Œçµ‚é»žä¹‹é–“ã€‚ç•¶é¸æ“‡æª¢æŸ¥é»žè»Œé“éƒ¨ä»¶æ™‚ï¼Œåº•éƒ¨å³å´å°‡æœ‰ä¸€å€‹å·¥å…·ä¾†é¸æ“‡æª¢æŸ¥é»žçš„é †åºã€‚é€™æ±ºå®šäº†åœ¨é–‹å§‹è¡Œé§›åˆ°çµ‚é»žä¹‹å‰å¿…é ˆé€šéŽæª¢æŸ¥é»žçš„é †åºã€‚è«‹æ³¨æ„ï¼Œå¯ä»¥æœ‰å¤šå€‹å…·æœ‰ç›¸åŒæª¢æŸ¥é»žé †åºçš„æª¢æŸ¥é»žã€‚","The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.":"終點是賽道結束的地方,但只有在通過所有檢查點後才會變為活動狀態。也可以有多個終點。","Starting point":"起點",Checkpoint:"檢查點","Finish line":"終點","Exporting the track":"導出賽道","When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.":"完成賽道後,可以在左上角輸入賽道名稱,然後使用導出按鈕導出賽道。這將顯示一個賽道代碼,可以將其發送給其他用戶,以便他們可以導入並播放賽道。",Close:"關閉","Not set":"未設置",or:"或","The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.":"æ”å½±æ©Ÿå¯ä»¥é€šéŽç”¨ä¸€æ ¹æ‰‹æŒ‡æ‹–å‹•ä¾†ç§»å‹•ã€‚é€šéŽç”¨å…©æ ¹æ‰‹æŒ‡æ‹–å‹•ä¾†æ—‹è½‰æ”å½±æ©Ÿã€‚é€šéŽæåˆä¾†æ”¾å¤§å’Œç¸®å°ã€‚","The edited height can be changed by using the height selection in the bottom left corner.":"可以通過使用左下角的高度選擇器來更改編輯的高度。","Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.":"可以在右側的菜單中選擇軌道部件,然後可以通過點擊屏幕來放置。","The selected part can then be rotated by tapping the rotate button in the bottom left corner.":"然後可以通過點擊左下角的旋轉按鈕來旋轉所選部分。","Track parts can be deleted by using the delete tool in the right side menu.":"可以使用右側菜單中的刪除工具來刪除軌道部件。","Press [{0}] or [{1}] to restart":"按 [{0}] 或 [{1}] 重新開始","Press [{0}] to restart":"按 [{0}] 重新開始",Leaderboard:"排行榜",Back:"返回","Error: Failed to load leaderboard":"錯誤:無法載入排行榜",Verified:"已驗證",Invalid:"無效",Pending:"待定",Loading:"載入中","Failed to load recording":"載入錄影失敗",Ok:"確定","Track is missing starting point":"賽道缺少起點","Failed to create user token.":"無法建立使用者憑證。","Leaderboard is disabled.":"排行榜已停用。","Please try another browser or device.":"請嘗試其他瀏覽器或設備。","Computer determinism check failed.":"電腦確定性檢查失敗。",Customize:"自訂",Editor:"編輯器",Settings:"設定",Profile:"個人資料",Play:"遊玩",Version:"版本","You cannot have duplicate user profiles":"您不能擁有重複的使用者檔案","Failed to create user profile":"無法建立使用者檔案","This user profile does not exist on the server":"此使用者檔案不存在於伺服器上","Failed to download user profile from the server":"無法從伺服器下載使用者檔案","User token is invalid":"使用者令牌無效","Are you sure you want to display your private key?":"確定要顯示您的私密金鑰嗎?","DO NOT SHARE THIS KEY WITH ANYONE.":"請勿與任何人分享此金鑰。","You need a free user profile slot to import a new user profile":"您需要一個空閒的使用者檔案插槽以匯入新的使用者檔案",Nickname:"暱稱","Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.":"選擇一個在排行榜中顯示的暱稱。您隨時可以更改您的暱稱。",Cancel:"取消",Confirm:"確認",Verifier:"驗證者","User ID":"使用者 ID",Profiles:"配置檔",'Are you sure you would like to delete "{0}"?':'您確定要刪除 "{0}" 嗎?',Reset:"重設",Apply:"套用",Gameplay:"遊戲玩法",Units:"單位",Metric:"公制",Imperial:"英制","Reset hint":"重設提示",Disabled:"禁用",Enabled:"啟用","Ghost car":"鬼車","Cockpit camera mode":"座艙攝影機模式",Hold:"按住",Toggle:"切換","Checkpoints position":"檢查點位置","Timer position":"計時器位置","Speedometer position":"速度計位置",Bottom:"底部",Top:"é ‚éƒ¨",Language:"語言",Graphics:"圖形","Car shadow":"車影","Track shadow":"賽道影子",Off:"é—œ",On:"é–‹",Low:"低",Medium:"中",High:"高",Clouds:"雲彩",Particles:"粒子",Skidmarks:"滑胎痕跡","Render scale":"渲染比例","Anti-aliasing (requires restart)":"抗鋸齒 (需要重新啟動)",Audio:"音效","Sound effect volume":"音效音量","Music volume":"音樂音量","Checkpoint volume":"檢查點音量",Controls:"控制","Vehicle accelerate":"è»Šè¼›åŠ é€Ÿ","Vehicle brake":"車輛煞車","Vehicle turn left":"車輛左轉","Vehicle turn right":"車輛右轉","Vehicle reset":"車輛重置","Vehicle cockpit camera":"車輛座艙攝影機","Hide UI":"隱藏使用者介面","Editor rotate part":"編輯器旋轉零件","Editor height modifier":"編輯器高度修改器","Editor delete part":"編輯器刪除零件","Editor forwards":"編輯器前進","Editor backwards":"編輯器後退","Editor left":"編輯器向左","Editor right":"編輯器向右","Editor rotate left":"向左旋轉編輯器","Editor rotate right":"向右旋轉編輯器","Editor move down":"向下移動編輯器","Editor move up":"向上移動編輯器","Editor test":"編輯器測試","Editor pick":"編輯器選擇","Toggle FPS counter":"切換 FPS 計數器","Toggle spectator camera":"切換旁觀攝影機","Spectator forwards":"旁觀前進","Spectator backwards":"旁觀後退","Spectator left":"旁觀向左","Spectator right":"旁觀向右","Spectator speed modifier":"旁觀速度調整器","Press any key...\n\nPress [Escape] to cancel.":"按下任意鍵...\n\n按 [Escape] 取消。",Clear:"清除","New record":"新紀錄",Record:"紀錄",Current:"目前",Difference:"差異",Copy:"複製",Import:"匯入","Failed to import track":"匯入賽道失敗",'The track "{0}" already exists. Do you wish to overwrite it?':'賽道 "{0}" 已存在。您要覆蓋它嗎?',Overwrite:"覆蓋","Paste track data here...":"在此粘貼賽道數據...",Rank:"排名","No record":"無紀錄","Standard tracks":"標準賽道","Custom tracks":"自訂賽道",'Are you sure you want to delete "{0}"?':'您確定要刪除 "{0}" 嗎?',Delete:"刪除"};var II,NI,DI,UI,BI,OI=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)},zI=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n};NI=new WeakMap,DI=new WeakMap,UI=new WeakMap,II=new WeakSet,BI=function(e){const t=OI(this,UI,"f").get(e);return null!=t?t:yI};const FI=class{constructor(e){II.add(this),NI.set(this,!1),DI.set(this,void 0),UI.set(this,new Map([["ar",vI],["de-DE",wI],["es-ES",bI],["fr-FR",xI],["it-IT",_I],["ja-JP",kI],["ko-KR",EI],["pl-PL",SI],["pt-BR",MI],["pt-PT",TI],["ru-RU",AI],["tr-TR",CI],["uk-UA",PI],["zh-CN",RI],["zh-TW",LI]])),zI(this,DI,OI(this,II,"m",BI).call(this,e),"f")}set language(e){zI(this,DI,OI(this,II,"m",BI).call(this,e),"f")}get(e,t){let n;return n=OI(this,NI,"f")?"###":e in OI(this,DI,"f")?OI(this,DI,"f")[e]:e,null!=t&&t.forEach(((e,t)=>{n=n.replace(new RegExp("\\{"+t+"\\}","g"),e)})),n}};var WI=n(465),HI={};HI.styleTagTransform=u(),HI.setAttributes=l(),HI.insert=o().bind(null,"head"),HI.domAPI=r(),HI.insertStyleElement=h();t()(WI.A,HI);WI.A&&WI.A.locals&&WI.A.locals;var VI,GI,jI,qI,XI,YI,KI=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},ZI=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};VI=new WeakMap,GI=new WeakMap,jI=new WeakMap,qI=new WeakMap,XI=new WeakMap,YI=new WeakMap;const JI=class{constructor(){VI.set(this,void 0),GI.set(this,void 0),jI.set(this,void 0),qI.set(this,void 0),XI.set(this,void 0),YI.set(this,void 0),KI(this,VI,document.getElementById("ui"),"f"),KI(this,GI,document.createElement("div"),"f"),ZI(this,GI,"f").className="input-visualizer",ZI(this,VI,"f").appendChild(ZI(this,GI,"f")),KI(this,jI,document.createElement("div"),"f"),ZI(this,jI,"f").className="arrow-up",ZI(this,jI,"f").innerHTML='',ZI(this,GI,"f").appendChild(ZI(this,jI,"f")),KI(this,qI,document.createElement("div"),"f"),ZI(this,qI,"f").className="arrow-right",ZI(this,qI,"f").innerHTML='',ZI(this,GI,"f").appendChild(ZI(this,qI,"f")),KI(this,XI,document.createElement("div"),"f"),ZI(this,XI,"f").className="arrow-down",ZI(this,XI,"f").innerHTML='',ZI(this,GI,"f").appendChild(ZI(this,XI,"f")),KI(this,YI,document.createElement("div"),"f"),ZI(this,YI,"f").className="arrow-left",ZI(this,YI,"f").innerHTML='',ZI(this,GI,"f").appendChild(ZI(this,YI,"f"))}dispose(){ZI(this,VI,"f").removeChild(ZI(this,GI,"f"))}update(e){ZI(this,jI,"f").className=e.up?"active arrow-up":"arrow-up",ZI(this,qI,"f").className=e.right?"active arrow-right":"arrow-right",ZI(this,XI,"f").className=e.down?"active arrow-down":"arrow-down",ZI(this,YI,"f").className=e.left?"active arrow-left":"arrow-left"}};var QI=n(543),$I={};$I.styleTagTransform=u(),$I.setAttributes=l(),$I.insert=o().bind(null,"head"),$I.domAPI=r(),$I.insertStyleElement=h();t()(QI.A,$I);QI.A&&QI.A.locals&&QI.A.locals;var eN,tN,nN,iN,rN,aN,oN,sN,lN,cN,hN,dN,uN,pN,fN,mN,gN=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},vN=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};tN=new WeakMap,nN=new WeakMap,iN=new WeakMap,rN=new WeakMap,aN=new WeakMap,oN=new WeakMap,sN=new WeakMap,lN=new WeakMap,cN=new WeakMap,hN=new WeakMap,dN=new WeakMap,uN=new WeakMap,pN=new WeakMap,eN=new WeakSet,fN=function(e){const t=vN(this,aN,"f").getBoundingClientRect(),n=(e.clientX-t.left)/(t.width-8),i=new rp(Math.max(0,Math.floor(n*vN(this,hN,"f").time*1e3)));vN(this,nN,"f").call(this,i)},mN=function(){vN(this,cN,"f")?vN(this,rN,"f").innerHTML='':vN(this,lN,"f")?vN(this,rN,"f").innerHTML='':vN(this,rN,"f").innerHTML=''};const wN=class{constructor(e,t,n,i){eN.add(this),tN.set(this,void 0),nN.set(this,void 0),iN.set(this,void 0),rN.set(this,void 0),aN.set(this,void 0),oN.set(this,void 0),sN.set(this,void 0),lN.set(this,void 0),cN.set(this,!1),hN.set(this,void 0),dN.set(this,!1),uN.set(this,void 0),pN.set(this,void 0),gN(this,lN,i,"f"),gN(this,tN,document.getElementById("ui"),"f"),gN(this,nN,n,"f"),gN(this,hN,t,"f"),gN(this,iN,document.createElement("div"),"f"),vN(this,iN,"f").className="time-bar",vN(this,tN,"f").appendChild(vN(this,iN,"f")),gN(this,rN,document.createElement("button"),"f"),vN(this,rN,"f").className="button",vN(this,rN,"f").addEventListener("click",(()=>{e.playUIClick(),vN(this,cN,"f")?(vN(this,nN,"f").call(this,new rp(0)),this.isPaused=!1):this.isPaused=!this.isPaused})),vN(this,iN,"f").appendChild(vN(this,rN,"f")),vN(this,eN,"m",mN).call(this),gN(this,aN,document.createElement("div"),"f"),vN(this,aN,"f").className="bar",vN(this,aN,"f").addEventListener("pointerdown",(e=>{gN(this,dN,!0,"f"),vN(this,eN,"m",fN).call(this,e)})),window.addEventListener("pointermove",gN(this,uN,(e=>{vN(this,dN,"f")&&vN(this,eN,"m",fN).call(this,e)}),"f")),window.addEventListener("pointerup",gN(this,pN,(e=>{vN(this,dN,"f")&&(gN(this,dN,!1,"f"),vN(this,eN,"m",fN).call(this,e))}),"f")),vN(this,iN,"f").appendChild(vN(this,aN,"f"));const r=document.createElement("div");if(vN(this,aN,"f").appendChild(r),gN(this,oN,document.createElement("div"),"f"),vN(this,oN,"f").className="unloaded-fill",r.appendChild(vN(this,oN,"f")),gN(this,sN,document.createElement("div"),"f"),vN(this,sN,"f").className="fill",r.appendChild(vN(this,sN,"f")),vN(this,hN,"f").time<1e4){let e,t;vN(this,hN,"f").time>2e3?(e=60,t=600):vN(this,hN,"f").time>200?(e=10,t=60):(e=1,t=10);for(let n=e;n=vN(this,hN,"f").numberOfFrames,vN(this,sN,"f").style.width="calc(8px + "+e.numberOfFrames/vN(this,hN,"f").numberOfFrames*100+"%)",0==e.numberOfFrames?vN(this,sN,"f").style.visibility="hidden":vN(this,sN,"f").style.visibility="visible"),vN(this,cN,"f")!=t&&(gN(this,cN,t,"f"),vN(this,eN,"m",mN).call(this))}set loadedTime(e){null==vN(this,hN,"f")?vN(this,oN,"f").style.visibility="hidden":(vN(this,oN,"f").style.width="calc(8px + "+100*(1-e.numberOfFrames/vN(this,hN,"f").numberOfFrames)+"%)",e.numberOfFrames>=vN(this,hN,"f").numberOfFrames?vN(this,oN,"f").style.visibility="hidden":vN(this,oN,"f").style.visibility="visible")}};var yN=n(768),bN={};bN.styleTagTransform=u(),bN.setAttributes=l(),bN.insert=o().bind(null,"head"),bN.domAPI=r(),bN.insertStyleElement=h();t()(yN.A,bN);yN.A&&yN.A.locals&&yN.A.locals;var xN,_N,kN=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},EN=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};xN=new WeakMap,_N=new WeakMap;const SN=class{constructor(e,t,n){xN.set(this,void 0),_N.set(this,void 0),kN(this,xN,document.getElementById("ui"),"f"),kN(this,_N,document.createElement("div"),"f"),EN(this,_N,"f").className="preview-toolbar";const i=document.createElement("button");i.className="button",i.innerHTML=' ',i.append(document.createTextNode(t.get("Exit"))),i.addEventListener("click",(()=>{e.playUIClick(),n()})),EN(this,_N,"f").appendChild(i),EN(this,xN,"f").appendChild(EN(this,_N,"f"))}dispose(){EN(this,xN,"f").removeChild(EN(this,_N,"f"))}};var MN,TN,AN,CN,PN,RN,LN,IN,NN,DN,UN,BN,ON,zN,FN,WN,HN,VN,GN,jN,qN,XN,YN,KN,ZN,JN,QN,$N=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},eD=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};TN=new WeakMap,AN=new WeakMap,CN=new WeakMap,PN=new WeakMap,RN=new WeakMap,LN=new WeakMap,IN=new WeakMap,NN=new WeakMap,DN=new WeakMap,UN=new WeakMap,BN=new WeakMap,ON=new WeakMap,zN=new WeakMap,FN=new WeakMap,WN=new WeakMap,HN=new WeakMap,VN=new WeakMap,GN=new WeakMap,jN=new WeakMap,qN=new WeakMap,XN=new WeakMap,YN=new WeakMap,KN=new WeakMap,ZN=new WeakMap,MN=new WeakSet,JN=function(e){var t,n,i,r,a;e?($N(this,GN,new wN(eD(this,RN,"f"),eD(this,NN,"f").time,(e=>{var t,n,i;$N(this,FN,Math.max(0,Math.min(eD(this,WN,"f"),e.time)),"f");const r=Math.round(1e3*eD(this,FN,"f"));eD(this,MN,"m",QN).call(this,r),eD(this,ON,"f").update(0),null!=eD(this,GN,"f")&&(eD(this,GN,"f").time=new rp(r)),null===(t=eD(this,qN,"f"))||void 0===t||t.update(eD(this,ON,"f").getControls()),null===(n=eD(this,XN,"f"))||void 0===n||n.update(eD(this,ON,"f")),null===(i=eD(this,YN,"f"))||void 0===i||i.update(eD(this,ON,"f"))}),eD(this,zN,"f")),"f"),$N(this,jN,new SN(eD(this,RN,"f"),eD(this,LN,"f"),eD(this,DN,"f")),"f"),$N(this,qN,new JI,"f"),$N(this,XN,new AE(eD(this,IN,"f")),"f"),eD(this,XN,"f").setOverridePosition(!1),$N(this,YN,new sx(eD(this,LN,"f"),eD(this,IN,"f"),null,!0),"f"),eD(this,YN,"f").setOverridePosition(!1)):(null===(t=eD(this,GN,"f"))||void 0===t||t.dispose(),$N(this,GN,null,"f"),null===(n=eD(this,jN,"f"))||void 0===n||n.dispose(),$N(this,jN,null,"f"),null===(i=eD(this,qN,"f"))||void 0===i||i.dispose(),$N(this,qN,null,"f"),null===(r=eD(this,XN,"f"))||void 0===r||r.dispose(),$N(this,XN,null,"f"),null===(a=eD(this,YN,"f"))||void 0===a||a.dispose(),$N(this,YN,null,"f"))},QN=function(e){if(eD(this,ON,"f").getTotalTime().numberOfFrames!=e){const t=eD(this,UN,"f").getFrame(e);null!=t&&eD(this,ON,"f").setCarState(t)}};const tD=class{constructor(e,t,n,i,r,a,o,s,l,c){MN.add(this),TN.set(this,void 0),AN.set(this,void 0),CN.set(this,void 0),PN.set(this,void 0),RN.set(this,void 0),LN.set(this,void 0),IN.set(this,void 0),NN.set(this,void 0),DN.set(this,void 0),UN.set(this,void 0),BN.set(this,null),ON.set(this,void 0),zN.set(this,!1),FN.set(this,0),WN.set(this,0),HN.set(this,void 0),VN.set(this,!0),GN.set(this,void 0),jN.set(this,void 0),qN.set(this,void 0),XN.set(this,void 0),YN.set(this,void 0),KN.set(this,void 0),ZN.set(this,void 0),$N(this,TN,e,"f"),$N(this,AN,t,"f"),$N(this,CN,i,"f"),$N(this,PN,r,"f"),$N(this,RN,a,"f"),$N(this,LN,o,"f"),$N(this,IN,s,"f"),$N(this,NN,l,"f"),$N(this,DN,c,"f"),t.loadTrackData(n),t.generateMeshes(),i.generateMountains(t.getBounds());const h=t.getStartTransform();if(null==h)throw"Track has no starting point";$N(this,UN,new NS,"f");const d=e.createCar(h,eD(this,CN,"f").getMountainVertices(),eD(this,CN,"f").getMountainOffset(),eD(this,AN,"f").getTrackData(),l.recording,(t=>{eD(this,UN,"f").push(t),null!=eD(this,BN,"f")&&t.totalFrames>=l.time.numberOfFrames&&(e.deleteCar(eD(this,BN,"f")),$N(this,BN,null,"f"))}));eD(this,UN,"f").push(d),e.startCar(d.id,l.time),$N(this,BN,d.id,"f"),$N(this,WN,l.time.time,"f"),$N(this,ON,new Uv(null,h,l.recording,null,!0,r,a,i,t,s),"f"),eD(this,ON,"f").setColors(l.carColors),r.setCamera(eD(this,ON,"f").cameraOrbit),$N(this,HN,new pS(s),"f"),eD(this,HN,"f").addToggleListener((e=>{e?r.setCamera(eD(this,HN,"f").camera):null!=eD(this,ON,"f")&&r.setCamera(eD(this,ON,"f").cameraOrbit)})),eD(this,MN,"m",JN).call(this,!0),window.addEventListener("keydown",$N(this,KN,(e=>{if(eD(this,HN,"f").enabled||("Escape"==e.code?(c(),e.preventDefault()):s.checkKeyBinding(e,Lb.VehicleReset)?($N(this,FN,0,"f"),e.preventDefault()):eD(this,IN,"f").checkKeyBinding(e,Lb.VehicleCockpitCamera)&&(e.repeat||null==eD(this,ON,"f")||eD(this,ON,"f").hasFinished()||(eD(this,IN,"f").getSettingBoolean(Jh.CockpitCameraToggle)?eD(this,PN,"f").camera==eD(this,ON,"f").cameraOrbit?eD(this,PN,"f").setCamera(eD(this,ON,"f").cameraCockpit):eD(this,PN,"f").setCamera(eD(this,ON,"f").cameraOrbit):eD(this,PN,"f").setCamera(eD(this,ON,"f").cameraCockpit)),e.preventDefault())),s.checkKeyBinding(e,Lb.ToggleUI)&&($N(this,VN,!eD(this,VN,"f"),"f"),eD(this,MN,"m",JN).call(this,eD(this,VN,"f")),e.preventDefault()),s.checkKeyBinding(e,Lb.ToggleSpectatorCamera)){eD(this,HN,"f").camera.position.copy(eD(this,PN,"f").camera.position);const t=new _i(0,0,0,"YXZ").setFromQuaternion(eD(this,PN,"f").camera.quaternion);t.z=0,eD(this,HN,"f").camera.quaternion.setFromEuler(t),eD(this,HN,"f").toggle(),e.preventDefault()}"Space"==e.code&&($N(this,zN,!eD(this,zN,"f"),"f"),null!=eD(this,GN,"f")&&(eD(this,GN,"f").isPaused=eD(this,zN,"f")),e.preventDefault())}),"f")),window.addEventListener("keyup",$N(this,ZN,(e=>{eD(this,HN,"f").enabled||eD(this,IN,"f").checkKeyBinding(e,Lb.VehicleCockpitCamera)&&(eD(this,ON,"f").hasFinished()||eD(this,IN,"f").getSettingBoolean(Jh.CockpitCameraToggle)||eD(this,PN,"f").setCamera(eD(this,ON,"f").cameraOrbit))}),"f"))}dispose(){eD(this,AN,"f").clear(),eD(this,CN,"f").clearMountains(),null!=eD(this,BN,"f")&&(eD(this,TN,"f").deleteCar(eD(this,BN,"f")),$N(this,BN,null,"f")),eD(this,ON,"f").dispose(),eD(this,HN,"f").dispose(),eD(this,MN,"m",JN).call(this,!1),window.removeEventListener("keydown",eD(this,KN,"f")),window.removeEventListener("keyup",eD(this,ZN,"f"))}update(e){var t,n,i,r,a;null!=eD(this,GN,"f")&&$N(this,zN,eD(this,GN,"f").isPaused,"f");const o=eD(this,UN,"f").getLastFrame();let s;if(eD(this,zN,"f")||(null===(t=eD(this,GN,"f"))||void 0===t?void 0:t.isDragging))s=0,eD(this,ON,"f").audioVolume=0;else{const t=Math.min(eD(this,WN,"f"),eD(this,FN,"f")+e);o.time>=t?($N(this,FN,t,"f"),eD(this,FN,"f")==eD(this,WN,"f")&&(null!=eD(this,GN,"f")&&(eD(this,GN,"f").isPaused=!0),$N(this,zN,!0,"f")),s=e,eD(this,ON,"f").audioVolume=1):(s=0,eD(this,ON,"f").audioVolume=0)}const l=Math.round(1e3*eD(this,FN,"f")),c=Math.min(l,eD(this,UN,"f").getLastFrame().numberOfFrames);if((null===(n=eD(this,GN,"f"))||void 0===n?void 0:n.isDragging)||ceD(this,ON,"f").getTotalTime().numberOfFrames+1e3)eD(this,MN,"m",QN).call(this,c);else{for(let e=eD(this,ON,"f").getTotalTime().numberOfFrames+1;e<=c;e++)eD(this,MN,"m",QN).call(this,e)}null!=eD(this,GN,"f")&&(eD(this,GN,"f").time=eD(this,ON,"f").getTotalTime(),eD(this,GN,"f").loadedTime=o),null===(i=eD(this,qN,"f"))||void 0===i||i.update(eD(this,ON,"f").getControls()),null===(r=eD(this,XN,"f"))||void 0===r||r.update(eD(this,ON,"f")),null===(a=eD(this,YN,"f"))||void 0===a||a.update(eD(this,ON,"f")),eD(this,ON,"f").update(s),eD(this,HN,"f").update(e),eD(this,PN,"f").update(eD(this,ON,"f").getPosition()),eD(this,RN,"f").update(e,!1,eD(this,PN,"f"),eD(this,IN,"f"))}};var nD,iD,rD=function(e,t,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,n):r?r.value=n:t.set(e,n),n},aD=function(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)};nD=new WeakMap,iD=new WeakMap;const oD=class{constructor(){nD.set(this,!1),iD.set(this,[]),window.addEventListener("touchstart",(()=>{rD(this,nD,!0,"f"),aD(this,iD,"f").forEach((e=>e(aD(this,nD,"f"))))})),window.addEventListener("keydown",(()=>{rD(this,nD,!1,"f"),aD(this,iD,"f").forEach((e=>e(aD(this,nD,"f"))))}))}get touchEnabled(){return aD(this,nD,"f")}addChangeListener(e){aD(this,iD,"f").push(e),e(aD(this,nD,"f"))}removeChangeListener(e){const t=aD(this,iD,"f").indexOf(e);t>=0&&aD(this,iD,"f").splice(t,1)}};var sD=function(e,t,n,i){return new(n||(n=Promise))((function(r,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function s(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}l((i=i.apply(e,t||[])).next())}))};function lD(){try{window.CrazyGames?window.CrazyGames.SDK.game.gameplayStart():window.PokiSDK&&window.PokiSDK.gameplayStart()}catch(e){console.error(e)}}function cD(){try{window.CrazyGames?window.CrazyGames.SDK.game.gameplayStop():window.PokiSDK&&window.PokiSDK.gameplayStop()}catch(e){console.error(e)}}function hD(){try{window.CrazyGames?window.CrazyGames.SDK.game.loadingStart():window.PokiSDK}catch(e){console.error(e)}}function dD(){try{window.CrazyGames?window.CrazyGames.SDK.game.loadingStop():window.PokiSDK}catch(e){console.error(e)}}function uD(e){return new Promise(((t,n)=>{try{window.CrazyGames?window.CrazyGames.SDK.ad.requestAd("midgame",{adFinished:t,adError:n,adStarted:e}):window.PokiSDK?window.PokiSDK.commercialBreak().then(t).catch(n):t()}catch(e){n(e)}}))} -/** - * @license - * Copyright 2024 Kodub.com - */ -bn.enabled=!1,function(){const e=new AP;e.addResource(),function(){return sD(this,void 0,void 0,(function*(){try{window.CrazyGames?yield window.CrazyGames.SDK.init():window.PokiSDK&&(yield window.PokiSDK.init())}catch(e){console.error(e)}}))}().then((()=>{e.loadedResource()})),e.addCompleteListener((()=>{!function(){try{window.CrazyGames?window.CrazyGames.SDK.game.loadingStop():window.PokiSDK&&window.PokiSDK.gameLoadingFinished()}catch(e){console.error(e)}}()})),e.preloadImage("images/apply.svg"),e.preloadImage("images/arrow_down.svg"),e.preloadImage("images/arrow_left.svg"),e.preloadImage("images/arrow_right.svg"),e.preloadImage("images/arrow_up.svg"),e.preloadImage("images/back.svg"),e.preloadImage("images/cancel.svg"),e.preloadImage("images/car_stripe.svg"),e.preloadImage("images/checkpoint.svg"),e.preloadImage("images/clouds.jpg"),e.preloadImage("images/copy.svg"),e.preloadImage("images/customize.svg"),e.preloadImage("images/delete.svg"),e.preloadImage("images/discord.svg"),e.preloadImage("images/editor.svg"),e.preloadImage("images/erase.svg"),e.preloadImage("images/export.svg"),e.preloadImage("images/helmet.svg"),e.preloadImage("images/help.svg"),e.preloadImage("images/icon.svg"),e.preloadImage("images/import.svg"),e.preloadImage("images/load.svg"),e.preloadImage("images/logo.svg"),e.preloadImage("images/pause.svg"),e.preloadImage("images/pin.svg"),e.preloadImage("images/play.svg"),e.preloadImage("images/preview.svg"),e.preloadImage("images/quit.svg"),e.preloadImage("images/random.svg"),e.preloadImage("images/reset_settings.svg"),e.preloadImage("images/reset.svg"),e.preloadImage("images/rotate.svg"),e.preloadImage("images/save.svg"),e.preloadImage("images/settings.svg"),e.preloadImage("images/smoke.png"),e.preloadImage("images/state_invalid.svg"),e.preloadImage("images/state_pending.svg"),e.preloadImage("images/state_verified.svg"),e.preloadImage("images/test.svg"),e.preloadImage("images/verified.svg");const t=new sR,n=new iL,i=new hd(e);i.load("music",["audio/music.mp3","audio/music.flac"]),i.load("click",["audio/click.flac"]),i.load("engine",["audio/engine.flac"]),i.load("suspension",["audio/suspension.flac"]),i.load("tires",["audio/tires.flac"]),i.load("collision",["audio/collision.flac"]),i.load("skidding",["audio/skidding.flac"]),i.load("editor_edit",["audio/editor_edit.flac"]),i.load("checkpoint",["audio/checkpoint.flac"]),i.load("finish",["audio/checkpoint.flac"]),Ou.initResources(e),Uv.initResources(e),rb.initResources(e);const r=new rR(e),a=new qR;a.migrate(r),e.addResource();const o=new PL(r,e),s=new PL(r,e);o.testDeterminism().then((t=>{d.submitAllowed=t,e.loadedResource()}));const l=new wL(a),c=new FI(l.getSetting(Jh.Language)),h=new ER(a),d=new hL(h);h.syncUserProfile(d);const u=new OP(a,d,h),p=document.getElementById("screen"),f=new HM(p,l),m=new uR(f,l,e),g=new iT(f),v=new Ky(f,l,r),w=new YP(e,r,a),y=new ny,b=new xP(i),x=new oD,_=()=>{t.trigger((()=>{cD(),hD(),A.dispose(),A=new sP(o,v,r,g,w,c,b,h,u,f,i,a,l,d,e,k,E,S,M,T),dD()}))},k=()=>{t.trigger((()=>{cD(),hD(),A.dispose(),A=new Xw(o,c,v,g,f,i,h,l,d,_),dD()}))},E=()=>{t.trigger((()=>{hD(),A.dispose();const p=A=new Gk(v,r,c,i,f,l,t,h,u,a,w,b,x,(()=>{A.dispose(),A=new sP(o,v,r,g,w,c,b,h,u,f,i,a,l,d,e,k,E,S,M,T)}),((e,t,r)=>{const a=A=new PM(o,s,v,g,c,f,i,h,l,n,x,e,t,{recording:null,carColors:null,name:null,time:null,isSelf:!0},null,(()=>{}),(()=>{a.dispose(!1),A=p,r()}))}));return dD(),lD(),p.isPaused=!0,uD((()=>{i.mute()})).finally((()=>{i.unmute(),p.isPaused=!1}))}))},S=(e,a,d)=>{t.trigger((()=>{hD(),A.dispose();const t=h.profileSlot,p=u.getRecordTime(t,a.getId(r)),m=A=new PM(o,s,v,g,c,f,i,h,l,n,x,e,a,d,p,((e,n,i,r)=>{if(null!=e){const a=u.getRecordTime(t,e);(null==a||i.lessThan(a))&&u.setRecord(t,e,i,n,r)}}),_);return dD(),lD(),m.isPaused=!0,uD((()=>{i.mute()})).finally((()=>{i.unmute(),m.isPaused=!1}))}))},M=(e,n)=>{t.trigger((()=>{hD(),A.dispose(),A=new tD(o,v,e,g,f,i,c,l,n,_),dD(),lD()}))},T=n=>{t.trigger((()=>{hD(),A.dispose(),A=new gI(i,f,d,w,r,l,e,n,_),dD(),lD()}))};let A=new sP(o,v,r,g,w,c,b,h,u,f,i,a,l,d,e,k,E,S,M,T),C=0;f.setAnimationLoop((function(e){const t=Math.max(e-C,0)/1e3;C=e,A.update(t),m.update(t,f.camera),g.update(),y.update(t)})),window.addEventListener("keyup",(function(e){l.checkKeyBinding(e,Lb.ToggleFpsCounter)&&y.toggle()}))}()})()})(); \ No newline at end of file +(() => { + var e = { + 77: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/rotation_axis_x_positive.svg" + }, + 493: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/empty.svg" + }, + 516: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/arrow_down.svg" + }, + 540: e => { + "use strict"; + e.exports = function(e) { + var t = document.createElement("style"); + return e.setAttributes(t, e.attributes), e.insert(t, e.options), t + } + }, + 813: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/winter.svg" + }, + 853: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/icon.svg" + }, + 858: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/discord.svg" + }, + 1113: e => { + "use strict"; + e.exports = function(e, t) { + if (t.styleSheet) t.styleSheet.cssText = e; + else { + for (; t.firstChild;) t.removeChild(t.firstChild); + t.appendChild(document.createTextNode(e)) + } + } + }, + 1312: (e, t, n) => { + var i; + /** + * [js-sha256]{@link https://github.com/emn178/js-sha256} + * + * @version 0.11.0 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2024 + * @license MIT + */ + ! function() { + "use strict"; + var t = "input is invalid type", + r = "object" == typeof window, + a = r ? window : {}; + a.JS_SHA256_NO_WINDOW && (r = !1); + var s = !r && "object" == typeof self, + o = !a.JS_SHA256_NO_NODE_JS && "object" == typeof process && process.versions && process.versions.node; + o ? a = n.g : s && (a = self); + var l = !a.JS_SHA256_NO_COMMON_JS && e.exports, + c = n.amdO, + h = !a.JS_SHA256_NO_ARRAY_BUFFER && "undefined" != typeof ArrayBuffer, + d = "0123456789abcdef".split(""), + u = [-2147483648, 8388608, 32768, 128], + p = [24, 16, 8, 0], + f = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298], + m = ["hex", "array", "digest", "arrayBuffer"], + g = []; + !a.JS_SHA256_NO_NODE_JS && Array.isArray || (Array.isArray = function(e) { + return "[object Array]" === Object.prototype.toString.call(e) + }), !h || !a.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW && ArrayBuffer.isView || (ArrayBuffer.isView = function(e) { + return "object" == typeof e && e.buffer && e.buffer.constructor === ArrayBuffer + }); + var v = function(e, t) { + return function(n) { + return new x(t, !0).update(n)[e]() + } + }, + w = function(e) { + var t = v("hex", e); + o && (t = y(t, e)), t.create = function() { + return new x(e) + }, t.update = function(e) { + return t.create().update(e) + }; + for (var n = 0; n < m.length; ++n) { + var i = m[n]; + t[i] = v(i, e) + } + return t + }, + y = function(e, i) { + var r, s = n(4394), + o = n(1903).Buffer, + l = i ? "sha224" : "sha256"; + r = o.from && !a.JS_SHA256_NO_BUFFER_FROM ? o.from : function(e) { + return new o(e) + }; + return function(n) { + if ("string" == typeof n) return s.createHash(l).update(n, "utf8").digest("hex"); + if (null == n) throw new Error(t); + return n.constructor === ArrayBuffer && (n = new Uint8Array(n)), Array.isArray(n) || ArrayBuffer.isView(n) || n.constructor === o ? s.createHash(l).update(r(n)).digest("hex") : e(n) + } + }, + A = function(e, t) { + return function(n, i) { + return new k(n, t, !0).update(i)[e]() + } + }, + b = function(e) { + var t = A("hex", e); + t.create = function(t) { + return new k(t, e) + }, t.update = function(e, n) { + return t.create(e).update(n) + }; + for (var n = 0; n < m.length; ++n) { + var i = m[n]; + t[i] = A(i, e) + } + return t + }; + + function x(e, t) { + t ? (g[0] = g[16] = g[1] = g[2] = g[3] = g[4] = g[5] = g[6] = g[7] = g[8] = g[9] = g[10] = g[11] = g[12] = g[13] = g[14] = g[15] = 0, this.blocks = g) : this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], e ? (this.h0 = 3238371032, this.h1 = 914150663, this.h2 = 812702999, this.h3 = 4144912697, this.h4 = 4290775857, this.h5 = 1750603025, this.h6 = 1694076839, this.h7 = 3204075428) : (this.h0 = 1779033703, this.h1 = 3144134277, this.h2 = 1013904242, this.h3 = 2773480762, this.h4 = 1359893119, this.h5 = 2600822924, this.h6 = 528734635, this.h7 = 1541459225), this.block = this.start = this.bytes = this.hBytes = 0, this.finalized = this.hashed = !1, this.first = !0, this.is224 = e + } + + function k(e, n, i) { + var r, a = typeof e; + if ("string" === a) { + var s, o = [], + l = e.length, + c = 0; + for (r = 0; r < l; ++r)(s = e.charCodeAt(r)) < 128 ? o[c++] = s : s < 2048 ? (o[c++] = 192 | s >>> 6, o[c++] = 128 | 63 & s) : s < 55296 || s >= 57344 ? (o[c++] = 224 | s >>> 12, o[c++] = 128 | s >>> 6 & 63, o[c++] = 128 | 63 & s) : (s = 65536 + ((1023 & s) << 10 | 1023 & e.charCodeAt(++r)), o[c++] = 240 | s >>> 18, o[c++] = 128 | s >>> 12 & 63, o[c++] = 128 | s >>> 6 & 63, o[c++] = 128 | 63 & s); + e = o + } else { + if ("object" !== a) throw new Error(t); + if (null === e) throw new Error(t); + if (h && e.constructor === ArrayBuffer) e = new Uint8Array(e); + else if (!(Array.isArray(e) || h && ArrayBuffer.isView(e))) throw new Error(t) + } + e.length > 64 && (e = new x(n, !0).update(e).array()); + var d = [], + u = []; + for (r = 0; r < 64; ++r) { + var p = e[r] || 0; + d[r] = 92 ^ p, u[r] = 54 ^ p + } + x.call(this, n, i), this.update(u), this.oKeyPad = d, this.inner = !0, this.sharedMemory = i + } + x.prototype.update = function(e) { + if (!this.finalized) { + var n, i = typeof e; + if ("string" !== i) { + if ("object" !== i) throw new Error(t); + if (null === e) throw new Error(t); + if (h && e.constructor === ArrayBuffer) e = new Uint8Array(e); + else if (!(Array.isArray(e) || h && ArrayBuffer.isView(e))) throw new Error(t); + n = !0 + } + for (var r, a, s = 0, o = e.length, l = this.blocks; s < o;) { + if (this.hashed && (this.hashed = !1, l[0] = this.block, this.block = l[16] = l[1] = l[2] = l[3] = l[4] = l[5] = l[6] = l[7] = l[8] = l[9] = l[10] = l[11] = l[12] = l[13] = l[14] = l[15] = 0), n) + for (a = this.start; s < o && a < 64; ++s) l[a >>> 2] |= e[s] << p[3 & a++]; + else + for (a = this.start; s < o && a < 64; ++s)(r = e.charCodeAt(s)) < 128 ? l[a >>> 2] |= r << p[3 & a++] : r < 2048 ? (l[a >>> 2] |= (192 | r >>> 6) << p[3 & a++], l[a >>> 2] |= (128 | 63 & r) << p[3 & a++]) : r < 55296 || r >= 57344 ? (l[a >>> 2] |= (224 | r >>> 12) << p[3 & a++], l[a >>> 2] |= (128 | r >>> 6 & 63) << p[3 & a++], l[a >>> 2] |= (128 | 63 & r) << p[3 & a++]) : (r = 65536 + ((1023 & r) << 10 | 1023 & e.charCodeAt(++s)), l[a >>> 2] |= (240 | r >>> 18) << p[3 & a++], l[a >>> 2] |= (128 | r >>> 12 & 63) << p[3 & a++], l[a >>> 2] |= (128 | r >>> 6 & 63) << p[3 & a++], l[a >>> 2] |= (128 | 63 & r) << p[3 & a++]); + this.lastByteIndex = a, this.bytes += a - this.start, a >= 64 ? (this.block = l[16], this.start = a - 64, this.hash(), this.hashed = !0) : this.start = a + } + return this.bytes > 4294967295 && (this.hBytes += this.bytes / 4294967296 | 0, this.bytes = this.bytes % 4294967296), this + } + }, x.prototype.finalize = function() { + if (!this.finalized) { + this.finalized = !0; + var e = this.blocks, + t = this.lastByteIndex; + e[16] = this.block, e[t >>> 2] |= u[3 & t], this.block = e[16], t >= 56 && (this.hashed || this.hash(), e[0] = this.block, e[16] = e[1] = e[2] = e[3] = e[4] = e[5] = e[6] = e[7] = e[8] = e[9] = e[10] = e[11] = e[12] = e[13] = e[14] = e[15] = 0), e[14] = this.hBytes << 3 | this.bytes >>> 29, e[15] = this.bytes << 3, this.hash() + } + }, x.prototype.hash = function() { + var e, t, n, i, r, a, s, o, l, c = this.h0, + h = this.h1, + d = this.h2, + u = this.h3, + p = this.h4, + m = this.h5, + g = this.h6, + v = this.h7, + w = this.blocks; + for (e = 16; e < 64; ++e) t = ((r = w[e - 15]) >>> 7 | r << 25) ^ (r >>> 18 | r << 14) ^ r >>> 3, n = ((r = w[e - 2]) >>> 17 | r << 15) ^ (r >>> 19 | r << 13) ^ r >>> 10, w[e] = w[e - 16] + t + w[e - 7] + n | 0; + for (l = h & d, e = 0; e < 64; e += 4) this.first ? (this.is224 ? (a = 300032, v = (r = w[0] - 1413257819) - 150054599 | 0, u = r + 24177077 | 0) : (a = 704751109, v = (r = w[0] - 210244248) - 1521486534 | 0, u = r + 143694565 | 0), this.first = !1) : (t = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10), i = (a = c & h) ^ c & d ^ l, v = u + (r = v + (n = (p >>> 6 | p << 26) ^ (p >>> 11 | p << 21) ^ (p >>> 25 | p << 7)) + (p & m ^ ~p & g) + f[e] + w[e]) | 0, u = r + (t + i) | 0), t = (u >>> 2 | u << 30) ^ (u >>> 13 | u << 19) ^ (u >>> 22 | u << 10), i = (s = u & c) ^ u & h ^ a, g = d + (r = g + (n = (v >>> 6 | v << 26) ^ (v >>> 11 | v << 21) ^ (v >>> 25 | v << 7)) + (v & p ^ ~v & m) + f[e + 1] + w[e + 1]) | 0, t = ((d = r + (t + i) | 0) >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10), i = (o = d & u) ^ d & c ^ s, m = h + (r = m + (n = (g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7)) + (g & v ^ ~g & p) + f[e + 2] + w[e + 2]) | 0, t = ((h = r + (t + i) | 0) >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10), i = (l = h & d) ^ h & u ^ o, p = c + (r = p + (n = (m >>> 6 | m << 26) ^ (m >>> 11 | m << 21) ^ (m >>> 25 | m << 7)) + (m & g ^ ~m & v) + f[e + 3] + w[e + 3]) | 0, c = r + (t + i) | 0, this.chromeBugWorkAround = !0; + this.h0 = this.h0 + c | 0, this.h1 = this.h1 + h | 0, this.h2 = this.h2 + d | 0, this.h3 = this.h3 + u | 0, this.h4 = this.h4 + p | 0, this.h5 = this.h5 + m | 0, this.h6 = this.h6 + g | 0, this.h7 = this.h7 + v | 0 + }, x.prototype.hex = function() { + this.finalize(); + var e = this.h0, + t = this.h1, + n = this.h2, + i = this.h3, + r = this.h4, + a = this.h5, + s = this.h6, + o = this.h7, + l = d[e >>> 28 & 15] + d[e >>> 24 & 15] + d[e >>> 20 & 15] + d[e >>> 16 & 15] + d[e >>> 12 & 15] + d[e >>> 8 & 15] + d[e >>> 4 & 15] + d[15 & e] + d[t >>> 28 & 15] + d[t >>> 24 & 15] + d[t >>> 20 & 15] + d[t >>> 16 & 15] + d[t >>> 12 & 15] + d[t >>> 8 & 15] + d[t >>> 4 & 15] + d[15 & t] + d[n >>> 28 & 15] + d[n >>> 24 & 15] + d[n >>> 20 & 15] + d[n >>> 16 & 15] + d[n >>> 12 & 15] + d[n >>> 8 & 15] + d[n >>> 4 & 15] + d[15 & n] + d[i >>> 28 & 15] + d[i >>> 24 & 15] + d[i >>> 20 & 15] + d[i >>> 16 & 15] + d[i >>> 12 & 15] + d[i >>> 8 & 15] + d[i >>> 4 & 15] + d[15 & i] + d[r >>> 28 & 15] + d[r >>> 24 & 15] + d[r >>> 20 & 15] + d[r >>> 16 & 15] + d[r >>> 12 & 15] + d[r >>> 8 & 15] + d[r >>> 4 & 15] + d[15 & r] + d[a >>> 28 & 15] + d[a >>> 24 & 15] + d[a >>> 20 & 15] + d[a >>> 16 & 15] + d[a >>> 12 & 15] + d[a >>> 8 & 15] + d[a >>> 4 & 15] + d[15 & a] + d[s >>> 28 & 15] + d[s >>> 24 & 15] + d[s >>> 20 & 15] + d[s >>> 16 & 15] + d[s >>> 12 & 15] + d[s >>> 8 & 15] + d[s >>> 4 & 15] + d[15 & s]; + return this.is224 || (l += d[o >>> 28 & 15] + d[o >>> 24 & 15] + d[o >>> 20 & 15] + d[o >>> 16 & 15] + d[o >>> 12 & 15] + d[o >>> 8 & 15] + d[o >>> 4 & 15] + d[15 & o]), l + }, x.prototype.toString = x.prototype.hex, x.prototype.digest = function() { + this.finalize(); + var e = this.h0, + t = this.h1, + n = this.h2, + i = this.h3, + r = this.h4, + a = this.h5, + s = this.h6, + o = this.h7, + l = [e >>> 24 & 255, e >>> 16 & 255, e >>> 8 & 255, 255 & e, t >>> 24 & 255, t >>> 16 & 255, t >>> 8 & 255, 255 & t, n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, 255 & n, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i, r >>> 24 & 255, r >>> 16 & 255, r >>> 8 & 255, 255 & r, a >>> 24 & 255, a >>> 16 & 255, a >>> 8 & 255, 255 & a, s >>> 24 & 255, s >>> 16 & 255, s >>> 8 & 255, 255 & s]; + return this.is224 || l.push(o >>> 24 & 255, o >>> 16 & 255, o >>> 8 & 255, 255 & o), l + }, x.prototype.array = x.prototype.digest, x.prototype.arrayBuffer = function() { + this.finalize(); + var e = new ArrayBuffer(this.is224 ? 28 : 32), + t = new DataView(e); + return t.setUint32(0, this.h0), t.setUint32(4, this.h1), t.setUint32(8, this.h2), t.setUint32(12, this.h3), t.setUint32(16, this.h4), t.setUint32(20, this.h5), t.setUint32(24, this.h6), this.is224 || t.setUint32(28, this.h7), e + }, k.prototype = new x, k.prototype.finalize = function() { + if (x.prototype.finalize.call(this), this.inner) { + this.inner = !1; + var e = this.array(); + x.call(this, this.is224, this.sharedMemory), this.update(this.oKeyPad), this.update(e), x.prototype.finalize.call(this) + } + }; + var E = w(); + E.sha256 = E, E.sha224 = w(!0), E.sha256.hmac = b(), E.sha224.hmac = b(!0), l ? e.exports = E : (a.sha256 = E.sha256, a.sha224 = E.sha224, c && (void 0 === (i = function() { + return E + }.call(E, n, E, e)) || (e.exports = i))) + }() + }, + 1333: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/helmet.svg" + }, + 1465: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.input-visualizer {\n position: absolute;\n left: 0;\n bottom: 64px;\n margin: 10px;\n padding: 0;\n --size: 96px;\n width: calc(var(--size) * 3);\n height: calc(var(--size) * 2);\n opacity: 0.9;\n}\n\n.input-visualizer > div {\n position: absolute;\n margin: 0;\n padding: 0;\n width: var(--size);\n height: var(--size);\n background-color: var(--surface-color);\n}\n\n.input-visualizer > .arrow-up {\n left: var(--size);\n top: 0;\n}\n\n.input-visualizer > .arrow-right {\n left: calc(var(--size) * 2);\n top: var(--size);\n}\n\n.input-visualizer > .arrow-down {\n left: var(--size);\n top: var(--size);\n}\n\n.input-visualizer > .arrow-left {\n left: 0;\n top: var(--size);\n}\n\n.input-visualizer > div.active {\n background-color: var(--surface-tertiary-color);\n}\n\n.input-visualizer > div > img {\n margin: 0;\n padding: 20px;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n}\n.input-visualizer > div.active > img {\n padding: 25px;\n}", ""]); + const o = s + }, + 1601: e => { + "use strict"; + e.exports = function(e) { + return e[1] + } + }, + 1643: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, '\n.settings-menu {\n\tposition: absolute;\n\tleft: calc(50% - 800px / 2);\n\ttop: 0;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 800px;\n\theight: 100%;\n\ttext-align: left;\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground-color: var(--surface-color);\n}\n\n.settings-menu > h2 {\n\tmargin: 10px;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.settings-menu > .container {\n\tmargin: 0;\n\tpadding: 0;\n\tflex-grow: 1;\n\tbackground-color: var(--surface-secondary-color);\n\toverflow-y: scroll;\n\tpointer-events: auto;\n}\n\n.settings-menu > .container > h2 {\n\tmargin: 10px;\n\tpadding: 4px;\n\tfont-weight: normal;\n\tfont-size: 24px;\n\tcolor: var(--text-color);\n\tborder-bottom: 2px solid var(--text-color);\n}\n\n.settings-menu > .container > h3 {\n\tmargin: 10px 10px 10px 15px;\n\tpadding: 4px;\n\tfont-weight: normal;\n\tfont-size: 22px;\n\tcolor: var(--text-color);\n\tborder-bottom: 2px solid var(--text-color);\n}\n\n.settings-menu > .container > .setting {\n\tmargin: 10px;\n\tdisplay: flex;\n}\n\n.settings-menu > .container > .setting > p {\n\tdisplay: inline-block;\n\tmargin: 10px;\n\tpadding: 0;\n\tmin-width: 0;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tflex-grow: 1;\n\tfont-size: 28px;\n\ttext-align: left;\n\tcolor: var(--text-color);\n}\n\n.settings-menu > .container > .setting > .button-wrapper {\n\twhite-space: nowrap;\n}\n.settings-menu > .container > .setting.wrappable > .button-wrapper {\n\twhite-space: normal;\n}\n.settings-menu > .container > .setting.wrappable > .button-wrapper > button {\n\tmargin-bottom: 8px;\n\twidth: calc(100% / 4);\n\tfont-size: 23px;\n}\n\n.settings-menu > .container > .setting > .button-wrapper > button {\n\theight: 48px;\n\twhite-space: nowrap;\n}\n.settings-menu > .container > .setting > .button-wrapper > button.selected {\n\tbackground-color: var(--button-hover-color);\n}\n.settings-menu > .container > .setting > .button-wrapper > button.key-binding {\n\twidth: 210px;\n\tfont-size: 22px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tvertical-align: top;\n}\n\n.settings-menu > .container > .setting > input[type="range"] {\n\tmargin: 0 20px;\n\twidth: 390px;\n}\n\n.settings-menu > .button-wrapper > .button {\n\tmargin: 10px 0;\n}\n\n.settings-menu > .button-wrapper > .button:first-of-type {\n\tmargin-left: 10px;\n}\n\n.settings-menu > .button-wrapper > .button:last-of-type {\n\tmargin-right: 10px;\n}\n\n.settings-menu > .button-wrapper > .button > img {\n\tmargin-top: -3px;\n}\n\n.settings-menu > .button-wrapper > .apply {\n\tfloat: right;\n}\n', ""]); + const o = s + }, + 1705: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/desert.svg" + }, + 1719: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/reset.svg" + }, + 1734: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/test.svg" + }, + 1758: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/desert_colored.svg" + }, + 1784: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/cancel.svg" + }, + 1903: () => {}, + 1925: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/copy.svg" + }, + 1936: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/erase.svg" + }, + 1997: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, '\n.editor-track-settings > .background {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(20, 20, 30, 0.5);\n\tpointer-events: auto;\n}\n\n.editor-track-settings > .container {\n\tposition: absolute;\n\tleft: calc(50% - 600px / 2);\n\ttop: 0;\n\tz-index: 2;\n\tdisplay: flex;\n\tflex-direction: column;\n\tbox-sizing: border-box;\n\twidth: 600px;\n\theight: 100%;\n\tbackground-color: var(--surface-color);\n}\n\n.editor-track-settings > .container > h1 {\n\tmargin: 10px;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.editor-track-settings > .container > .content {\n\tflex-grow: 1;\n\tbackground-color: var(--surface-secondary-color);\n\toverflow-y: auto;\n\tpointer-events: auto;\n}\n\n.editor-track-settings > .container > .content > .setting {\n\tmargin: 20px;\n\tpadding: 20px;\n\tbackground-color: var(--surface-color);\n\toutline: 2px solid transparent;\n\ttransition: outline 0.25s ease-in-out;\n}\n\n.editor-track-settings > .container > .content > .setting.error {\n\toutline: 2px solid #e34c4c;\n}\n\n.editor-track-settings > .container > .content > .setting > .title {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 30px;\n\tcolor: var(--text-color);\n}\n.editor-track-settings > .container > .content > .setting > input[type="text"] {\n\twidth: calc(100% - 20px);\n\tfont-weight: normal;\n\tfont-size: 30px;\n}\n\n.editor-track-settings > .container > .content > .setting > .environment-button {\n\tdisplay: inline-block;\n\tmargin: 10px 0;\n\tpadding: 10px;\n\twidth: calc(100% / 3);\n\tcolor: var(--text-color);\n\tfont-size: 27px;\n}\n.editor-track-settings > .container > .content > .setting > .environment-button.selected {\n\tbackground-color: var(--button-hover-color);\n}\n.editor-track-settings > .container > .content > .setting > .environment-button > img {\n\tmargin: 0;\n\tpadding: 10px 30px;\n\twidth: 100%;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n}\n\n.editor-track-settings > .container > .content > .setting > input[type="range"] {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 64px;\n\t-webkit-appearance: none;\n\tappearance: none;\n\tbackground: transparent;\n\tcursor: pointer;\n\taccent-color: var(--text-color);\n}\n.editor-track-settings > .container > .content > .setting > input[type="range"]::-webkit-slider-runnable-track {\n\tbackground-color: var(--surface-tertiary-color);\n\theight: 10px;\n}\n.editor-track-settings > .container > .content > .setting > input[type="range"]::-moz-range-track {\n\tbackground-color: var(--surface-tertiary-color);\n\theight: 10px;\n}\n.editor-track-settings > .container > .content > .setting > input[type="range"]::-webkit-slider-thumb {\n\t-webkit-appearance: none;\n\tappearance: none;\n\tborder-radius: 0;\n\tbackground: var(--text-color);\n\twidth: 32px;\n\theight: 32px;\n\tmargin: -13px 0 0 0;\n\tborder: 4px solid var(--button-color);\n\toutline: 2px solid var(--text-color);\n}\n.editor-track-settings > .container > .content > .setting > input[type="range"]::-webkit-slider-thumb:hover {\n\tborder: 4px solid var(--button-hover-color);\n}\n@media (hover: none) {\n\t.editor-track-settings > .container > .content > .setting > input[type="range"]::-webkit-slider-thumb:hover {\n\t\tborder: 4px solid var(--button-color);\n\t}\n}\n.editor-track-settings > .container > .content > .setting > input[type="range"]::-webkit-slider-thumb:active {\n\tborder: 4px solid var(--button-active-color);\n}\n.editor-track-settings > .container > .content > .setting > input[type="range"]::-moz-range-thumb {\n\t-webkit-appearance: none;\n\tappearance: none;\n\tborder-radius: 0;\n\tbackground: var(--text-color);\n\twidth: 24px;\n\theight: 24px;\n\tborder: 4px solid var(--button-color);\n\toutline: 2px solid var(--text-color);\n}\n.editor-track-settings > .container > .content > .setting > input[type="range"]::-moz-range-thumb:hover {\n\tborder: 4px solid var(--button-hover-color);\n}\n@media (hover: none) {\n\t.editor-track-settings > .container > .content > .setting > input[type="range"]::-moz-range-thumb:hover {\n\t\tborder: 4px solid var(--button-color);\n\t}\n}\n.editor-track-settings > .container > .content > .setting > input[type="range"]::-moz-range-thumb:active {\n\tborder: 4px solid var(--button-active-color);\n}\n\n\n.editor-track-settings > .container > .button-wrapper > button {\n\tmargin: 10px;\n}\n\n.editor-track-settings > .container > .button-wrapper > button:not(:first-child) {\n\tfloat: right;\n}\n', ""]); + const o = s + }, + 2175: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/random.svg" + }, + 2207: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/arrow_up.svg" + }, + 2208: (e, t, n) => { + "use strict"; + e.exports = n.p + "2e5b7bff10d7782e539c.woff" + }, + 2319: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/delete.svg" + }, + 2344: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/car_stripe.svg" + }, + 2346: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.editor-side-toolbar {\n\tdisplay: flex;\n\tflex-direction: column;\n\tposition: absolute;\n\tbottom: 40px;\n\tleft: 0;\n}\n.editor-side-toolbar.touch {\n\tbottom: 176px;\n}\n\n.editor-side-toolbar > .accordion {\n\tdisplay: flex;\n\tflex-direction: row;\n\twidth: 100px;\n\toverflow: hidden; /* Use hidden if clip is not supported */\n\toverflow: clip;\n\ttransition: width 0.25s ease-out;\n}\n.editor-side-toolbar.touch > .accordion {\n\twidth: 120px;\n}\n.editor-side-toolbar > .accordion.open {\n\twidth: auto;\n}\n\n.editor-side-toolbar button {\n\tposition: relative;\n\tflex-shrink: 0;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100px;\n\theight: 100px;\n\tbackground-color: rgba(17, 32, 82, 0.48);\n\tborder: none;\n\tpointer-events: auto;\n\tcursor: pointer;\n\ttransition: background-color 0.25s ease-out;\n}\n.editor-side-toolbar button:hover {\n\tbackground-color: rgba(37, 54, 105, 0.48);\n}\n.editor-side-toolbar > .accordion > button:not(:first-of-type) {\n\tbackground-color: rgba(17, 32, 82, 0.35);\n}\n.editor-side-toolbar > .accordion > button:not(:first-of-type):hover {\n\tbackground-color: rgba(37, 54, 105, 0.35);\n}\n.editor-side-toolbar > .accordion > button:not(:first-of-type).selected {\n\tbackground-color: rgba(17, 32, 82, 0.55);\n}\n.editor-side-toolbar > .accordion > button:not(:first-of-type):active {\n\tbackground-color: rgba(17, 32, 82, 0.6);\n}\n@media (hover: none) {\n\t.editor-side-toolbar button:hover {\n\t\tbackground-color: rgba(17, 32, 82, 0.48);\n\t}\n}\n.editor-side-toolbar button:active {\n\tbackground-color: rgba(17, 32, 82, 0.6);\n\ttransition: none;\n}\n\n.editor-side-toolbar.touch button {\n\twidth: 120px;\n\theight: 120px;\n}\n\n.editor-side-toolbar button img {\n\tmargin: 0;\n\tpadding: 20%;\n\tvertical-align: top;\n\twidth: 100%;\n height: 100%;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n\ttransition: transform 0.25s ease-out;\n\tfilter: drop-shadow(2px 2px 2px rgba(0, 0, 0, 0.5));\n}\n.editor-side-toolbar button:active img {\n\ttransition: none;\n\ttransform: scale(0.9);\n}\n\n.editor-side-toolbar button.rotate > span {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 1px;\n\twidth: 100%;\n\theight: 100%;\n\tcolor: var(--text-color);\n\tfont-size: 16px;\n\ttext-shadow: 0 0 2px #000;\n\tpointer-events: none;\n\ttransition: transform 0.25s ease-out;\n}\n.editor-side-toolbar button.rotate:active > span {\n\ttransition: none;\n\ttransform: scale(0.9);\n}\n", ""]); + const o = s + }, + 2493: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/overlapping_enabled.svg" + }, + 2553: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/state_invalid.svg" + }, + 2709: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/custom_tracks.jpg" + }, + 2796: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, '\n.verifier-ui {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 16px;\n\twidth: 100%;\n\theight: 100%;\n\toverflow-y: scroll;\n\tbox-sizing: border-box;\n\tbackground-color: var(--surface-color);\n\tpointer-events: auto;\n}\n\n.verifier-ui > p {\n\tmargin: 16px 4px 0 4px;\n\tpadding: 0;\n\tfont-size: 20px;\n\tcolor: var(--text-color);\n\twhite-space: pre-wrap;\n}\n\n.verifier-ui > input[type="range"] {\n\tmargin: 16px 0;\n\twidth: 390px;\n}\n\n.verifier-ui > table {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\tborder-collapse: collapse;\n\ttable-layout: fixed;\n\tcolor: var(--text-color);\n}\n\n.verifier-ui > table > thead > tr > th {\n\ttext-align: left;\n\tborder-bottom: 2px solid var(--text-color);\n}\n\n.verifier-ui > table > thead > tr > th, .verifier-ui > table > tbody > tr > td {\n\tpadding: 8px 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.verifier-ui > button {\n\tdisplay: inline-block;\n\tmargin: 16px 0 0 0;\n}\n', ""]); + const o = s + }, + 2817: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.time-announcer {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 35%;\n\twidth: 100%;\n\toverflow: hidden;\n}\n\n.time-announcer > .record {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 48px;\n\ttext-shadow: 0 0 5px #000;\n\tcolor: #5f5;\n\ttext-align: center;\n\topacity: 0;\n\tanimation: 0.3s ease-out 0.8s 1 normal forwards running time-announcer-record-animation;\n}\n\n.time-announcer > .track-name {\n\tmargin: 0 0 10px 0;\n\tpadding: 4px 20px;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tbackground-color: var(--surface-secondary-color);\n\tfont-size: 60px;\n\tcolor: var(--text-color);\n\ttext-align: center;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tanimation: 0.3s ease-out 0s 1 normal forwards running time-announcer-animation;\n}\n\n.time-announcer > .current {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 0;\n\tbackground-color: var(--surface-color);\n\tfont-size: 48px;\n\tcolor: var(--text-color);\n\ttext-align: center;\n\tanimation: 0.5s ease-out 0s 1 normal forwards running time-announcer-animation;\n}\n.time-announcer > .difference > p {\n\tmargin: 0 0 0 auto;\n\tpadding: 0;\n\twidth: 0;\n\tbackground-color: var(--surface-secondary-color);\n\tcolor: #5f5;\n\tfont-size: 30px;\n\ttext-align: center;\n\tanimation: 0.4s ease-out 0.5s 1 normal forwards running time-announcer-animation;\n}\n.time-announcer > .difference.red > p {\n\tcolor: #f55;\n}\n.time-announcer > .difference > p.title {\n\tmargin-top: 30px;\n\tbackground-color: transparent;\n\ttext-shadow: 0 0 3px #000;\n}\n\n@keyframes time-announcer-record-animation {\n\tfrom {\n\t\topacity: 0;\n\t\ttransform: translateY(10px);\n\t}\n\n\tto {\n\t\topacity: 1;\n\t}\n}\n\n@keyframes time-announcer-animation {\n\tfrom {\n\t\twidth: 0;\n\t\topacity: 0;\n\t}\n\n\tto {\n\t\twidth: 100%;\n\t\topacity: 1;\n\t}\n}\n", ""]); + const o = s + }, + 2832: (e, t, n) => { + "use strict"; + e.exports = n.p + "4e75ed8189c5a7b6fbf8.ttf" + }, + 2915: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.menu {\n\tdisplay: flex;\n\tflex-direction: column;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(10, 10, 20, 0.8);\n\ttext-align: center;\n\ttransition: background-color 1s ease-out;\n}\n.menu.loading-screen {\n\tbackground-color: var(--surface-tertiary-color);\n}\n\n.menu > .logo {\n\tdisplay: block;\n\tmargin: 80px auto 0 auto;\n\tpadding: 0;\n\twidth: 1000px;\n\theight: 200px;\n\t-webkit-filter: drop-shadow(0 0 3px #000);\n\tfilter: drop-shadow(0 0 3px #000);\n}\n\n@media (max-width: 1300px) {\n\t.menu > .logo {\n\t\twidth: calc(100vw * (1000 / 1300));\n\t}\n}\n@media (max-width: 975px) {\n\t.menu > .logo {\n\t\twidth: calc(975px * (1000 / 1300));\n\t}\n}\n\n.menu > .warning-message {\n\tmargin: 16px auto 0 auto;\n\tmax-width: 900px;\n\tfont-size: 26px;\n\tcolor: #f66;\n}\n.menu > .warning-message > a {\n\tmargin: 0 auto;\n\tdisplay: block;\n\twidth: max-content;\n\tcolor: var(--text-color);\n\tpointer-events: auto;\n}\n\n.menu > .main-buttons-container {\n\tmargin: 0 0 140px 0;\n\tdisplay: flex;\n\tflex-grow: 1;\n\talign-items: center;\n\tjustify-content: center;\n}\n.menu > .main-buttons-container.hidden {\n\tdisplay: none;\n}\n\n.menu .button-image {\n\tdisplay: inline-block;\n\tmargin: 10px 0;\n\tpadding: 0;\n\twidth: 200px;\n\theight: 200px;\n\tpointer-events: auto;\n}\n.menu .button-image > img {\n\tmargin: 40px 40px 0 40px;\n\tpadding: 0;\n\twidth: 96px;\n\theight: 96px;\n\ttransition: transform 0.2s ease-in-out;\n\tpointer-events: none;\n}\n.menu .button-image:not(:disabled):hover > img {\n\ttransform: translateY(-10px);\n}\n@media (hover: none) {\n\t.menu .button-image:not(:disabled):hover > img {\n\t\ttransform: none;\n\t}\n}\n.menu .button-image > p {\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: var(--text-color);\n\tfont-size: 27px;\n}\n\n.menu .button-image.button-spawn {\n\tanimation: button-spawn 0.5s ease-out forwards;\n\topacity: 0;\n}\n\n@keyframes button-spawn {\n\t0% {\n\t\ttransform: translateY(50px) scale(0.8);\n\t\topacity: 0;\n\t}\n\t70% {\n\t\ttransform: translateY(-10px) scale(1);\n\t\topacity: 1;\n\t}\n\t100% {\n\t\ttransform: translateY(0) scale(1);\n\t\topacity: 1;\n\t}\n}\n\n.menu > .bottom-buttons {\n\tmargin: 4px;\n\tpadding: 0;\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.menu > .bottom-buttons > .small {\n\tpadding: 6px 12px;\n\tclip-path: polygon(4px 0, 100% 0, calc(100% - 4px) 100%, 0 100%);\n\tfont-size: 22px;\n}\n.menu > .bottom-buttons > .small > img {\n\tvertical-align: middle;\n\twidth: 24px;\n\theight: 24px;\n}\n\n.menu > .discord-link {\n\tdisplay: block;\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n\tmargin: 0;\n\tpadding: 0;\n\tpointer-events: auto;\n}\n.menu > .discord-link > img {\n\tmargin: 8px 16px;\n\tpadding: 0;\n\theight: 40px;\n}\n\n.menu > .info {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\twidth: 100%;\n}\n.menu > .info > a {\n\tdisplay: block;\n\tmargin: 0 auto;\n\tpadding: 5px;\n\twidth: fit-content;\n\tcolor: var(--text-color);\n\ttext-decoration: none;\n\tfont-size: 20px;\n\tpointer-events: auto;\n}\n.menu > .info > a[href]:hover, .menu > .info > a[href]:focus-visible {\n\ttext-decoration: underline;\n\toutline: none;\n}\n", ""]); + const o = s + }, + 2927: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.loading-ui {\n\tmargin: 200px 0 0 0;\n\tpadding: 0;\n}\n.loading-ui.fade-out {\n\topacity: 0;\n\ttransition: opacity 0.25s ease-out;\n}\n\n.loading-ui > p {\n\tmargin: 5px;\n\tpadding: 0;\n\tcolor: var(--text-color);\n\tfont-size: 32px;\n}\n\n.loading-ui > div {\n\tmargin: 0 auto;\n\tpadding: 0;\n\twidth: 600px;\n\theight: 50px;\n\tbackground-color: var(--surface-color);\n\tclip-path: polygon(9px 0, 100% 0, calc(100% - 9px) 100%, 0 100%);\n\toverflow: hidden;\n}\n\n.loading-ui > div > div {\n\tmargin: 15px 20px;\n\tpadding: 0;\n\twidth: 560px;\n\theight: 20px;\n\tclip-path: polygon(3px 0, 100% 0, calc(100% - 3px) 100%, 0 100%);\n\tbackground-color: #224;\n\tbox-shadow: inset 0 0 6px #000;\n}\n\n.loading-ui > div > div > div {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 0;\n\theight: 100%;\n\tclip-path: polygon(2px 0, 100% 0, calc(100% - 2px) 100%, 0 100%);\n\tbackground-color: #fff;\n\tbox-shadow: inset 0 0 6px #000;\n\ttransition: width 0.1s ease-in-out;\n}\n", ""]); + const o = s + }, + 3223: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/pending.svg" + }, + 3518: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/grid_large.svg" + }, + 3571: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.touch-controls {\n\tpointer-events: none;\n}\n\n.touch-controls > button {\n\tposition: absolute;\n\ttop: calc(1.5cm + 50px);\n\tmargin: 10px;\n\tpadding: 0;\n\twidth: 160px;\n\theight: 160px;\n\tbackground-color: var(--button-color);\n\tborder: none;\n\topacity: 0.6;\n\tpointer-events: auto;\n\ttouch-action: none;\n}\n.touch-controls > button > img {\n\tmargin: 0;\n\tpadding: 30px;\n\tvertical-align: top;\n\twidth: 100%;\n height: 100%;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n\ttransition: padding 0.25s ease-out;\n}\n.touch-controls > button.active > img {\n padding: 40px;\n}\n\n.touch-controls > .reset {\n\tright: 1.5cm;\n}\n\n.touch-controls > .left-container {\n\tposition: absolute;\n\tleft: 1.5cm;\n\tbottom: 1.5cm;\n}\n\n.touch-controls > .right-container {\n\tposition: absolute;\n\tright: 1.5cm;\n\tbottom: 1.5cm;\n}\n.touch-controls > .right-container > div {\n\tdisplay: inline-block;\n}\n\n.touch-controls > div > div {\n\tmargin: 10px;\n\tpadding: 0;\n\twidth: 160px;\n\theight: 160px;\n\tbackground-color: var(--button-color);\n\topacity: 0.5;\n\tpointer-events: auto;\n\ttouch-action: none;\n}\n.touch-controls > div > div.active {\n\tbackground-color: var(--button-active-color);\n\topacity: 0.6;\n}\n\n.touch-controls > div > div > img {\n\tmargin: 0;\n\tpadding: 40px;\n\tvertical-align: top;\n\twidth: 100%;\n height: 100%;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n}\n.touch-controls > div > div.active > img {\n padding: 50px;\n}\n", ""]); + const o = s + }, + 3682: (e, t, n) => { + "use strict"; + e.exports = n.p + "a82f15d48dbc61b6edeb.woff2" + }, + 3755: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/share.svg" + }, + 3895: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/rotation_axis_z_negative.svg" + }, + 3901: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/summer.svg" + }, + 3902: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/verified.svg" + }, + 4239: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, ".ghost-loading-ui {\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n\tmargin: 4px;\n\tcolor: var(--text-color);\n\tfont-size: 22px;\n\tfont-weight: normal;\n\ttext-shadow: 1px 1px 1px var(--surface-color), -1px 1px 1px var(--surface-color), -1px -1px 1px var(--surface-color), 1px -1px 1px var(--surface-color);\n\ttransition: opacity 0.25s ease-in-out;\n}\n.ghost-loading-ui.hide {\n\topacity: 0;\n\ttransform: translateX(20px);\n\ttransition: opacity 0.25s ease-in-out 0.5s, transform 0.25s ease-in-out 0.5s;\n}\n.ghost-loading-ui.down {\n\ttop: initial;\n\tbottom: 0;\n}\n\n.ghost-loading-ui > .percentage {\n\tdisplay: inline-block;\n\twidth: 60px;\n\ttext-align: center;\n}\n", ""]); + const o = s + }, + 4309: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/save.svg" + }, + 4344: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.debug {\n\tmargin: 0.25em;\n\tpadding: 0;\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tfont-size: 28px;\n\ttext-shadow: 0 0 5px #000;\n\tcolor: #fff;\n\tz-index: 10;\n}\n", ""]); + const o = s + }, + 4394: () => {}, + 4411: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/rotation_axis_z_positive.svg" + }, + 4417: e => { + "use strict"; + e.exports = function(e, t) { + return t || (t = {}), e ? (e = String(e.__esModule ? e.default : e), /^['"].*['"]$/.test(e) && (e = e.slice(1, -1)), t.hash && (e += t.hash), /["'() \t\n]|(%20)/.test(e) || t.needQuotes ? '"'.concat(e.replace(/"/g, '\\"').replace(/\n/g, "\\n"), '"') : e) : e + } + }, + 4538: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.pause-screen {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(0, 0, 0, 0.75);\n\tanimation: fade-in 0.25s forwards;\n}\n.pause-screen.fade-out {\n\topacity: 0;\n\ttransition: opacity 0.25s;\n}\n\n@keyframes fade-in {\n\tfrom {\n\t\tbackground-color: rgba(0, 0, 0, 0);\n\t}\n\tto {\n\t\tbackground-color: rgba(0, 0, 0, 0.75);\n\t}\n}\n\n\n.pause-screen > .title {\n\tposition: absolute;\n\ttop: 40%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tfont-size: 100px;\n\tcolor: var(--text-color);\n\tanimation: slide-fade-in 0.5s 0.3s forwards;\n\topacity: 0;\n}\n\n@keyframes slide-fade-in {\n\tfrom {\n\t\ttransform: translate(-60%, -50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\ttransform: translate(-50%, -50%);\n\t\topacity: 1;\n\t}\n}\n", ""]); + const o = s + }, + 4543: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.time-bar {\n\tdisplay: flex;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\tbackground-color: var(--surface-color);\n}\n\n.time-bar > button {\n\tmargin: 6px;\n\tpadding: 4px 12px;\n}\n.time-bar > button > img {\n\tmargin: 0 0 2px 0;\n\tpadding: 0;\n\tvertical-align: middle;\n\twidth: 28px;\n\theight: 28px;\n\tpointer-events: none;\n}\n\n.time-bar > .bar {\n\tposition: relative;\n\tmargin: 6px 6px 6px -8px;\n\tpadding: 0;\n\tflex-grow: 1;\n\theight: 40px;\n\tbackground-color: var(--surface-secondary-color);\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\ttouch-action: none;\n\tpointer-events: auto;\n}\n.time-bar > .bar > div {\n\tposition: relative;\n\twidth: calc(100% - 8px);\n\theight: 100%;\n}\n.time-bar > .bar > div > .unloaded-fill {\n\tposition: absolute;\n\tright: -8px;\n\ttop: 0;\n\tmargin: 0;\n\tpadding: 0;\n\theight: 100%;\n\tbackground-color: rgba(255, 255, 255, 0.1);\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\twill-change: width;\n}\n.time-bar > .bar > div > .fill {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmargin: 0;\n\tpadding: 0;\n\theight: 100%;\n\tbackground-color: #7272c2;\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\twill-change: width;\n}\n.time-bar > .bar > div > .dash-container {\n\tpointer-events: none;\n}\n.time-bar > .bar > div > .dash-container > .dash {\n\tposition: absolute;\n\tz-index: 1;\n\tbottom: 0;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 2px;\n\theight: 25%;\n\tbackground-color: rgba(0,0,0,0.25);\n}\n.time-bar > .bar > div > .dash-container > .dash.long {\n\theight: 50%;\n\tbackground-color: rgba(0,0,0,0.35);\n}\n", ""]); + const o = s + }, + 4563: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/rotate.svg" + }, + 4593: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/reset_settings.svg" + }, + 4804: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.game-toolbar {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tz-index: 1;\n\tpadding: 8px 10px 8px 8px;\n\tbackground-color: var(--surface-color);\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\topacity: 0;\n\ttransform: translateX(-10px);\n\ttransition: opacity ease-in-out 0.2s, transform ease-in-out 0.2s;\n\tpointer-events: none;\n}\n\n.game-toolbar.up {\n\tposition: absolute;\n\tbottom: auto;\n\ttop: 0;\n}\n\n.game-toolbar.touch > .button {\n\tfont-size: 24px;\n}\n.game-toolbar.touch > .button > img {\n\twidth: 24px;\n\theight: 24px;\n}\n\n.game-toolbar.visible {\n\topacity: 1;\n\ttransform: translateX(0);\n\ttransition: opacity 0.2s ease-in-out 0.5s, transform 0.2s ease-in-out 0.5s;\n\tpointer-events: auto;\n}\n", ""]); + const o = s + }, + 4930: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/grid_small.svg" + }, + 5001: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/rotation_axis_x_negative.svg" + }, + 5007: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.editor-height-selector {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.editor-height-selector > .buttons {\n\tdisplay: inline-block;\n\tvertical-align: bottom;\n}\n.editor-height-selector > .buttons > button {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: var(--button-color);\n\tpointer-events: auto;\n\tcursor: pointer;\n}\n.editor-height-selector > .buttons > button:hover {\n\tbackground-color: var(--button-hover-color);\n}\n@media (hover: none) {\n\t.editor-height-selector > .buttons > button:hover {\n\t\tbackground-color: var(--button-color);\n\t}\n}\n.editor-height-selector > .buttons > button:active {\n\tbackground-color: var(--button-active-color);\n}\n\n.editor-height-selector > .buttons > button > img { \n\tmargin: 0;\n\tpadding: 0 6px;\n\twidth: 20px;\n\theight: 20px;\n\tvertical-align: bottom;\n\tpointer-events: none;\n}\n.editor-height-selector.touch > .buttons > button > img {\n\tpadding: 24px;\n\twidth: 40px;\n\theight: 40px;\n}\n\n.editor-height-selector > p {\n\tmargin: 0;\n\tpadding: 0 10px;\n\tdisplay: inline-block;\n\tvertical-align: bottom;\n\tline-height: 40px;\n\tmin-width: 140px;\n\tfont-size: 26px;\n\ttext-align: center;\n\tbackground-color: var(--surface-transparent-color);\n\tcolor: var(--text-color);\n}\n.editor-height-selector.touch > p {\n\tline-height: calc((40px + 2 * 24px) * 2);\n}\n", ""]); + const o = s + }, + 5010: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/winter_colored.svg" + }, + 5031: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/help.svg" + }, + 5056: (e, t, n) => { + "use strict"; + e.exports = function(e) { + var t = n.nc; + t && e.setAttribute("nonce", t) + } + }, + 5072: e => { + "use strict"; + var t = []; + + function n(e) { + for (var n = -1, i = 0; i < t.length; i++) + if (t[i].identifier === e) { + n = i; + break + } return n + } + + function i(e, i) { + for (var a = {}, s = [], o = 0; o < e.length; o++) { + var l = e[o], + c = i.base ? l[0] + i.base : l[0], + h = a[c] || 0, + d = "".concat(c, " ").concat(h); + a[c] = h + 1; + var u = n(d), + p = { + css: l[1], + media: l[2], + sourceMap: l[3], + supports: l[4], + layer: l[5] + }; + if (-1 !== u) t[u].references++, t[u].updater(p); + else { + var f = r(p, i); + i.byIndex = o, t.splice(o, 0, { + identifier: d, + updater: f, + references: 1 + }) + } + s.push(d) + } + return s + } + + function r(e, t) { + var n = t.domAPI(t); + n.update(e); + return function(t) { + if (t) { + if (t.css === e.css && t.media === e.media && t.sourceMap === e.sourceMap && t.supports === e.supports && t.layer === e.layer) return; + n.update(e = t) + } else n.remove() + } + } + e.exports = function(e, r) { + var a = i(e = e || [], r = r || {}); + return function(e) { + e = e || []; + for (var s = 0; s < a.length; s++) { + var o = n(a[s]); + t[o].references-- + } + for (var l = i(e, r), c = 0; c < a.length; c++) { + var h = n(a[c]); + 0 === t[h].references && (t[h].updater(), t.splice(h, 1)) + } + a = l + } + } + }, + 5086: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.loading-spinner {\n\twidth: 40px;\n\theight: 40px;\n\tborder-radius: 50%;\n\tborder: 5px solid var(--surface-tertiary-color);\n\tborder-left-color: var(--text-color);\n\n\tanimation: 1s linear infinite forwards loading-spinner-spin;\n}\n\n@keyframes loading-spinner-spin {\n\tfrom {\n\t\ttransform: rotate(0);\n\t}\n\tto {\n\t\ttransform: rotate(360deg);\n\t}\n}\n", ""]); + const o = s + }, + 5140: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.profile-selection {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 40%;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 500px;\n\tbox-sizing: border-box;\n\tbackground-color: var(--surface-secondary-color);\n}\n\n.profile-selection > .top-bar {\n\tmargin: 0;\n\tpadding: 10px;\n\tbackground-color: var(--surface-color);\n}\n\n.profile-selection > .top-bar > h2 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.profile-selection > .slot {\n\tposition: relative;\n\tmargin: 10px 10px 0 10px;\n\tpadding: 0;\n}\n\n.profile-selection > .slot > button.main {\n\tmargin: 0;\n\tpadding: 0;\n\tvertical-align: top;\n\twidth: 100%;\n\theight: 100px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\ttext-align: left;\n\twhite-space: nowrap;\n}\n\n.profile-selection > .slot > button.main.selected {\n\tbackground-color: var(--button-hover-color);\n}\n\n.profile-selection > .slot > button.main > .image-container {\n\tdisplay: inline-block;\n\tposition: relative;\n\tbackground-color: rgba(0, 0, 0, 0.1);\n\twidth: 100px;\n\theight: 100px;\n}\n\n.profile-selection > .slot > button.main > .image-container > img {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tpointer-events: none;\n\topacity: 0;\n\ttransition: opacity 0.5s ease-out;\n}\n.profile-selection > .slot > button.main > .image-container > img.show {\n\topacity: 1;\n}\n\n.profile-selection > .slot > button.main > .name {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tmargin: 0;\n\tpadding: 12px;\n\tfont-size: 28px;\n\tcolor: var(--text-color);\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\twidth: 320px;\n}\n.profile-selection > .slot > button.main > .name.empty {\n\tcolor: #000;\n\topacity: 0.2;\n}\n\n.profile-selection > .bottom-bar {\n\tmargin: 10px 0 0 0;\n\tpadding: 10px;\n\tbackground-color: var(--surface-color);\n}\n\n.profile-selection > .bottom-bar > .button.right {\n\tfloat: right;\n}\n", ""]); + const o = s + }, + 5148: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/checkpoint.svg" + }, + 5151: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.speedometer {\n\tposition: absolute;\n\tbottom: 0;\n\tright: 0;\n\tmargin: 0;\n\tpadding: 8px 8px 8px 10px;\n\tmin-width: 140px;\n\tline-height: 0;\n\tfont-size: 40px;\n\tcolor: var(--text-color);\n\ttext-align: right;\n\topacity: 0.9;\n\tclip-path: polygon(8px 0, 100% 0, 100% 100%, 0 100%);\n\tbackground-color: var(--surface-color);\n}\n.speedometer.up {\n\tbottom: auto;\n\ttop: 0;\n\tclip-path: polygon(0 0, 100% 0, 100% 100%, 8px 100%);\n}\n.speedometer.hidden {\n\tdisplay: none;\n}\n\n.speedometer > div {\n\tmargin: 0;\n\tpadding: 0 0 0 16px;\n\tclip-path: polygon(6px 0, 100% 0, 100% 100%, 0 100%);\n\tbackground-color: var(--surface-tertiary-color);\n}\n.speedometer.up > div {\n\tclip-path: polygon(0 0, 100% 0, 100% 100%, 6px 100%);\n}\n\n.speedometer > div > span:last-of-type {\n\topacity: 0.5;\n\tmargin: 0 0.3em 0 0.25em;\n\tpadding: 0;\n\tfont-size: 0.5em;\n}\n.speedometer > div > span > span {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n\ttext-align: center;\n}\n", ""]); + const o = s + }, + 5437: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.message-box {\n\tmargin: 0;\n\tpadding: 0;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 1;\n\tmax-width: unset;\n\tmax-height: unset;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(20, 20, 30, 0.5);\n\tborder: none;\n\tpointer-events: auto;\n}\n\n.message-box > div {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 30%;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 16px;\n\twidth: 500px;\n\tbox-sizing: border-box;\n\tborder: none;\n\tbackground-color: var(--surface-color);\n\toutline: none;\n\ttext-align: center;\n}\n\n.message-box > div > p {\n\tmargin: 5px 0 20px 0;\n\tpadding: 0;\n\tmin-height: 50px;\n\tline-height: 0.9;\n\tfont-size: 32px;\n\toverflow-wrap: break-word;\n\twhite-space: pre-wrap;\n\tcolor: var(--text-color);\n}\n\n.message-box > div > button {\n\tmin-width: 140px;\n}\n\n.message-box.message > div > button:first-of-type {\n\tdisplay: none;\n}\n\n.message-box.confirm > div > button:first-of-type {\n\tfloat: left;\n}\n.message-box.confirm > div > button:last-of-type {\n\tfloat: right;\n}\n\n.message-box.no-buttons > div > button {\n\tdisplay: none;\n}\n", ""]); + const o = s + }, + 5586: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.track-info {\n\tposition: absolute;\n\tleft: calc(50% - 1050px / 2);\n\ttop: 0;\n\tz-index: 2;\n\tdisplay: flex;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 1000px;\n\theight: 100%;\n}\n.track-info.hidden {\n\tdisplay: none;\n}\n\n.track-info > .side-panel {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-height: 0;\n\tmargin-left: 50px;\n\twidth: 400px;\n\tbackground-color: var(--surface-color);\n}\n\n.track-info > .side-panel > h2 {\n\tmargin: 10px 10px 0 10px;\n\tpadding: 0;\n\tflex-shrink: 0;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n\n.track-info > .side-panel > .thumbnail {\n\tposition: relative;\n\tmargin: 10px 0 0 0;\n\tpadding: 45px;\n\tflex-grow: 1;\n\tmin-height: 0;\n\tmax-height: 300px;\n\tbox-sizing: border-box;\n\tbackground-color: var(--surface-secondary-color);\n}\n\n.track-info > .side-panel > .thumbnail > canvas {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n\tobject-fit: contain;\n\t-webkit-filter: drop-shadow(0 0 3px #000);\n\tfilter: drop-shadow(0 0 3px #000);\n\timage-rendering: pixelated;\n}\n\n.track-info > .side-panel > .thumbnail > .share {\n\tdisplay: inline-block;\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tmargin: 8px;\n\tpadding: 0 9px;\n\tclip-path: polygon(3px 0, 100% 0, calc(100% - 3px) 100%, 0 100%);\n}\n.track-info > .side-panel > .thumbnail > .share > img {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 16px;\n\tpointer-events: none;\n}\n\n.track-info > .side-panel > .thumbnail > .environment {\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n\tmargin: 8px;\n\twidth: 32px;\n\topacity: 0.2;\n\tpointer-events: none;\n}\n\n.track-info > .side-panel > .track-author {\n\tmargin: 8px 0;\n\tfont-size: 18px;\n\tcolor: var(--text-color);\n\toverflow-wrap: anywhere;\n}\n\n.track-info > .side-panel > .divider {\n\tborder-top: 1px solid var(--text-color);\n}\n\n.track-info > .side-panel > .personal-best-title, .track-info > .side-panel > .opponents-title {\n\tmargin: 16px 0 0 0;\n\tfont-size: 36px;\n\tcolor: var(--text-color);\n}\n\n.track-info > .side-panel > .personal-best {\n\tmargin: 0 0 16px 0;\n\tfont-size: 32px;\n\tcolor: var(--text-color);\n}\n.track-info > .side-panel > .personal-best.no-record {\n\topacity: 0.5;\n}\n\n.track-info > .side-panel > .opponents-container {\n\tmargin: 8px 16px 16px 16px;\n\tflex-grow: 1;\n\tmin-height: 50px;\n\tfont-size: 18px;\n\tcolor: var(--text-color);\n\topacity: 0.5;\n}\n\n.track-info > .side-panel > .opponents-container.no-opponents {\n\tmargin: 8px 16px 16px 16px;\n\tfont-size: 18px;\n\tcolor: var(--text-color);\n\topacity: 0.5;\n}\n\n.track-info > .side-panel > .button.watch, .track-info > .side-panel > .button.play {\n\tflex-shrink: 0;\n\tmargin: 0 10px 10px 10px;\n\tpadding: 0 0 0 30px;\n\tbox-sizing: border-box;\n\twidth: calc(100% - 2 * 10px);\n\theight: 100px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\ttext-align: center;\n\tfont-size: 50px;\n}\n.track-info > .side-panel > .button.watch {\n\theight: 50px;\n\tfont-size: 40px;\n}\n\n.track-info > .side-panel > .button.watch > img, .track-info > .side-panel > .button.play > img {\n\tmargin: 0 0 0 10px;\n\tpadding: 0;\n\tvertical-align: middle;\n\twidth: 48px;\n\theight: 48px;\n\ttransition: transform 0.2s ease-in-out;\n\tpointer-events: none;\n}\n.track-info > .side-panel > .button.watch > img {\n\twidth: 36px;\n\theight: 36px;\n}\n.track-info > .side-panel > .button.watch:disabled > img {\n\topacity: 0.3;\n}\n\n.track-info > .side-panel > .button.watch:hover > img, .track-info > .side-panel > .button.play:hover > img {\n\ttransform: translateX(10px);\n}\n.track-info > .side-panel > .button.watch:disabled:hover > img {\n\ttransform: none;\n}\n\n@media (hover: none) {\n\t.track-info > .side-panel > .button.watch:hover > img, .track-info > .side-panel > .button.play:hover > img {\n\t\ttransform: none;\n\t}\n}\n\n.track-info > .side-panel > .back {\n\tmargin: 10px;\n}\n\n.track-info > .side-panel > .leaderboard-button {\n\tmargin: 10px;\n\tfloat: right;\n}\n", ""]); + const o = s + }, + 5739: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/quit.svg" + }, + 5769: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/state_pending.svg" + }, + 5798: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/rotation_axis_y_negative.svg" + }, + 5811: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.checkpoint {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\tmargin: 0;\n\tpadding: 8px 10px 8px 8px;\n\tline-height: 0;\n\tfont-size: 40px;\n\tcolor: var(--text-color);\n\ttext-align: left;\n\topacity: 0.9;\n\tclip-path: polygon(0 0, calc(100% - 8px) 0, 100% 100%, 0 100%);\n\tbackground-color: var(--surface-color);\n}\n.checkpoint.up {\n\tposition: absolute;\n\tbottom: auto;\n\ttop: 0;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n.checkpoint.hidden {\n\tdisplay: none;\n}\n\n.checkpoint > div {\n\tmargin: 0;\n\tpadding: 0 16px 0 16px;\n\tclip-path: polygon(0 0, calc(100% - 6px) 0, 100% 100%, 0 100%);\n\tbackground-color: var(--surface-tertiary-color);\n}\n.checkpoint.up > div {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 6px) 100%, 0 100%);\n}\n\n.checkpoint > div > img {\n\tmargin: 0 12px 5px 0;\n\tpadding: 0;\n\twidth: 24px;\n\theight: 24px;\n\tvertical-align: middle;\n}\n", ""]); + const o = s + }, + 5848: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.color-picker {\n\tmargin: 8px;\n}\n\n.color-picker > .value-saturation-picker {\n\tposition: relative;\n\tmargin: 0 0 8px 0;\n\twidth: 140px;\n\theight: 140px;\n\tbackground-color: #fff;\n\toverflow: hidden;\n}\n\n.color-picker > .value-saturation-picker > .marker {\n\tposition: absolute;\n\twidth: 12px;\n\theight: 12px;\n\tbackground-image: radial-gradient(closest-side, transparent, #000, #fff, #000, transparent);\n}\n\n.color-picker > .hue-picker {\n\tposition: relative;\n\twidth: 140px;\n\theight: 30px;\n\tbackground-image: linear-gradient(to right, \n\t\thsl(0, 100%, 50%),\n\t\thsl(60, 100%, 50%),\n\t\thsl(120, 100%, 50%),\n\t\thsl(180, 100%, 50%),\n\t\thsl(240, 100%, 50%),\n\t\thsl(300, 100%, 50%),\n\t\thsl(0, 100%, 50%)\n\t);\n\toverflow: hidden;\n}\n\n.color-picker > .hue-picker > .marker {\n\tposition: absolute;\n\ttop: 0;\n\theight: 100%;\n\twidth: 3px;\n\tbackground-image: linear-gradient(to right, #000, #fff, #000);\n}\n", ""]); + const o = s + }, + 5918: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/load.svg" + }, + 5959: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.customization {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.customization > .top {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\tbackground-color: var(--surface-color);\n}\n.customization > .top > .button {\n\tdisplay: inline-block;\n\tmargin: 8px 0;\n}\n.customization > .top > .button:first-of-type {\n\tmargin-left: 8px;\n}\n\n.customization > .save-message {\n\tmargin: 10px;\n\tpadding: 0;\n\tposition: absolute;\n\tfont-size: 30px;\n\tcolor: #96ff96;\n\ttext-shadow: 0 0 5px #000;\n\tpointer-events: none;\n\n\tleft: -10px;\n\topacity: 0;\n}\n.customization > .save-message.show {\n\tleft: 0;\n\topacity: 1;\n\ttransition: opacity 0.25s ease-in-out, left 0.25s ease-in-out;\n}\n.customization > .save-message.hide {\n\tleft: 0;\n\topacity: 0;\n\ttransition: opacity 0.25s ease-in-out, left 0.25s ease-in-out;\n}\n\n.customization > .colors {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\twidth: 100%;\n\ttext-align: center;\n\twhite-space: nowrap;\n}\n\n.customization > .colors > div {\n\tdisplay: inline-block;\n\tmargin: 0 10px;\n\tpadding: 0;\n\ttext-align: center;\n\tbackground: var(--surface-color);\n\tpointer-events: auto;\n}\n.customization > .colors > div > h2 {\n\tmargin: 0;\n\tpadding: 2px;\n\tfont-size: 26px;\n\tfont-weight: normal;\n\tbackground-color: var(--surface-secondary-color);\n\tcolor: var(--text-color);\n}\n.customization > .colors > div > input {\n\tmargin: 8px 8px 0 8px;\n\twidth: calc(140px - 8px * 2);\n\tfont-weight: normal;\n\tclip-path: none;\n\ttext-align: center;\n}\n", ""]); + const o = s + }, + 6027: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/pin.svg" + }, + 6057: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.editor {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.editor > .top {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.editor > .top > .button-bar {\n\tdisplay: flex;\n\tmargin: 0;\n\tpadding: 0 8px;\n\theight: 68px;\n\tbackground-color: var(--surface-color);\n\twhite-space: nowrap;\n}\n.editor > .top > .button-bar > .button {\n\tmargin: 8px 0;\n\tmin-width: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.editor > .top > .track-settings-container {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 6px 7px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 10px) 100%, 0 100%);\n\tfont-size: 30px;\n\tcolor: var(--text-color);\n\tbackground: var(--surface-secondary-color);\n}\n.editor > .top > .track-settings-container > button {\n\ttext-align: left;\n\tmin-width: 150px;\n\tmax-width: 450px;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.editor > .side {\n\tposition: absolute;\n\ttop: 68px;\n\tright: 0;\n\tmargin: 0;\n\tpadding: 0;\n\theight: calc(100% - 68px);\n\tdisplay: flex;\n\talign-items: end;\n}\n\n.editor > .side > .side-panel {\n\theight: 100%;\n\tbackground-color: var(--surface-secondary-color);\n\tpointer-events: auto;\n}\n\n.editor > .side > .side-panel > .category-panel, .editor > .side > .side-panel > .part-panel, .editor > .side > .side-panel > .color-panel {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding: 2px 2px 0 2px;\n\theight: 100%;\n\tbox-sizing: border-box;\n\toverflow-x: hidden;\n\toverflow-y: scroll;\n\tscrollbar-width: thin;\n}\n.editor > .side > .side-panel > .category-panel > button > img {\n\twidth: 96px;\n\theight: 96px;\n}\n.editor > .side > .side-panel > .part-panel.hidden {\n\tdisplay: none;\n}\n.editor > .side > .side-panel > .color-panel.hidden {\n\tdisplay: none;\n}\n\n.editor > .side > .side-panel button {\n\tdisplay: block;\n\tmargin: 0 0 2px 0;\n\tpadding: 5px;\n\tbackground-color: var(--button-color);\n\tborder: 2px solid rgb(38, 31, 88);\n\tcursor: pointer;\n}\n.editor > .side > .side-panel button:hover {\n\tbackground-color: var(--button-hover-color);\n}\n@media (hover: none) {\n\t.editor > .side > .side-panel button:hover {\n\t\tbackground-color: var(--button-color);\n\t}\n}\n.editor > .side > .side-panel button:active {\n\tbackground-color: var(--button-active-color);\n}\n.editor > .side > .side-panel button.selected {\n\tbackground-color: var(--button-hover-color);\n\tbox-shadow: inset 0 0 5px #fff;\n\tborder: 2px solid #fff;\n}\n.editor > .side > .side-panel button > img {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 64px;\n\theight: 64px;\n\t-webkit-filter: drop-shadow(0 0 2px #000);\n\tfilter: drop-shadow(0 0 2px #000);\n\tpointer-events: none;\n\ttransition: opacity 0.25s ease-out;\n}\n.editor > .side > .side-panel button > img.loading {\n\topacity: 0;\n\ttransition: none;\n}\n\n.editor > .message {\n\tmargin: 10px;\n\tpadding: 0;\n\tposition: absolute;\n\tfont-size: 30px;\n\tcolor: #ff9696;\n\ttext-shadow: 0 0 5px #000;\n\tpointer-events: none;\n\n\tleft: -10px;\n\topacity: 0;\n}\n.editor > .message.green {\n\tcolor: #96ff96;\n}\n.editor > .message.show {\n\tleft: 0;\n\topacity: 1;\n\ttransition: opacity 0.25s ease-in-out, left 0.25s ease-in-out;\n}\n.editor > .message.hide {\n\tleft: 0;\n\topacity: 0;\n\ttransition: opacity 0.25s ease-in-out, left 0.25s ease-in-out;\n}\n", ""]); + const o = s + }, + 6099: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/arrow_left.svg" + }, + 6150: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/arrow_right.svg" + }, + 6168: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/export.svg" + }, + 6244: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/state_verified.svg" + }, + 6314: e => { + "use strict"; + e.exports = function(e) { + var t = []; + return t.toString = function() { + return this.map((function(t) { + var n = "", + i = void 0 !== t[5]; + return t[4] && (n += "@supports (".concat(t[4], ") {")), t[2] && (n += "@media ".concat(t[2], " {")), i && (n += "@layer".concat(t[5].length > 0 ? " ".concat(t[5]) : "", " {")), n += e(t), i && (n += "}"), t[2] && (n += "}"), t[4] && (n += "}"), n + })).join("") + }, t.i = function(e, n, i, r, a) { + "string" == typeof e && (e = [ + [null, e, void 0] + ]); + var s = {}; + if (i) + for (var o = 0; o < this.length; o++) { + var l = this[o][0]; + null != l && (s[l] = !0) + } + for (var c = 0; c < e.length; c++) { + var h = [].concat(e[c]); + i && s[h[0]] || (void 0 !== a && (void 0 === h[5] || (h[1] = "@layer".concat(h[5].length > 0 ? " ".concat(h[5]) : "", " {").concat(h[1], "}")), h[5] = a), n && (h[2] ? (h[1] = "@media ".concat(h[2], " {").concat(h[1], "}"), h[2] = n) : h[2] = n), r && (h[4] ? (h[1] = "@supports (".concat(h[4], ") {").concat(h[1], "}"), h[4] = r) : h[4] = "".concat(r)), t.push(h)) + } + }, t + } + }, + 6366: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/apply.svg" + }, + 6474: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.nickname {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 40%;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 16px;\n\twidth: 500px;\n\tbox-sizing: border-box;\n\tbackground-color: var(--surface-color);\n}\n\n.nickname > h1 {\n\tmargin: 0 4px 0 4px;\n\tpadding: 0;\n\tfont-size: 35px;\n\tfont-weight: normal;\n\tcolor: var(--text-color);\n}\n\n.nickname > input[type=text] {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0.25em;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tfont-size: 36px;\n\tfont-weight: normal;\n}\n\n.nickname > p {\n\tmargin: 16px 4px 0 4px;\n\tpadding: 0;\n\tfont-size: 20px;\n\tcolor: var(--text-color);\n}\n\n.nickname > button {\n\tdisplay: inline-block;\n\tmargin: 16px 0 0 0;\n}\n.nickname > button:last-of-type {\n\tfloat: right;\n}\n\n.nickname > button.delete {\n\tposition: absolute;\n\tright: 8px;\n\ttop: 0;\n\tfont-size: 16px;\n\tpadding: 8px 16px;\n}\n\n.nickname > button.delete > img.button-icon {\n\tmargin: -5px 0 -2px -3px;\n\twidth: 16px;\n\theight: 16px;\n}\n\nbutton.nickname-verifier-button {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 22px;\n\tmargin: 0 4px;\n}\n\n.nickname-user-token {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tmargin: 0 4px;\n\ttext-align: left;\n\tfont-size: 18px;\n\topacity: 0.5;\n\tcolor: var(--text-color);\n\tpointer-events: all;\n\t-webkit-user-select: all;\n\t-moz-user-select: all;\n\t-ms-user-select: all;\n\tuser-select: all;\n}\n", ""]); + const o = s + }, + 6657: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.leaderboard {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 600px;\n\theight: 100%;\n\ttext-align: left;\n\tdisplay: flex;\n\tflex-shrink: 0;\n\tflex-direction: column;\n\tbackground-color: var(--surface-color);\n}\n\n.leaderboard > h2 {\n\tmargin: 10px 10px 0 10px;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.leaderboard > h3 {\n\tmargin: 0 10px 10px 10px;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 18px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n\topacity: 0.5;\n}\n\n.leaderboard > .container {\n\tmargin: 0;\n\tpadding: 0;\n\tflex-grow: 1;\n\tbackground-color: var(--surface-secondary-color);\n\toverflow-x: hidden;\n\toverflow-y: scroll;\n\tpointer-events: auto;\n}\n\n.leaderboard > .container > .loading-spinner-container {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.leaderboard > .container > .error-message {\n\tfont-size: 20px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.leaderboard > .container > button.main {\n\tmargin: 10px 10px 0 10px;\n\tpadding: 0;\n\tvertical-align: top;\n\twidth: calc(100% - 10px * 2);\n\theight: 100px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\ttext-align: left;\n\twhite-space: nowrap;\n}\n.leaderboard > .container > button.main:last-of-type {\n\tmargin-bottom: 10px;\n}\n\n.leaderboard > .container > button.main.self:not(:focus-visible) {\n\tbackground-color: #2e4182;\n}\n\n.leaderboard > .container > button.main.selected {\n\tbackground-color: var(--button-hover-color);\n}\n.leaderboard > .container > button.main.selected::after {\n\twidth: 100%;\n}\n\n.leaderboard > .container > button.main > .checkmark {\n\tdisplay: none;\n}\n\n.leaderboard > .container > button.main.selected > .checkmark {\n\tdisplay: block;\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n\tmargin: 6px;\n\twidth: 12px;\n\tanimation: leaderboard-checkmark-spawn 0.15s ease-out;\n}\n\n@keyframes leaderboard-checkmark-spawn {\n\t0% {\n\t\ttransform: scale(0);\n\t}\n\t90% {\n\t\ttransform: scale(1.2);\n\t}\n\t100% {\n\t\ttransform: scale(1);\n\t}\n}\n\n.leaderboard > .container > button.main > .image-container {\n\tdisplay: inline-block;\n\tposition: relative;\n\tbackground-color: rgba(0, 0, 0, 0.1);\n\twidth: 100px;\n\theight: 100px;\n}\n\n.leaderboard > .container > button.main > .image-container > img {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\tpointer-events: none;\n\topacity: 0;\n\ttransition: opacity 0.5s ease-out;\n}\n.leaderboard > .container > button.main > .image-container > img.show {\n\topacity: 1;\n}\n\n.leaderboard > .container > button.main > .left, .leaderboard > .container > button.main > .right {\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n\n.leaderboard > .container > button.main > div > p {\n\tmargin: 0;\n\tpadding: 12px;\n\tfont-size: 28px;\n\tcolor: var(--text-color);\n}\n\n.leaderboard > .container > button.main > div > .position > span {\n\tfont-size: 20px;\n\topacity: 0.3;\n}\n\n.leaderboard > .container > button.main > div > .name-container {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 28px;\n\tdisplay: flex;\n\talign-items: center;\n\twidth: 360px;\n}\n\n.leaderboard > .container > button.main > div > .name-container > .name {\n\tpadding: 12px;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n.leaderboard > .container > button.main:focus-visible > div > .name-container > .name {\n\ttext-decoration: underline;\n}\n\n.leaderboard > .container > button.main > div > .name-container > .self {\n\tmargin-left: -16px;\n\tpadding: 12px;\n\topacity: 0.5;\n\tfont-size: 16px;\n\tfont-style: normal;\n}\n\n.leaderboard > .container > button.main > div > .verified-state {\n\topacity: 0.8;\n\tposition: absolute;\n\tright: 6px;\n\tmargin: 6px 0 0 0;\n\tfont-size: 18px;\n}\n.leaderboard > .container > button.main > div > .verified-state > img {\n\tmargin: 0 0 0 2px;\n\tpadding: 0;\n\theight: 12px;\n\tvertical-align: middle;\n}\n.leaderboard > .container > button.main > div > .verified-state.verified {\n\tcolor: #5f5;\n}\n.leaderboard > .container > button.main > div > .verified-state.invalid {\n\tcolor: #f55;\n}\n.leaderboard > .container > button.main > div > .verified-state.pending {\n\tcolor: #ff5;\n}\n\n.leaderboard > .pages {\n\tmargin: 10px 10px 0 10px;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n.leaderboard > .pages > button.page {\n\tpadding: 0;\n\twidth: 0;\n\tflex-grow: 1;\n}\n.leaderboard > .pages > button.selected {\n\tbackground-color: var(--button-hover-color);\n}\n\n.leaderboard > .button-wrapper > .back {\n\tmargin: 10px;\n}\n\n.leaderboard > .button-wrapper > .button.only-verified {\n\tmargin: 10px 0;\n\tfloat: right;\n\tfont-size: 20px;\n\tline-height: 32px;\n}\n.leaderboard > .button-wrapper > .button.only-verified.disabled {\n\tcolor: rgba(255, 255, 255, 0.25);\n}\n\n.leaderboard > .button-wrapper > .button.only-verified > img {\n\tmargin-left: 6px;\n\tmargin-bottom: -4px;\n\twidth: 26px;\n}\n.leaderboard > .button-wrapper > .button.only-verified.disabled > img {\n\topacity: 0.25;\n}\n\n.leaderboard > .button-wrapper > .icon-button {\n\tmargin: 10px 0;\n\tfloat: right;\n}\n.leaderboard > .button-wrapper > .icon-button.first {\n\tmargin: 10px 10px 10px 0;\n}\n\n.leaderboard > .button-wrapper > .icon-button > img {\n\twidth: 28px;\n}\n.leaderboard > .button-wrapper > .icon-button.disabled > img, .leaderboard > .button-wrapper > .icon-button:disabled > img {\n\topacity: 0.25;\n}\n", ""]); + const o = s + }, + 6838: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/smoke.png" + }, + 6925: () => { + "use strict"; + + function e(e) { + throw new Error(e + ": No deterministic implementation") + } + const t = new WebAssembly.Instance(new WebAssembly.Module(Uint8Array.from(atob("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"), (e => e.charCodeAt(0))))).exports; + Math = { + E: 2.718281828459045, + LN10: 2.302585092994046, + LN2: .6931471805599453, + LOG2E: 1.4426950408889634, + LOG10E: .4342944819032518, + PI: 3.141592653589793, + SQRT1_2: .7071067811865476, + SQRT2: 1.4142135623730951, + abs: Math.abs, + acos: t.acos, + asin: t.asin, + atan: t.atan, + atan2: t.atan2, + ceil: Math.ceil, + cos: function(e) { + return Math.sin(e + Math.PI / 2) + }, + exp: t.exp, + floor: Math.floor, + log: t.log, + max: Math.max, + min: Math.min, + pow: t.pow, + random: Math.random, + round: Math.round, + sin: function(e) { + if (!Number.isFinite(e)) return NaN; + const t = (e = function(e) { + return (e %= 2 * Math.PI) < 0 && (e += 2 * Math.PI), e + }(e)) / (2 * Math.PI) * n.length, + i = Math.floor(t), + r = (i + 1) % n.length, + a = t - i; + return n[i] * (1 - a) + n[r] * a + }, + sqrt: t.sqrt, + tan: t.tan, + clz32: () => e("clz32"), + imul: () => e("imul"), + sign: Math.sign, + log10: t.log10, + log2: t.log2, + log1p: () => e("log1p"), + expm1: () => e("expm1"), + cosh: () => e("cosh"), + sinh: () => e("sinh"), + tanh: () => e("tanh"), + acosh: () => e("acosh"), + asinh: () => e("asinh"), + atanh: () => e("atanh"), + hypot: () => e("hypot"), + trunc: Math.trunc, + cbrt: () => e("cbrt"), + fround: Math.fround, + [Symbol.toStringTag]: "Math" + }; + const n = [0, .01745240643728351, .03489949670250097, .05233595624294383, .0697564737441253, .08715574274765817, .10452846326765346, .12186934340514748, .13917310096006544, .15643446504023087, .17364817766693033, .1908089953765448, .20791169081775931, .22495105434386498, .24192189559966773, .25881904510252074, .27563735581699916, .2923717047227367, .3090169943749474, .3255681544571567, .3420201433256687, .35836794954530027, .374606593415912, .3907311284892737, .40673664307580015, .42261826174069944, .4383711467890774, .45399049973954675, .4694715627858908, .48480962024633706, .49999999999999994, .5150380749100542, .5299192642332049, .544639035015027, .5591929034707468, .573576436351046, .5877852522924731, .6018150231520483, .6156614753256583, .6293203910498375, .6427876096865393, .6560590289905073, .6691306063588582, .6819983600624985, .6946583704589973, .7071067811865475, .7193398003386511, .7313537016191705, .7431448254773942, .7547095802227719, .766044443118978, .7771459614569708, .7880107536067219, .7986355100472928, .8090169943749475, .8191520442889918, .8290375725550417, .8386705679454239, .848048096156426, .8571673007021122, .8660254037844386, .8746197071393957, .8829475928589269, .8910065241883678, .898794046299167, .9063077870366499, .9135454576426009, .9205048534524404, .9271838545667873, .9335804264972017, .9396926207859083, .9455185755993167, .9510565162951535, .9563047559630354, .9612616959383189, .9659258262890683, .9702957262759965, .9743700647852352, .9781476007338057, .981627183447664, .984807753012208, .9876883405951378, .9902680687415704, .992546151641322, .9945218953682733, .9961946980917455, .9975640502598242, .9986295347545738, .9993908270190958, .9998476951563913, 1, .9998476951563913, .9993908270190958, .9986295347545738, .9975640502598242, .9961946980917455, .9945218953682734, .9925461516413221, .9902680687415704, .9876883405951377, .984807753012208, .981627183447664, .9781476007338057, .9743700647852352, .9702957262759965, .9659258262890683, .9612616959383189, .9563047559630355, .9510565162951536, .9455185755993168, .9396926207859084, .9335804264972017, .9271838545667874, .9205048534524404, .913545457642601, .90630778703665, .8987940462991669, .8910065241883679, .8829475928589271, .8746197071393959, .8660254037844387, .8571673007021123, .8480480961564261, .8386705679454239, .8290375725550417, .819152044288992, .8090169943749475, .7986355100472927, .788010753606722, .777145961456971, .766044443118978, .7547095802227721, .7431448254773945, .7313537016191706, .7193398003386511, .7071067811865476, .6946583704589975, .6819983600624986, .669130606358858, .6560590289905073, .6427876096865395, .6293203910498374, .6156614753256584, .6018150231520486, .5877852522924732, .5735764363510459, .5591929034707469, .5446390350150273, .5299192642332049, .5150380749100544, .49999999999999994, .48480962024633717, .4694715627858907, .45399049973954686, .4383711467890777, .4226182617406995, .40673664307580004, .39073112848927377, .37460659341591224, .35836794954530066, .3420201433256689, .3255681544571566, .3090169943749475, .29237170472273705, .2756373558169992, .258819045102521, .24192189559966773, .2249510543438652, .20791169081775931, .19080899537654497, .1736481776669307, .15643446504023098, .13917310096006533, .12186934340514755, .10452846326765373, .0871557427476582, .06975647374412552, .05233595624294425, .03489949670250114, .01745240643728344, 12246467991473532e-32, -.017452406437283192, -.0348994967025009, -.052335956242943564, -.06975647374412483, -.08715574274765794, -.1045284632676535, -.12186934340514774, -.13917310096006552, -.15643446504023073, -.17364817766693047, -.19080899537654472, -.20791169081775907, -.22495105434386498, -.2419218955996675, -.25881904510252035, -.2756373558169986, -.29237170472273677, -.30901699437494773, -.32556815445715676, -.34202014332566866, -.35836794954530043, -.374606593415912, -.39073112848927355, -.4067366430757998, -.4226182617406993, -.43837114678907707, -.45399049973954625, -.4694715627858905, -.48480962024633734, -.5000000000000001, -.5150380749100542, -.5299192642332048, -.5446390350150271, -.5591929034707467, -.5735764363510458, -.587785252292473, -.601815023152048, -.6156614753256578, -.6293203910498372, -.6427876096865393, -.6560590289905074, -.6691306063588582, -.6819983600624984, -.6946583704589974, -.7071067811865475, -.7193398003386509, -.7313537016191705, -.743144825477394, -.7547095802227717, -.7660444431189779, -.7771459614569711, -.7880107536067221, -.7986355100472928, -.8090169943749473, -.8191520442889916, -.8290375725550414, -.838670567945424, -.848048096156426, -.8571673007021121, -.8660254037844384, -.8746197071393955, -.882947592858927, -.8910065241883678, -.8987940462991668, -.90630778703665, -.913545457642601, -.9205048534524403, -.9271838545667873, -.9335804264972016, -.9396926207859082, -.9455185755993168, -.9510565162951535, -.9563047559630353, -.961261695938319, -.9659258262890683, -.9702957262759965, -.9743700647852351, -.9781476007338056, -.981627183447664, -.984807753012208, -.9876883405951377, -.9902680687415703, -.992546151641322, -.9945218953682733, -.9961946980917455, -.9975640502598242, -.9986295347545739, -.9993908270190958, -.9998476951563913, -1, -.9998476951563913, -.9993908270190958, -.9986295347545739, -.9975640502598243, -.9961946980917455, -.9945218953682733, -.992546151641322, -.9902680687415704, -.9876883405951378, -.9848077530122081, -.9816271834476641, -.9781476007338056, -.9743700647852352, -.9702957262759966, -.9659258262890684, -.961261695938319, -.9563047559630354, -.9510565162951536, -.945518575599317, -.9396926207859083, -.9335804264972017, -.9271838545667874, -.9205048534524405, -.9135454576426011, -.9063077870366503, -.898794046299167, -.8910065241883679, -.8829475928589271, -.8746197071393956, -.8660254037844386, -.8571673007021123, -.8480480961564262, -.8386705679454243, -.8290375725550416, -.8191520442889918, -.8090169943749476, -.798635510047293, -.7880107536067223, -.7771459614569713, -.7660444431189781, -.7547095802227722, -.743144825477394, -.7313537016191703, -.7193398003386512, -.7071067811865477, -.6946583704589976, -.6819983600624989, -.6691306063588588, -.6560590289905074, -.6427876096865396, -.6293203910498372, -.6156614753256582, -.6018150231520483, -.5877852522924734, -.5735764363510465, -.5591929034707473, -.544639035015027, -.529919264233205, -.5150380749100545, -.5000000000000004, -.48480962024633767, -.4694715627858908, -.45399049973954697, -.4383711467890778, -.4226182617406992, -.40673664307580015, -.3907311284892739, -.37460659341591235, -.35836794954530077, -.34202014332566943, -.3255681544571567, -.3090169943749477, -.29237170472273716, -.27563735581699894, -.2588190451025207, -.24192189559966787, -.22495105434386534, -.20791169081775987, -.19080899537654467, -.1736481776669304, -.15643446504023112, -.13917310096006588, -.12186934340514811, -.1045284632676543, -.08715574274765832, -.06975647374412564, -.05233595624294348, -.034899496702500823, -.01745240643728356] + }, + 7173: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/windowed.svg" + }, + 7404: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/car_thumbnail_placeholder.png" + }, + 7479: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.timer {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\twidth: 100%;\n\ttext-align: center;\n\topacity: 0.9;\n}\n.timer.up {\n\tbottom: auto;\n\ttop: 0;\n}\n.timer.hidden {\n\tdisplay: none;\n}\n\n.timer > div {\n\tmargin: 0;\n\tpadding: 0;\n\tdisplay: inline-flex;\n\tflex-direction: column;\n\twidth: 240px;\n\tvertical-align: bottom;\n}\n.timer.up > div {\n\tflex-direction: column-reverse;\n\tvertical-align: top;\n}\n.timer > div > .title-container {\n\tposition: relative;\n\tmargin: 0 auto;\n\twidth: 220px;\n\theight: 32px;\n}\n.timer > div > .title-container > h2 {\n\tposition: absolute;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tcolor: var(--text-color);\n\tfont-size: 26px;\n\tfont-weight: normal;\n\ttext-shadow: 1px 1px 1px var(--surface-color), -1px 1px 1px var(--surface-color), -1px -1px 1px var(--surface-color), 1px -1px 1px var(--surface-color);\n}\n.timer:not(.up) > div > .title-container > .title {\n\tmargin-top: 8px;\n}\n.timer > div > .title-container > .checkpoint-time {\n\topacity: 0;\n\tfont-size: 32px;\n}\n.timer > div > .title-container > .checkpoint-time.green {\n\tcolor: #5f5;\n}\n.timer > div > .title-container > .checkpoint-time.red {\n\tcolor: #f55;\n}\n\n.timer > div > .time {\n\tmargin: 0;\n\tpadding: 0;\n\tbackground-color: var(--surface-color);\n}\n.timer > .left > .time {\n\tpadding: 8px 4px 8px 10px;\n\tclip-path: polygon(8px 0, 100% 0, 100% 100%, 0 100%);\n}\n.timer.up > .left > .time {\n\tclip-path: polygon(0 0, 100% 0, 100% 100%, 8px 100%);\n}\n.timer > .center > .time {\n\tposition: relative;\n\tz-index: 1;\n\tmargin: 0 -12px;\n\tpadding: 8px 10px;\n\tclip-path: polygon(8px 0, calc(100% - 8px) 0, 100% 100%, 0 100%);\n}\n.timer.up > .center > .time {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 8px 100%);\n}\n.timer > .right > .time {\n\tpadding: 8px 10px 8px 4px;\n\tclip-path: polygon(0 0, calc(100% - 8px) 0, 100% 100%, 0 100%);\n}\n.timer.up > .right > .time {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n\n.timer > div > .time > p {\n\tmargin: 0;\n\tpadding: 0;\n\tbackground-color: var(--surface-tertiary-color);\n\tcolor: var(--text-color);\n\tfont-size: 34px;\n}\n.timer > .left > .time > p {\n\tclip-path: polygon(6px 0, 100% 0, 100% 100%, 0 100%);\n}\n.timer.up > .left > .time > p {\n\tclip-path: polygon(0 0, 100% 0, 100% 100%, 6px 100%);\n}\n.timer > .center > .time > p {\n\tfont-size: 46px;\n\tclip-path: polygon(6px 0, calc(100% - 6px) 0, 100% 100%, 0 100%);\n}\n.timer.up > .center > .time > p {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 6px) 100%, 6px 100%);\n}\n.timer > .right > .time > p {\n\tclip-path: polygon(0 0, calc(100% - 6px) 0, 100% 100%, 0 100%);\n}\n.timer.up > .right > .time > p {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 6px) 100%, 0 100%);\n}\n\n.timer > div > .time > p.green {\n\tcolor: #5f5;\n}\n.timer > div > .time > p.red {\n\tcolor:#f55;\n}\n\n.timer > div > .time > p > span {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n\ttext-align: center;\n}\n.timer > div > .time > p > span.sign {\n\tmargin-left: -4px;\n\twidth: 0.7em;\n}\n", ""]); + const o = s + }, + 7581: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/fullscreen.svg" + }, + 7659: e => { + "use strict"; + var t = {}; + e.exports = function(e, n) { + var i = function(e) { + if (void 0 === t[e]) { + var n = document.querySelector(e); + if (window.HTMLIFrameElement && n instanceof window.HTMLIFrameElement) try { + n = n.contentDocument.head + } catch (e) { + n = null + } + t[e] = n + } + return t[e] + }(e); + if (!i) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); + i.appendChild(n) + } + }, + 7687: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.track-export > .background {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(20, 20, 30, 0.5);\n\tpointer-events: auto;\n}\n\n.track-export > .box {\n\tposition: absolute;\n\tleft: calc(50% - 80% / 2);\n\ttop: 20px;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 10px;\n\tbox-sizing: border-box;\n\twidth: 80%;\n\theight: calc(100% - 20px * 2);\n\tbackground-color: var(--surface-color);\n}\n\n.track-export > .box > .bar {\n\ttext-align: left;\n\tpointer-events: auto;\n}\n.track-export > .box > .bar > .button.right {\n\tfloat: right;\n}\n\n.track-export > .box > textarea {\n\tmargin: 10px 0 0 0;\n\tpadding: 10px;\n\tbox-sizing: border-box;\n\tmin-width: 100%;\n\tmax-width: 100%;\n\tmin-height: calc(100% - 52px - 10px);\n\tmax-height: calc(100% - 52px - 10px);\n\tpointer-events: auto;\n\tbackground-color: var(--surface-tertiary-color);\n\tborder: none;\n\tresize: none;\n\tcolor: var(--text-color);\n\tword-break: break-all;\n\tfont-size: 20px;\n}\n.track-export > .box > textarea:focus-visible {\n\toutline: none;\n}\n", ""]); + const o = s + }, + 7780: (e, t, n) => { + var i = { + "./apply.svg": 6366, + "./arrow_down.svg": 516, + "./arrow_left.svg": 6099, + "./arrow_right.svg": 6150, + "./arrow_up.svg": 2207, + "./back.svg": 8787, + "./cancel.svg": 1784, + "./car_stripe.svg": 2344, + "./car_thumbnail_placeholder.png": 7404, + "./checkmark.svg": 9809, + "./checkpoint.svg": 5148, + "./clouds.jpg": 8875, + "./community_tracks.jpg": 8115, + "./copy.svg": 1925, + "./custom_tracks.jpg": 2709, + "./customize.svg": 9027, + "./delete.svg": 2319, + "./desert.svg": 1705, + "./desert_colored.svg": 1758, + "./discord.svg": 858, + "./editor.svg": 8889, + "./empty.svg": 493, + "./erase.svg": 1936, + "./export.svg": 6168, + "./fullscreen.svg": 7581, + "./grid_large.svg": 3518, + "./grid_small.svg": 4930, + "./helmet.svg": 1333, + "./help.svg": 5031, + "./icon.svg": 853, + "./import.svg": 9077, + "./load.svg": 5918, + "./logo.svg": 8903, + "./official_tracks.jpg": 9391, + "./overlapping_disabled.svg": 8358, + "./overlapping_enabled.svg": 2493, + "./pause.svg": 9708, + "./pending.svg": 3223, + "./pin.svg": 6027, + "./play.svg": 9236, + "./preview.svg": 9570, + "./quit.svg": 5739, + "./random.svg": 2175, + "./reset.svg": 1719, + "./reset_settings.svg": 4593, + "./rotate.svg": 4563, + "./rotation_axis_x_negative.svg": 5001, + "./rotation_axis_x_positive.svg": 77, + "./rotation_axis_y_negative.svg": 5798, + "./rotation_axis_y_positive.svg": 9062, + "./rotation_axis_z_negative.svg": 3895, + "./rotation_axis_z_positive.svg": 4411, + "./save.svg": 4309, + "./search.svg": 8718, + "./settings.svg": 8237, + "./share.svg": 3755, + "./smoke.png": 6838, + "./state_invalid.svg": 2553, + "./state_pending.svg": 5769, + "./state_verified.svg": 6244, + "./summer.svg": 3901, + "./test.svg": 1734, + "./verified.svg": 3902, + "./windowed.svg": 7173, + "./winter.svg": 813, + "./winter_colored.svg": 5010 + }; + + function r(e) { + var t = a(e); + return n(t) + } + + function a(e) { + if (!n.o(i, e)) { + var t = new Error("Cannot find module '" + e + "'"); + throw t.code = "MODULE_NOT_FOUND", t + } + return i[e] + } + r.keys = function() { + return Object.keys(i) + }, r.resolve = a, e.exports = r, r.id = 7780 + }, + 7818: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.user-export {\n\tposition: absolute;\n\tleft: calc(50% - 500px / 2);\n\ttop: 35%;\n\tz-index: 2;\n\tmargin: 0;\n\tpadding: 10px;\n\tbox-sizing: border-box;\n\twidth: 500px;\n\theight: 150px;\n\tbackground-color: var(--surface-color);\n}\n\n.user-export > textarea {\n\tmargin: 0;\n\tpadding: 10px;\n\tbox-sizing: border-box;\n\tmin-width: 100%;\n\tmax-width: 100%;\n\tmin-height: calc(100% - 52px - 10px);\n\tmax-height: calc(100% - 52px - 10px);\n\tpointer-events: auto;\n\tbackground-color: var(--surface-tertiary-color);\n\tborder: none;\n\tresize: none;\n\tcolor: var(--text-color);\n\tword-break: break-all;\n\tfont-size: 20px;\n}\n.user-export > textarea:focus-visible {\n\toutline: none;\n}\n\n.user-export > .bar {\n\tmargin: 8px 0 0 0;\n}\n\n.user-export > .bar > .button.right {\n\tfloat: right;\n}\n", ""]); + const o = s + }, + 7825: e => { + "use strict"; + e.exports = function(e) { + if ("undefined" == typeof document) return { + update: function() {}, + remove: function() {} + }; + var t = e.insertStyleElement(e); + return { + update: function(n) { + ! function(e, t, n) { + var i = ""; + n.supports && (i += "@supports (".concat(n.supports, ") {")), n.media && (i += "@media ".concat(n.media, " {")); + var r = void 0 !== n.layer; + r && (i += "@layer".concat(n.layer.length > 0 ? " ".concat(n.layer) : "", " {")), i += n.css, r && (i += "}"), n.media && (i += "}"), n.supports && (i += "}"); + var a = n.sourceMap; + a && "undefined" != typeof btoa && (i += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))), " */")), t.styleTagTransform(i, e, t.options) + }(t, e, n) + }, + remove: function() { + ! function(e) { + if (null === e.parentNode) return !1; + e.parentNode.removeChild(e) + }(t) + } + } + } + }, + 8115: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/community_tracks.jpg" + }, + 8229: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.hint {\n\tpadding: 0 280px;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 150px;\n\twidth: 100%;\n\tbox-sizing: border-box;\n\ttext-align: center;\n\tcolor: #fff;\n\ttext-shadow: 0 0 5px #000;\n\tpointer-events: none;\n\topacity: 0;\n}\n.hint.show {\n\ttop: 150px;\n\topacity: 1;\n\ttransition: opacity 0.25s ease-in-out, top 0.25s ease-in-out;\n}\n.hint.hide {\n\ttop: 160px;\n\topacity: 0;\n\ttransition: opacity 0.25s ease-in-out, top 0.25s ease-in-out;\n}\n\n.hint > .title {\n\tfont-size: 32px;\n}\n\n.hint > .subtitle {\n\tmargin: 16px 0 0 0;\n\tfont-size: 24px;\n}\n", ""]); + const o = s + }, + 8237: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/settings.svg" + }, + 8353: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => g + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a), + o = n(4417), + l = n.n(o), + c = new URL(n(9391), n.b), + h = new URL(n(8115), n.b), + d = new URL(n(2709), n.b), + u = s()(r()), + p = l()(c), + f = l()(h), + m = l()(d); + u.push([e.id, `\n.track-selection {\n\tposition: absolute;\n\tbottom: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: left;\n}\n\n.track-selection > .bar {\n\tdisplay: flex;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\tbackground-color: var(--surface-color);\n\ttext-align: left;\n\n\tpointer-events:auto;\n}\n.track-selection > .bar > .button {\n\tmargin: 8px 12px;\n}\n\n.track-selection > .bar > .search-bar-container {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-grow: 1;\n}\n.track-selection > .bar > .search-bar-container > input {\n\tmargin: 8px -10px;\n\tpadding: 0 20px;\n\tflex-grow: 1;\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\tcolor: var(--text-color);\n\ttext-indent: 2px; /* Without this the italic text will be cut off on the left side. */\n}\n.track-selection > .bar > .search-bar-container > img {\n\tmargin: 8px -10px 8px 0;\n\tpadding: 0 16px;\n\twidth: 24px;\n\tbackground-color: var(--button-hover-color);\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n\n.track-selection .category-container {\n\tdisplay: flex;\n\tbackground-color: var(--surface-secondary-color);\n}\n.track-selection .category-container > button {\n\tposition: relative;\n\tmargin: 0 -3px;\n\tpadding: 0.6em 0;\n\tflex-grow: 1;\n\tbackground-color: transparent;\n\tfont-size: 2.8vw;\n\tfont-weight: bold;\n\ttext-shadow: 2px 2px 0 #112052, 0 0 10px #000, 0 0 10px #000;\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n.track-selection .category-container > button:first-of-type {\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n.track-selection .category-container > button:last-of-type {\n\tclip-path: polygon(8px 0, 100% 0, 100% 100%, 0 100%);\n}\n.track-selection .category-container > button::before {\n\tcontent: "";\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tz-index: -1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-position: center;\n\tbackground-size: cover;\n\tfilter: blur(2px);\n\ttransition: filter 0.2s ease-in-out, 0.2s ease-in-out;\n}\n.track-selection .category-container > button.official::before {\n\tbackground-image: url(${p});\n}\n.track-selection .category-container > button.community::before {\n\tbackground-image: url(${f});\n}\n.track-selection .category-container > button.custom::before {\n\tbackground-image: url(${m});\n}\n.track-selection .category-container > button:hover::before {\n\tfilter: none;\n\ttransform: scale(1.1);\n}\n@media (hover: none) {\n\t.track-selection .category-container > button:hover::before {\n\t\tfilter: blur(2px);\n\t\ttransform: none;\n\t}\n\n\t.track-selection .category-container > button:active::before {\n\t\tfilter: none;\n\t\ttransform: scale(1.1);\n\t}\n}\n.track-selection .category-container > button.selected::before {\n\tfilter: none;\n}\n.track-selection .category-container > button::after {\n\tbackground-color: transparent;\n}\n.track-selection .category-container > button.selected::after {\n\twidth: 100%;\n}\n\n.track-selection .category-container > button > .cover {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tz-index: -1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(17, 32, 82, 0.75);\n\ttransition: background-color 0.2s ease-in-out;\n}\n.track-selection .category-container > button:hover > .cover {\n\tbackground-color: rgba(51, 75, 119, 0.5);\n}\n@media (hover: none) {\n\t.track-selection .category-container > button:hover > .cover {\n\t\tbackground-color: rgba(17, 32, 82, 0.75);\n\t}\n}\n.track-selection .category-container > button:active > .cover {\n\tbackground-color: rgba(21, 31, 65, 0.5);\n}\n.track-selection .category-container > button.selected > .cover {\n\tbackground-color: transparent;\n}\n\n@media (max-width: 1150px) {\n\t.track-selection .category-container > button {\n\t\tfont-size: 32.2px;\n\t}\n}\n\n.track-selection .tracks-container {\n\tmargin: 0;\n\tpadding: 20px 60px;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tflex-grow: 1;\n\toverflow-y: auto;\n\tpointer-events: auto;\n\tdisplay: none;\n}\n.track-selection .tracks-container.open {\n\tdisplay: block;\n}\n.track-selection.editor-track-selection .tracks-container {\n\tbackground-color: rgba(20, 20, 45, 0.8);\n}\n\n.track-selection .tracks-container > .empty {\n\tmargin: 100px;\n\tcolor: var(--text-color);\n\ttext-align: center;\n}\n.track-selection .tracks-container > .empty > .title {\n\tfont-size: 48px;\n}\n.track-selection .tracks-container > .empty > .description {\n\tmargin: 20px 0 0 0;\n\tfont-size: 32px;\n\topacity: 0.75;\n}\n\n.track-selection .environment-title {\n\tmargin: 0.5em 0.4em;\n\tpadding: 0;\n\tfont-size: 50px;\n\tfont-weight: normal;\n\tborder-bottom-width: 4px;\n\tborder-bottom-style: solid;\n\t\n}\n.track-selection .environment-title.summer {\n\tcolor: var(--text-color);\n\tborder-image: linear-gradient(to right, var(--text-color), transparent) 1;\n}\n.track-selection .environment-title.winter {\n\tcolor: #bed8f7;\n\tborder-image: linear-gradient(to right, #bed8f7, transparent) 1;\n}\n.track-selection .environment-title.desert {\n\tcolor: #ede2af;\n\tborder-image: linear-gradient(to right, #ede2af, transparent) 1;\n}\n\n.track-selection .environment-title > img {\n\tmargin: 6px 8px;\n\twidth: 36px;\n\theight: 36px;\n\tvertical-align: bottom;\n}\n\n.track-selection .tracks-container .track {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n\n.track-selection .tracks-container .track button {\n\tmargin: 10px;\n\tpadding: 0;\n\tcolor: var(--text-color);\n\tfont-size: 32px;\n}\n.track-selection .tracks-container .track button:after {\n\tborder-bottom: none;\n}\n.track-selection .tracks-container .track button:focus-visible {\n\ttext-decoration: none;\n}\n\n.track-selection .track-title {\n\tmargin: 0;\n\tpadding: 4px;\n\tfont-size: 25px;\n\tbackground-color: var(--surface-secondary-color);\n}\n.track-selection .tracks-container .track button:focus-visible .track-title {\n\ttext-decoration: underline;\n}\n.track-selection .track-title > p {\n\tmargin: 0;\n\tpadding: 0 22px;\n\twidth: 208px;\n\tbox-sizing: border-box;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.track-selection .track canvas {\n\tmargin: 0;\n\tpadding: 20px 40px;\n\twidth: 128px;\n\theight: 128px;\n\tobject-fit: contain;\n\t-webkit-filter: drop-shadow(0 0 3px #000);\n\tfilter: drop-shadow(0 0 3px #000);\n\timage-rendering: pixelated;\n}\n\n.track-selection .track .environment {\n\tposition: absolute;\n\tright: 14px;\n\tbottom: 40px;\n\twidth: 24px;\n\topacity: 0.2;\n\tpointer-events: none;\n}\n\n.track-selection .record {\n\tmargin: 0;\n\tpadding: 4px;\n\tfont-size: 24px;\n\tbackground-color: var(--surface-secondary-color);\n\tcolor: var(--text-color);\n}\n\n.track-selection .delete-button {\n\tposition: absolute;\n\ttop: 7px;\n\tright: 6px;\n\tmargin: 0;\n\tpadding: 0;\n\tline-height: 0;\n\tborder-radius: 2px;\n\tborder: none;\n\tbackground-color: var(--button-color);\n\n\tpointer-events: auto;\n\tcursor: pointer;\n}\n.track-selection .delete-button:hover {\n\tbackground-color: var(--button-hover-color);\n}\n@media (hover: none) {\n\t.track-selection .delete-button:hover {\n\t\tbackground-color: var(--button-color);\n\t}\n}\n.track-selection .delete-button:active {\n\tbackground-color: var(--button-active-color);\n}\n.track-selection .delete-button > img {\n\tmargin: 0;\n\tpadding: 0;\n\theight: 20px;\n\tvertical-align: top;\n\tpointer-events: none;\n}\n`, ""]); + const g = u + }, + 8358: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/overlapping_disabled.svg" + }, + 8419: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => g + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a), + o = n(4417), + l = n.n(o), + c = new URL(n(3682), n.b), + h = new URL(n(2208), n.b), + d = new URL(n(2832), n.b), + u = s()(r()), + p = l()(c), + f = l()(h), + m = l()(d); + u.push([e.id, `\n:root {\n\tinterpolate-size: allow-keywords; \n\n\t--text-color: #fff;\n\t--text-disabled-color: #5d6a7c;\n\t--surface-color: #28346a;\n\t--surface-secondary-color: #212b58;\n\t--surface-tertiary-color: #192042;\n\t--surface-transparent-color: rgba(40, 52, 106, 0.5);\n\t--button-color: #112052;\n\t--button-hover-color: #334b77;\n\t--button-active-color: #151f41;\n\t--button-disabled-color: #313d53;\n}\n\n@font-face {\n\tfont-family: ForcedSquare;\n\tsrc:\n\t\turl(${p}) format("woff2"),\n\t\turl(${f}) format("woff"),\n\t\turl(${m}) format("truetype");\n}\n\nhtml, body {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\toverscroll-behavior: none;\n\n\tbackground: #000;\n}\n\nbody {\n\tscrollbar-color: #7272c2 #223;\n\ttouch-action: none;\n}\n\n* {\n\tfont-style: italic;\n\tfont-family: ForcedSquare, Arial, sans-serif;\n\tline-height: 1;\n}\n\n#screen {\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n\theight: 100%;\n\t-webkit-tap-highlight-color: transparent;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\ttouch-action: none;\n}\n\n#ui {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\ttransform-origin: 0 0;\n\tpointer-events: none;\n\t-webkit-tap-highlight-color: transparent;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n::-webkit-scrollbar {\n\twidth: 8px;\n\tbackground-color: #223;\n}\n::-webkit-scrollbar-thumb {\n\tborder-radius: 4px;\n\tbackground-color: #7272c2;\n}\n\n::selection {\n\tbackground-color: #5936d6;\n\tcolor: #fff;\n}\n\n.hide-cursor {\n\tcursor: none;\n}\n\n.hidden {\n\tdisplay: none;\n}\n\ninput[type="text"] {\n\tmargin: 0;\n\tpadding: 4px 8px;\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\tfont-size: 24px;\n\tfont-weight: bold;\n\ttext-indent: 6px; /* Fixes italic text being cut off. */\n\tcolor: var(--text-color);\n\tbackground-color: var(--surface-tertiary-color);\n\tborder: none;\n\tpointer-events: auto;\n}\ninput[type="text"]::placeholder {\n\tcolor: var(--text-color);\n\topacity: 0.25;\n}\ninput[type="text"]:focus-visible {\n\toutline: none;\n}\n\ninput[type="range"] {\n\tmargin: 0;\n\tpadding: 0;\n\t-webkit-appearance: none;\n\tappearance: none;\n\tbackground: transparent;\n\tcursor: pointer;\n\taccent-color: var(--text-color);\n}\ninput[type="range"]::-webkit-slider-runnable-track {\n\tbackground-color: var(--surface-tertiary-color);\n\theight: 10px;\n}\ninput[type="range"]::-moz-range-track {\n\tbackground-color: var(--surface-tertiary-color);\n\theight: 10px;\n}\ninput[type="range"]::-webkit-slider-thumb {\n\t-webkit-appearance: none;\n\tappearance: none;\n\tborder-radius: 0;\n\tbackground: var(--text-color);\n\twidth: 32px;\n\theight: 32px;\n\tmargin: -13px 0 0 0;\n\tborder: 4px solid var(--button-color);\n\toutline: 2px solid var(--text-color);\n}\ninput[type="range"]::-webkit-slider-thumb:hover {\n\tborder: 4px solid var(--button-hover-color);\n}\n@media (hover: none) {\n\tinput[type="range"]::-webkit-slider-thumb:hover {\n\t\tborder: 4px solid var(--button-color);\n\t}\n}\ninput[type="range"]::-webkit-slider-thumb:active {\n\tborder: 4px solid var(--button-active-color);\n}\ninput[type="range"]::-moz-range-thumb {\n\t-webkit-appearance: none;\n\tappearance: none;\n\tborder-radius: 0;\n\tbackground: var(--text-color);\n\twidth: 24px;\n\theight: 24px;\n\tborder: 4px solid var(--button-color);\n\toutline: 2px solid var(--text-color);\n}\ninput[type="range"]::-moz-range-thumb:hover {\n\tborder: 4px solid var(--button-hover-color);\n}\n@media (hover: none) {\n\tinput[type="range"]::-moz-range-thumb:hover {\n\t\tborder: 4px solid var(--button-color);\n\t}\n}\ninput[type="range"]::-moz-range-thumb:active {\n\tborder: 4px solid var(--button-active-color);\n}\n\n.button {\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 8px 18px;\n\tbackground-color: var(--button-color);\n\tborder: none;\n\tclip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n\tcolor: var(--text-color);\n\tfont-size: 32px;\n\n\tpointer-events: auto;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\tcursor: pointer;\n}\n.button::after {\n\tcontent: "";\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tz-index: -1;\n\twidth: 0;\n\theight: 100%;\n\tbackground-color: var(--button-hover-color);\n\tborder-bottom: 2px solid var(--text-color);\n\ttransition: width 0.1s ease-in-out;\n}\n.button:hover::after {\n\twidth: 100%;\n}\n@media (hover: none) {\n\t.button::after {\n\t\tbackground-color: var(--button-active-color);\n\t}\n\n\t.button:hover::after {\n\t\twidth: 0;\n\t}\n}\n.button:active::after {\n\tbackground-color: var(--button-active-color);\n\twidth: 100%;\n}\n.button:focus-visible {\n\tbackground-color: var(--button-hover-color);\n\ttext-decoration: underline;\n\toutline: none;\n}\n.button > img.button-icon {\n\tmargin: -6px -4px 0 -4px;\n\tpadding: 0;\n\twidth: 32px;\n\theight: 32px;\n\tvertical-align: middle;\n\tpointer-events: none;\n}\n.button:disabled {\n\tbackground-color: var(--button-disabled-color);\n\tcolor: var(--text-disabled-color);\n\tcursor: default;\n}\n.button:disabled:after {\n\tcontent: none;\n}\n.button:disabled > img.button-icon {\n\topacity: 0.3;\n}\n`, ""]); + const g = u + }, + 8718: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/search.svg" + }, + 8768: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.preview-toolbar {\n\tposition: absolute;\n\tleft: 0;\n\tbottom: 0;\n\tpadding: 8px 10px 8px 8px;\n\tbackground-color: var(--surface-color);\n\tclip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 0 100%);\n}\n", ""]); + const o = s + }, + 8787: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/back.svg" + }, + 8875: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/clouds.jpg" + }, + 8889: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/editor.svg" + }, + 8903: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/logo.svg" + }, + 8909: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.editor-checkpoint-order > .buttons {\n\tdisplay: inline-block;\n\tvertical-align: bottom;\n}\n.editor-checkpoint-order > .buttons > button {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: var(--button-color);\n\tpointer-events: auto;\n\tcursor: pointer;\n}\n.editor-checkpoint-order > .buttons > button:hover {\n\tbackground-color: var(--button-hover-color);\n}\n@media (hover: none) {\n\t.editor-checkpoint-order > .buttons > button:hover {\n\t\tbackground-color: var(--button-color);\n\t}\n}\n.editor-checkpoint-order > .buttons > button:active {\n\tbackground-color: var(--button-active-color);\n}\n\n.editor-checkpoint-order > .buttons > button > img {\n\tmargin: 0;\n\tpadding: 0 6px;\n\twidth: 20px;\n\theight: 20px;\n\tvertical-align: bottom;\n\tpointer-events: none;\n}\n.editor-checkpoint-order.touch > .buttons > button > img {\n\tpadding: 24px;\n\twidth: 40px;\n\theight: 40px;\n}\n\n.editor-checkpoint-order > p {\n\tmargin: 0;\n\tpadding: 0 10px;\n\tdisplay: inline-block;\n\tvertical-align: bottom;\n\tline-height: 40px;\n\tmin-width: 275px;\n\tfont-size: 26px;\n\ttext-align: center;\n\tbackground-color: var(--surface-transparent-color);\n\tcolor: var(--text-color);\n}\n.editor-checkpoint-order.touch > p {\n\tline-height: calc((40px + 2 * 24px) * 2);\n}\n", ""]); + const o = s + }, + 9027: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/customize.svg" + }, + 9062: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/rotation_axis_y_positive.svg" + }, + 9077: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/import.svg" + }, + 9207: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n#transition-layer {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: #000;\n\tpointer-events: none;\n\n\topacity: 0;\n\ttransition: 0.25s ease-in-out opacity;\n}\n", ""]); + const o = s + }, + 9236: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/play.svg" + }, + 9242: (e, t, n) => { + "use strict"; + n.d(t, { + A: () => o + }); + var i = n(1601), + r = n.n(i), + a = n(6314), + s = n.n(a)()(r()); + s.push([e.id, "\n.editor-help > .background {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tz-index: 1;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(20, 20, 30, 0.5);\n\tpointer-events: auto;\n}\n\n.editor-help > .container {\n\tposition: absolute;\n\tleft: calc(50% - 80% / 2);\n\ttop: 0;\n\tz-index: 2;\n\tdisplay: flex;\n\tflex-direction: column;\n\tbox-sizing: border-box;\n\twidth: 80%;\n\theight: 100%;\n\tbackground-color: var(--surface-color);\n}\n\n.editor-help > .container > h1 {\n\tmargin: 10px;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 38px;\n\ttext-align: center;\n\tcolor: var(--text-color);\n}\n\n.editor-help > .container > .content {\n\tflex-grow: 1;\n\tpadding: 40px;\n\tbackground-color: var(--surface-secondary-color);\n\toverflow-y: auto;\n\tpointer-events: auto;\n}\n\n.editor-help > .container > .content > h2 {\n\tmargin: 32px 0 16px 0;\n\tpadding: 0;\n\tfont-weight: normal;\n\tfont-size: 30px;\n\tcolor: var(--text-color);\n\tborder-bottom: 2px solid var(--text-color);\n}\n.editor-help > .container > .content > h2:first-of-type {\n\tmargin-top: 0;\n}\n\n.editor-help > .container > .content > p {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 20px;\n\tcolor: var(--text-color);\n\twhite-space: pre-wrap;\n}\n\n.editor-help > .container > .content > .part-images {\n\tdisplay: flex;\n\tjustify-content: space-around;\n}\n\n.editor-help > .container > .content > .part-images > div {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.editor-help > .container > .content > .part-images > div > img {\n\twidth: 128px;\n\theight: 128px;\n\tfilter: drop-shadow(0 4px 5px rgba(0, 0, 0, 0.4));\n\tpointer-events: none;\n\ttransition: opacity 0.25s ease-out;\n}\n.editor-help > .container > .content > .part-images > div > img.loading {\n\topacity: 0;\n}\n\n.editor-help > .container > .content > .part-images > div > span {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 20px;\n\tcolor: var(--text-color);\n\ttext-align: center;\n}\n\n.editor-help > .container > .button-wrapper > button {\n\tmargin: 10px;\n}\n", ""]); + const o = s + }, + 9391: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/official_tracks.jpg" + }, + 9570: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/preview.svg" + }, + 9708: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/pause.svg" + }, + 9809: (e, t, n) => { + "use strict"; + e.exports = n.p + "images/checkmark.svg" + } + }, + t = {}; + + function n(i) { + var r = t[i]; + if (void 0 !== r) return r.exports; + var a = t[i] = { + id: i, + exports: {} + }; + return e[i](a, a.exports, n), a.exports + } + n.m = e, n.amdO = {}, n.n = e => { + var t = e && e.__esModule ? () => e.default : () => e; + return n.d(t, { + a: t + }), t + }, n.d = (e, t) => { + for (var i in t) n.o(t, i) && !n.o(e, i) && Object.defineProperty(e, i, { + enumerable: !0, + get: t[i] + }) + }, n.g = function() { + if ("object" == typeof globalThis) return globalThis; + try { + return this || new Function("return this")() + } catch (e) { + if ("object" == typeof window) return window + } + }(), n.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t), (() => { + var e; + n.g.importScripts && (e = n.g.location + ""); + var t = n.g.document; + if (!e && t && (t.currentScript && "SCRIPT" === t.currentScript.tagName.toUpperCase() && (e = t.currentScript.src), !e)) { + var i = t.getElementsByTagName("script"); + if (i.length) + for (var r = i.length - 1; r > -1 && (!e || !/^http(s?):/.test(e));) e = i[r--].src + } + if (!e) throw new Error("Automatic publicPath is not supported in this browser"); + e = e.replace(/^blob:/, "").replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/"), n.p = e + })(), n.b = document.baseURI || self.location.href, n.nc = void 0, (() => { + "use strict"; + n(6925); + var e = n(5072), + t = n.n(e), + i = n(7825), + r = n.n(i), + a = n(7659), + s = n.n(a), + o = n(5056), + l = n.n(o), + c = n(540), + h = n.n(c), + d = n(1113), + u = n.n(d), + p = n(8419), + f = {}; + f.styleTagTransform = u(), f.setAttributes = l(), f.insert = s().bind(null, "head"), f.domAPI = r(), f.insertStyleElement = h(); + t()(p.A, f); + p.A && p.A.locals && p.A.locals; + const m = "174", + g = 0, + v = 1, + w = 2, + y = 0, + A = 1, + b = 2, + x = 3, + k = 0, + E = 1, + S = 2, + M = 100, + T = 101, + _ = 102, + C = 200, + P = 201, + I = 202, + R = 203, + L = 204, + D = 205, + N = 206, + B = 207, + U = 208, + z = 209, + O = 210, + F = 211, + W = 212, + V = 213, + H = 214, + G = 0, + j = 1, + Q = 2, + Y = 3, + K = 4, + q = 5, + X = 6, + Z = 7, + J = "attached", + $ = 301, + ee = 302, + te = 303, + ne = 304, + ie = 306, + re = 1e3, + ae = 1001, + se = 1002, + oe = 1003, + le = 1004, + ce = 1005, + he = 1006, + de = 1007, + ue = 1008, + pe = 1009, + fe = 1010, + me = 1011, + ge = 1012, + ve = 1013, + we = 1014, + ye = 1015, + Ae = 1016, + be = 1017, + xe = 1018, + ke = 1020, + Ee = 35902, + Se = 1023, + Me = 1026, + Te = 1027, + _e = 1028, + Ce = 1029, + Pe = 1031, + Ie = 1033, + Re = 33776, + Le = 33777, + De = 33778, + Ne = 33779, + Be = 35840, + Ue = 35841, + ze = 35842, + Oe = 35843, + Fe = 36196, + We = 37492, + Ve = 37496, + He = 37808, + Ge = 37809, + je = 37810, + Qe = 37811, + Ye = 37812, + Ke = 37813, + qe = 37814, + Xe = 37815, + Ze = 37816, + Je = 37817, + $e = 37818, + et = 37819, + tt = 37820, + nt = 37821, + it = 36492, + rt = 36494, + at = 36495, + st = 36284, + ot = 36285, + lt = 36286, + ct = 2300, + ht = 2301, + dt = 2302, + ut = 2400, + pt = 2401, + ft = 2402, + mt = "", + gt = "srgb", + vt = "srgb-linear", + wt = "linear", + yt = "srgb", + At = 7680, + bt = 512, + xt = 513, + kt = 514, + Et = 515, + St = 516, + Mt = 517, + Tt = 518, + _t = 519, + Ct = 35044, + Pt = "300 es", + It = 2e3, + Rt = 2001; + class Lt { + addEventListener(e, t) { + void 0 === this._listeners && (this._listeners = {}); + const n = this._listeners; + void 0 === n[e] && (n[e] = []), -1 === n[e].indexOf(t) && n[e].push(t) + } + hasEventListener(e, t) { + const n = this._listeners; + return void 0 !== n && (void 0 !== n[e] && -1 !== n[e].indexOf(t)) + } + removeEventListener(e, t) { + const n = this._listeners; + if (void 0 === n) return; + const i = n[e]; + if (void 0 !== i) { + const e = i.indexOf(t); - 1 !== e && i.splice(e, 1) + } + } + dispatchEvent(e) { + const t = this._listeners; + if (void 0 === t) return; + const n = t[e.type]; + if (void 0 !== n) { + e.target = this; + const t = n.slice(0); + for (let n = 0, i = t.length; n < i; n++) t[n].call(this, e); + e.target = null + } + } + } + const Dt = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"]; + let Nt = 1234567; + const Bt = Math.PI / 180, + Ut = 180 / Math.PI; + + function zt() { + const e = 4294967295 * Math.random() | 0, + t = 4294967295 * Math.random() | 0, + n = 4294967295 * Math.random() | 0, + i = 4294967295 * Math.random() | 0; + return (Dt[255 & e] + Dt[e >> 8 & 255] + Dt[e >> 16 & 255] + Dt[e >> 24 & 255] + "-" + Dt[255 & t] + Dt[t >> 8 & 255] + "-" + Dt[t >> 16 & 15 | 64] + Dt[t >> 24 & 255] + "-" + Dt[63 & n | 128] + Dt[n >> 8 & 255] + "-" + Dt[n >> 16 & 255] + Dt[n >> 24 & 255] + Dt[255 & i] + Dt[i >> 8 & 255] + Dt[i >> 16 & 255] + Dt[i >> 24 & 255]).toLowerCase() + } + + function Ot(e, t, n) { + return Math.max(t, Math.min(n, e)) + } + + function Ft(e, t) { + return (e % t + t) % t + } + + function Wt(e, t, n) { + return (1 - n) * e + n * t + } + + function Vt(e, t) { + switch (t.constructor) { + case Float32Array: + return e; + case Uint32Array: + return e / 4294967295; + case Uint16Array: + return e / 65535; + case Uint8Array: + return e / 255; + case Int32Array: + return Math.max(e / 2147483647, -1); + case Int16Array: + return Math.max(e / 32767, -1); + case Int8Array: + return Math.max(e / 127, -1); + default: + throw new Error("Invalid component type.") + } + } + + function Ht(e, t) { + switch (t.constructor) { + case Float32Array: + return e; + case Uint32Array: + return Math.round(4294967295 * e); + case Uint16Array: + return Math.round(65535 * e); + case Uint8Array: + return Math.round(255 * e); + case Int32Array: + return Math.round(2147483647 * e); + case Int16Array: + return Math.round(32767 * e); + case Int8Array: + return Math.round(127 * e); + default: + throw new Error("Invalid component type.") + } + } + const Gt = { + DEG2RAD: Bt, + RAD2DEG: Ut, + generateUUID: zt, + clamp: Ot, + euclideanModulo: Ft, + mapLinear: function(e, t, n, i, r) { + return i + (e - t) * (r - i) / (n - t) + }, + inverseLerp: function(e, t, n) { + return e !== t ? (n - e) / (t - e) : 0 + }, + lerp: Wt, + damp: function(e, t, n, i) { + return Wt(e, t, 1 - Math.exp(-n * i)) + }, + pingpong: function(e, t = 1) { + return t - Math.abs(Ft(e, 2 * t) - t) + }, + smoothstep: function(e, t, n) { + return e <= t ? 0 : e >= n ? 1 : (e = (e - t) / (n - t)) * e * (3 - 2 * e) + }, + smootherstep: function(e, t, n) { + return e <= t ? 0 : e >= n ? 1 : (e = (e - t) / (n - t)) * e * e * (e * (6 * e - 15) + 10) + }, + randInt: function(e, t) { + return e + Math.floor(Math.random() * (t - e + 1)) + }, + randFloat: function(e, t) { + return e + Math.random() * (t - e) + }, + randFloatSpread: function(e) { + return e * (.5 - Math.random()) + }, + seededRandom: function(e) { + void 0 !== e && (Nt = e); + let t = Nt += 1831565813; + return t = Math.imul(t ^ t >>> 15, 1 | t), t ^= t + Math.imul(t ^ t >>> 7, 61 | t), ((t ^ t >>> 14) >>> 0) / 4294967296 + }, + degToRad: function(e) { + return e * Bt + }, + radToDeg: function(e) { + return e * Ut + }, + isPowerOfTwo: function(e) { + return !(e & e - 1) && 0 !== e + }, + ceilPowerOfTwo: function(e) { + return Math.pow(2, Math.ceil(Math.log(e) / Math.LN2)) + }, + floorPowerOfTwo: function(e) { + return Math.pow(2, Math.floor(Math.log(e) / Math.LN2)) + }, + setQuaternionFromProperEuler: function(e, t, n, i, r) { + const a = Math.cos, + s = Math.sin, + o = a(n / 2), + l = s(n / 2), + c = a((t + i) / 2), + h = s((t + i) / 2), + d = a((t - i) / 2), + u = s((t - i) / 2), + p = a((i - t) / 2), + f = s((i - t) / 2); + switch (r) { + case "XYX": + e.set(o * h, l * d, l * u, o * c); + break; + case "YZY": + e.set(l * u, o * h, l * d, o * c); + break; + case "ZXZ": + e.set(l * d, l * u, o * h, o * c); + break; + case "XZX": + e.set(o * h, l * f, l * p, o * c); + break; + case "YXY": + e.set(l * p, o * h, l * f, o * c); + break; + case "ZYZ": + e.set(l * f, l * p, o * h, o * c); + break; + default: + console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + r) + } + }, + normalize: Ht, + denormalize: Vt + }; + class jt { + constructor(e = 0, t = 0) { + jt.prototype.isVector2 = !0, this.x = e, this.y = t + } + get width() { + return this.x + } + set width(e) { + this.x = e + } + get height() { + return this.y + } + set height(e) { + this.y = e + } + set(e, t) { + return this.x = e, this.y = t, this + } + setScalar(e) { + return this.x = e, this.y = e, this + } + setX(e) { + return this.x = e, this + } + setY(e) { + return this.y = e, this + } + setComponent(e, t) { + switch (e) { + case 0: + this.x = t; + break; + case 1: + this.y = t; + break; + default: + throw new Error("index is out of range: " + e) + } + return this + } + getComponent(e) { + switch (e) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + e) + } + } + clone() { + return new this.constructor(this.x, this.y) + } + copy(e) { + return this.x = e.x, this.y = e.y, this + } + add(e) { + return this.x += e.x, this.y += e.y, this + } + addScalar(e) { + return this.x += e, this.y += e, this + } + addVectors(e, t) { + return this.x = e.x + t.x, this.y = e.y + t.y, this + } + addScaledVector(e, t) { + return this.x += e.x * t, this.y += e.y * t, this + } + sub(e) { + return this.x -= e.x, this.y -= e.y, this + } + subScalar(e) { + return this.x -= e, this.y -= e, this + } + subVectors(e, t) { + return this.x = e.x - t.x, this.y = e.y - t.y, this + } + multiply(e) { + return this.x *= e.x, this.y *= e.y, this + } + multiplyScalar(e) { + return this.x *= e, this.y *= e, this + } + divide(e) { + return this.x /= e.x, this.y /= e.y, this + } + divideScalar(e) { + return this.multiplyScalar(1 / e) + } + applyMatrix3(e) { + const t = this.x, + n = this.y, + i = e.elements; + return this.x = i[0] * t + i[3] * n + i[6], this.y = i[1] * t + i[4] * n + i[7], this + } + min(e) { + return this.x = Math.min(this.x, e.x), this.y = Math.min(this.y, e.y), this + } + max(e) { + return this.x = Math.max(this.x, e.x), this.y = Math.max(this.y, e.y), this + } + clamp(e, t) { + return this.x = Ot(this.x, e.x, t.x), this.y = Ot(this.y, e.y, t.y), this + } + clampScalar(e, t) { + return this.x = Ot(this.x, e, t), this.y = Ot(this.y, e, t), this + } + clampLength(e, t) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Ot(n, e, t)) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this + } + roundToZero() { + return this.x = Math.trunc(this.x), this.y = Math.trunc(this.y), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this + } + dot(e) { + return this.x * e.x + this.y * e.y + } + cross(e) { + return this.x * e.y - this.y * e.x + } + lengthSq() { + return this.x * this.x + this.y * this.y + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + angle() { + return Math.atan2(-this.y, -this.x) + Math.PI + } + angleTo(e) { + const t = Math.sqrt(this.lengthSq() * e.lengthSq()); + if (0 === t) return Math.PI / 2; + const n = this.dot(e) / t; + return Math.acos(Ot(n, -1, 1)) + } + distanceTo(e) { + return Math.sqrt(this.distanceToSquared(e)) + } + distanceToSquared(e) { + const t = this.x - e.x, + n = this.y - e.y; + return t * t + n * n + } + manhattanDistanceTo(e) { + return Math.abs(this.x - e.x) + Math.abs(this.y - e.y) + } + setLength(e) { + return this.normalize().multiplyScalar(e) + } + lerp(e, t) { + return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this + } + lerpVectors(e, t, n) { + return this.x = e.x + (t.x - e.x) * n, this.y = e.y + (t.y - e.y) * n, this + } + equals(e) { + return e.x === this.x && e.y === this.y + } + fromArray(e, t = 0) { + return this.x = e[t], this.y = e[t + 1], this + } + toArray(e = [], t = 0) { + return e[t] = this.x, e[t + 1] = this.y, e + } + fromBufferAttribute(e, t) { + return this.x = e.getX(t), this.y = e.getY(t), this + } + rotateAround(e, t) { + const n = Math.cos(t), + i = Math.sin(t), + r = this.x - e.x, + a = this.y - e.y; + return this.x = r * n - a * i + e.x, this.y = r * i + a * n + e.y, this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this + }*[Symbol.iterator]() { + yield this.x, yield this.y + } + } + class Qt { + constructor(e, t, n, i, r, a, s, o, l) { + Qt.prototype.isMatrix3 = !0, this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], void 0 !== e && this.set(e, t, n, i, r, a, s, o, l) + } + set(e, t, n, i, r, a, s, o, l) { + const c = this.elements; + return c[0] = e, c[1] = i, c[2] = s, c[3] = t, c[4] = r, c[5] = o, c[6] = n, c[7] = a, c[8] = l, this + } + identity() { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this + } + copy(e) { + const t = this.elements, + n = e.elements; + return t[0] = n[0], t[1] = n[1], t[2] = n[2], t[3] = n[3], t[4] = n[4], t[5] = n[5], t[6] = n[6], t[7] = n[7], t[8] = n[8], this + } + extractBasis(e, t, n) { + return e.setFromMatrix3Column(this, 0), t.setFromMatrix3Column(this, 1), n.setFromMatrix3Column(this, 2), this + } + setFromMatrix4(e) { + const t = e.elements; + return this.set(t[0], t[4], t[8], t[1], t[5], t[9], t[2], t[6], t[10]), this + } + multiply(e) { + return this.multiplyMatrices(this, e) + } + premultiply(e) { + return this.multiplyMatrices(e, this) + } + multiplyMatrices(e, t) { + const n = e.elements, + i = t.elements, + r = this.elements, + a = n[0], + s = n[3], + o = n[6], + l = n[1], + c = n[4], + h = n[7], + d = n[2], + u = n[5], + p = n[8], + f = i[0], + m = i[3], + g = i[6], + v = i[1], + w = i[4], + y = i[7], + A = i[2], + b = i[5], + x = i[8]; + return r[0] = a * f + s * v + o * A, r[3] = a * m + s * w + o * b, r[6] = a * g + s * y + o * x, r[1] = l * f + c * v + h * A, r[4] = l * m + c * w + h * b, r[7] = l * g + c * y + h * x, r[2] = d * f + u * v + p * A, r[5] = d * m + u * w + p * b, r[8] = d * g + u * y + p * x, this + } + multiplyScalar(e) { + const t = this.elements; + return t[0] *= e, t[3] *= e, t[6] *= e, t[1] *= e, t[4] *= e, t[7] *= e, t[2] *= e, t[5] *= e, t[8] *= e, this + } + determinant() { + const e = this.elements, + t = e[0], + n = e[1], + i = e[2], + r = e[3], + a = e[4], + s = e[5], + o = e[6], + l = e[7], + c = e[8]; + return t * a * c - t * s * l - n * r * c + n * s * o + i * r * l - i * a * o + } + invert() { + const e = this.elements, + t = e[0], + n = e[1], + i = e[2], + r = e[3], + a = e[4], + s = e[5], + o = e[6], + l = e[7], + c = e[8], + h = c * a - s * l, + d = s * o - c * r, + u = l * r - a * o, + p = t * h + n * d + i * u; + if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + const f = 1 / p; + return e[0] = h * f, e[1] = (i * l - c * n) * f, e[2] = (s * n - i * a) * f, e[3] = d * f, e[4] = (c * t - i * o) * f, e[5] = (i * r - s * t) * f, e[6] = u * f, e[7] = (n * o - l * t) * f, e[8] = (a * t - n * r) * f, this + } + transpose() { + let e; + const t = this.elements; + return e = t[1], t[1] = t[3], t[3] = e, e = t[2], t[2] = t[6], t[6] = e, e = t[5], t[5] = t[7], t[7] = e, this + } + getNormalMatrix(e) { + return this.setFromMatrix4(e).invert().transpose() + } + transposeIntoArray(e) { + const t = this.elements; + return e[0] = t[0], e[1] = t[3], e[2] = t[6], e[3] = t[1], e[4] = t[4], e[5] = t[7], e[6] = t[2], e[7] = t[5], e[8] = t[8], this + } + setUvTransform(e, t, n, i, r, a, s) { + const o = Math.cos(r), + l = Math.sin(r); + return this.set(n * o, n * l, -n * (o * a + l * s) + a + e, -i * l, i * o, -i * (-l * a + o * s) + s + t, 0, 0, 1), this + } + scale(e, t) { + return this.premultiply(Yt.makeScale(e, t)), this + } + rotate(e) { + return this.premultiply(Yt.makeRotation(-e)), this + } + translate(e, t) { + return this.premultiply(Yt.makeTranslation(e, t)), this + } + makeTranslation(e, t) { + return e.isVector2 ? this.set(1, 0, e.x, 0, 1, e.y, 0, 0, 1) : this.set(1, 0, e, 0, 1, t, 0, 0, 1), this + } + makeRotation(e) { + const t = Math.cos(e), + n = Math.sin(e); + return this.set(t, -n, 0, n, t, 0, 0, 0, 1), this + } + makeScale(e, t) { + return this.set(e, 0, 0, 0, t, 0, 0, 0, 1), this + } + equals(e) { + const t = this.elements, + n = e.elements; + for (let e = 0; e < 9; e++) + if (t[e] !== n[e]) return !1; + return !0 + } + fromArray(e, t = 0) { + for (let n = 0; n < 9; n++) this.elements[n] = e[n + t]; + return this + } + toArray(e = [], t = 0) { + const n = this.elements; + return e[t] = n[0], e[t + 1] = n[1], e[t + 2] = n[2], e[t + 3] = n[3], e[t + 4] = n[4], e[t + 5] = n[5], e[t + 6] = n[6], e[t + 7] = n[7], e[t + 8] = n[8], e + } + clone() { + return (new this.constructor).fromArray(this.elements) + } + } + const Yt = new Qt; + + function Kt(e) { + for (let t = e.length - 1; t >= 0; --t) + if (e[t] >= 65535) return !0; + return !1 + } + Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array; + + function qt(e) { + return document.createElementNS("http://www.w3.org/1999/xhtml", e) + } + + function Xt() { + const e = qt("canvas"); + return e.style.display = "block", e + } + const Zt = {}; + + function Jt(e) { + e in Zt || (Zt[e] = !0, console.warn(e)) + } + const $t = (new Qt).set(.4123908, .3575843, .1804808, .212639, .7151687, .0721923, .0193308, .1191948, .9505322), + en = (new Qt).set(3.2409699, -1.5373832, -.4986108, -.9692436, 1.8759675, .0415551, .0556301, -.203977, 1.0569715); + + function tn() { + const e = { + enabled: !0, + workingColorSpace: vt, + spaces: {}, + convert: function(e, t, n) { + return !1 !== this.enabled && t !== n && t && n ? (this.spaces[t].transfer === yt && (e.r = rn(e.r), e.g = rn(e.g), e.b = rn(e.b)), this.spaces[t].primaries !== this.spaces[n].primaries && (e.applyMatrix3(this.spaces[t].toXYZ), e.applyMatrix3(this.spaces[n].fromXYZ)), this.spaces[n].transfer === yt && (e.r = an(e.r), e.g = an(e.g), e.b = an(e.b)), e) : e + }, + fromWorkingColorSpace: function(e, t) { + return this.convert(e, this.workingColorSpace, t) + }, + toWorkingColorSpace: function(e, t) { + return this.convert(e, t, this.workingColorSpace) + }, + getPrimaries: function(e) { + return this.spaces[e].primaries + }, + getTransfer: function(e) { + return e === mt ? wt : this.spaces[e].transfer + }, + getLuminanceCoefficients: function(e, t = this.workingColorSpace) { + return e.fromArray(this.spaces[t].luminanceCoefficients) + }, + define: function(e) { + Object.assign(this.spaces, e) + }, + _getMatrix: function(e, t, n) { + return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ) + }, + _getDrawingBufferColorSpace: function(e) { + return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace + }, + _getUnpackColorSpace: function(e = this.workingColorSpace) { + return this.spaces[e].workingColorSpaceConfig.unpackColorSpace + } + }, + t = [.64, .33, .3, .6, .15, .06], + n = [.2126, .7152, .0722], + i = [.3127, .329]; + return e.define({ + [vt]: { + primaries: t, + whitePoint: i, + transfer: wt, + toXYZ: $t, + fromXYZ: en, + luminanceCoefficients: n, + workingColorSpaceConfig: { + unpackColorSpace: gt + }, + outputColorSpaceConfig: { + drawingBufferColorSpace: gt + } + }, + [gt]: { + primaries: t, + whitePoint: i, + transfer: yt, + toXYZ: $t, + fromXYZ: en, + luminanceCoefficients: n, + outputColorSpaceConfig: { + drawingBufferColorSpace: gt + } + } + }), e + } + const nn = tn(); + + function rn(e) { + return e < .04045 ? .0773993808 * e : Math.pow(.9478672986 * e + .0521327014, 2.4) + } + + function an(e) { + return e < .0031308 ? 12.92 * e : 1.055 * Math.pow(e, .41666) - .055 + } + let sn; + class on { + static getDataURL(e) { + if (/^data:/i.test(e.src)) return e.src; + if ("undefined" == typeof HTMLCanvasElement) return e.src; + let t; + if (e instanceof HTMLCanvasElement) t = e; + else { + void 0 === sn && (sn = qt("canvas")), sn.width = e.width, sn.height = e.height; + const n = sn.getContext("2d"); + e instanceof ImageData ? n.putImageData(e, 0, 0) : n.drawImage(e, 0, 0, e.width, e.height), t = sn + } + return t.toDataURL("image/png") + } + static sRGBToLinear(e) { + if ("undefined" != typeof HTMLImageElement && e instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && e instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && e instanceof ImageBitmap) { + const t = qt("canvas"); + t.width = e.width, t.height = e.height; + const n = t.getContext("2d"); + n.drawImage(e, 0, 0, e.width, e.height); + const i = n.getImageData(0, 0, e.width, e.height), + r = i.data; + for (let e = 0; e < r.length; e++) r[e] = 255 * rn(r[e] / 255); + return n.putImageData(i, 0, 0), t + } + if (e.data) { + const t = e.data.slice(0); + for (let e = 0; e < t.length; e++) t instanceof Uint8Array || t instanceof Uint8ClampedArray ? t[e] = Math.floor(255 * rn(t[e] / 255)) : t[e] = rn(t[e]); + return { + data: t, + width: e.width, + height: e.height + } + } + return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."), e + } + } + let ln = 0; + class cn { + constructor(e = null) { + this.isSource = !0, Object.defineProperty(this, "id", { + value: ln++ + }), this.uuid = zt(), this.data = e, this.dataReady = !0, this.version = 0 + } + set needsUpdate(e) { + !0 === e && this.version++ + } + toJSON(e) { + const t = void 0 === e || "string" == typeof e; + if (!t && void 0 !== e.images[this.uuid]) return e.images[this.uuid]; + const n = { + uuid: this.uuid, + url: "" + }, + i = this.data; + if (null !== i) { + let e; + if (Array.isArray(i)) { + e = []; + for (let t = 0, n = i.length; t < n; t++) i[t].isDataTexture ? e.push(hn(i[t].image)) : e.push(hn(i[t])) + } else e = hn(i); + n.url = e + } + return t || (e.images[this.uuid] = n), n + } + } + + function hn(e) { + return "undefined" != typeof HTMLImageElement && e instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && e instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && e instanceof ImageBitmap ? on.getDataURL(e) : e.data ? { + data: Array.from(e.data), + width: e.width, + height: e.height, + type: e.data.constructor.name + } : (console.warn("THREE.Texture: Unable to serialize Texture."), {}) + } + let dn = 0; + class un extends Lt { + constructor(e = un.DEFAULT_IMAGE, t = un.DEFAULT_MAPPING, n = 1001, i = 1001, r = 1006, a = 1008, s = 1023, o = 1009, l = un.DEFAULT_ANISOTROPY, c = "") { + super(), this.isTexture = !0, Object.defineProperty(this, "id", { + value: dn++ + }), this.uuid = zt(), this.name = "", this.source = new cn(e), this.mipmaps = [], this.mapping = t, this.channel = 0, this.wrapS = n, this.wrapT = i, this.magFilter = r, this.minFilter = a, this.anisotropy = l, this.format = s, this.internalFormat = null, this.type = o, this.offset = new jt(0, 0), this.repeat = new jt(1, 1), this.center = new jt(0, 0), this.rotation = 0, this.matrixAutoUpdate = !0, this.matrix = new Qt, this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this.colorSpace = c, this.userData = {}, this.version = 0, this.onUpdate = null, this.renderTarget = null, this.isRenderTargetTexture = !1, this.pmremVersion = 0 + } + get image() { + return this.source.data + } + set image(e = null) { + this.source.data = e + } + updateMatrix() { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + return this.name = e.name, this.source = e.source, this.mipmaps = e.mipmaps.slice(0), this.mapping = e.mapping, this.channel = e.channel, this.wrapS = e.wrapS, this.wrapT = e.wrapT, this.magFilter = e.magFilter, this.minFilter = e.minFilter, this.anisotropy = e.anisotropy, this.format = e.format, this.internalFormat = e.internalFormat, this.type = e.type, this.offset.copy(e.offset), this.repeat.copy(e.repeat), this.center.copy(e.center), this.rotation = e.rotation, this.matrixAutoUpdate = e.matrixAutoUpdate, this.matrix.copy(e.matrix), this.generateMipmaps = e.generateMipmaps, this.premultiplyAlpha = e.premultiplyAlpha, this.flipY = e.flipY, this.unpackAlignment = e.unpackAlignment, this.colorSpace = e.colorSpace, this.renderTarget = e.renderTarget, this.isRenderTargetTexture = e.isRenderTargetTexture, this.userData = JSON.parse(JSON.stringify(e.userData)), this.needsUpdate = !0, this + } + toJSON(e) { + const t = void 0 === e || "string" == typeof e; + if (!t && void 0 !== e.textures[this.uuid]) return e.textures[this.uuid]; + const n = { + metadata: { + version: 4.6, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + image: this.source.toJSON(e).uuid, + mapping: this.mapping, + channel: this.channel, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + internalFormat: this.internalFormat, + type: this.type, + colorSpace: this.colorSpace, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + generateMipmaps: this.generateMipmaps, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }; + return Object.keys(this.userData).length > 0 && (n.userData = this.userData), t || (e.textures[this.uuid] = n), n + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + transformUv(e) { + if (300 !== this.mapping) return e; + if (e.applyMatrix3(this.matrix), e.x < 0 || e.x > 1) switch (this.wrapS) { + case re: + e.x = e.x - Math.floor(e.x); + break; + case ae: + e.x = e.x < 0 ? 0 : 1; + break; + case se: + 1 === Math.abs(Math.floor(e.x) % 2) ? e.x = Math.ceil(e.x) - e.x : e.x = e.x - Math.floor(e.x) + } + if (e.y < 0 || e.y > 1) switch (this.wrapT) { + case re: + e.y = e.y - Math.floor(e.y); + break; + case ae: + e.y = e.y < 0 ? 0 : 1; + break; + case se: + 1 === Math.abs(Math.floor(e.y) % 2) ? e.y = Math.ceil(e.y) - e.y : e.y = e.y - Math.floor(e.y) + } + return this.flipY && (e.y = 1 - e.y), e + } + set needsUpdate(e) { + !0 === e && (this.version++, this.source.needsUpdate = !0) + } + set needsPMREMUpdate(e) { + !0 === e && this.pmremVersion++ + } + } + un.DEFAULT_IMAGE = null, un.DEFAULT_MAPPING = 300, un.DEFAULT_ANISOTROPY = 1; + class pn { + constructor(e = 0, t = 0, n = 0, i = 1) { + pn.prototype.isVector4 = !0, this.x = e, this.y = t, this.z = n, this.w = i + } + get width() { + return this.z + } + set width(e) { + this.z = e + } + get height() { + return this.w + } + set height(e) { + this.w = e + } + set(e, t, n, i) { + return this.x = e, this.y = t, this.z = n, this.w = i, this + } + setScalar(e) { + return this.x = e, this.y = e, this.z = e, this.w = e, this + } + setX(e) { + return this.x = e, this + } + setY(e) { + return this.y = e, this + } + setZ(e) { + return this.z = e, this + } + setW(e) { + return this.w = e, this + } + setComponent(e, t) { + switch (e) { + case 0: + this.x = t; + break; + case 1: + this.y = t; + break; + case 2: + this.z = t; + break; + case 3: + this.w = t; + break; + default: + throw new Error("index is out of range: " + e) + } + return this + } + getComponent(e) { + switch (e) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error("index is out of range: " + e) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z, this.w) + } + copy(e) { + return this.x = e.x, this.y = e.y, this.z = e.z, this.w = void 0 !== e.w ? e.w : 1, this + } + add(e) { + return this.x += e.x, this.y += e.y, this.z += e.z, this.w += e.w, this + } + addScalar(e) { + return this.x += e, this.y += e, this.z += e, this.w += e, this + } + addVectors(e, t) { + return this.x = e.x + t.x, this.y = e.y + t.y, this.z = e.z + t.z, this.w = e.w + t.w, this + } + addScaledVector(e, t) { + return this.x += e.x * t, this.y += e.y * t, this.z += e.z * t, this.w += e.w * t, this + } + sub(e) { + return this.x -= e.x, this.y -= e.y, this.z -= e.z, this.w -= e.w, this + } + subScalar(e) { + return this.x -= e, this.y -= e, this.z -= e, this.w -= e, this + } + subVectors(e, t) { + return this.x = e.x - t.x, this.y = e.y - t.y, this.z = e.z - t.z, this.w = e.w - t.w, this + } + multiply(e) { + return this.x *= e.x, this.y *= e.y, this.z *= e.z, this.w *= e.w, this + } + multiplyScalar(e) { + return this.x *= e, this.y *= e, this.z *= e, this.w *= e, this + } + applyMatrix4(e) { + const t = this.x, + n = this.y, + i = this.z, + r = this.w, + a = e.elements; + return this.x = a[0] * t + a[4] * n + a[8] * i + a[12] * r, this.y = a[1] * t + a[5] * n + a[9] * i + a[13] * r, this.z = a[2] * t + a[6] * n + a[10] * i + a[14] * r, this.w = a[3] * t + a[7] * n + a[11] * i + a[15] * r, this + } + divide(e) { + return this.x /= e.x, this.y /= e.y, this.z /= e.z, this.w /= e.w, this + } + divideScalar(e) { + return this.multiplyScalar(1 / e) + } + setAxisAngleFromQuaternion(e) { + this.w = 2 * Math.acos(e.w); + const t = Math.sqrt(1 - e.w * e.w); + return t < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = e.x / t, this.y = e.y / t, this.z = e.z / t), this + } + setAxisAngleFromRotationMatrix(e) { + let t, n, i, r; + const a = .01, + s = .1, + o = e.elements, + l = o[0], + c = o[4], + h = o[8], + d = o[1], + u = o[5], + p = o[9], + f = o[2], + m = o[6], + g = o[10]; + if (Math.abs(c - d) < a && Math.abs(h - f) < a && Math.abs(p - m) < a) { + if (Math.abs(c + d) < s && Math.abs(h + f) < s && Math.abs(p + m) < s && Math.abs(l + u + g - 3) < s) return this.set(1, 0, 0, 0), this; + t = Math.PI; + const e = (l + 1) / 2, + o = (u + 1) / 2, + v = (g + 1) / 2, + w = (c + d) / 4, + y = (h + f) / 4, + A = (p + m) / 4; + return e > o && e > v ? e < a ? (n = 0, i = .707106781, r = .707106781) : (n = Math.sqrt(e), i = w / n, r = y / n) : o > v ? o < a ? (n = .707106781, i = 0, r = .707106781) : (i = Math.sqrt(o), n = w / i, r = A / i) : v < a ? (n = .707106781, i = .707106781, r = 0) : (r = Math.sqrt(v), n = y / r, i = A / r), this.set(n, i, r, t), this + } + let v = Math.sqrt((m - p) * (m - p) + (h - f) * (h - f) + (d - c) * (d - c)); + return Math.abs(v) < .001 && (v = 1), this.x = (m - p) / v, this.y = (h - f) / v, this.z = (d - c) / v, this.w = Math.acos((l + u + g - 1) / 2), this + } + setFromMatrixPosition(e) { + const t = e.elements; + return this.x = t[12], this.y = t[13], this.z = t[14], this.w = t[15], this + } + min(e) { + return this.x = Math.min(this.x, e.x), this.y = Math.min(this.y, e.y), this.z = Math.min(this.z, e.z), this.w = Math.min(this.w, e.w), this + } + max(e) { + return this.x = Math.max(this.x, e.x), this.y = Math.max(this.y, e.y), this.z = Math.max(this.z, e.z), this.w = Math.max(this.w, e.w), this + } + clamp(e, t) { + return this.x = Ot(this.x, e.x, t.x), this.y = Ot(this.y, e.y, t.y), this.z = Ot(this.z, e.z, t.z), this.w = Ot(this.w, e.w, t.w), this + } + clampScalar(e, t) { + return this.x = Ot(this.x, e, t), this.y = Ot(this.y, e, t), this.z = Ot(this.z, e, t), this.w = Ot(this.w, e, t), this + } + clampLength(e, t) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Ot(n, e, t)) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this + } + roundToZero() { + return this.x = Math.trunc(this.x), this.y = Math.trunc(this.y), this.z = Math.trunc(this.z), this.w = Math.trunc(this.w), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this + } + dot(e) { + return this.x * e.x + this.y * e.y + this.z * e.z + this.w * e.w + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(e) { + return this.normalize().multiplyScalar(e) + } + lerp(e, t) { + return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this.z += (e.z - this.z) * t, this.w += (e.w - this.w) * t, this + } + lerpVectors(e, t, n) { + return this.x = e.x + (t.x - e.x) * n, this.y = e.y + (t.y - e.y) * n, this.z = e.z + (t.z - e.z) * n, this.w = e.w + (t.w - e.w) * n, this + } + equals(e) { + return e.x === this.x && e.y === this.y && e.z === this.z && e.w === this.w + } + fromArray(e, t = 0) { + return this.x = e[t], this.y = e[t + 1], this.z = e[t + 2], this.w = e[t + 3], this + } + toArray(e = [], t = 0) { + return e[t] = this.x, e[t + 1] = this.y, e[t + 2] = this.z, e[t + 3] = this.w, e + } + fromBufferAttribute(e, t) { + return this.x = e.getX(t), this.y = e.getY(t), this.z = e.getZ(t), this.w = e.getW(t), this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this.w = Math.random(), this + }*[Symbol.iterator]() { + yield this.x, yield this.y, yield this.z, yield this.w + } + } + class fn extends Lt { + constructor(e = 1, t = 1, n = {}) { + super(), this.isRenderTarget = !0, this.width = e, this.height = t, this.depth = 1, this.scissor = new pn(0, 0, e, t), this.scissorTest = !1, this.viewport = new pn(0, 0, e, t); + const i = { + width: e, + height: t, + depth: 1 + }; + n = Object.assign({ + generateMipmaps: !1, + internalFormat: null, + minFilter: he, + depthBuffer: !0, + stencilBuffer: !1, + resolveDepthBuffer: !0, + resolveStencilBuffer: !0, + depthTexture: null, + samples: 0, + count: 1 + }, n); + const r = new un(i, n.mapping, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.colorSpace); + r.flipY = !1, r.generateMipmaps = n.generateMipmaps, r.internalFormat = n.internalFormat, this.textures = []; + const a = n.count; + for (let e = 0; e < a; e++) this.textures[e] = r.clone(), this.textures[e].isRenderTargetTexture = !0, this.textures[e].renderTarget = this; + this.depthBuffer = n.depthBuffer, this.stencilBuffer = n.stencilBuffer, this.resolveDepthBuffer = n.resolveDepthBuffer, this.resolveStencilBuffer = n.resolveStencilBuffer, this._depthTexture = null, this.depthTexture = n.depthTexture, this.samples = n.samples + } + get texture() { + return this.textures[0] + } + set texture(e) { + this.textures[0] = e + } + set depthTexture(e) { + null !== this._depthTexture && (this._depthTexture.renderTarget = null), null !== e && (e.renderTarget = this), this._depthTexture = e + } + get depthTexture() { + return this._depthTexture + } + setSize(e, t, n = 1) { + if (this.width !== e || this.height !== t || this.depth !== n) { + this.width = e, this.height = t, this.depth = n; + for (let i = 0, r = this.textures.length; i < r; i++) this.textures[i].image.width = e, this.textures[i].image.height = t, this.textures[i].image.depth = n; + this.dispose() + } + this.viewport.set(0, 0, e, t), this.scissor.set(0, 0, e, t) + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + this.width = e.width, this.height = e.height, this.depth = e.depth, this.scissor.copy(e.scissor), this.scissorTest = e.scissorTest, this.viewport.copy(e.viewport), this.textures.length = 0; + for (let t = 0, n = e.textures.length; t < n; t++) { + this.textures[t] = e.textures[t].clone(), this.textures[t].isRenderTargetTexture = !0, this.textures[t].renderTarget = this; + const n = Object.assign({}, e.textures[t].image); + this.textures[t].source = new cn(n) + } + return this.depthBuffer = e.depthBuffer, this.stencilBuffer = e.stencilBuffer, this.resolveDepthBuffer = e.resolveDepthBuffer, this.resolveStencilBuffer = e.resolveStencilBuffer, null !== e.depthTexture && (this.depthTexture = e.depthTexture.clone()), this.samples = e.samples, this + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + } + class mn extends fn { + constructor(e = 1, t = 1, n = {}) { + super(e, t, n), this.isWebGLRenderTarget = !0 + } + } + class gn extends un { + constructor(e = null, t = 1, n = 1, i = 1) { + super(null), this.isDataArrayTexture = !0, this.image = { + data: e, + width: t, + height: n, + depth: i + }, this.magFilter = oe, this.minFilter = oe, this.wrapR = ae, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1, this.layerUpdates = new Set + } + addLayerUpdate(e) { + this.layerUpdates.add(e) + } + clearLayerUpdates() { + this.layerUpdates.clear() + } + } + class vn extends un { + constructor(e = null, t = 1, n = 1, i = 1) { + super(null), this.isData3DTexture = !0, this.image = { + data: e, + width: t, + height: n, + depth: i + }, this.magFilter = oe, this.minFilter = oe, this.wrapR = ae, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1 + } + } + class wn { + constructor(e = 0, t = 0, n = 0, i = 1) { + this.isQuaternion = !0, this._x = e, this._y = t, this._z = n, this._w = i + } + static slerpFlat(e, t, n, i, r, a, s) { + let o = n[i + 0], + l = n[i + 1], + c = n[i + 2], + h = n[i + 3]; + const d = r[a + 0], + u = r[a + 1], + p = r[a + 2], + f = r[a + 3]; + if (0 === s) return e[t + 0] = o, e[t + 1] = l, e[t + 2] = c, void(e[t + 3] = h); + if (1 === s) return e[t + 0] = d, e[t + 1] = u, e[t + 2] = p, void(e[t + 3] = f); + if (h !== f || o !== d || l !== u || c !== p) { + let e = 1 - s; + const t = o * d + l * u + c * p + h * f, + n = t >= 0 ? 1 : -1, + i = 1 - t * t; + if (i > Number.EPSILON) { + const r = Math.sqrt(i), + a = Math.atan2(r, t * n); + e = Math.sin(e * a) / r, s = Math.sin(s * a) / r + } + const r = s * n; + if (o = o * e + d * r, l = l * e + u * r, c = c * e + p * r, h = h * e + f * r, e === 1 - s) { + const e = 1 / Math.sqrt(o * o + l * l + c * c + h * h); + o *= e, l *= e, c *= e, h *= e + } + } + e[t] = o, e[t + 1] = l, e[t + 2] = c, e[t + 3] = h + } + static multiplyQuaternionsFlat(e, t, n, i, r, a) { + const s = n[i], + o = n[i + 1], + l = n[i + 2], + c = n[i + 3], + h = r[a], + d = r[a + 1], + u = r[a + 2], + p = r[a + 3]; + return e[t] = s * p + c * h + o * u - l * d, e[t + 1] = o * p + c * d + l * h - s * u, e[t + 2] = l * p + c * u + s * d - o * h, e[t + 3] = c * p - s * h - o * d - l * u, e + } + get x() { + return this._x + } + set x(e) { + this._x = e, this._onChangeCallback() + } + get y() { + return this._y + } + set y(e) { + this._y = e, this._onChangeCallback() + } + get z() { + return this._z + } + set z(e) { + this._z = e, this._onChangeCallback() + } + get w() { + return this._w + } + set w(e) { + this._w = e, this._onChangeCallback() + } + set(e, t, n, i) { + return this._x = e, this._y = t, this._z = n, this._w = i, this._onChangeCallback(), this + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w) + } + copy(e) { + return this._x = e.x, this._y = e.y, this._z = e.z, this._w = e.w, this._onChangeCallback(), this + } + setFromEuler(e, t = !0) { + const n = e._x, + i = e._y, + r = e._z, + a = e._order, + s = Math.cos, + o = Math.sin, + l = s(n / 2), + c = s(i / 2), + h = s(r / 2), + d = o(n / 2), + u = o(i / 2), + p = o(r / 2); + switch (a) { + case "XYZ": + this._x = d * c * h + l * u * p, this._y = l * u * h - d * c * p, this._z = l * c * p + d * u * h, this._w = l * c * h - d * u * p; + break; + case "YXZ": + this._x = d * c * h + l * u * p, this._y = l * u * h - d * c * p, this._z = l * c * p - d * u * h, this._w = l * c * h + d * u * p; + break; + case "ZXY": + this._x = d * c * h - l * u * p, this._y = l * u * h + d * c * p, this._z = l * c * p + d * u * h, this._w = l * c * h - d * u * p; + break; + case "ZYX": + this._x = d * c * h - l * u * p, this._y = l * u * h + d * c * p, this._z = l * c * p - d * u * h, this._w = l * c * h + d * u * p; + break; + case "YZX": + this._x = d * c * h + l * u * p, this._y = l * u * h + d * c * p, this._z = l * c * p - d * u * h, this._w = l * c * h - d * u * p; + break; + case "XZY": + this._x = d * c * h - l * u * p, this._y = l * u * h - d * c * p, this._z = l * c * p + d * u * h, this._w = l * c * h + d * u * p; + break; + default: + console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + a) + } + return !0 === t && this._onChangeCallback(), this + } + setFromAxisAngle(e, t) { + const n = t / 2, + i = Math.sin(n); + return this._x = e.x * i, this._y = e.y * i, this._z = e.z * i, this._w = Math.cos(n), this._onChangeCallback(), this + } + setFromRotationMatrix(e) { + const t = e.elements, + n = t[0], + i = t[4], + r = t[8], + a = t[1], + s = t[5], + o = t[9], + l = t[2], + c = t[6], + h = t[10], + d = n + s + h; + if (d > 0) { + const e = .5 / Math.sqrt(d + 1); + this._w = .25 / e, this._x = (c - o) * e, this._y = (r - l) * e, this._z = (a - i) * e + } else if (n > s && n > h) { + const e = 2 * Math.sqrt(1 + n - s - h); + this._w = (c - o) / e, this._x = .25 * e, this._y = (i + a) / e, this._z = (r + l) / e + } else if (s > h) { + const e = 2 * Math.sqrt(1 + s - n - h); + this._w = (r - l) / e, this._x = (i + a) / e, this._y = .25 * e, this._z = (o + c) / e + } else { + const e = 2 * Math.sqrt(1 + h - n - s); + this._w = (a - i) / e, this._x = (r + l) / e, this._y = (o + c) / e, this._z = .25 * e + } + return this._onChangeCallback(), this + } + setFromUnitVectors(e, t) { + let n = e.dot(t) + 1; + return n < Number.EPSILON ? (n = 0, Math.abs(e.x) > Math.abs(e.z) ? (this._x = -e.y, this._y = e.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -e.z, this._z = e.y, this._w = n)) : (this._x = e.y * t.z - e.z * t.y, this._y = e.z * t.x - e.x * t.z, this._z = e.x * t.y - e.y * t.x, this._w = n), this.normalize() + } + angleTo(e) { + return 2 * Math.acos(Math.abs(Ot(this.dot(e), -1, 1))) + } + rotateTowards(e, t) { + const n = this.angleTo(e); + if (0 === n) return this; + const i = Math.min(1, t / n); + return this.slerp(e, i), this + } + identity() { + return this.set(0, 0, 0, 1) + } + invert() { + return this.conjugate() + } + conjugate() { + return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this + } + dot(e) { + return this._x * e._x + this._y * e._y + this._z * e._z + this._w * e._w + } + lengthSq() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + } + length() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + } + normalize() { + let e = this.length(); + return 0 === e ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (e = 1 / e, this._x = this._x * e, this._y = this._y * e, this._z = this._z * e, this._w = this._w * e), this._onChangeCallback(), this + } + multiply(e) { + return this.multiplyQuaternions(this, e) + } + premultiply(e) { + return this.multiplyQuaternions(e, this) + } + multiplyQuaternions(e, t) { + const n = e._x, + i = e._y, + r = e._z, + a = e._w, + s = t._x, + o = t._y, + l = t._z, + c = t._w; + return this._x = n * c + a * s + i * l - r * o, this._y = i * c + a * o + r * s - n * l, this._z = r * c + a * l + n * o - i * s, this._w = a * c - n * s - i * o - r * l, this._onChangeCallback(), this + } + slerp(e, t) { + if (0 === t) return this; + if (1 === t) return this.copy(e); + const n = this._x, + i = this._y, + r = this._z, + a = this._w; + let s = a * e._w + n * e._x + i * e._y + r * e._z; + if (s < 0 ? (this._w = -e._w, this._x = -e._x, this._y = -e._y, this._z = -e._z, s = -s) : this.copy(e), s >= 1) return this._w = a, this._x = n, this._y = i, this._z = r, this; + const o = 1 - s * s; + if (o <= Number.EPSILON) { + const e = 1 - t; + return this._w = e * a + t * this._w, this._x = e * n + t * this._x, this._y = e * i + t * this._y, this._z = e * r + t * this._z, this.normalize(), this + } + const l = Math.sqrt(o), + c = Math.atan2(l, s), + h = Math.sin((1 - t) * c) / l, + d = Math.sin(t * c) / l; + return this._w = a * h + this._w * d, this._x = n * h + this._x * d, this._y = i * h + this._y * d, this._z = r * h + this._z * d, this._onChangeCallback(), this + } + slerpQuaternions(e, t, n) { + return this.copy(e).slerp(t, n) + } + random() { + const e = 2 * Math.PI * Math.random(), + t = 2 * Math.PI * Math.random(), + n = Math.random(), + i = Math.sqrt(1 - n), + r = Math.sqrt(n); + return this.set(i * Math.sin(e), i * Math.cos(e), r * Math.sin(t), r * Math.cos(t)) + } + equals(e) { + return e._x === this._x && e._y === this._y && e._z === this._z && e._w === this._w + } + fromArray(e, t = 0) { + return this._x = e[t], this._y = e[t + 1], this._z = e[t + 2], this._w = e[t + 3], this._onChangeCallback(), this + } + toArray(e = [], t = 0) { + return e[t] = this._x, e[t + 1] = this._y, e[t + 2] = this._z, e[t + 3] = this._w, e + } + fromBufferAttribute(e, t) { + return this._x = e.getX(t), this._y = e.getY(t), this._z = e.getZ(t), this._w = e.getW(t), this._onChangeCallback(), this + } + toJSON() { + return this.toArray() + } + _onChange(e) { + return this._onChangeCallback = e, this + } + _onChangeCallback() {}*[Symbol.iterator]() { + yield this._x, yield this._y, yield this._z, yield this._w + } + } + class yn { + constructor(e = 0, t = 0, n = 0) { + yn.prototype.isVector3 = !0, this.x = e, this.y = t, this.z = n + } + set(e, t, n) { + return void 0 === n && (n = this.z), this.x = e, this.y = t, this.z = n, this + } + setScalar(e) { + return this.x = e, this.y = e, this.z = e, this + } + setX(e) { + return this.x = e, this + } + setY(e) { + return this.y = e, this + } + setZ(e) { + return this.z = e, this + } + setComponent(e, t) { + switch (e) { + case 0: + this.x = t; + break; + case 1: + this.y = t; + break; + case 2: + this.z = t; + break; + default: + throw new Error("index is out of range: " + e) + } + return this + } + getComponent(e) { + switch (e) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + e) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z) + } + copy(e) { + return this.x = e.x, this.y = e.y, this.z = e.z, this + } + add(e) { + return this.x += e.x, this.y += e.y, this.z += e.z, this + } + addScalar(e) { + return this.x += e, this.y += e, this.z += e, this + } + addVectors(e, t) { + return this.x = e.x + t.x, this.y = e.y + t.y, this.z = e.z + t.z, this + } + addScaledVector(e, t) { + return this.x += e.x * t, this.y += e.y * t, this.z += e.z * t, this + } + sub(e) { + return this.x -= e.x, this.y -= e.y, this.z -= e.z, this + } + subScalar(e) { + return this.x -= e, this.y -= e, this.z -= e, this + } + subVectors(e, t) { + return this.x = e.x - t.x, this.y = e.y - t.y, this.z = e.z - t.z, this + } + multiply(e) { + return this.x *= e.x, this.y *= e.y, this.z *= e.z, this + } + multiplyScalar(e) { + return this.x *= e, this.y *= e, this.z *= e, this + } + multiplyVectors(e, t) { + return this.x = e.x * t.x, this.y = e.y * t.y, this.z = e.z * t.z, this + } + applyEuler(e) { + return this.applyQuaternion(bn.setFromEuler(e)) + } + applyAxisAngle(e, t) { + return this.applyQuaternion(bn.setFromAxisAngle(e, t)) + } + applyMatrix3(e) { + const t = this.x, + n = this.y, + i = this.z, + r = e.elements; + return this.x = r[0] * t + r[3] * n + r[6] * i, this.y = r[1] * t + r[4] * n + r[7] * i, this.z = r[2] * t + r[5] * n + r[8] * i, this + } + applyNormalMatrix(e) { + return this.applyMatrix3(e).normalize() + } + applyMatrix4(e) { + const t = this.x, + n = this.y, + i = this.z, + r = e.elements, + a = 1 / (r[3] * t + r[7] * n + r[11] * i + r[15]); + return this.x = (r[0] * t + r[4] * n + r[8] * i + r[12]) * a, this.y = (r[1] * t + r[5] * n + r[9] * i + r[13]) * a, this.z = (r[2] * t + r[6] * n + r[10] * i + r[14]) * a, this + } + applyQuaternion(e) { + const t = this.x, + n = this.y, + i = this.z, + r = e.x, + a = e.y, + s = e.z, + o = e.w, + l = 2 * (a * i - s * n), + c = 2 * (s * t - r * i), + h = 2 * (r * n - a * t); + return this.x = t + o * l + a * h - s * c, this.y = n + o * c + s * l - r * h, this.z = i + o * h + r * c - a * l, this + } + project(e) { + return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix) + } + unproject(e) { + return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld) + } + transformDirection(e) { + const t = this.x, + n = this.y, + i = this.z, + r = e.elements; + return this.x = r[0] * t + r[4] * n + r[8] * i, this.y = r[1] * t + r[5] * n + r[9] * i, this.z = r[2] * t + r[6] * n + r[10] * i, this.normalize() + } + divide(e) { + return this.x /= e.x, this.y /= e.y, this.z /= e.z, this + } + divideScalar(e) { + return this.multiplyScalar(1 / e) + } + min(e) { + return this.x = Math.min(this.x, e.x), this.y = Math.min(this.y, e.y), this.z = Math.min(this.z, e.z), this + } + max(e) { + return this.x = Math.max(this.x, e.x), this.y = Math.max(this.y, e.y), this.z = Math.max(this.z, e.z), this + } + clamp(e, t) { + return this.x = Ot(this.x, e.x, t.x), this.y = Ot(this.y, e.y, t.y), this.z = Ot(this.z, e.z, t.z), this + } + clampScalar(e, t) { + return this.x = Ot(this.x, e, t), this.y = Ot(this.y, e, t), this.z = Ot(this.z, e, t), this + } + clampLength(e, t) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Ot(n, e, t)) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this + } + roundToZero() { + return this.x = Math.trunc(this.x), this.y = Math.trunc(this.y), this.z = Math.trunc(this.z), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this + } + dot(e) { + return this.x * e.x + this.y * e.y + this.z * e.z + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(e) { + return this.normalize().multiplyScalar(e) + } + lerp(e, t) { + return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this.z += (e.z - this.z) * t, this + } + lerpVectors(e, t, n) { + return this.x = e.x + (t.x - e.x) * n, this.y = e.y + (t.y - e.y) * n, this.z = e.z + (t.z - e.z) * n, this + } + cross(e) { + return this.crossVectors(this, e) + } + crossVectors(e, t) { + const n = e.x, + i = e.y, + r = e.z, + a = t.x, + s = t.y, + o = t.z; + return this.x = i * o - r * s, this.y = r * a - n * o, this.z = n * s - i * a, this + } + projectOnVector(e) { + const t = e.lengthSq(); + if (0 === t) return this.set(0, 0, 0); + const n = e.dot(this) / t; + return this.copy(e).multiplyScalar(n) + } + projectOnPlane(e) { + return An.copy(this).projectOnVector(e), this.sub(An) + } + reflect(e) { + return this.sub(An.copy(e).multiplyScalar(2 * this.dot(e))) + } + angleTo(e) { + const t = Math.sqrt(this.lengthSq() * e.lengthSq()); + if (0 === t) return Math.PI / 2; + const n = this.dot(e) / t; + return Math.acos(Ot(n, -1, 1)) + } + distanceTo(e) { + return Math.sqrt(this.distanceToSquared(e)) + } + distanceToSquared(e) { + const t = this.x - e.x, + n = this.y - e.y, + i = this.z - e.z; + return t * t + n * n + i * i + } + manhattanDistanceTo(e) { + return Math.abs(this.x - e.x) + Math.abs(this.y - e.y) + Math.abs(this.z - e.z) + } + setFromSpherical(e) { + return this.setFromSphericalCoords(e.radius, e.phi, e.theta) + } + setFromSphericalCoords(e, t, n) { + const i = Math.sin(t) * e; + return this.x = i * Math.sin(n), this.y = Math.cos(t) * e, this.z = i * Math.cos(n), this + } + setFromCylindrical(e) { + return this.setFromCylindricalCoords(e.radius, e.theta, e.y) + } + setFromCylindricalCoords(e, t, n) { + return this.x = e * Math.sin(t), this.y = n, this.z = e * Math.cos(t), this + } + setFromMatrixPosition(e) { + const t = e.elements; + return this.x = t[12], this.y = t[13], this.z = t[14], this + } + setFromMatrixScale(e) { + const t = this.setFromMatrixColumn(e, 0).length(), + n = this.setFromMatrixColumn(e, 1).length(), + i = this.setFromMatrixColumn(e, 2).length(); + return this.x = t, this.y = n, this.z = i, this + } + setFromMatrixColumn(e, t) { + return this.fromArray(e.elements, 4 * t) + } + setFromMatrix3Column(e, t) { + return this.fromArray(e.elements, 3 * t) + } + setFromEuler(e) { + return this.x = e._x, this.y = e._y, this.z = e._z, this + } + setFromColor(e) { + return this.x = e.r, this.y = e.g, this.z = e.b, this + } + equals(e) { + return e.x === this.x && e.y === this.y && e.z === this.z + } + fromArray(e, t = 0) { + return this.x = e[t], this.y = e[t + 1], this.z = e[t + 2], this + } + toArray(e = [], t = 0) { + return e[t] = this.x, e[t + 1] = this.y, e[t + 2] = this.z, e + } + fromBufferAttribute(e, t) { + return this.x = e.getX(t), this.y = e.getY(t), this.z = e.getZ(t), this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this + } + randomDirection() { + const e = Math.random() * Math.PI * 2, + t = 2 * Math.random() - 1, + n = Math.sqrt(1 - t * t); + return this.x = n * Math.cos(e), this.y = t, this.z = n * Math.sin(e), this + }*[Symbol.iterator]() { + yield this.x, yield this.y, yield this.z + } + } + const An = new yn, + bn = new wn; + class xn { + constructor(e = new yn(1 / 0, 1 / 0, 1 / 0), t = new yn(-1 / 0, -1 / 0, -1 / 0)) { + this.isBox3 = !0, this.min = e, this.max = t + } + set(e, t) { + return this.min.copy(e), this.max.copy(t), this + } + setFromArray(e) { + this.makeEmpty(); + for (let t = 0, n = e.length; t < n; t += 3) this.expandByPoint(En.fromArray(e, t)); + return this + } + setFromBufferAttribute(e) { + this.makeEmpty(); + for (let t = 0, n = e.count; t < n; t++) this.expandByPoint(En.fromBufferAttribute(e, t)); + return this + } + setFromPoints(e) { + this.makeEmpty(); + for (let t = 0, n = e.length; t < n; t++) this.expandByPoint(e[t]); + return this + } + setFromCenterAndSize(e, t) { + const n = En.copy(t).multiplyScalar(.5); + return this.min.copy(e).sub(n), this.max.copy(e).add(n), this + } + setFromObject(e, t = !1) { + return this.makeEmpty(), this.expandByObject(e, t) + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + return this.min.copy(e.min), this.max.copy(e.max), this + } + makeEmpty() { + return this.min.x = this.min.y = this.min.z = 1 / 0, this.max.x = this.max.y = this.max.z = -1 / 0, this + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z + } + getCenter(e) { + return this.isEmpty() ? e.set(0, 0, 0) : e.addVectors(this.min, this.max).multiplyScalar(.5) + } + getSize(e) { + return this.isEmpty() ? e.set(0, 0, 0) : e.subVectors(this.max, this.min) + } + expandByPoint(e) { + return this.min.min(e), this.max.max(e), this + } + expandByVector(e) { + return this.min.sub(e), this.max.add(e), this + } + expandByScalar(e) { + return this.min.addScalar(-e), this.max.addScalar(e), this + } + expandByObject(e, t = !1) { + e.updateWorldMatrix(!1, !1); + const n = e.geometry; + if (void 0 !== n) { + const i = n.getAttribute("position"); + if (!0 === t && void 0 !== i && !0 !== e.isInstancedMesh) + for (let t = 0, n = i.count; t < n; t++) !0 === e.isMesh ? e.getVertexPosition(t, En) : En.fromBufferAttribute(i, t), En.applyMatrix4(e.matrixWorld), this.expandByPoint(En); + else void 0 !== e.boundingBox ? (null === e.boundingBox && e.computeBoundingBox(), Sn.copy(e.boundingBox)) : (null === n.boundingBox && n.computeBoundingBox(), Sn.copy(n.boundingBox)), Sn.applyMatrix4(e.matrixWorld), this.union(Sn) + } + const i = e.children; + for (let e = 0, n = i.length; e < n; e++) this.expandByObject(i[e], t); + return this + } + containsPoint(e) { + return e.x >= this.min.x && e.x <= this.max.x && e.y >= this.min.y && e.y <= this.max.y && e.z >= this.min.z && e.z <= this.max.z + } + containsBox(e) { + return this.min.x <= e.min.x && e.max.x <= this.max.x && this.min.y <= e.min.y && e.max.y <= this.max.y && this.min.z <= e.min.z && e.max.z <= this.max.z + } + getParameter(e, t) { + return t.set((e.x - this.min.x) / (this.max.x - this.min.x), (e.y - this.min.y) / (this.max.y - this.min.y), (e.z - this.min.z) / (this.max.z - this.min.z)) + } + intersectsBox(e) { + return e.max.x >= this.min.x && e.min.x <= this.max.x && e.max.y >= this.min.y && e.min.y <= this.max.y && e.max.z >= this.min.z && e.min.z <= this.max.z + } + intersectsSphere(e) { + return this.clampPoint(e.center, En), En.distanceToSquared(e.center) <= e.radius * e.radius + } + intersectsPlane(e) { + let t, n; + return e.normal.x > 0 ? (t = e.normal.x * this.min.x, n = e.normal.x * this.max.x) : (t = e.normal.x * this.max.x, n = e.normal.x * this.min.x), e.normal.y > 0 ? (t += e.normal.y * this.min.y, n += e.normal.y * this.max.y) : (t += e.normal.y * this.max.y, n += e.normal.y * this.min.y), e.normal.z > 0 ? (t += e.normal.z * this.min.z, n += e.normal.z * this.max.z) : (t += e.normal.z * this.max.z, n += e.normal.z * this.min.z), t <= -e.constant && n >= -e.constant + } + intersectsTriangle(e) { + if (this.isEmpty()) return !1; + this.getCenter(Rn), Ln.subVectors(this.max, Rn), Mn.subVectors(e.a, Rn), Tn.subVectors(e.b, Rn), _n.subVectors(e.c, Rn), Cn.subVectors(Tn, Mn), Pn.subVectors(_n, Tn), In.subVectors(Mn, _n); + let t = [0, -Cn.z, Cn.y, 0, -Pn.z, Pn.y, 0, -In.z, In.y, Cn.z, 0, -Cn.x, Pn.z, 0, -Pn.x, In.z, 0, -In.x, -Cn.y, Cn.x, 0, -Pn.y, Pn.x, 0, -In.y, In.x, 0]; + return !!Bn(t, Mn, Tn, _n, Ln) && (t = [1, 0, 0, 0, 1, 0, 0, 0, 1], !!Bn(t, Mn, Tn, _n, Ln) && (Dn.crossVectors(Cn, Pn), t = [Dn.x, Dn.y, Dn.z], Bn(t, Mn, Tn, _n, Ln))) + } + clampPoint(e, t) { + return t.copy(e).clamp(this.min, this.max) + } + distanceToPoint(e) { + return this.clampPoint(e, En).distanceTo(e) + } + getBoundingSphere(e) { + return this.isEmpty() ? e.makeEmpty() : (this.getCenter(e.center), e.radius = .5 * this.getSize(En).length()), e + } + intersect(e) { + return this.min.max(e.min), this.max.min(e.max), this.isEmpty() && this.makeEmpty(), this + } + union(e) { + return this.min.min(e.min), this.max.max(e.max), this + } + applyMatrix4(e) { + return this.isEmpty() || (kn[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(e), kn[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(e), kn[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(e), kn[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(e), kn[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(e), kn[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(e), kn[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(e), kn[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(e), this.setFromPoints(kn)), this + } + translate(e) { + return this.min.add(e), this.max.add(e), this + } + equals(e) { + return e.min.equals(this.min) && e.max.equals(this.max) + } + } + const kn = [new yn, new yn, new yn, new yn, new yn, new yn, new yn, new yn], + En = new yn, + Sn = new xn, + Mn = new yn, + Tn = new yn, + _n = new yn, + Cn = new yn, + Pn = new yn, + In = new yn, + Rn = new yn, + Ln = new yn, + Dn = new yn, + Nn = new yn; + + function Bn(e, t, n, i, r) { + for (let a = 0, s = e.length - 3; a <= s; a += 3) { + Nn.fromArray(e, a); + const s = r.x * Math.abs(Nn.x) + r.y * Math.abs(Nn.y) + r.z * Math.abs(Nn.z), + o = t.dot(Nn), + l = n.dot(Nn), + c = i.dot(Nn); + if (Math.max(-Math.max(o, l, c), Math.min(o, l, c)) > s) return !1 + } + return !0 + } + const Un = new xn, + zn = new yn, + On = new yn; + class Fn { + constructor(e = new yn, t = -1) { + this.isSphere = !0, this.center = e, this.radius = t + } + set(e, t) { + return this.center.copy(e), this.radius = t, this + } + setFromPoints(e, t) { + const n = this.center; + void 0 !== t ? n.copy(t) : Un.setFromPoints(e).getCenter(n); + let i = 0; + for (let t = 0, r = e.length; t < r; t++) i = Math.max(i, n.distanceToSquared(e[t])); + return this.radius = Math.sqrt(i), this + } + copy(e) { + return this.center.copy(e.center), this.radius = e.radius, this + } + isEmpty() { + return this.radius < 0 + } + makeEmpty() { + return this.center.set(0, 0, 0), this.radius = -1, this + } + containsPoint(e) { + return e.distanceToSquared(this.center) <= this.radius * this.radius + } + distanceToPoint(e) { + return e.distanceTo(this.center) - this.radius + } + intersectsSphere(e) { + const t = this.radius + e.radius; + return e.center.distanceToSquared(this.center) <= t * t + } + intersectsBox(e) { + return e.intersectsSphere(this) + } + intersectsPlane(e) { + return Math.abs(e.distanceToPoint(this.center)) <= this.radius + } + clampPoint(e, t) { + const n = this.center.distanceToSquared(e); + return t.copy(e), n > this.radius * this.radius && (t.sub(this.center).normalize(), t.multiplyScalar(this.radius).add(this.center)), t + } + getBoundingBox(e) { + return this.isEmpty() ? (e.makeEmpty(), e) : (e.set(this.center, this.center), e.expandByScalar(this.radius), e) + } + applyMatrix4(e) { + return this.center.applyMatrix4(e), this.radius = this.radius * e.getMaxScaleOnAxis(), this + } + translate(e) { + return this.center.add(e), this + } + expandByPoint(e) { + if (this.isEmpty()) return this.center.copy(e), this.radius = 0, this; + zn.subVectors(e, this.center); + const t = zn.lengthSq(); + if (t > this.radius * this.radius) { + const e = Math.sqrt(t), + n = .5 * (e - this.radius); + this.center.addScaledVector(zn, n / e), this.radius += n + } + return this + } + union(e) { + return e.isEmpty() ? this : this.isEmpty() ? (this.copy(e), this) : (!0 === this.center.equals(e.center) ? this.radius = Math.max(this.radius, e.radius) : (On.subVectors(e.center, this.center).setLength(e.radius), this.expandByPoint(zn.copy(e.center).add(On)), this.expandByPoint(zn.copy(e.center).sub(On))), this) + } + equals(e) { + return e.center.equals(this.center) && e.radius === this.radius + } + clone() { + return (new this.constructor).copy(this) + } + } + const Wn = new yn, + Vn = new yn, + Hn = new yn, + Gn = new yn, + jn = new yn, + Qn = new yn, + Yn = new yn; + class Kn { + constructor(e = new yn, t = new yn(0, 0, -1)) { + this.origin = e, this.direction = t + } + set(e, t) { + return this.origin.copy(e), this.direction.copy(t), this + } + copy(e) { + return this.origin.copy(e.origin), this.direction.copy(e.direction), this + } + at(e, t) { + return t.copy(this.origin).addScaledVector(this.direction, e) + } + lookAt(e) { + return this.direction.copy(e).sub(this.origin).normalize(), this + } + recast(e) { + return this.origin.copy(this.at(e, Wn)), this + } + closestPointToPoint(e, t) { + t.subVectors(e, this.origin); + const n = t.dot(this.direction); + return n < 0 ? t.copy(this.origin) : t.copy(this.origin).addScaledVector(this.direction, n) + } + distanceToPoint(e) { + return Math.sqrt(this.distanceSqToPoint(e)) + } + distanceSqToPoint(e) { + const t = Wn.subVectors(e, this.origin).dot(this.direction); + return t < 0 ? this.origin.distanceToSquared(e) : (Wn.copy(this.origin).addScaledVector(this.direction, t), Wn.distanceToSquared(e)) + } + distanceSqToSegment(e, t, n, i) { + Vn.copy(e).add(t).multiplyScalar(.5), Hn.copy(t).sub(e).normalize(), Gn.copy(this.origin).sub(Vn); + const r = .5 * e.distanceTo(t), + a = -this.direction.dot(Hn), + s = Gn.dot(this.direction), + o = -Gn.dot(Hn), + l = Gn.lengthSq(), + c = Math.abs(1 - a * a); + let h, d, u, p; + if (c > 0) + if (h = a * o - s, d = a * s - o, p = r * c, h >= 0) + if (d >= -p) + if (d <= p) { + const e = 1 / c; + h *= e, d *= e, u = h * (h + a * d + 2 * s) + d * (a * h + d + 2 * o) + l + } else d = r, h = Math.max(0, -(a * d + s)), u = -h * h + d * (d + 2 * o) + l; + else d = -r, h = Math.max(0, -(a * d + s)), u = -h * h + d * (d + 2 * o) + l; + else d <= -p ? (h = Math.max(0, -(-a * r + s)), d = h > 0 ? -r : Math.min(Math.max(-r, -o), r), u = -h * h + d * (d + 2 * o) + l) : d <= p ? (h = 0, d = Math.min(Math.max(-r, -o), r), u = d * (d + 2 * o) + l) : (h = Math.max(0, -(a * r + s)), d = h > 0 ? r : Math.min(Math.max(-r, -o), r), u = -h * h + d * (d + 2 * o) + l); + else d = a > 0 ? -r : r, h = Math.max(0, -(a * d + s)), u = -h * h + d * (d + 2 * o) + l; + return n && n.copy(this.origin).addScaledVector(this.direction, h), i && i.copy(Vn).addScaledVector(Hn, d), u + } + intersectSphere(e, t) { + Wn.subVectors(e.center, this.origin); + const n = Wn.dot(this.direction), + i = Wn.dot(Wn) - n * n, + r = e.radius * e.radius; + if (i > r) return null; + const a = Math.sqrt(r - i), + s = n - a, + o = n + a; + return o < 0 ? null : s < 0 ? this.at(o, t) : this.at(s, t) + } + intersectsSphere(e) { + return this.distanceSqToPoint(e.center) <= e.radius * e.radius + } + distanceToPlane(e) { + const t = e.normal.dot(this.direction); + if (0 === t) return 0 === e.distanceToPoint(this.origin) ? 0 : null; + const n = -(this.origin.dot(e.normal) + e.constant) / t; + return n >= 0 ? n : null + } + intersectPlane(e, t) { + const n = this.distanceToPlane(e); + return null === n ? null : this.at(n, t) + } + intersectsPlane(e) { + const t = e.distanceToPoint(this.origin); + if (0 === t) return !0; + return e.normal.dot(this.direction) * t < 0 + } + intersectBox(e, t) { + let n, i, r, a, s, o; + const l = 1 / this.direction.x, + c = 1 / this.direction.y, + h = 1 / this.direction.z, + d = this.origin; + return l >= 0 ? (n = (e.min.x - d.x) * l, i = (e.max.x - d.x) * l) : (n = (e.max.x - d.x) * l, i = (e.min.x - d.x) * l), c >= 0 ? (r = (e.min.y - d.y) * c, a = (e.max.y - d.y) * c) : (r = (e.max.y - d.y) * c, a = (e.min.y - d.y) * c), n > a || r > i ? null : ((r > n || isNaN(n)) && (n = r), (a < i || isNaN(i)) && (i = a), h >= 0 ? (s = (e.min.z - d.z) * h, o = (e.max.z - d.z) * h) : (s = (e.max.z - d.z) * h, o = (e.min.z - d.z) * h), n > o || s > i ? null : ((s > n || n != n) && (n = s), (o < i || i != i) && (i = o), i < 0 ? null : this.at(n >= 0 ? n : i, t))) + } + intersectsBox(e) { + return null !== this.intersectBox(e, Wn) + } + intersectTriangle(e, t, n, i, r) { + jn.subVectors(t, e), Qn.subVectors(n, e), Yn.crossVectors(jn, Qn); + let a, s = this.direction.dot(Yn); + if (s > 0) { + if (i) return null; + a = 1 + } else { + if (!(s < 0)) return null; + a = -1, s = -s + } + Gn.subVectors(this.origin, e); + const o = a * this.direction.dot(Qn.crossVectors(Gn, Qn)); + if (o < 0) return null; + const l = a * this.direction.dot(jn.cross(Gn)); + if (l < 0) return null; + if (o + l > s) return null; + const c = -a * Gn.dot(Yn); + return c < 0 ? null : this.at(c / s, r) + } + applyMatrix4(e) { + return this.origin.applyMatrix4(e), this.direction.transformDirection(e), this + } + equals(e) { + return e.origin.equals(this.origin) && e.direction.equals(this.direction) + } + clone() { + return (new this.constructor).copy(this) + } + } + class qn { + constructor(e, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m) { + qn.prototype.isMatrix4 = !0, this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], void 0 !== e && this.set(e, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m) + } + set(e, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m) { + const g = this.elements; + return g[0] = e, g[4] = t, g[8] = n, g[12] = i, g[1] = r, g[5] = a, g[9] = s, g[13] = o, g[2] = l, g[6] = c, g[10] = h, g[14] = d, g[3] = u, g[7] = p, g[11] = f, g[15] = m, this + } + identity() { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + clone() { + return (new qn).fromArray(this.elements) + } + copy(e) { + const t = this.elements, + n = e.elements; + return t[0] = n[0], t[1] = n[1], t[2] = n[2], t[3] = n[3], t[4] = n[4], t[5] = n[5], t[6] = n[6], t[7] = n[7], t[8] = n[8], t[9] = n[9], t[10] = n[10], t[11] = n[11], t[12] = n[12], t[13] = n[13], t[14] = n[14], t[15] = n[15], this + } + copyPosition(e) { + const t = this.elements, + n = e.elements; + return t[12] = n[12], t[13] = n[13], t[14] = n[14], this + } + setFromMatrix3(e) { + const t = e.elements; + return this.set(t[0], t[3], t[6], 0, t[1], t[4], t[7], 0, t[2], t[5], t[8], 0, 0, 0, 0, 1), this + } + extractBasis(e, t, n) { + return e.setFromMatrixColumn(this, 0), t.setFromMatrixColumn(this, 1), n.setFromMatrixColumn(this, 2), this + } + makeBasis(e, t, n) { + return this.set(e.x, t.x, n.x, 0, e.y, t.y, n.y, 0, e.z, t.z, n.z, 0, 0, 0, 0, 1), this + } + extractRotation(e) { + const t = this.elements, + n = e.elements, + i = 1 / Xn.setFromMatrixColumn(e, 0).length(), + r = 1 / Xn.setFromMatrixColumn(e, 1).length(), + a = 1 / Xn.setFromMatrixColumn(e, 2).length(); + return t[0] = n[0] * i, t[1] = n[1] * i, t[2] = n[2] * i, t[3] = 0, t[4] = n[4] * r, t[5] = n[5] * r, t[6] = n[6] * r, t[7] = 0, t[8] = n[8] * a, t[9] = n[9] * a, t[10] = n[10] * a, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, this + } + makeRotationFromEuler(e) { + const t = this.elements, + n = e.x, + i = e.y, + r = e.z, + a = Math.cos(n), + s = Math.sin(n), + o = Math.cos(i), + l = Math.sin(i), + c = Math.cos(r), + h = Math.sin(r); + if ("XYZ" === e.order) { + const e = a * c, + n = a * h, + i = s * c, + r = s * h; + t[0] = o * c, t[4] = -o * h, t[8] = l, t[1] = n + i * l, t[5] = e - r * l, t[9] = -s * o, t[2] = r - e * l, t[6] = i + n * l, t[10] = a * o + } else if ("YXZ" === e.order) { + const e = o * c, + n = o * h, + i = l * c, + r = l * h; + t[0] = e + r * s, t[4] = i * s - n, t[8] = a * l, t[1] = a * h, t[5] = a * c, t[9] = -s, t[2] = n * s - i, t[6] = r + e * s, t[10] = a * o + } else if ("ZXY" === e.order) { + const e = o * c, + n = o * h, + i = l * c, + r = l * h; + t[0] = e - r * s, t[4] = -a * h, t[8] = i + n * s, t[1] = n + i * s, t[5] = a * c, t[9] = r - e * s, t[2] = -a * l, t[6] = s, t[10] = a * o + } else if ("ZYX" === e.order) { + const e = a * c, + n = a * h, + i = s * c, + r = s * h; + t[0] = o * c, t[4] = i * l - n, t[8] = e * l + r, t[1] = o * h, t[5] = r * l + e, t[9] = n * l - i, t[2] = -l, t[6] = s * o, t[10] = a * o + } else if ("YZX" === e.order) { + const e = a * o, + n = a * l, + i = s * o, + r = s * l; + t[0] = o * c, t[4] = r - e * h, t[8] = i * h + n, t[1] = h, t[5] = a * c, t[9] = -s * c, t[2] = -l * c, t[6] = n * h + i, t[10] = e - r * h + } else if ("XZY" === e.order) { + const e = a * o, + n = a * l, + i = s * o, + r = s * l; + t[0] = o * c, t[4] = -h, t[8] = l * c, t[1] = e * h + r, t[5] = a * c, t[9] = n * h - i, t[2] = i * h - n, t[6] = s * c, t[10] = r * h + e + } + return t[3] = 0, t[7] = 0, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, this + } + makeRotationFromQuaternion(e) { + return this.compose(Jn, e, $n) + } + lookAt(e, t, n) { + const i = this.elements; + return ni.subVectors(e, t), 0 === ni.lengthSq() && (ni.z = 1), ni.normalize(), ei.crossVectors(n, ni), 0 === ei.lengthSq() && (1 === Math.abs(n.z) ? ni.x += 1e-4 : ni.z += 1e-4, ni.normalize(), ei.crossVectors(n, ni)), ei.normalize(), ti.crossVectors(ni, ei), i[0] = ei.x, i[4] = ti.x, i[8] = ni.x, i[1] = ei.y, i[5] = ti.y, i[9] = ni.y, i[2] = ei.z, i[6] = ti.z, i[10] = ni.z, this + } + multiply(e) { + return this.multiplyMatrices(this, e) + } + premultiply(e) { + return this.multiplyMatrices(e, this) + } + multiplyMatrices(e, t) { + const n = e.elements, + i = t.elements, + r = this.elements, + a = n[0], + s = n[4], + o = n[8], + l = n[12], + c = n[1], + h = n[5], + d = n[9], + u = n[13], + p = n[2], + f = n[6], + m = n[10], + g = n[14], + v = n[3], + w = n[7], + y = n[11], + A = n[15], + b = i[0], + x = i[4], + k = i[8], + E = i[12], + S = i[1], + M = i[5], + T = i[9], + _ = i[13], + C = i[2], + P = i[6], + I = i[10], + R = i[14], + L = i[3], + D = i[7], + N = i[11], + B = i[15]; + return r[0] = a * b + s * S + o * C + l * L, r[4] = a * x + s * M + o * P + l * D, r[8] = a * k + s * T + o * I + l * N, r[12] = a * E + s * _ + o * R + l * B, r[1] = c * b + h * S + d * C + u * L, r[5] = c * x + h * M + d * P + u * D, r[9] = c * k + h * T + d * I + u * N, r[13] = c * E + h * _ + d * R + u * B, r[2] = p * b + f * S + m * C + g * L, r[6] = p * x + f * M + m * P + g * D, r[10] = p * k + f * T + m * I + g * N, r[14] = p * E + f * _ + m * R + g * B, r[3] = v * b + w * S + y * C + A * L, r[7] = v * x + w * M + y * P + A * D, r[11] = v * k + w * T + y * I + A * N, r[15] = v * E + w * _ + y * R + A * B, this + } + multiplyScalar(e) { + const t = this.elements; + return t[0] *= e, t[4] *= e, t[8] *= e, t[12] *= e, t[1] *= e, t[5] *= e, t[9] *= e, t[13] *= e, t[2] *= e, t[6] *= e, t[10] *= e, t[14] *= e, t[3] *= e, t[7] *= e, t[11] *= e, t[15] *= e, this + } + determinant() { + const e = this.elements, + t = e[0], + n = e[4], + i = e[8], + r = e[12], + a = e[1], + s = e[5], + o = e[9], + l = e[13], + c = e[2], + h = e[6], + d = e[10], + u = e[14]; + return e[3] * (+r * o * h - i * l * h - r * s * d + n * l * d + i * s * u - n * o * u) + e[7] * (+t * o * u - t * l * d + r * a * d - i * a * u + i * l * c - r * o * c) + e[11] * (+t * l * h - t * s * u - r * a * h + n * a * u + r * s * c - n * l * c) + e[15] * (-i * s * c - t * o * h + t * s * d + i * a * h - n * a * d + n * o * c) + } + transpose() { + const e = this.elements; + let t; + return t = e[1], e[1] = e[4], e[4] = t, t = e[2], e[2] = e[8], e[8] = t, t = e[6], e[6] = e[9], e[9] = t, t = e[3], e[3] = e[12], e[12] = t, t = e[7], e[7] = e[13], e[13] = t, t = e[11], e[11] = e[14], e[14] = t, this + } + setPosition(e, t, n) { + const i = this.elements; + return e.isVector3 ? (i[12] = e.x, i[13] = e.y, i[14] = e.z) : (i[12] = e, i[13] = t, i[14] = n), this + } + invert() { + const e = this.elements, + t = e[0], + n = e[1], + i = e[2], + r = e[3], + a = e[4], + s = e[5], + o = e[6], + l = e[7], + c = e[8], + h = e[9], + d = e[10], + u = e[11], + p = e[12], + f = e[13], + m = e[14], + g = e[15], + v = h * m * l - f * d * l + f * o * u - s * m * u - h * o * g + s * d * g, + w = p * d * l - c * m * l - p * o * u + a * m * u + c * o * g - a * d * g, + y = c * f * l - p * h * l + p * s * u - a * f * u - c * s * g + a * h * g, + A = p * h * o - c * f * o - p * s * d + a * f * d + c * s * m - a * h * m, + b = t * v + n * w + i * y + r * A; + if (0 === b) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const x = 1 / b; + return e[0] = v * x, e[1] = (f * d * r - h * m * r - f * i * u + n * m * u + h * i * g - n * d * g) * x, e[2] = (s * m * r - f * o * r + f * i * l - n * m * l - s * i * g + n * o * g) * x, e[3] = (h * o * r - s * d * r - h * i * l + n * d * l + s * i * u - n * o * u) * x, e[4] = w * x, e[5] = (c * m * r - p * d * r + p * i * u - t * m * u - c * i * g + t * d * g) * x, e[6] = (p * o * r - a * m * r - p * i * l + t * m * l + a * i * g - t * o * g) * x, e[7] = (a * d * r - c * o * r + c * i * l - t * d * l - a * i * u + t * o * u) * x, e[8] = y * x, e[9] = (p * h * r - c * f * r - p * n * u + t * f * u + c * n * g - t * h * g) * x, e[10] = (a * f * r - p * s * r + p * n * l - t * f * l - a * n * g + t * s * g) * x, e[11] = (c * s * r - a * h * r - c * n * l + t * h * l + a * n * u - t * s * u) * x, e[12] = A * x, e[13] = (c * f * i - p * h * i + p * n * d - t * f * d - c * n * m + t * h * m) * x, e[14] = (p * s * i - a * f * i - p * n * o + t * f * o + a * n * m - t * s * m) * x, e[15] = (a * h * i - c * s * i + c * n * o - t * h * o - a * n * d + t * s * d) * x, this + } + scale(e) { + const t = this.elements, + n = e.x, + i = e.y, + r = e.z; + return t[0] *= n, t[4] *= i, t[8] *= r, t[1] *= n, t[5] *= i, t[9] *= r, t[2] *= n, t[6] *= i, t[10] *= r, t[3] *= n, t[7] *= i, t[11] *= r, this + } + getMaxScaleOnAxis() { + const e = this.elements, + t = e[0] * e[0] + e[1] * e[1] + e[2] * e[2], + n = e[4] * e[4] + e[5] * e[5] + e[6] * e[6], + i = e[8] * e[8] + e[9] * e[9] + e[10] * e[10]; + return Math.sqrt(Math.max(t, n, i)) + } + makeTranslation(e, t, n) { + return e.isVector3 ? this.set(1, 0, 0, e.x, 0, 1, 0, e.y, 0, 0, 1, e.z, 0, 0, 0, 1) : this.set(1, 0, 0, e, 0, 1, 0, t, 0, 0, 1, n, 0, 0, 0, 1), this + } + makeRotationX(e) { + const t = Math.cos(e), + n = Math.sin(e); + return this.set(1, 0, 0, 0, 0, t, -n, 0, 0, n, t, 0, 0, 0, 0, 1), this + } + makeRotationY(e) { + const t = Math.cos(e), + n = Math.sin(e); + return this.set(t, 0, n, 0, 0, 1, 0, 0, -n, 0, t, 0, 0, 0, 0, 1), this + } + makeRotationZ(e) { + const t = Math.cos(e), + n = Math.sin(e); + return this.set(t, -n, 0, 0, n, t, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + makeRotationAxis(e, t) { + const n = Math.cos(t), + i = Math.sin(t), + r = 1 - n, + a = e.x, + s = e.y, + o = e.z, + l = r * a, + c = r * s; + return this.set(l * a + n, l * s - i * o, l * o + i * s, 0, l * s + i * o, c * s + n, c * o - i * a, 0, l * o - i * s, c * o + i * a, r * o * o + n, 0, 0, 0, 0, 1), this + } + makeScale(e, t, n) { + return this.set(e, 0, 0, 0, 0, t, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this + } + makeShear(e, t, n, i, r, a) { + return this.set(1, n, r, 0, e, 1, a, 0, t, i, 1, 0, 0, 0, 0, 1), this + } + compose(e, t, n) { + const i = this.elements, + r = t._x, + a = t._y, + s = t._z, + o = t._w, + l = r + r, + c = a + a, + h = s + s, + d = r * l, + u = r * c, + p = r * h, + f = a * c, + m = a * h, + g = s * h, + v = o * l, + w = o * c, + y = o * h, + A = n.x, + b = n.y, + x = n.z; + return i[0] = (1 - (f + g)) * A, i[1] = (u + y) * A, i[2] = (p - w) * A, i[3] = 0, i[4] = (u - y) * b, i[5] = (1 - (d + g)) * b, i[6] = (m + v) * b, i[7] = 0, i[8] = (p + w) * x, i[9] = (m - v) * x, i[10] = (1 - (d + f)) * x, i[11] = 0, i[12] = e.x, i[13] = e.y, i[14] = e.z, i[15] = 1, this + } + decompose(e, t, n) { + const i = this.elements; + let r = Xn.set(i[0], i[1], i[2]).length(); + const a = Xn.set(i[4], i[5], i[6]).length(), + s = Xn.set(i[8], i[9], i[10]).length(); + this.determinant() < 0 && (r = -r), e.x = i[12], e.y = i[13], e.z = i[14], Zn.copy(this); + const o = 1 / r, + l = 1 / a, + c = 1 / s; + return Zn.elements[0] *= o, Zn.elements[1] *= o, Zn.elements[2] *= o, Zn.elements[4] *= l, Zn.elements[5] *= l, Zn.elements[6] *= l, Zn.elements[8] *= c, Zn.elements[9] *= c, Zn.elements[10] *= c, t.setFromRotationMatrix(Zn), n.x = r, n.y = a, n.z = s, this + } + makePerspective(e, t, n, i, r, a, s = 2e3) { + const o = this.elements, + l = 2 * r / (t - e), + c = 2 * r / (n - i), + h = (t + e) / (t - e), + d = (n + i) / (n - i); + let u, p; + if (s === It) u = -(a + r) / (a - r), p = -2 * a * r / (a - r); + else { + if (s !== Rt) throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: " + s); + u = -a / (a - r), p = -a * r / (a - r) + } + return o[0] = l, o[4] = 0, o[8] = h, o[12] = 0, o[1] = 0, o[5] = c, o[9] = d, o[13] = 0, o[2] = 0, o[6] = 0, o[10] = u, o[14] = p, o[3] = 0, o[7] = 0, o[11] = -1, o[15] = 0, this + } + makeOrthographic(e, t, n, i, r, a, s = 2e3) { + const o = this.elements, + l = 1 / (t - e), + c = 1 / (n - i), + h = 1 / (a - r), + d = (t + e) * l, + u = (n + i) * c; + let p, f; + if (s === It) p = (a + r) * h, f = -2 * h; + else { + if (s !== Rt) throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: " + s); + p = r * h, f = -1 * h + } + return o[0] = 2 * l, o[4] = 0, o[8] = 0, o[12] = -d, o[1] = 0, o[5] = 2 * c, o[9] = 0, o[13] = -u, o[2] = 0, o[6] = 0, o[10] = f, o[14] = -p, o[3] = 0, o[7] = 0, o[11] = 0, o[15] = 1, this + } + equals(e) { + const t = this.elements, + n = e.elements; + for (let e = 0; e < 16; e++) + if (t[e] !== n[e]) return !1; + return !0 + } + fromArray(e, t = 0) { + for (let n = 0; n < 16; n++) this.elements[n] = e[n + t]; + return this + } + toArray(e = [], t = 0) { + const n = this.elements; + return e[t] = n[0], e[t + 1] = n[1], e[t + 2] = n[2], e[t + 3] = n[3], e[t + 4] = n[4], e[t + 5] = n[5], e[t + 6] = n[6], e[t + 7] = n[7], e[t + 8] = n[8], e[t + 9] = n[9], e[t + 10] = n[10], e[t + 11] = n[11], e[t + 12] = n[12], e[t + 13] = n[13], e[t + 14] = n[14], e[t + 15] = n[15], e + } + } + const Xn = new yn, + Zn = new qn, + Jn = new yn(0, 0, 0), + $n = new yn(1, 1, 1), + ei = new yn, + ti = new yn, + ni = new yn, + ii = new qn, + ri = new wn; + class ai { + constructor(e = 0, t = 0, n = 0, i = ai.DEFAULT_ORDER) { + this.isEuler = !0, this._x = e, this._y = t, this._z = n, this._order = i + } + get x() { + return this._x + } + set x(e) { + this._x = e, this._onChangeCallback() + } + get y() { + return this._y + } + set y(e) { + this._y = e, this._onChangeCallback() + } + get z() { + return this._z + } + set z(e) { + this._z = e, this._onChangeCallback() + } + get order() { + return this._order + } + set order(e) { + this._order = e, this._onChangeCallback() + } + set(e, t, n, i = this._order) { + return this._x = e, this._y = t, this._z = n, this._order = i, this._onChangeCallback(), this + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._order) + } + copy(e) { + return this._x = e._x, this._y = e._y, this._z = e._z, this._order = e._order, this._onChangeCallback(), this + } + setFromRotationMatrix(e, t = this._order, n = !0) { + const i = e.elements, + r = i[0], + a = i[4], + s = i[8], + o = i[1], + l = i[5], + c = i[9], + h = i[2], + d = i[6], + u = i[10]; + switch (t) { + case "XYZ": + this._y = Math.asin(Ot(s, -1, 1)), Math.abs(s) < .9999999 ? (this._x = Math.atan2(-c, u), this._z = Math.atan2(-a, r)) : (this._x = Math.atan2(d, l), this._z = 0); + break; + case "YXZ": + this._x = Math.asin(-Ot(c, -1, 1)), Math.abs(c) < .9999999 ? (this._y = Math.atan2(s, u), this._z = Math.atan2(o, l)) : (this._y = Math.atan2(-h, r), this._z = 0); + break; + case "ZXY": + this._x = Math.asin(Ot(d, -1, 1)), Math.abs(d) < .9999999 ? (this._y = Math.atan2(-h, u), this._z = Math.atan2(-a, l)) : (this._y = 0, this._z = Math.atan2(o, r)); + break; + case "ZYX": + this._y = Math.asin(-Ot(h, -1, 1)), Math.abs(h) < .9999999 ? (this._x = Math.atan2(d, u), this._z = Math.atan2(o, r)) : (this._x = 0, this._z = Math.atan2(-a, l)); + break; + case "YZX": + this._z = Math.asin(Ot(o, -1, 1)), Math.abs(o) < .9999999 ? (this._x = Math.atan2(-c, l), this._y = Math.atan2(-h, r)) : (this._x = 0, this._y = Math.atan2(s, u)); + break; + case "XZY": + this._z = Math.asin(-Ot(a, -1, 1)), Math.abs(a) < .9999999 ? (this._x = Math.atan2(d, l), this._y = Math.atan2(s, r)) : (this._x = Math.atan2(-c, u), this._y = 0); + break; + default: + console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + t) + } + return this._order = t, !0 === n && this._onChangeCallback(), this + } + setFromQuaternion(e, t, n) { + return ii.makeRotationFromQuaternion(e), this.setFromRotationMatrix(ii, t, n) + } + setFromVector3(e, t = this._order) { + return this.set(e.x, e.y, e.z, t) + } + reorder(e) { + return ri.setFromEuler(this), this.setFromQuaternion(ri, e) + } + equals(e) { + return e._x === this._x && e._y === this._y && e._z === this._z && e._order === this._order + } + fromArray(e) { + return this._x = e[0], this._y = e[1], this._z = e[2], void 0 !== e[3] && (this._order = e[3]), this._onChangeCallback(), this + } + toArray(e = [], t = 0) { + return e[t] = this._x, e[t + 1] = this._y, e[t + 2] = this._z, e[t + 3] = this._order, e + } + _onChange(e) { + return this._onChangeCallback = e, this + } + _onChangeCallback() {}*[Symbol.iterator]() { + yield this._x, yield this._y, yield this._z, yield this._order + } + } + ai.DEFAULT_ORDER = "XYZ"; + class si { + constructor() { + this.mask = 1 + } + set(e) { + this.mask = 1 << e >>> 0 + } + enable(e) { + this.mask |= 1 << e + } + enableAll() { + this.mask = -1 + } + toggle(e) { + this.mask ^= 1 << e + } + disable(e) { + this.mask &= ~(1 << e) + } + disableAll() { + this.mask = 0 + } + test(e) { + return !!(this.mask & e.mask) + } + isEnabled(e) { + return !!(this.mask & 1 << e) + } + } + let oi = 0; + const li = new yn, + ci = new wn, + hi = new qn, + di = new yn, + ui = new yn, + pi = new yn, + fi = new wn, + mi = new yn(1, 0, 0), + gi = new yn(0, 1, 0), + vi = new yn(0, 0, 1), + wi = { + type: "added" + }, + yi = { + type: "removed" + }, + Ai = { + type: "childadded", + child: null + }, + bi = { + type: "childremoved", + child: null + }; + class xi extends Lt { + constructor() { + super(), this.isObject3D = !0, Object.defineProperty(this, "id", { + value: oi++ + }), this.uuid = zt(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = xi.DEFAULT_UP.clone(); + const e = new yn, + t = new ai, + n = new wn, + i = new yn(1, 1, 1); + t._onChange((function() { + n.setFromEuler(t, !1) + })), n._onChange((function() { + t.setFromQuaternion(n, void 0, !1) + })), Object.defineProperties(this, { + position: { + configurable: !0, + enumerable: !0, + value: e + }, + rotation: { + configurable: !0, + enumerable: !0, + value: t + }, + quaternion: { + configurable: !0, + enumerable: !0, + value: n + }, + scale: { + configurable: !0, + enumerable: !0, + value: i + }, + modelViewMatrix: { + value: new qn + }, + normalMatrix: { + value: new Qt + } + }), this.matrix = new qn, this.matrixWorld = new qn, this.matrixAutoUpdate = xi.DEFAULT_MATRIX_AUTO_UPDATE, this.matrixWorldAutoUpdate = xi.DEFAULT_MATRIX_WORLD_AUTO_UPDATE, this.matrixWorldNeedsUpdate = !1, this.layers = new si, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.animations = [], this.userData = {} + } + onBeforeShadow() {} + onAfterShadow() {} + onBeforeRender() {} + onAfterRender() {} + applyMatrix4(e) { + this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(e), this.matrix.decompose(this.position, this.quaternion, this.scale) + } + applyQuaternion(e) { + return this.quaternion.premultiply(e), this + } + setRotationFromAxisAngle(e, t) { + this.quaternion.setFromAxisAngle(e, t) + } + setRotationFromEuler(e) { + this.quaternion.setFromEuler(e, !0) + } + setRotationFromMatrix(e) { + this.quaternion.setFromRotationMatrix(e) + } + setRotationFromQuaternion(e) { + this.quaternion.copy(e) + } + rotateOnAxis(e, t) { + return ci.setFromAxisAngle(e, t), this.quaternion.multiply(ci), this + } + rotateOnWorldAxis(e, t) { + return ci.setFromAxisAngle(e, t), this.quaternion.premultiply(ci), this + } + rotateX(e) { + return this.rotateOnAxis(mi, e) + } + rotateY(e) { + return this.rotateOnAxis(gi, e) + } + rotateZ(e) { + return this.rotateOnAxis(vi, e) + } + translateOnAxis(e, t) { + return li.copy(e).applyQuaternion(this.quaternion), this.position.add(li.multiplyScalar(t)), this + } + translateX(e) { + return this.translateOnAxis(mi, e) + } + translateY(e) { + return this.translateOnAxis(gi, e) + } + translateZ(e) { + return this.translateOnAxis(vi, e) + } + localToWorld(e) { + return this.updateWorldMatrix(!0, !1), e.applyMatrix4(this.matrixWorld) + } + worldToLocal(e) { + return this.updateWorldMatrix(!0, !1), e.applyMatrix4(hi.copy(this.matrixWorld).invert()) + } + lookAt(e, t, n) { + e.isVector3 ? di.copy(e) : di.set(e, t, n); + const i = this.parent; + this.updateWorldMatrix(!0, !1), ui.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? hi.lookAt(ui, di, this.up) : hi.lookAt(di, ui, this.up), this.quaternion.setFromRotationMatrix(hi), i && (hi.extractRotation(i.matrixWorld), ci.setFromRotationMatrix(hi), this.quaternion.premultiply(ci.invert())) + } + add(e) { + if (arguments.length > 1) { + for (let e = 0; e < arguments.length; e++) this.add(arguments[e]); + return this + } + return e === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", e), this) : (e && e.isObject3D ? (e.removeFromParent(), e.parent = this, this.children.push(e), e.dispatchEvent(wi), Ai.child = e, this.dispatchEvent(Ai), Ai.child = null) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", e), this) + } + remove(e) { + if (arguments.length > 1) { + for (let e = 0; e < arguments.length; e++) this.remove(arguments[e]); + return this + } + const t = this.children.indexOf(e); + return -1 !== t && (e.parent = null, this.children.splice(t, 1), e.dispatchEvent(yi), bi.child = e, this.dispatchEvent(bi), bi.child = null), this + } + removeFromParent() { + const e = this.parent; + return null !== e && e.remove(this), this + } + clear() { + return this.remove(...this.children) + } + attach(e) { + return this.updateWorldMatrix(!0, !1), hi.copy(this.matrixWorld).invert(), null !== e.parent && (e.parent.updateWorldMatrix(!0, !1), hi.multiply(e.parent.matrixWorld)), e.applyMatrix4(hi), e.removeFromParent(), e.parent = this, this.children.push(e), e.updateWorldMatrix(!1, !0), e.dispatchEvent(wi), Ai.child = e, this.dispatchEvent(Ai), Ai.child = null, this + } + getObjectById(e) { + return this.getObjectByProperty("id", e) + } + getObjectByName(e) { + return this.getObjectByProperty("name", e) + } + getObjectByProperty(e, t) { + if (this[e] === t) return this; + for (let n = 0, i = this.children.length; n < i; n++) { + const i = this.children[n].getObjectByProperty(e, t); + if (void 0 !== i) return i + } + } + getObjectsByProperty(e, t, n = []) { + this[e] === t && n.push(this); + const i = this.children; + for (let r = 0, a = i.length; r < a; r++) i[r].getObjectsByProperty(e, t, n); + return n + } + getWorldPosition(e) { + return this.updateWorldMatrix(!0, !1), e.setFromMatrixPosition(this.matrixWorld) + } + getWorldQuaternion(e) { + return this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(ui, e, pi), e + } + getWorldScale(e) { + return this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(ui, fi, e), e + } + getWorldDirection(e) { + this.updateWorldMatrix(!0, !1); + const t = this.matrixWorld.elements; + return e.set(t[8], t[9], t[10]).normalize() + } + raycast() {} + traverse(e) { + e(this); + const t = this.children; + for (let n = 0, i = t.length; n < i; n++) t[n].traverse(e) + } + traverseVisible(e) { + if (!1 === this.visible) return; + e(this); + const t = this.children; + for (let n = 0, i = t.length; n < i; n++) t[n].traverseVisible(e) + } + traverseAncestors(e) { + const t = this.parent; + null !== t && (e(t), t.traverseAncestors(e)) + } + updateMatrix() { + this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0 + } + updateMatrixWorld(e) { + this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || e) && (!0 === this.matrixWorldAutoUpdate && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix)), this.matrixWorldNeedsUpdate = !1, e = !0); + const t = this.children; + for (let n = 0, i = t.length; n < i; n++) { + t[n].updateMatrixWorld(e) + } + } + updateWorldMatrix(e, t) { + const n = this.parent; + if (!0 === e && null !== n && n.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), !0 === this.matrixWorldAutoUpdate && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix)), !0 === t) { + const e = this.children; + for (let t = 0, n = e.length; t < n; t++) { + e[t].updateWorldMatrix(!1, !0) + } + } + } + toJSON(e) { + const t = void 0 === e || "string" == typeof e, + n = {}; + t && (e = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {}, + nodes: {} + }, n.metadata = { + version: 4.6, + type: "Object", + generator: "Object3D.toJSON" + }); + const i = {}; + + function r(t, n) { + return void 0 === t[n.uuid] && (t[n.uuid] = n.toJSON(e)), n.uuid + } + if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), Object.keys(this.userData).length > 0 && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), i.up = this.up.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON(), null !== this.instanceColor && (i.instanceColor = this.instanceColor.toJSON())), this.isBatchedMesh && (i.type = "BatchedMesh", i.perObjectFrustumCulled = this.perObjectFrustumCulled, i.sortObjects = this.sortObjects, i.drawRanges = this._drawRanges, i.reservedRanges = this._reservedRanges, i.visibility = this._visibility, i.active = this._active, i.bounds = this._bounds.map((e => ({ + boxInitialized: e.boxInitialized, + boxMin: e.box.min.toArray(), + boxMax: e.box.max.toArray(), + sphereInitialized: e.sphereInitialized, + sphereRadius: e.sphere.radius, + sphereCenter: e.sphere.center.toArray() + }))), i.maxInstanceCount = this._maxInstanceCount, i.maxVertexCount = this._maxVertexCount, i.maxIndexCount = this._maxIndexCount, i.geometryInitialized = this._geometryInitialized, i.geometryCount = this._geometryCount, i.matricesTexture = this._matricesTexture.toJSON(e), null !== this._colorsTexture && (i.colorsTexture = this._colorsTexture.toJSON(e)), null !== this.boundingSphere && (i.boundingSphere = { + center: i.boundingSphere.center.toArray(), + radius: i.boundingSphere.radius + }), null !== this.boundingBox && (i.boundingBox = { + min: i.boundingBox.min.toArray(), + max: i.boundingBox.max.toArray() + })), this.isScene) this.background && (this.background.isColor ? i.background = this.background.toJSON() : this.background.isTexture && (i.background = this.background.toJSON(e).uuid)), this.environment && this.environment.isTexture && !0 !== this.environment.isRenderTargetTexture && (i.environment = this.environment.toJSON(e).uuid); + else if (this.isMesh || this.isLine || this.isPoints) { + i.geometry = r(e.geometries, this.geometry); + const t = this.geometry.parameters; + if (void 0 !== t && void 0 !== t.shapes) { + const n = t.shapes; + if (Array.isArray(n)) + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + r(e.shapes, i) + } else r(e.shapes, n) + } + } + if (this.isSkinnedMesh && (i.bindMode = this.bindMode, i.bindMatrix = this.bindMatrix.toArray(), void 0 !== this.skeleton && (r(e.skeletons, this.skeleton), i.skeleton = this.skeleton.uuid)), void 0 !== this.material) + if (Array.isArray(this.material)) { + const t = []; + for (let n = 0, i = this.material.length; n < i; n++) t.push(r(e.materials, this.material[n])); + i.material = t + } else i.material = r(e.materials, this.material); + if (this.children.length > 0) { + i.children = []; + for (let t = 0; t < this.children.length; t++) i.children.push(this.children[t].toJSON(e).object) + } + if (this.animations.length > 0) { + i.animations = []; + for (let t = 0; t < this.animations.length; t++) { + const n = this.animations[t]; + i.animations.push(r(e.animations, n)) + } + } + if (t) { + const t = a(e.geometries), + i = a(e.materials), + r = a(e.textures), + s = a(e.images), + o = a(e.shapes), + l = a(e.skeletons), + c = a(e.animations), + h = a(e.nodes); + t.length > 0 && (n.geometries = t), i.length > 0 && (n.materials = i), r.length > 0 && (n.textures = r), s.length > 0 && (n.images = s), o.length > 0 && (n.shapes = o), l.length > 0 && (n.skeletons = l), c.length > 0 && (n.animations = c), h.length > 0 && (n.nodes = h) + } + return n.object = i, n; + + function a(e) { + const t = []; + for (const n in e) { + const i = e[n]; + delete i.metadata, t.push(i) + } + return t + } + } + clone(e) { + return (new this.constructor).copy(this, e) + } + copy(e, t = !0) { + if (this.name = e.name, this.up.copy(e.up), this.position.copy(e.position), this.rotation.order = e.rotation.order, this.quaternion.copy(e.quaternion), this.scale.copy(e.scale), this.matrix.copy(e.matrix), this.matrixWorld.copy(e.matrixWorld), this.matrixAutoUpdate = e.matrixAutoUpdate, this.matrixWorldAutoUpdate = e.matrixWorldAutoUpdate, this.matrixWorldNeedsUpdate = e.matrixWorldNeedsUpdate, this.layers.mask = e.layers.mask, this.visible = e.visible, this.castShadow = e.castShadow, this.receiveShadow = e.receiveShadow, this.frustumCulled = e.frustumCulled, this.renderOrder = e.renderOrder, this.animations = e.animations.slice(), this.userData = JSON.parse(JSON.stringify(e.userData)), !0 === t) + for (let t = 0; t < e.children.length; t++) { + const n = e.children[t]; + this.add(n.clone()) + } + return this + } + } + xi.DEFAULT_UP = new yn(0, 1, 0), xi.DEFAULT_MATRIX_AUTO_UPDATE = !0, xi.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = !0; + const ki = new yn, + Ei = new yn, + Si = new yn, + Mi = new yn, + Ti = new yn, + _i = new yn, + Ci = new yn, + Pi = new yn, + Ii = new yn, + Ri = new yn, + Li = new pn, + Di = new pn, + Ni = new pn; + class Bi { + constructor(e = new yn, t = new yn, n = new yn) { + this.a = e, this.b = t, this.c = n + } + static getNormal(e, t, n, i) { + i.subVectors(n, t), ki.subVectors(e, t), i.cross(ki); + const r = i.lengthSq(); + return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0) + } + static getBarycoord(e, t, n, i, r) { + ki.subVectors(i, t), Ei.subVectors(n, t), Si.subVectors(e, t); + const a = ki.dot(ki), + s = ki.dot(Ei), + o = ki.dot(Si), + l = Ei.dot(Ei), + c = Ei.dot(Si), + h = a * l - s * s; + if (0 === h) return r.set(0, 0, 0), null; + const d = 1 / h, + u = (l * o - s * c) * d, + p = (a * c - s * o) * d; + return r.set(1 - u - p, p, u) + } + static containsPoint(e, t, n, i) { + return null !== this.getBarycoord(e, t, n, i, Mi) && (Mi.x >= 0 && Mi.y >= 0 && Mi.x + Mi.y <= 1) + } + static getInterpolation(e, t, n, i, r, a, s, o) { + return null === this.getBarycoord(e, t, n, i, Mi) ? (o.x = 0, o.y = 0, "z" in o && (o.z = 0), "w" in o && (o.w = 0), null) : (o.setScalar(0), o.addScaledVector(r, Mi.x), o.addScaledVector(a, Mi.y), o.addScaledVector(s, Mi.z), o) + } + static getInterpolatedAttribute(e, t, n, i, r, a) { + return Li.setScalar(0), Di.setScalar(0), Ni.setScalar(0), Li.fromBufferAttribute(e, t), Di.fromBufferAttribute(e, n), Ni.fromBufferAttribute(e, i), a.setScalar(0), a.addScaledVector(Li, r.x), a.addScaledVector(Di, r.y), a.addScaledVector(Ni, r.z), a + } + static isFrontFacing(e, t, n, i) { + return ki.subVectors(n, t), Ei.subVectors(e, t), ki.cross(Ei).dot(i) < 0 + } + set(e, t, n) { + return this.a.copy(e), this.b.copy(t), this.c.copy(n), this + } + setFromPointsAndIndices(e, t, n, i) { + return this.a.copy(e[t]), this.b.copy(e[n]), this.c.copy(e[i]), this + } + setFromAttributeAndIndices(e, t, n, i) { + return this.a.fromBufferAttribute(e, t), this.b.fromBufferAttribute(e, n), this.c.fromBufferAttribute(e, i), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + return this.a.copy(e.a), this.b.copy(e.b), this.c.copy(e.c), this + } + getArea() { + return ki.subVectors(this.c, this.b), Ei.subVectors(this.a, this.b), .5 * ki.cross(Ei).length() + } + getMidpoint(e) { + return e.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) + } + getNormal(e) { + return Bi.getNormal(this.a, this.b, this.c, e) + } + getPlane(e) { + return e.setFromCoplanarPoints(this.a, this.b, this.c) + } + getBarycoord(e, t) { + return Bi.getBarycoord(e, this.a, this.b, this.c, t) + } + getInterpolation(e, t, n, i, r) { + return Bi.getInterpolation(e, this.a, this.b, this.c, t, n, i, r) + } + containsPoint(e) { + return Bi.containsPoint(e, this.a, this.b, this.c) + } + isFrontFacing(e) { + return Bi.isFrontFacing(this.a, this.b, this.c, e) + } + intersectsBox(e) { + return e.intersectsTriangle(this) + } + closestPointToPoint(e, t) { + const n = this.a, + i = this.b, + r = this.c; + let a, s; + Ti.subVectors(i, n), _i.subVectors(r, n), Pi.subVectors(e, n); + const o = Ti.dot(Pi), + l = _i.dot(Pi); + if (o <= 0 && l <= 0) return t.copy(n); + Ii.subVectors(e, i); + const c = Ti.dot(Ii), + h = _i.dot(Ii); + if (c >= 0 && h <= c) return t.copy(i); + const d = o * h - c * l; + if (d <= 0 && o >= 0 && c <= 0) return a = o / (o - c), t.copy(n).addScaledVector(Ti, a); + Ri.subVectors(e, r); + const u = Ti.dot(Ri), + p = _i.dot(Ri); + if (p >= 0 && u <= p) return t.copy(r); + const f = u * l - o * p; + if (f <= 0 && l >= 0 && p <= 0) return s = l / (l - p), t.copy(n).addScaledVector(_i, s); + const m = c * p - u * h; + if (m <= 0 && h - c >= 0 && u - p >= 0) return Ci.subVectors(r, i), s = (h - c) / (h - c + (u - p)), t.copy(i).addScaledVector(Ci, s); + const g = 1 / (m + f + d); + return a = f * g, s = d * g, t.copy(n).addScaledVector(Ti, a).addScaledVector(_i, s) + } + equals(e) { + return e.a.equals(this.a) && e.b.equals(this.b) && e.c.equals(this.c) + } + } + const Ui = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }, + zi = { + h: 0, + s: 0, + l: 0 + }, + Oi = { + h: 0, + s: 0, + l: 0 + }; + + function Fi(e, t, n) { + return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? e + 6 * (t - e) * n : n < .5 ? t : n < 2 / 3 ? e + 6 * (t - e) * (2 / 3 - n) : e + } + class Wi { + constructor(e, t, n) { + return this.isColor = !0, this.r = 1, this.g = 1, this.b = 1, this.set(e, t, n) + } + set(e, t, n) { + if (void 0 === t && void 0 === n) { + const t = e; + t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t) + } else this.setRGB(e, t, n); + return this + } + setScalar(e) { + return this.r = e, this.g = e, this.b = e, this + } + setHex(e, t = gt) { + return e = Math.floor(e), this.r = (e >> 16 & 255) / 255, this.g = (e >> 8 & 255) / 255, this.b = (255 & e) / 255, nn.toWorkingColorSpace(this, t), this + } + setRGB(e, t, n, i = nn.workingColorSpace) { + return this.r = e, this.g = t, this.b = n, nn.toWorkingColorSpace(this, i), this + } + setHSL(e, t, n, i = nn.workingColorSpace) { + if (e = Ft(e, 1), t = Ot(t, 0, 1), n = Ot(n, 0, 1), 0 === t) this.r = this.g = this.b = n; + else { + const i = n <= .5 ? n * (1 + t) : n + t - n * t, + r = 2 * n - i; + this.r = Fi(r, i, e + 1 / 3), this.g = Fi(r, i, e), this.b = Fi(r, i, e - 1 / 3) + } + return nn.toWorkingColorSpace(this, i), this + } + setStyle(e, t = gt) { + function n(t) { + void 0 !== t && parseFloat(t) < 1 && console.warn("THREE.Color: Alpha component of " + e + " will be ignored.") + } + let i; + if (i = /^(\w+)\(([^\)]*)\)/.exec(e)) { + let r; + const a = i[1], + s = i[2]; + switch (a) { + case "rgb": + case "rgba": + if (r = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s)) return n(r[4]), this.setRGB(Math.min(255, parseInt(r[1], 10)) / 255, Math.min(255, parseInt(r[2], 10)) / 255, Math.min(255, parseInt(r[3], 10)) / 255, t); + if (r = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s)) return n(r[4]), this.setRGB(Math.min(100, parseInt(r[1], 10)) / 100, Math.min(100, parseInt(r[2], 10)) / 100, Math.min(100, parseInt(r[3], 10)) / 100, t); + break; + case "hsl": + case "hsla": + if (r = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s)) return n(r[4]), this.setHSL(parseFloat(r[1]) / 360, parseFloat(r[2]) / 100, parseFloat(r[3]) / 100, t); + break; + default: + console.warn("THREE.Color: Unknown color model " + e) + } + } else if (i = /^\#([A-Fa-f\d]+)$/.exec(e)) { + const n = i[1], + r = n.length; + if (3 === r) return this.setRGB(parseInt(n.charAt(0), 16) / 15, parseInt(n.charAt(1), 16) / 15, parseInt(n.charAt(2), 16) / 15, t); + if (6 === r) return this.setHex(parseInt(n, 16), t); + console.warn("THREE.Color: Invalid hex color " + e) + } else if (e && e.length > 0) return this.setColorName(e, t); + return this + } + setColorName(e, t = gt) { + const n = Ui[e.toLowerCase()]; + return void 0 !== n ? this.setHex(n, t) : console.warn("THREE.Color: Unknown color " + e), this + } + clone() { + return new this.constructor(this.r, this.g, this.b) + } + copy(e) { + return this.r = e.r, this.g = e.g, this.b = e.b, this + } + copySRGBToLinear(e) { + return this.r = rn(e.r), this.g = rn(e.g), this.b = rn(e.b), this + } + copyLinearToSRGB(e) { + return this.r = an(e.r), this.g = an(e.g), this.b = an(e.b), this + } + convertSRGBToLinear() { + return this.copySRGBToLinear(this), this + } + convertLinearToSRGB() { + return this.copyLinearToSRGB(this), this + } + getHex(e = gt) { + return nn.fromWorkingColorSpace(Vi.copy(this), e), 65536 * Math.round(Ot(255 * Vi.r, 0, 255)) + 256 * Math.round(Ot(255 * Vi.g, 0, 255)) + Math.round(Ot(255 * Vi.b, 0, 255)) + } + getHexString(e = gt) { + return ("000000" + this.getHex(e).toString(16)).slice(-6) + } + getHSL(e, t = nn.workingColorSpace) { + nn.fromWorkingColorSpace(Vi.copy(this), t); + const n = Vi.r, + i = Vi.g, + r = Vi.b, + a = Math.max(n, i, r), + s = Math.min(n, i, r); + let o, l; + const c = (s + a) / 2; + if (s === a) o = 0, l = 0; + else { + const e = a - s; + switch (l = c <= .5 ? e / (a + s) : e / (2 - a - s), a) { + case n: + o = (i - r) / e + (i < r ? 6 : 0); + break; + case i: + o = (r - n) / e + 2; + break; + case r: + o = (n - i) / e + 4 + } + o /= 6 + } + return e.h = o, e.s = l, e.l = c, e + } + getRGB(e, t = nn.workingColorSpace) { + return nn.fromWorkingColorSpace(Vi.copy(this), t), e.r = Vi.r, e.g = Vi.g, e.b = Vi.b, e + } + getStyle(e = gt) { + nn.fromWorkingColorSpace(Vi.copy(this), e); + const t = Vi.r, + n = Vi.g, + i = Vi.b; + return e !== gt ? `color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${i.toFixed(3)})` : `rgb(${Math.round(255*t)},${Math.round(255*n)},${Math.round(255*i)})` + } + offsetHSL(e, t, n) { + return this.getHSL(zi), this.setHSL(zi.h + e, zi.s + t, zi.l + n) + } + add(e) { + return this.r += e.r, this.g += e.g, this.b += e.b, this + } + addColors(e, t) { + return this.r = e.r + t.r, this.g = e.g + t.g, this.b = e.b + t.b, this + } + addScalar(e) { + return this.r += e, this.g += e, this.b += e, this + } + sub(e) { + return this.r = Math.max(0, this.r - e.r), this.g = Math.max(0, this.g - e.g), this.b = Math.max(0, this.b - e.b), this + } + multiply(e) { + return this.r *= e.r, this.g *= e.g, this.b *= e.b, this + } + multiplyScalar(e) { + return this.r *= e, this.g *= e, this.b *= e, this + } + lerp(e, t) { + return this.r += (e.r - this.r) * t, this.g += (e.g - this.g) * t, this.b += (e.b - this.b) * t, this + } + lerpColors(e, t, n) { + return this.r = e.r + (t.r - e.r) * n, this.g = e.g + (t.g - e.g) * n, this.b = e.b + (t.b - e.b) * n, this + } + lerpHSL(e, t) { + this.getHSL(zi), e.getHSL(Oi); + const n = Wt(zi.h, Oi.h, t), + i = Wt(zi.s, Oi.s, t), + r = Wt(zi.l, Oi.l, t); + return this.setHSL(n, i, r), this + } + setFromVector3(e) { + return this.r = e.x, this.g = e.y, this.b = e.z, this + } + applyMatrix3(e) { + const t = this.r, + n = this.g, + i = this.b, + r = e.elements; + return this.r = r[0] * t + r[3] * n + r[6] * i, this.g = r[1] * t + r[4] * n + r[7] * i, this.b = r[2] * t + r[5] * n + r[8] * i, this + } + equals(e) { + return e.r === this.r && e.g === this.g && e.b === this.b + } + fromArray(e, t = 0) { + return this.r = e[t], this.g = e[t + 1], this.b = e[t + 2], this + } + toArray(e = [], t = 0) { + return e[t] = this.r, e[t + 1] = this.g, e[t + 2] = this.b, e + } + fromBufferAttribute(e, t) { + return this.r = e.getX(t), this.g = e.getY(t), this.b = e.getZ(t), this + } + toJSON() { + return this.getHex() + }*[Symbol.iterator]() { + yield this.r, yield this.g, yield this.b + } + } + const Vi = new Wi; + Wi.NAMES = Ui; + let Hi = 0; + class Gi extends Lt { + constructor() { + super(), this.isMaterial = !0, Object.defineProperty(this, "id", { + value: Hi++ + }), this.uuid = zt(), this.name = "", this.type = "Material", this.blending = 1, this.side = 0, this.vertexColors = !1, this.opacity = 1, this.transparent = !1, this.alphaHash = !1, this.blendSrc = 204, this.blendDst = 205, this.blendEquation = M, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.blendColor = new Wi(0, 0, 0), this.blendAlpha = 0, this.depthFunc = 3, this.depthTest = !0, this.depthWrite = !0, this.stencilWriteMask = 255, this.stencilFunc = 519, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = At, this.stencilZFail = At, this.stencilZPass = At, this.stencilWrite = !1, this.clippingPlanes = null, this.clipIntersection = !1, this.clipShadows = !1, this.shadowSide = null, this.colorWrite = !0, this.precision = null, this.polygonOffset = !1, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.dithering = !1, this.alphaToCoverage = !1, this.premultipliedAlpha = !1, this.forceSinglePass = !1, this.visible = !0, this.toneMapped = !0, this.userData = {}, this.version = 0, this._alphaTest = 0 + } + get alphaTest() { + return this._alphaTest + } + set alphaTest(e) { + this._alphaTest > 0 != e > 0 && this.version++, this._alphaTest = e + } + onBeforeRender() {} + onBeforeCompile() {} + customProgramCacheKey() { + return this.onBeforeCompile.toString() + } + setValues(e) { + if (void 0 !== e) + for (const t in e) { + const n = e[t]; + if (void 0 === n) { + console.warn(`THREE.Material: parameter '${t}' has value of undefined.`); + continue + } + const i = this[t]; + void 0 !== i ? i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[t] = n : console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`) + } + } + toJSON(e) { + const t = void 0 === e || "string" == typeof e; + t && (e = { + textures: {}, + images: {} + }); + const n = { + metadata: { + version: 4.6, + type: "Material", + generator: "Material.toJSON" + } + }; + + function i(e) { + const t = []; + for (const n in e) { + const i = e[n]; + delete i.metadata, t.push(i) + } + return t + } + if (n.uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), void 0 !== this.sheen && (n.sheen = this.sheen), this.sheenColor && this.sheenColor.isColor && (n.sheenColor = this.sheenColor.getHex()), void 0 !== this.sheenRoughness && (n.sheenRoughness = this.sheenRoughness), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), void 0 !== this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.specularIntensity && (n.specularIntensity = this.specularIntensity), this.specularColor && this.specularColor.isColor && (n.specularColor = this.specularColor.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (n.clearcoatMap = this.clearcoatMap.toJSON(e).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(e).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(e).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), void 0 !== this.dispersion && (n.dispersion = this.dispersion), void 0 !== this.iridescence && (n.iridescence = this.iridescence), void 0 !== this.iridescenceIOR && (n.iridescenceIOR = this.iridescenceIOR), void 0 !== this.iridescenceThicknessRange && (n.iridescenceThicknessRange = this.iridescenceThicknessRange), this.iridescenceMap && this.iridescenceMap.isTexture && (n.iridescenceMap = this.iridescenceMap.toJSON(e).uuid), this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture && (n.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON(e).uuid), void 0 !== this.anisotropy && (n.anisotropy = this.anisotropy), void 0 !== this.anisotropyRotation && (n.anisotropyRotation = this.anisotropyRotation), this.anisotropyMap && this.anisotropyMap.isTexture && (n.anisotropyMap = this.anisotropyMap.toJSON(e).uuid), this.map && this.map.isTexture && (n.map = this.map.toJSON(e).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(e).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(e).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(e).uuid, n.lightMapIntensity = this.lightMapIntensity), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(e).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(e).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(e).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(e).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(e).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(e).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(e).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(e).uuid), this.specularIntensityMap && this.specularIntensityMap.isTexture && (n.specularIntensityMap = this.specularIntensityMap.toJSON(e).uuid), this.specularColorMap && this.specularColorMap.isTexture && (n.specularColorMap = this.specularColorMap.toJSON(e).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(e).uuid, void 0 !== this.combine && (n.combine = this.combine)), void 0 !== this.envMapRotation && (n.envMapRotation = this.envMapRotation.toArray()), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity), void 0 !== this.reflectivity && (n.reflectivity = this.reflectivity), void 0 !== this.refractionRatio && (n.refractionRatio = this.refractionRatio), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(e).uuid), void 0 !== this.transmission && (n.transmission = this.transmission), this.transmissionMap && this.transmissionMap.isTexture && (n.transmissionMap = this.transmissionMap.toJSON(e).uuid), void 0 !== this.thickness && (n.thickness = this.thickness), this.thicknessMap && this.thicknessMap.isTexture && (n.thicknessMap = this.thicknessMap.toJSON(e).uuid), void 0 !== this.attenuationDistance && this.attenuationDistance !== 1 / 0 && (n.attenuationDistance = this.attenuationDistance), void 0 !== this.attenuationColor && (n.attenuationColor = this.attenuationColor.getHex()), void 0 !== this.size && (n.size = this.size), null !== this.shadowSide && (n.shadowSide = this.shadowSide), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (n.blending = this.blending), 0 !== this.side && (n.side = this.side), !0 === this.vertexColors && (n.vertexColors = !0), this.opacity < 1 && (n.opacity = this.opacity), !0 === this.transparent && (n.transparent = !0), 204 !== this.blendSrc && (n.blendSrc = this.blendSrc), 205 !== this.blendDst && (n.blendDst = this.blendDst), this.blendEquation !== M && (n.blendEquation = this.blendEquation), null !== this.blendSrcAlpha && (n.blendSrcAlpha = this.blendSrcAlpha), null !== this.blendDstAlpha && (n.blendDstAlpha = this.blendDstAlpha), null !== this.blendEquationAlpha && (n.blendEquationAlpha = this.blendEquationAlpha), this.blendColor && this.blendColor.isColor && (n.blendColor = this.blendColor.getHex()), 0 !== this.blendAlpha && (n.blendAlpha = this.blendAlpha), 3 !== this.depthFunc && (n.depthFunc = this.depthFunc), !1 === this.depthTest && (n.depthTest = this.depthTest), !1 === this.depthWrite && (n.depthWrite = this.depthWrite), !1 === this.colorWrite && (n.colorWrite = this.colorWrite), 255 !== this.stencilWriteMask && (n.stencilWriteMask = this.stencilWriteMask), 519 !== this.stencilFunc && (n.stencilFunc = this.stencilFunc), 0 !== this.stencilRef && (n.stencilRef = this.stencilRef), 255 !== this.stencilFuncMask && (n.stencilFuncMask = this.stencilFuncMask), this.stencilFail !== At && (n.stencilFail = this.stencilFail), this.stencilZFail !== At && (n.stencilZFail = this.stencilZFail), this.stencilZPass !== At && (n.stencilZPass = this.stencilZPass), !0 === this.stencilWrite && (n.stencilWrite = this.stencilWrite), void 0 !== this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), !0 === this.polygonOffset && (n.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), void 0 !== this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), !0 === this.dithering && (n.dithering = !0), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), !0 === this.alphaHash && (n.alphaHash = !0), !0 === this.alphaToCoverage && (n.alphaToCoverage = !0), !0 === this.premultipliedAlpha && (n.premultipliedAlpha = !0), !0 === this.forceSinglePass && (n.forceSinglePass = !0), !0 === this.wireframe && (n.wireframe = !0), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), !0 === this.flatShading && (n.flatShading = !0), !1 === this.visible && (n.visible = !1), !1 === this.toneMapped && (n.toneMapped = !1), !1 === this.fog && (n.fog = !1), Object.keys(this.userData).length > 0 && (n.userData = this.userData), t) { + const t = i(e.textures), + r = i(e.images); + t.length > 0 && (n.textures = t), r.length > 0 && (n.images = r) + } + return n + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + this.name = e.name, this.blending = e.blending, this.side = e.side, this.vertexColors = e.vertexColors, this.opacity = e.opacity, this.transparent = e.transparent, this.blendSrc = e.blendSrc, this.blendDst = e.blendDst, this.blendEquation = e.blendEquation, this.blendSrcAlpha = e.blendSrcAlpha, this.blendDstAlpha = e.blendDstAlpha, this.blendEquationAlpha = e.blendEquationAlpha, this.blendColor.copy(e.blendColor), this.blendAlpha = e.blendAlpha, this.depthFunc = e.depthFunc, this.depthTest = e.depthTest, this.depthWrite = e.depthWrite, this.stencilWriteMask = e.stencilWriteMask, this.stencilFunc = e.stencilFunc, this.stencilRef = e.stencilRef, this.stencilFuncMask = e.stencilFuncMask, this.stencilFail = e.stencilFail, this.stencilZFail = e.stencilZFail, this.stencilZPass = e.stencilZPass, this.stencilWrite = e.stencilWrite; + const t = e.clippingPlanes; + let n = null; + if (null !== t) { + const e = t.length; + n = new Array(e); + for (let i = 0; i !== e; ++i) n[i] = t[i].clone() + } + return this.clippingPlanes = n, this.clipIntersection = e.clipIntersection, this.clipShadows = e.clipShadows, this.shadowSide = e.shadowSide, this.colorWrite = e.colorWrite, this.precision = e.precision, this.polygonOffset = e.polygonOffset, this.polygonOffsetFactor = e.polygonOffsetFactor, this.polygonOffsetUnits = e.polygonOffsetUnits, this.dithering = e.dithering, this.alphaTest = e.alphaTest, this.alphaHash = e.alphaHash, this.alphaToCoverage = e.alphaToCoverage, this.premultipliedAlpha = e.premultipliedAlpha, this.forceSinglePass = e.forceSinglePass, this.visible = e.visible, this.toneMapped = e.toneMapped, this.userData = JSON.parse(JSON.stringify(e.userData)), this + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + set needsUpdate(e) { + !0 === e && this.version++ + } + onBuild() { + console.warn("Material: onBuild() has been removed.") + } + } + class ji extends Gi { + constructor(e) { + super(), this.isMeshBasicMaterial = !0, this.type = "MeshBasicMaterial", this.color = new Wi(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.envMapRotation = new ai, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.color.copy(e.color), this.map = e.map, this.lightMap = e.lightMap, this.lightMapIntensity = e.lightMapIntensity, this.aoMap = e.aoMap, this.aoMapIntensity = e.aoMapIntensity, this.specularMap = e.specularMap, this.alphaMap = e.alphaMap, this.envMap = e.envMap, this.envMapRotation.copy(e.envMapRotation), this.combine = e.combine, this.reflectivity = e.reflectivity, this.refractionRatio = e.refractionRatio, this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this.wireframeLinecap = e.wireframeLinecap, this.wireframeLinejoin = e.wireframeLinejoin, this.fog = e.fog, this + } + } + const Qi = new yn, + Yi = new jt; + let Ki = 0; + class qi { + constructor(e, t, n = !1) { + if (Array.isArray(e)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + this.isBufferAttribute = !0, Object.defineProperty(this, "id", { + value: Ki++ + }), this.name = "", this.array = e, this.itemSize = t, this.count = void 0 !== e ? e.length / t : 0, this.normalized = n, this.usage = Ct, this.updateRanges = [], this.gpuType = ye, this.version = 0 + } + onUploadCallback() {} + set needsUpdate(e) { + !0 === e && this.version++ + } + setUsage(e) { + return this.usage = e, this + } + addUpdateRange(e, t) { + this.updateRanges.push({ + start: e, + count: t + }) + } + clearUpdateRanges() { + this.updateRanges.length = 0 + } + copy(e) { + return this.name = e.name, this.array = new e.array.constructor(e.array), this.itemSize = e.itemSize, this.count = e.count, this.normalized = e.normalized, this.usage = e.usage, this.gpuType = e.gpuType, this + } + copyAt(e, t, n) { + e *= this.itemSize, n *= t.itemSize; + for (let i = 0, r = this.itemSize; i < r; i++) this.array[e + i] = t.array[n + i]; + return this + } + copyArray(e) { + return this.array.set(e), this + } + applyMatrix3(e) { + if (2 === this.itemSize) + for (let t = 0, n = this.count; t < n; t++) Yi.fromBufferAttribute(this, t), Yi.applyMatrix3(e), this.setXY(t, Yi.x, Yi.y); + else if (3 === this.itemSize) + for (let t = 0, n = this.count; t < n; t++) Qi.fromBufferAttribute(this, t), Qi.applyMatrix3(e), this.setXYZ(t, Qi.x, Qi.y, Qi.z); + return this + } + applyMatrix4(e) { + for (let t = 0, n = this.count; t < n; t++) Qi.fromBufferAttribute(this, t), Qi.applyMatrix4(e), this.setXYZ(t, Qi.x, Qi.y, Qi.z); + return this + } + applyNormalMatrix(e) { + for (let t = 0, n = this.count; t < n; t++) Qi.fromBufferAttribute(this, t), Qi.applyNormalMatrix(e), this.setXYZ(t, Qi.x, Qi.y, Qi.z); + return this + } + transformDirection(e) { + for (let t = 0, n = this.count; t < n; t++) Qi.fromBufferAttribute(this, t), Qi.transformDirection(e), this.setXYZ(t, Qi.x, Qi.y, Qi.z); + return this + } + set(e, t = 0) { + return this.array.set(e, t), this + } + getComponent(e, t) { + let n = this.array[e * this.itemSize + t]; + return this.normalized && (n = Vt(n, this.array)), n + } + setComponent(e, t, n) { + return this.normalized && (n = Ht(n, this.array)), this.array[e * this.itemSize + t] = n, this + } + getX(e) { + let t = this.array[e * this.itemSize]; + return this.normalized && (t = Vt(t, this.array)), t + } + setX(e, t) { + return this.normalized && (t = Ht(t, this.array)), this.array[e * this.itemSize] = t, this + } + getY(e) { + let t = this.array[e * this.itemSize + 1]; + return this.normalized && (t = Vt(t, this.array)), t + } + setY(e, t) { + return this.normalized && (t = Ht(t, this.array)), this.array[e * this.itemSize + 1] = t, this + } + getZ(e) { + let t = this.array[e * this.itemSize + 2]; + return this.normalized && (t = Vt(t, this.array)), t + } + setZ(e, t) { + return this.normalized && (t = Ht(t, this.array)), this.array[e * this.itemSize + 2] = t, this + } + getW(e) { + let t = this.array[e * this.itemSize + 3]; + return this.normalized && (t = Vt(t, this.array)), t + } + setW(e, t) { + return this.normalized && (t = Ht(t, this.array)), this.array[e * this.itemSize + 3] = t, this + } + setXY(e, t, n) { + return e *= this.itemSize, this.normalized && (t = Ht(t, this.array), n = Ht(n, this.array)), this.array[e + 0] = t, this.array[e + 1] = n, this + } + setXYZ(e, t, n, i) { + return e *= this.itemSize, this.normalized && (t = Ht(t, this.array), n = Ht(n, this.array), i = Ht(i, this.array)), this.array[e + 0] = t, this.array[e + 1] = n, this.array[e + 2] = i, this + } + setXYZW(e, t, n, i, r) { + return e *= this.itemSize, this.normalized && (t = Ht(t, this.array), n = Ht(n, this.array), i = Ht(i, this.array), r = Ht(r, this.array)), this.array[e + 0] = t, this.array[e + 1] = n, this.array[e + 2] = i, this.array[e + 3] = r, this + } + onUpload(e) { + return this.onUploadCallback = e, this + } + clone() { + return new this.constructor(this.array, this.itemSize).copy(this) + } + toJSON() { + const e = { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.from(this.array), + normalized: this.normalized + }; + return "" !== this.name && (e.name = this.name), this.usage !== Ct && (e.usage = this.usage), e + } + } + class Xi extends qi { + constructor(e, t, n) { + super(new Uint16Array(e), t, n) + } + } + class Zi extends qi { + constructor(e, t, n) { + super(new Uint32Array(e), t, n) + } + } + class Ji extends qi { + constructor(e, t, n) { + super(new Float32Array(e), t, n) + } + } + let $i = 0; + const er = new qn, + tr = new xi, + nr = new yn, + ir = new xn, + rr = new xn, + ar = new yn; + class sr extends Lt { + constructor() { + super(), this.isBufferGeometry = !0, Object.defineProperty(this, "id", { + value: $i++ + }), this.uuid = zt(), this.name = "", this.type = "BufferGeometry", this.index = null, this.indirect = null, this.attributes = {}, this.morphAttributes = {}, this.morphTargetsRelative = !1, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.drawRange = { + start: 0, + count: 1 / 0 + }, this.userData = {} + } + getIndex() { + return this.index + } + setIndex(e) { + return Array.isArray(e) ? this.index = new(Kt(e) ? Zi : Xi)(e, 1) : this.index = e, this + } + setIndirect(e) { + return this.indirect = e, this + } + getIndirect() { + return this.indirect + } + getAttribute(e) { + return this.attributes[e] + } + setAttribute(e, t) { + return this.attributes[e] = t, this + } + deleteAttribute(e) { + return delete this.attributes[e], this + } + hasAttribute(e) { + return void 0 !== this.attributes[e] + } + addGroup(e, t, n = 0) { + this.groups.push({ + start: e, + count: t, + materialIndex: n + }) + } + clearGroups() { + this.groups = [] + } + setDrawRange(e, t) { + this.drawRange.start = e, this.drawRange.count = t + } + applyMatrix4(e) { + const t = this.attributes.position; + void 0 !== t && (t.applyMatrix4(e), t.needsUpdate = !0); + const n = this.attributes.normal; + if (void 0 !== n) { + const t = (new Qt).getNormalMatrix(e); + n.applyNormalMatrix(t), n.needsUpdate = !0 + } + const i = this.attributes.tangent; + return void 0 !== i && (i.transformDirection(e), i.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this + } + applyQuaternion(e) { + return er.makeRotationFromQuaternion(e), this.applyMatrix4(er), this + } + rotateX(e) { + return er.makeRotationX(e), this.applyMatrix4(er), this + } + rotateY(e) { + return er.makeRotationY(e), this.applyMatrix4(er), this + } + rotateZ(e) { + return er.makeRotationZ(e), this.applyMatrix4(er), this + } + translate(e, t, n) { + return er.makeTranslation(e, t, n), this.applyMatrix4(er), this + } + scale(e, t, n) { + return er.makeScale(e, t, n), this.applyMatrix4(er), this + } + lookAt(e) { + return tr.lookAt(e), tr.updateMatrix(), this.applyMatrix4(tr.matrix), this + } + center() { + return this.computeBoundingBox(), this.boundingBox.getCenter(nr).negate(), this.translate(nr.x, nr.y, nr.z), this + } + setFromPoints(e) { + const t = this.getAttribute("position"); + if (void 0 === t) { + const t = []; + for (let n = 0, i = e.length; n < i; n++) { + const i = e[n]; + t.push(i.x, i.y, i.z || 0) + } + this.setAttribute("position", new Ji(t, 3)) + } else { + const n = Math.min(e.length, t.count); + for (let i = 0; i < n; i++) { + const n = e[i]; + t.setXYZ(i, n.x, n.y, n.z || 0) + } + e.length > t.count && console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."), t.needsUpdate = !0 + } + return this + } + computeBoundingBox() { + null === this.boundingBox && (this.boundingBox = new xn); + const e = this.attributes.position, + t = this.morphAttributes.position; + if (e && e.isGLBufferAttribute) return console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.", this), void this.boundingBox.set(new yn(-1 / 0, -1 / 0, -1 / 0), new yn(1 / 0, 1 / 0, 1 / 0)); + if (void 0 !== e) { + if (this.boundingBox.setFromBufferAttribute(e), t) + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e]; + ir.setFromBufferAttribute(n), this.morphTargetsRelative ? (ar.addVectors(this.boundingBox.min, ir.min), this.boundingBox.expandByPoint(ar), ar.addVectors(this.boundingBox.max, ir.max), this.boundingBox.expandByPoint(ar)) : (this.boundingBox.expandByPoint(ir.min), this.boundingBox.expandByPoint(ir.max)) + } + } else this.boundingBox.makeEmpty(); + (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this) + } + computeBoundingSphere() { + null === this.boundingSphere && (this.boundingSphere = new Fn); + const e = this.attributes.position, + t = this.morphAttributes.position; + if (e && e.isGLBufferAttribute) return console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.", this), void this.boundingSphere.set(new yn, 1 / 0); + if (e) { + const n = this.boundingSphere.center; + if (ir.setFromBufferAttribute(e), t) + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e]; + rr.setFromBufferAttribute(n), this.morphTargetsRelative ? (ar.addVectors(ir.min, rr.min), ir.expandByPoint(ar), ar.addVectors(ir.max, rr.max), ir.expandByPoint(ar)) : (ir.expandByPoint(rr.min), ir.expandByPoint(rr.max)) + } + ir.getCenter(n); + let i = 0; + for (let t = 0, r = e.count; t < r; t++) ar.fromBufferAttribute(e, t), i = Math.max(i, n.distanceToSquared(ar)); + if (t) + for (let r = 0, a = t.length; r < a; r++) { + const a = t[r], + s = this.morphTargetsRelative; + for (let t = 0, r = a.count; t < r; t++) ar.fromBufferAttribute(a, t), s && (nr.fromBufferAttribute(e, t), ar.add(nr)), i = Math.max(i, n.distanceToSquared(ar)) + } + this.boundingSphere.radius = Math.sqrt(i), isNaN(this.boundingSphere.radius) && console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this) + } + } + computeTangents() { + const e = this.index, + t = this.attributes; + if (null === e || void 0 === t.position || void 0 === t.normal || void 0 === t.uv) return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); + const n = t.position, + i = t.normal, + r = t.uv; + !1 === this.hasAttribute("tangent") && this.setAttribute("tangent", new qi(new Float32Array(4 * n.count), 4)); + const a = this.getAttribute("tangent"), + s = [], + o = []; + for (let e = 0; e < n.count; e++) s[e] = new yn, o[e] = new yn; + const l = new yn, + c = new yn, + h = new yn, + d = new jt, + u = new jt, + p = new jt, + f = new yn, + m = new yn; + + function g(e, t, i) { + l.fromBufferAttribute(n, e), c.fromBufferAttribute(n, t), h.fromBufferAttribute(n, i), d.fromBufferAttribute(r, e), u.fromBufferAttribute(r, t), p.fromBufferAttribute(r, i), c.sub(l), h.sub(l), u.sub(d), p.sub(d); + const a = 1 / (u.x * p.y - p.x * u.y); + isFinite(a) && (f.copy(c).multiplyScalar(p.y).addScaledVector(h, -u.y).multiplyScalar(a), m.copy(h).multiplyScalar(u.x).addScaledVector(c, -p.x).multiplyScalar(a), s[e].add(f), s[t].add(f), s[i].add(f), o[e].add(m), o[t].add(m), o[i].add(m)) + } + let v = this.groups; + 0 === v.length && (v = [{ + start: 0, + count: e.count + }]); + for (let t = 0, n = v.length; t < n; ++t) { + const n = v[t], + i = n.start; + for (let t = i, r = i + n.count; t < r; t += 3) g(e.getX(t + 0), e.getX(t + 1), e.getX(t + 2)) + } + const w = new yn, + y = new yn, + A = new yn, + b = new yn; + + function x(e) { + A.fromBufferAttribute(i, e), b.copy(A); + const t = s[e]; + w.copy(t), w.sub(A.multiplyScalar(A.dot(t))).normalize(), y.crossVectors(b, t); + const n = y.dot(o[e]) < 0 ? -1 : 1; + a.setXYZW(e, w.x, w.y, w.z, n) + } + for (let t = 0, n = v.length; t < n; ++t) { + const n = v[t], + i = n.start; + for (let t = i, r = i + n.count; t < r; t += 3) x(e.getX(t + 0)), x(e.getX(t + 1)), x(e.getX(t + 2)) + } + } + computeVertexNormals() { + const e = this.index, + t = this.getAttribute("position"); + if (void 0 !== t) { + let n = this.getAttribute("normal"); + if (void 0 === n) n = new qi(new Float32Array(3 * t.count), 3), this.setAttribute("normal", n); + else + for (let e = 0, t = n.count; e < t; e++) n.setXYZ(e, 0, 0, 0); + const i = new yn, + r = new yn, + a = new yn, + s = new yn, + o = new yn, + l = new yn, + c = new yn, + h = new yn; + if (e) + for (let d = 0, u = e.count; d < u; d += 3) { + const u = e.getX(d + 0), + p = e.getX(d + 1), + f = e.getX(d + 2); + i.fromBufferAttribute(t, u), r.fromBufferAttribute(t, p), a.fromBufferAttribute(t, f), c.subVectors(a, r), h.subVectors(i, r), c.cross(h), s.fromBufferAttribute(n, u), o.fromBufferAttribute(n, p), l.fromBufferAttribute(n, f), s.add(c), o.add(c), l.add(c), n.setXYZ(u, s.x, s.y, s.z), n.setXYZ(p, o.x, o.y, o.z), n.setXYZ(f, l.x, l.y, l.z) + } else + for (let e = 0, s = t.count; e < s; e += 3) i.fromBufferAttribute(t, e + 0), r.fromBufferAttribute(t, e + 1), a.fromBufferAttribute(t, e + 2), c.subVectors(a, r), h.subVectors(i, r), c.cross(h), n.setXYZ(e + 0, c.x, c.y, c.z), n.setXYZ(e + 1, c.x, c.y, c.z), n.setXYZ(e + 2, c.x, c.y, c.z); + this.normalizeNormals(), n.needsUpdate = !0 + } + } + normalizeNormals() { + const e = this.attributes.normal; + for (let t = 0, n = e.count; t < n; t++) ar.fromBufferAttribute(e, t), ar.normalize(), e.setXYZ(t, ar.x, ar.y, ar.z) + } + toNonIndexed() { + function e(e, t) { + const n = e.array, + i = e.itemSize, + r = e.normalized, + a = new n.constructor(t.length * i); + let s = 0, + o = 0; + for (let r = 0, l = t.length; r < l; r++) { + s = e.isInterleavedBufferAttribute ? t[r] * e.data.stride + e.offset : t[r] * i; + for (let e = 0; e < i; e++) a[o++] = n[s++] + } + return new qi(a, i, r) + } + if (null === this.index) return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."), this; + const t = new sr, + n = this.index.array, + i = this.attributes; + for (const r in i) { + const a = e(i[r], n); + t.setAttribute(r, a) + } + const r = this.morphAttributes; + for (const i in r) { + const a = [], + s = r[i]; + for (let t = 0, i = s.length; t < i; t++) { + const i = e(s[t], n); + a.push(i) + } + t.morphAttributes[i] = a + } + t.morphTargetsRelative = this.morphTargetsRelative; + const a = this.groups; + for (let e = 0, n = a.length; e < n; e++) { + const n = a[e]; + t.addGroup(n.start, n.count, n.materialIndex) + } + return t + } + toJSON() { + const e = { + metadata: { + version: 4.6, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + if (e.uuid = this.uuid, e.type = this.type, "" !== this.name && (e.name = this.name), Object.keys(this.userData).length > 0 && (e.userData = this.userData), void 0 !== this.parameters) { + const t = this.parameters; + for (const n in t) void 0 !== t[n] && (e[n] = t[n]); + return e + } + e.data = { + attributes: {} + }; + const t = this.index; + null !== t && (e.data.index = { + type: t.array.constructor.name, + array: Array.prototype.slice.call(t.array) + }); + const n = this.attributes; + for (const t in n) { + const i = n[t]; + e.data.attributes[t] = i.toJSON(e.data) + } + const i = {}; + let r = !1; + for (const t in this.morphAttributes) { + const n = this.morphAttributes[t], + a = []; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + a.push(i.toJSON(e.data)) + } + a.length > 0 && (i[t] = a, r = !0) + } + r && (e.data.morphAttributes = i, e.data.morphTargetsRelative = this.morphTargetsRelative); + const a = this.groups; + a.length > 0 && (e.data.groups = JSON.parse(JSON.stringify(a))); + const s = this.boundingSphere; + return null !== s && (e.data.boundingSphere = { + center: s.center.toArray(), + radius: s.radius + }), e + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null; + const t = {}; + this.name = e.name; + const n = e.index; + null !== n && this.setIndex(n.clone(t)); + const i = e.attributes; + for (const e in i) { + const n = i[e]; + this.setAttribute(e, n.clone(t)) + } + const r = e.morphAttributes; + for (const e in r) { + const n = [], + i = r[e]; + for (let e = 0, r = i.length; e < r; e++) n.push(i[e].clone(t)); + this.morphAttributes[e] = n + } + this.morphTargetsRelative = e.morphTargetsRelative; + const a = e.groups; + for (let e = 0, t = a.length; e < t; e++) { + const t = a[e]; + this.addGroup(t.start, t.count, t.materialIndex) + } + const s = e.boundingBox; + null !== s && (this.boundingBox = s.clone()); + const o = e.boundingSphere; + return null !== o && (this.boundingSphere = o.clone()), this.drawRange.start = e.drawRange.start, this.drawRange.count = e.drawRange.count, this.userData = e.userData, this + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + } + const or = new qn, + lr = new Kn, + cr = new Fn, + hr = new yn, + dr = new yn, + ur = new yn, + pr = new yn, + fr = new yn, + mr = new yn, + gr = new yn, + vr = new yn; + class wr extends xi { + constructor(e = new sr, t = new ji) { + super(), this.isMesh = !0, this.type = "Mesh", this.geometry = e, this.material = t, this.morphTargetDictionary = void 0, this.morphTargetInfluences = void 0, this.updateMorphTargets() + } + copy(e, t) { + return super.copy(e, t), void 0 !== e.morphTargetInfluences && (this.morphTargetInfluences = e.morphTargetInfluences.slice()), void 0 !== e.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, e.morphTargetDictionary)), this.material = Array.isArray(e.material) ? e.material.slice() : e.material, this.geometry = e.geometry, this + } + updateMorphTargets() { + const e = this.geometry.morphAttributes, + t = Object.keys(e); + if (t.length > 0) { + const n = e[t[0]]; + if (void 0 !== n) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, t = n.length; e < t; e++) { + const t = n[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[t] = e + } + } + } + } + getVertexPosition(e, t) { + const n = this.geometry, + i = n.attributes.position, + r = n.morphAttributes.position, + a = n.morphTargetsRelative; + t.fromBufferAttribute(i, e); + const s = this.morphTargetInfluences; + if (r && s) { + mr.set(0, 0, 0); + for (let n = 0, i = r.length; n < i; n++) { + const i = s[n], + o = r[n]; + 0 !== i && (fr.fromBufferAttribute(o, e), a ? mr.addScaledVector(fr, i) : mr.addScaledVector(fr.sub(t), i)) + } + t.add(mr) + } + return t + } + raycast(e, t) { + const n = this.geometry, + i = this.material, + r = this.matrixWorld; + if (void 0 !== i) { + if (null === n.boundingSphere && n.computeBoundingSphere(), cr.copy(n.boundingSphere), cr.applyMatrix4(r), lr.copy(e.ray).recast(e.near), !1 === cr.containsPoint(lr.origin)) { + if (null === lr.intersectSphere(cr, hr)) return; + if (lr.origin.distanceToSquared(hr) > (e.far - e.near) ** 2) return + } + or.copy(r).invert(), lr.copy(e.ray).applyMatrix4(or), null !== n.boundingBox && !1 === lr.intersectsBox(n.boundingBox) || this._computeIntersections(e, t, lr) + } + } + _computeIntersections(e, t, n) { + let i; + const r = this.geometry, + a = this.material, + s = r.index, + o = r.attributes.position, + l = r.attributes.uv, + c = r.attributes.uv1, + h = r.attributes.normal, + d = r.groups, + u = r.drawRange; + if (null !== s) + if (Array.isArray(a)) + for (let r = 0, o = d.length; r < o; r++) { + const o = d[r], + p = a[o.materialIndex]; + for (let r = Math.max(o.start, u.start), a = Math.min(s.count, Math.min(o.start + o.count, u.start + u.count)); r < a; r += 3) { + i = yr(this, p, e, n, l, c, h, s.getX(r), s.getX(r + 1), s.getX(r + 2)), i && (i.faceIndex = Math.floor(r / 3), i.face.materialIndex = o.materialIndex, t.push(i)) + } + } else { + for (let r = Math.max(0, u.start), o = Math.min(s.count, u.start + u.count); r < o; r += 3) { + i = yr(this, a, e, n, l, c, h, s.getX(r), s.getX(r + 1), s.getX(r + 2)), i && (i.faceIndex = Math.floor(r / 3), t.push(i)) + } + } else if (void 0 !== o) + if (Array.isArray(a)) + for (let r = 0, s = d.length; r < s; r++) { + const s = d[r], + p = a[s.materialIndex]; + for (let r = Math.max(s.start, u.start), a = Math.min(o.count, Math.min(s.start + s.count, u.start + u.count)); r < a; r += 3) { + i = yr(this, p, e, n, l, c, h, r, r + 1, r + 2), i && (i.faceIndex = Math.floor(r / 3), i.face.materialIndex = s.materialIndex, t.push(i)) + } + } else { + for (let r = Math.max(0, u.start), s = Math.min(o.count, u.start + u.count); r < s; r += 3) { + i = yr(this, a, e, n, l, c, h, r, r + 1, r + 2), i && (i.faceIndex = Math.floor(r / 3), t.push(i)) + } + } + } + } + + function yr(e, t, n, i, r, a, s, o, l, c) { + e.getVertexPosition(o, dr), e.getVertexPosition(l, ur), e.getVertexPosition(c, pr); + const h = function(e, t, n, i, r, a, s, o) { + let l; + if (l = 1 === t.side ? i.intersectTriangle(s, a, r, !0, o) : i.intersectTriangle(r, a, s, 0 === t.side, o), null === l) return null; + vr.copy(o), vr.applyMatrix4(e.matrixWorld); + const c = n.ray.origin.distanceTo(vr); + return c < n.near || c > n.far ? null : { + distance: c, + point: vr.clone(), + object: e + } + }(e, t, n, i, dr, ur, pr, gr); + if (h) { + const e = new yn; + Bi.getBarycoord(gr, dr, ur, pr, e), r && (h.uv = Bi.getInterpolatedAttribute(r, o, l, c, e, new jt)), a && (h.uv1 = Bi.getInterpolatedAttribute(a, o, l, c, e, new jt)), s && (h.normal = Bi.getInterpolatedAttribute(s, o, l, c, e, new yn), h.normal.dot(i.direction) > 0 && h.normal.multiplyScalar(-1)); + const t = { + a: o, + b: l, + c, + normal: new yn, + materialIndex: 0 + }; + Bi.getNormal(dr, ur, pr, t.normal), h.face = t, h.barycoord = e + } + return h + } + class Ar extends sr { + constructor(e = 1, t = 1, n = 1, i = 1, r = 1, a = 1) { + super(), this.type = "BoxGeometry", this.parameters = { + width: e, + height: t, + depth: n, + widthSegments: i, + heightSegments: r, + depthSegments: a + }; + const s = this; + i = Math.floor(i), r = Math.floor(r), a = Math.floor(a); + const o = [], + l = [], + c = [], + h = []; + let d = 0, + u = 0; + + function p(e, t, n, i, r, a, p, f, m, g, v) { + const w = a / m, + y = p / g, + A = a / 2, + b = p / 2, + x = f / 2, + k = m + 1, + E = g + 1; + let S = 0, + M = 0; + const T = new yn; + for (let a = 0; a < E; a++) { + const s = a * y - b; + for (let o = 0; o < k; o++) { + const d = o * w - A; + T[e] = d * i, T[t] = s * r, T[n] = x, l.push(T.x, T.y, T.z), T[e] = 0, T[t] = 0, T[n] = f > 0 ? 1 : -1, c.push(T.x, T.y, T.z), h.push(o / m), h.push(1 - a / g), S += 1 + } + } + for (let e = 0; e < g; e++) + for (let t = 0; t < m; t++) { + const n = d + t + k * e, + i = d + t + k * (e + 1), + r = d + (t + 1) + k * (e + 1), + a = d + (t + 1) + k * e; + o.push(n, i, a), o.push(i, r, a), M += 6 + } + s.addGroup(u, M, v), u += M, d += S + } + p("z", "y", "x", -1, -1, n, t, e, a, r, 0), p("z", "y", "x", 1, -1, n, t, -e, a, r, 1), p("x", "z", "y", 1, 1, e, n, t, i, a, 2), p("x", "z", "y", 1, -1, e, n, -t, i, a, 3), p("x", "y", "z", 1, -1, e, t, n, i, r, 4), p("x", "y", "z", -1, -1, e, t, -n, i, r, 5), this.setIndex(o), this.setAttribute("position", new Ji(l, 3)), this.setAttribute("normal", new Ji(c, 3)), this.setAttribute("uv", new Ji(h, 2)) + } + copy(e) { + return super.copy(e), this.parameters = Object.assign({}, e.parameters), this + } + static fromJSON(e) { + return new Ar(e.width, e.height, e.depth, e.widthSegments, e.heightSegments, e.depthSegments) + } + } + + function br(e) { + const t = {}; + for (const n in e) { + t[n] = {}; + for (const i in e[n]) { + const r = e[n][i]; + r && (r.isColor || r.isMatrix3 || r.isMatrix4 || r.isVector2 || r.isVector3 || r.isVector4 || r.isTexture || r.isQuaternion) ? r.isRenderTargetTexture ? (console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."), t[n][i] = null) : t[n][i] = r.clone() : Array.isArray(r) ? t[n][i] = r.slice() : t[n][i] = r + } + } + return t + } + + function xr(e) { + const t = {}; + for (let n = 0; n < e.length; n++) { + const i = br(e[n]); + for (const e in i) t[e] = i[e] + } + return t + } + + function kr(e) { + const t = e.getRenderTarget(); + return null === t ? e.outputColorSpace : !0 === t.isXRRenderTarget ? t.texture.colorSpace : nn.workingColorSpace + } + const Er = { + clone: br, + merge: xr + }; + class Sr extends Gi { + constructor(e) { + super(), this.isShaderMaterial = !0, this.type = "ShaderMaterial", this.defines = {}, this.uniforms = {}, this.uniformsGroups = [], this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", this.linewidth = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.lights = !1, this.clipping = !1, this.forceSinglePass = !0, this.extensions = { + clipCullDistance: !1, + multiDraw: !1 + }, this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv1: [0, 0] + }, this.index0AttributeName = void 0, this.uniformsNeedUpdate = !1, this.glslVersion = null, void 0 !== e && this.setValues(e) + } + copy(e) { + return super.copy(e), this.fragmentShader = e.fragmentShader, this.vertexShader = e.vertexShader, this.uniforms = br(e.uniforms), this.uniformsGroups = function(e) { + const t = []; + for (let n = 0; n < e.length; n++) t.push(e[n].clone()); + return t + }(e.uniformsGroups), this.defines = Object.assign({}, e.defines), this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this.fog = e.fog, this.lights = e.lights, this.clipping = e.clipping, this.extensions = Object.assign({}, e.extensions), this.glslVersion = e.glslVersion, this + } + toJSON(e) { + const t = super.toJSON(e); + t.glslVersion = this.glslVersion, t.uniforms = {}; + for (const n in this.uniforms) { + const i = this.uniforms[n].value; + i && i.isTexture ? t.uniforms[n] = { + type: "t", + value: i.toJSON(e).uuid + } : i && i.isColor ? t.uniforms[n] = { + type: "c", + value: i.getHex() + } : i && i.isVector2 ? t.uniforms[n] = { + type: "v2", + value: i.toArray() + } : i && i.isVector3 ? t.uniforms[n] = { + type: "v3", + value: i.toArray() + } : i && i.isVector4 ? t.uniforms[n] = { + type: "v4", + value: i.toArray() + } : i && i.isMatrix3 ? t.uniforms[n] = { + type: "m3", + value: i.toArray() + } : i && i.isMatrix4 ? t.uniforms[n] = { + type: "m4", + value: i.toArray() + } : t.uniforms[n] = { + value: i + } + } + Object.keys(this.defines).length > 0 && (t.defines = this.defines), t.vertexShader = this.vertexShader, t.fragmentShader = this.fragmentShader, t.lights = this.lights, t.clipping = this.clipping; + const n = {}; + for (const e in this.extensions) !0 === this.extensions[e] && (n[e] = !0); + return Object.keys(n).length > 0 && (t.extensions = n), t + } + } + class Mr extends xi { + constructor() { + super(), this.isCamera = !0, this.type = "Camera", this.matrixWorldInverse = new qn, this.projectionMatrix = new qn, this.projectionMatrixInverse = new qn, this.coordinateSystem = It + } + copy(e, t) { + return super.copy(e, t), this.matrixWorldInverse.copy(e.matrixWorldInverse), this.projectionMatrix.copy(e.projectionMatrix), this.projectionMatrixInverse.copy(e.projectionMatrixInverse), this.coordinateSystem = e.coordinateSystem, this + } + getWorldDirection(e) { + return super.getWorldDirection(e).negate() + } + updateMatrixWorld(e) { + super.updateMatrixWorld(e), this.matrixWorldInverse.copy(this.matrixWorld).invert() + } + updateWorldMatrix(e, t) { + super.updateWorldMatrix(e, t), this.matrixWorldInverse.copy(this.matrixWorld).invert() + } + clone() { + return (new this.constructor).copy(this) + } + } + const Tr = new yn, + _r = new jt, + Cr = new jt; + class Pr extends Mr { + constructor(e = 50, t = 1, n = .1, i = 2e3) { + super(), this.isPerspectiveCamera = !0, this.type = "PerspectiveCamera", this.fov = e, this.zoom = 1, this.near = n, this.far = i, this.focus = 10, this.aspect = t, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix() + } + copy(e, t) { + return super.copy(e, t), this.fov = e.fov, this.zoom = e.zoom, this.near = e.near, this.far = e.far, this.focus = e.focus, this.aspect = e.aspect, this.view = null === e.view ? null : Object.assign({}, e.view), this.filmGauge = e.filmGauge, this.filmOffset = e.filmOffset, this + } + setFocalLength(e) { + const t = .5 * this.getFilmHeight() / e; + this.fov = 2 * Ut * Math.atan(t), this.updateProjectionMatrix() + } + getFocalLength() { + const e = Math.tan(.5 * Bt * this.fov); + return .5 * this.getFilmHeight() / e + } + getEffectiveFOV() { + return 2 * Ut * Math.atan(Math.tan(.5 * Bt * this.fov) / this.zoom) + } + getFilmWidth() { + return this.filmGauge * Math.min(this.aspect, 1) + } + getFilmHeight() { + return this.filmGauge / Math.max(this.aspect, 1) + } + getViewBounds(e, t, n) { + Tr.set(-1, -1, .5).applyMatrix4(this.projectionMatrixInverse), t.set(Tr.x, Tr.y).multiplyScalar(-e / Tr.z), Tr.set(1, 1, .5).applyMatrix4(this.projectionMatrixInverse), n.set(Tr.x, Tr.y).multiplyScalar(-e / Tr.z) + } + getViewSize(e, t) { + return this.getViewBounds(e, _r, Cr), t.subVectors(Cr, _r) + } + setViewOffset(e, t, n, i, r, a) { + this.aspect = e / t, null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = !0, this.view.fullWidth = e, this.view.fullHeight = t, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = a, this.updateProjectionMatrix() + } + clearViewOffset() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + } + updateProjectionMatrix() { + const e = this.near; + let t = e * Math.tan(.5 * Bt * this.fov) / this.zoom, + n = 2 * t, + i = this.aspect * n, + r = -.5 * i; + const a = this.view; + if (null !== this.view && this.view.enabled) { + const e = a.fullWidth, + s = a.fullHeight; + r += a.offsetX * i / e, t -= a.offsetY * n / s, i *= a.width / e, n *= a.height / s + } + const s = this.filmOffset; + 0 !== s && (r += e * s / this.getFilmWidth()), this.projectionMatrix.makePerspective(r, r + i, t, t - n, e, this.far, this.coordinateSystem), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + } + toJSON(e) { + const t = super.toJSON(e); + return t.object.fov = this.fov, t.object.zoom = this.zoom, t.object.near = this.near, t.object.far = this.far, t.object.focus = this.focus, t.object.aspect = this.aspect, null !== this.view && (t.object.view = Object.assign({}, this.view)), t.object.filmGauge = this.filmGauge, t.object.filmOffset = this.filmOffset, t + } + } + const Ir = -90; + class Rr extends xi { + constructor(e, t, n) { + super(), this.type = "CubeCamera", this.renderTarget = n, this.coordinateSystem = null, this.activeMipmapLevel = 0; + const i = new Pr(Ir, 1, e, t); + i.layers = this.layers, this.add(i); + const r = new Pr(Ir, 1, e, t); + r.layers = this.layers, this.add(r); + const a = new Pr(Ir, 1, e, t); + a.layers = this.layers, this.add(a); + const s = new Pr(Ir, 1, e, t); + s.layers = this.layers, this.add(s); + const o = new Pr(Ir, 1, e, t); + o.layers = this.layers, this.add(o); + const l = new Pr(Ir, 1, e, t); + l.layers = this.layers, this.add(l) + } + updateCoordinateSystem() { + const e = this.coordinateSystem, + t = this.children.concat(), + [n, i, r, a, s, o] = t; + for (const e of t) this.remove(e); + if (e === It) n.up.set(0, 1, 0), n.lookAt(1, 0, 0), i.up.set(0, 1, 0), i.lookAt(-1, 0, 0), r.up.set(0, 0, -1), r.lookAt(0, 1, 0), a.up.set(0, 0, 1), a.lookAt(0, -1, 0), s.up.set(0, 1, 0), s.lookAt(0, 0, 1), o.up.set(0, 1, 0), o.lookAt(0, 0, -1); + else { + if (e !== Rt) throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: " + e); + n.up.set(0, -1, 0), n.lookAt(-1, 0, 0), i.up.set(0, -1, 0), i.lookAt(1, 0, 0), r.up.set(0, 0, 1), r.lookAt(0, 1, 0), a.up.set(0, 0, -1), a.lookAt(0, -1, 0), s.up.set(0, -1, 0), s.lookAt(0, 0, 1), o.up.set(0, -1, 0), o.lookAt(0, 0, -1) + } + for (const e of t) this.add(e), e.updateMatrixWorld() + } + update(e, t) { + null === this.parent && this.updateMatrixWorld(); + const { + renderTarget: n, + activeMipmapLevel: i + } = this; + this.coordinateSystem !== e.coordinateSystem && (this.coordinateSystem = e.coordinateSystem, this.updateCoordinateSystem()); + const [r, a, s, o, l, c] = this.children, h = e.getRenderTarget(), d = e.getActiveCubeFace(), u = e.getActiveMipmapLevel(), p = e.xr.enabled; + e.xr.enabled = !1; + const f = n.texture.generateMipmaps; + n.texture.generateMipmaps = !1, e.setRenderTarget(n, 0, i), e.render(t, r), e.setRenderTarget(n, 1, i), e.render(t, a), e.setRenderTarget(n, 2, i), e.render(t, s), e.setRenderTarget(n, 3, i), e.render(t, o), e.setRenderTarget(n, 4, i), e.render(t, l), n.texture.generateMipmaps = f, e.setRenderTarget(n, 5, i), e.render(t, c), e.setRenderTarget(h, d, u), e.xr.enabled = p, n.texture.needsPMREMUpdate = !0 + } + } + class Lr extends un { + constructor(e, t, n, i, r, a, s, o, l, c) { + super(e = void 0 !== e ? e : [], t = void 0 !== t ? t : $, n, i, r, a, s, o, l, c), this.isCubeTexture = !0, this.flipY = !1 + } + get images() { + return this.image + } + set images(e) { + this.image = e + } + } + class Dr extends mn { + constructor(e = 1, t = {}) { + super(e, e, t), this.isWebGLCubeRenderTarget = !0; + const n = { + width: e, + height: e, + depth: 1 + }, + i = [n, n, n, n, n, n]; + this.texture = new Lr(i, t.mapping, t.wrapS, t.wrapT, t.magFilter, t.minFilter, t.format, t.type, t.anisotropy, t.colorSpace), this.texture.isRenderTargetTexture = !0, this.texture.generateMipmaps = void 0 !== t.generateMipmaps && t.generateMipmaps, this.texture.minFilter = void 0 !== t.minFilter ? t.minFilter : he + } + fromEquirectangularTexture(e, t) { + this.texture.type = t.type, this.texture.colorSpace = t.colorSpace, this.texture.generateMipmaps = t.generateMipmaps, this.texture.minFilter = t.minFilter, this.texture.magFilter = t.magFilter; + const n = { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: "\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t", + fragmentShader: "\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t" + }, + i = new Ar(5, 5, 5), + r = new Sr({ + name: "CubemapFromEquirect", + uniforms: br(n.uniforms), + vertexShader: n.vertexShader, + fragmentShader: n.fragmentShader, + side: 1, + blending: 0 + }); + r.uniforms.tEquirect.value = t; + const a = new wr(i, r), + s = t.minFilter; + t.minFilter === ue && (t.minFilter = he); + return new Rr(1, 10, this).update(e, a), t.minFilter = s, a.geometry.dispose(), a.material.dispose(), this + } + clear(e, t, n, i) { + const r = e.getRenderTarget(); + for (let r = 0; r < 6; r++) e.setRenderTarget(this, r), e.clear(t, n, i); + e.setRenderTarget(r) + } + } + class Nr extends xi { + constructor() { + super(), this.isGroup = !0, this.type = "Group" + } + } + const Br = { + type: "move" + }; + class Ur { + constructor() { + this._targetRay = null, this._grip = null, this._hand = null + } + getHandSpace() { + return null === this._hand && (this._hand = new Nr, this._hand.matrixAutoUpdate = !1, this._hand.visible = !1, this._hand.joints = {}, this._hand.inputState = { + pinching: !1 + }), this._hand + } + getTargetRaySpace() { + return null === this._targetRay && (this._targetRay = new Nr, this._targetRay.matrixAutoUpdate = !1, this._targetRay.visible = !1, this._targetRay.hasLinearVelocity = !1, this._targetRay.linearVelocity = new yn, this._targetRay.hasAngularVelocity = !1, this._targetRay.angularVelocity = new yn), this._targetRay + } + getGripSpace() { + return null === this._grip && (this._grip = new Nr, this._grip.matrixAutoUpdate = !1, this._grip.visible = !1, this._grip.hasLinearVelocity = !1, this._grip.linearVelocity = new yn, this._grip.hasAngularVelocity = !1, this._grip.angularVelocity = new yn), this._grip + } + dispatchEvent(e) { + return null !== this._targetRay && this._targetRay.dispatchEvent(e), null !== this._grip && this._grip.dispatchEvent(e), null !== this._hand && this._hand.dispatchEvent(e), this + } + connect(e) { + if (e && e.hand) { + const t = this._hand; + if (t) + for (const n of e.hand.values()) this._getHandJoint(t, n) + } + return this.dispatchEvent({ + type: "connected", + data: e + }), this + } + disconnect(e) { + return this.dispatchEvent({ + type: "disconnected", + data: e + }), null !== this._targetRay && (this._targetRay.visible = !1), null !== this._grip && (this._grip.visible = !1), null !== this._hand && (this._hand.visible = !1), this + } + update(e, t, n) { + let i = null, + r = null, + a = null; + const s = this._targetRay, + o = this._grip, + l = this._hand; + if (e && "visible-blurred" !== t.session.visibilityState) { + if (l && e.hand) { + a = !0; + for (const i of e.hand.values()) { + const e = t.getJointPose(i, n), + r = this._getHandJoint(l, i); + null !== e && (r.matrix.fromArray(e.transform.matrix), r.matrix.decompose(r.position, r.rotation, r.scale), r.matrixWorldNeedsUpdate = !0, r.jointRadius = e.radius), r.visible = null !== e + } + const i = l.joints["index-finger-tip"], + r = l.joints["thumb-tip"], + s = i.position.distanceTo(r.position), + o = .02, + c = .005; + l.inputState.pinching && s > o + c ? (l.inputState.pinching = !1, this.dispatchEvent({ + type: "pinchend", + handedness: e.handedness, + target: this + })) : !l.inputState.pinching && s <= o - c && (l.inputState.pinching = !0, this.dispatchEvent({ + type: "pinchstart", + handedness: e.handedness, + target: this + })) + } else null !== o && e.gripSpace && (r = t.getPose(e.gripSpace, n), null !== r && (o.matrix.fromArray(r.transform.matrix), o.matrix.decompose(o.position, o.rotation, o.scale), o.matrixWorldNeedsUpdate = !0, r.linearVelocity ? (o.hasLinearVelocity = !0, o.linearVelocity.copy(r.linearVelocity)) : o.hasLinearVelocity = !1, r.angularVelocity ? (o.hasAngularVelocity = !0, o.angularVelocity.copy(r.angularVelocity)) : o.hasAngularVelocity = !1)); + null !== s && (i = t.getPose(e.targetRaySpace, n), null === i && null !== r && (i = r), null !== i && (s.matrix.fromArray(i.transform.matrix), s.matrix.decompose(s.position, s.rotation, s.scale), s.matrixWorldNeedsUpdate = !0, i.linearVelocity ? (s.hasLinearVelocity = !0, s.linearVelocity.copy(i.linearVelocity)) : s.hasLinearVelocity = !1, i.angularVelocity ? (s.hasAngularVelocity = !0, s.angularVelocity.copy(i.angularVelocity)) : s.hasAngularVelocity = !1, this.dispatchEvent(Br))) + } + return null !== s && (s.visible = null !== i), null !== o && (o.visible = null !== r), null !== l && (l.visible = null !== a), this + } + _getHandJoint(e, t) { + if (void 0 === e.joints[t.jointName]) { + const n = new Nr; + n.matrixAutoUpdate = !1, n.visible = !1, e.joints[t.jointName] = n, e.add(n) + } + return e.joints[t.jointName] + } + } + class zr { + constructor(e, t = 1, n = 1e3) { + this.isFog = !0, this.name = "", this.color = new Wi(e), this.near = t, this.far = n + } + clone() { + return new zr(this.color, this.near, this.far) + } + toJSON() { + return { + type: "Fog", + name: this.name, + color: this.color.getHex(), + near: this.near, + far: this.far + } + } + } + class Or extends xi { + constructor() { + super(), this.isScene = !0, this.type = "Scene", this.background = null, this.environment = null, this.fog = null, this.backgroundBlurriness = 0, this.backgroundIntensity = 1, this.backgroundRotation = new ai, this.environmentIntensity = 1, this.environmentRotation = new ai, this.overrideMaterial = null, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + copy(e, t) { + return super.copy(e, t), null !== e.background && (this.background = e.background.clone()), null !== e.environment && (this.environment = e.environment.clone()), null !== e.fog && (this.fog = e.fog.clone()), this.backgroundBlurriness = e.backgroundBlurriness, this.backgroundIntensity = e.backgroundIntensity, this.backgroundRotation.copy(e.backgroundRotation), this.environmentIntensity = e.environmentIntensity, this.environmentRotation.copy(e.environmentRotation), null !== e.overrideMaterial && (this.overrideMaterial = e.overrideMaterial.clone()), this.matrixAutoUpdate = e.matrixAutoUpdate, this + } + toJSON(e) { + const t = super.toJSON(e); + return null !== this.fog && (t.object.fog = this.fog.toJSON()), this.backgroundBlurriness > 0 && (t.object.backgroundBlurriness = this.backgroundBlurriness), 1 !== this.backgroundIntensity && (t.object.backgroundIntensity = this.backgroundIntensity), t.object.backgroundRotation = this.backgroundRotation.toArray(), 1 !== this.environmentIntensity && (t.object.environmentIntensity = this.environmentIntensity), t.object.environmentRotation = this.environmentRotation.toArray(), t + } + } + class Fr { + constructor(e, t) { + this.isInterleavedBuffer = !0, this.array = e, this.stride = t, this.count = void 0 !== e ? e.length / t : 0, this.usage = Ct, this.updateRanges = [], this.version = 0, this.uuid = zt() + } + onUploadCallback() {} + set needsUpdate(e) { + !0 === e && this.version++ + } + setUsage(e) { + return this.usage = e, this + } + addUpdateRange(e, t) { + this.updateRanges.push({ + start: e, + count: t + }) + } + clearUpdateRanges() { + this.updateRanges.length = 0 + } + copy(e) { + return this.array = new e.array.constructor(e.array), this.count = e.count, this.stride = e.stride, this.usage = e.usage, this + } + copyAt(e, t, n) { + e *= this.stride, n *= t.stride; + for (let i = 0, r = this.stride; i < r; i++) this.array[e + i] = t.array[n + i]; + return this + } + set(e, t = 0) { + return this.array.set(e, t), this + } + clone(e) { + void 0 === e.arrayBuffers && (e.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = zt()), void 0 === e.arrayBuffers[this.array.buffer._uuid] && (e.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer); + const t = new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]), + n = new this.constructor(t, this.stride); + return n.setUsage(this.usage), n + } + onUpload(e) { + return this.onUploadCallback = e, this + } + toJSON(e) { + return void 0 === e.arrayBuffers && (e.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = zt()), void 0 === e.arrayBuffers[this.array.buffer._uuid] && (e.arrayBuffers[this.array.buffer._uuid] = Array.from(new Uint32Array(this.array.buffer))), { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + } + } + } + const Wr = new yn; + class Vr { + constructor(e, t, n, i = !1) { + this.isInterleavedBufferAttribute = !0, this.name = "", this.data = e, this.itemSize = t, this.offset = n, this.normalized = i + } + get count() { + return this.data.count + } + get array() { + return this.data.array + } + set needsUpdate(e) { + this.data.needsUpdate = e + } + applyMatrix4(e) { + for (let t = 0, n = this.data.count; t < n; t++) Wr.fromBufferAttribute(this, t), Wr.applyMatrix4(e), this.setXYZ(t, Wr.x, Wr.y, Wr.z); + return this + } + applyNormalMatrix(e) { + for (let t = 0, n = this.count; t < n; t++) Wr.fromBufferAttribute(this, t), Wr.applyNormalMatrix(e), this.setXYZ(t, Wr.x, Wr.y, Wr.z); + return this + } + transformDirection(e) { + for (let t = 0, n = this.count; t < n; t++) Wr.fromBufferAttribute(this, t), Wr.transformDirection(e), this.setXYZ(t, Wr.x, Wr.y, Wr.z); + return this + } + getComponent(e, t) { + let n = this.array[e * this.data.stride + this.offset + t]; + return this.normalized && (n = Vt(n, this.array)), n + } + setComponent(e, t, n) { + return this.normalized && (n = Ht(n, this.array)), this.data.array[e * this.data.stride + this.offset + t] = n, this + } + setX(e, t) { + return this.normalized && (t = Ht(t, this.array)), this.data.array[e * this.data.stride + this.offset] = t, this + } + setY(e, t) { + return this.normalized && (t = Ht(t, this.array)), this.data.array[e * this.data.stride + this.offset + 1] = t, this + } + setZ(e, t) { + return this.normalized && (t = Ht(t, this.array)), this.data.array[e * this.data.stride + this.offset + 2] = t, this + } + setW(e, t) { + return this.normalized && (t = Ht(t, this.array)), this.data.array[e * this.data.stride + this.offset + 3] = t, this + } + getX(e) { + let t = this.data.array[e * this.data.stride + this.offset]; + return this.normalized && (t = Vt(t, this.array)), t + } + getY(e) { + let t = this.data.array[e * this.data.stride + this.offset + 1]; + return this.normalized && (t = Vt(t, this.array)), t + } + getZ(e) { + let t = this.data.array[e * this.data.stride + this.offset + 2]; + return this.normalized && (t = Vt(t, this.array)), t + } + getW(e) { + let t = this.data.array[e * this.data.stride + this.offset + 3]; + return this.normalized && (t = Vt(t, this.array)), t + } + setXY(e, t, n) { + return e = e * this.data.stride + this.offset, this.normalized && (t = Ht(t, this.array), n = Ht(n, this.array)), this.data.array[e + 0] = t, this.data.array[e + 1] = n, this + } + setXYZ(e, t, n, i) { + return e = e * this.data.stride + this.offset, this.normalized && (t = Ht(t, this.array), n = Ht(n, this.array), i = Ht(i, this.array)), this.data.array[e + 0] = t, this.data.array[e + 1] = n, this.data.array[e + 2] = i, this + } + setXYZW(e, t, n, i, r) { + return e = e * this.data.stride + this.offset, this.normalized && (t = Ht(t, this.array), n = Ht(n, this.array), i = Ht(i, this.array), r = Ht(r, this.array)), this.data.array[e + 0] = t, this.data.array[e + 1] = n, this.data.array[e + 2] = i, this.data.array[e + 3] = r, this + } + clone(e) { + if (void 0 === e) { + console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data."); + const e = []; + for (let t = 0; t < this.count; t++) { + const n = t * this.data.stride + this.offset; + for (let t = 0; t < this.itemSize; t++) e.push(this.data.array[n + t]) + } + return new qi(new this.array.constructor(e), this.itemSize, this.normalized) + } + return void 0 === e.interleavedBuffers && (e.interleavedBuffers = {}), void 0 === e.interleavedBuffers[this.data.uuid] && (e.interleavedBuffers[this.data.uuid] = this.data.clone(e)), new Vr(e.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized) + } + toJSON(e) { + if (void 0 === e) { + console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data."); + const e = []; + for (let t = 0; t < this.count; t++) { + const n = t * this.data.stride + this.offset; + for (let t = 0; t < this.itemSize; t++) e.push(this.data.array[n + t]) + } + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: e, + normalized: this.normalized + } + } + return void 0 === e.interleavedBuffers && (e.interleavedBuffers = {}), void 0 === e.interleavedBuffers[this.data.uuid] && (e.interleavedBuffers[this.data.uuid] = this.data.toJSON(e)), { + isInterleavedBufferAttribute: !0, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + } + } + } + const Hr = new yn, + Gr = new pn, + jr = new pn, + Qr = new yn, + Yr = new qn, + Kr = new yn, + qr = new Fn, + Xr = new qn, + Zr = new Kn; + class Jr extends wr { + constructor(e, t) { + super(e, t), this.isSkinnedMesh = !0, this.type = "SkinnedMesh", this.bindMode = J, this.bindMatrix = new qn, this.bindMatrixInverse = new qn, this.boundingBox = null, this.boundingSphere = null + } + computeBoundingBox() { + const e = this.geometry; + null === this.boundingBox && (this.boundingBox = new xn), this.boundingBox.makeEmpty(); + const t = e.getAttribute("position"); + for (let e = 0; e < t.count; e++) this.getVertexPosition(e, Kr), this.boundingBox.expandByPoint(Kr) + } + computeBoundingSphere() { + const e = this.geometry; + null === this.boundingSphere && (this.boundingSphere = new Fn), this.boundingSphere.makeEmpty(); + const t = e.getAttribute("position"); + for (let e = 0; e < t.count; e++) this.getVertexPosition(e, Kr), this.boundingSphere.expandByPoint(Kr) + } + copy(e, t) { + return super.copy(e, t), this.bindMode = e.bindMode, this.bindMatrix.copy(e.bindMatrix), this.bindMatrixInverse.copy(e.bindMatrixInverse), this.skeleton = e.skeleton, null !== e.boundingBox && (this.boundingBox = e.boundingBox.clone()), null !== e.boundingSphere && (this.boundingSphere = e.boundingSphere.clone()), this + } + raycast(e, t) { + const n = this.material, + i = this.matrixWorld; + void 0 !== n && (null === this.boundingSphere && this.computeBoundingSphere(), qr.copy(this.boundingSphere), qr.applyMatrix4(i), !1 !== e.ray.intersectsSphere(qr) && (Xr.copy(i).invert(), Zr.copy(e.ray).applyMatrix4(Xr), null !== this.boundingBox && !1 === Zr.intersectsBox(this.boundingBox) || this._computeIntersections(e, t, Zr))) + } + getVertexPosition(e, t) { + return super.getVertexPosition(e, t), this.applyBoneTransform(e, t), t + } + bind(e, t) { + this.skeleton = e, void 0 === t && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), t = this.matrixWorld), this.bindMatrix.copy(t), this.bindMatrixInverse.copy(t).invert() + } + pose() { + this.skeleton.pose() + } + normalizeSkinWeights() { + const e = new pn, + t = this.geometry.attributes.skinWeight; + for (let n = 0, i = t.count; n < i; n++) { + e.fromBufferAttribute(t, n); + const i = 1 / e.manhattanLength(); + i !== 1 / 0 ? e.multiplyScalar(i) : e.set(1, 0, 0, 0), t.setXYZW(n, e.x, e.y, e.z, e.w) + } + } + updateMatrixWorld(e) { + super.updateMatrixWorld(e), this.bindMode === J ? this.bindMatrixInverse.copy(this.matrixWorld).invert() : "detached" === this.bindMode ? this.bindMatrixInverse.copy(this.bindMatrix).invert() : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) + } + applyBoneTransform(e, t) { + const n = this.skeleton, + i = this.geometry; + Gr.fromBufferAttribute(i.attributes.skinIndex, e), jr.fromBufferAttribute(i.attributes.skinWeight, e), Hr.copy(t).applyMatrix4(this.bindMatrix), t.set(0, 0, 0); + for (let e = 0; e < 4; e++) { + const i = jr.getComponent(e); + if (0 !== i) { + const r = Gr.getComponent(e); + Yr.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]), t.addScaledVector(Qr.copy(Hr).applyMatrix4(Yr), i) + } + } + return t.applyMatrix4(this.bindMatrixInverse) + } + } + class $r extends xi { + constructor() { + super(), this.isBone = !0, this.type = "Bone" + } + } + class ea extends un { + constructor(e = null, t = 1, n = 1, i, r, a, s, o, l = 1003, c = 1003, h, d) { + super(null, a, s, o, l, c, i, r, h, d), this.isDataTexture = !0, this.image = { + data: e, + width: t, + height: n + }, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1 + } + } + const ta = new qn, + na = new qn; + class ia { + constructor(e = [], t = []) { + this.uuid = zt(), this.bones = e.slice(0), this.boneInverses = t, this.boneMatrices = null, this.boneTexture = null, this.init() + } + init() { + const e = this.bones, + t = this.boneInverses; + if (this.boneMatrices = new Float32Array(16 * e.length), 0 === t.length) this.calculateInverses(); + else if (e.length !== t.length) { + console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."), this.boneInverses = []; + for (let e = 0, t = this.bones.length; e < t; e++) this.boneInverses.push(new qn) + } + } + calculateInverses() { + this.boneInverses.length = 0; + for (let e = 0, t = this.bones.length; e < t; e++) { + const t = new qn; + this.bones[e] && t.copy(this.bones[e].matrixWorld).invert(), this.boneInverses.push(t) + } + } + pose() { + for (let e = 0, t = this.bones.length; e < t; e++) { + const t = this.bones[e]; + t && t.matrixWorld.copy(this.boneInverses[e]).invert() + } + for (let e = 0, t = this.bones.length; e < t; e++) { + const t = this.bones[e]; + t && (t.parent && t.parent.isBone ? (t.matrix.copy(t.parent.matrixWorld).invert(), t.matrix.multiply(t.matrixWorld)) : t.matrix.copy(t.matrixWorld), t.matrix.decompose(t.position, t.quaternion, t.scale)) + } + } + update() { + const e = this.bones, + t = this.boneInverses, + n = this.boneMatrices, + i = this.boneTexture; + for (let i = 0, r = e.length; i < r; i++) { + const r = e[i] ? e[i].matrixWorld : na; + ta.multiplyMatrices(r, t[i]), ta.toArray(n, 16 * i) + } + null !== i && (i.needsUpdate = !0) + } + clone() { + return new ia(this.bones, this.boneInverses) + } + computeBoneTexture() { + let e = Math.sqrt(4 * this.bones.length); + e = 4 * Math.ceil(e / 4), e = Math.max(e, 4); + const t = new Float32Array(e * e * 4); + t.set(this.boneMatrices); + const n = new ea(t, e, e, Se, ye); + return n.needsUpdate = !0, this.boneMatrices = t, this.boneTexture = n, this + } + getBoneByName(e) { + for (let t = 0, n = this.bones.length; t < n; t++) { + const n = this.bones[t]; + if (n.name === e) return n + } + } + dispose() { + null !== this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = null) + } + fromJSON(e, t) { + this.uuid = e.uuid; + for (let n = 0, i = e.bones.length; n < i; n++) { + const i = e.bones[n]; + let r = t[i]; + void 0 === r && (console.warn("THREE.Skeleton: No bone found with UUID:", i), r = new $r), this.bones.push(r), this.boneInverses.push((new qn).fromArray(e.boneInverses[n])) + } + return this.init(), this + } + toJSON() { + const e = { + metadata: { + version: 4.6, + type: "Skeleton", + generator: "Skeleton.toJSON" + }, + bones: [], + boneInverses: [] + }; + e.uuid = this.uuid; + const t = this.bones, + n = this.boneInverses; + for (let i = 0, r = t.length; i < r; i++) { + const r = t[i]; + e.bones.push(r.uuid); + const a = n[i]; + e.boneInverses.push(a.toArray()) + } + return e + } + } + class ra extends qi { + constructor(e, t, n, i = 1) { + super(e, t, n), this.isInstancedBufferAttribute = !0, this.meshPerAttribute = i + } + copy(e) { + return super.copy(e), this.meshPerAttribute = e.meshPerAttribute, this + } + toJSON() { + const e = super.toJSON(); + return e.meshPerAttribute = this.meshPerAttribute, e.isInstancedBufferAttribute = !0, e + } + } + const aa = new qn, + sa = new qn, + oa = [], + la = new xn, + ca = new qn, + ha = new wr, + da = new Fn; + class ua extends wr { + constructor(e, t, n) { + super(e, t), this.isInstancedMesh = !0, this.instanceMatrix = new ra(new Float32Array(16 * n), 16), this.instanceColor = null, this.morphTexture = null, this.count = n, this.boundingBox = null, this.boundingSphere = null; + for (let e = 0; e < n; e++) this.setMatrixAt(e, ca) + } + computeBoundingBox() { + const e = this.geometry, + t = this.count; + null === this.boundingBox && (this.boundingBox = new xn), null === e.boundingBox && e.computeBoundingBox(), this.boundingBox.makeEmpty(); + for (let n = 0; n < t; n++) this.getMatrixAt(n, aa), la.copy(e.boundingBox).applyMatrix4(aa), this.boundingBox.union(la) + } + computeBoundingSphere() { + const e = this.geometry, + t = this.count; + null === this.boundingSphere && (this.boundingSphere = new Fn), null === e.boundingSphere && e.computeBoundingSphere(), this.boundingSphere.makeEmpty(); + for (let n = 0; n < t; n++) this.getMatrixAt(n, aa), da.copy(e.boundingSphere).applyMatrix4(aa), this.boundingSphere.union(da) + } + copy(e, t) { + return super.copy(e, t), this.instanceMatrix.copy(e.instanceMatrix), null !== e.morphTexture && (this.morphTexture = e.morphTexture.clone()), null !== e.instanceColor && (this.instanceColor = e.instanceColor.clone()), this.count = e.count, null !== e.boundingBox && (this.boundingBox = e.boundingBox.clone()), null !== e.boundingSphere && (this.boundingSphere = e.boundingSphere.clone()), this + } + getColorAt(e, t) { + t.fromArray(this.instanceColor.array, 3 * e) + } + getMatrixAt(e, t) { + t.fromArray(this.instanceMatrix.array, 16 * e) + } + getMorphAt(e, t) { + const n = t.morphTargetInfluences, + i = this.morphTexture.source.data.data, + r = e * (n.length + 1) + 1; + for (let e = 0; e < n.length; e++) n[e] = i[r + e] + } + raycast(e, t) { + const n = this.matrixWorld, + i = this.count; + if (ha.geometry = this.geometry, ha.material = this.material, void 0 !== ha.material && (null === this.boundingSphere && this.computeBoundingSphere(), da.copy(this.boundingSphere), da.applyMatrix4(n), !1 !== e.ray.intersectsSphere(da))) + for (let r = 0; r < i; r++) { + this.getMatrixAt(r, aa), sa.multiplyMatrices(n, aa), ha.matrixWorld = sa, ha.raycast(e, oa); + for (let e = 0, n = oa.length; e < n; e++) { + const n = oa[e]; + n.instanceId = r, n.object = this, t.push(n) + } + oa.length = 0 + } + } + setColorAt(e, t) { + null === this.instanceColor && (this.instanceColor = new ra(new Float32Array(3 * this.instanceMatrix.count).fill(1), 3)), t.toArray(this.instanceColor.array, 3 * e) + } + setMatrixAt(e, t) { + t.toArray(this.instanceMatrix.array, 16 * e) + } + setMorphAt(e, t) { + const n = t.morphTargetInfluences, + i = n.length + 1; + null === this.morphTexture && (this.morphTexture = new ea(new Float32Array(i * this.count), i, this.count, _e, ye)); + const r = this.morphTexture.source.data.data; + let a = 0; + for (let e = 0; e < n.length; e++) a += n[e]; + const s = this.geometry.morphTargetsRelative ? 1 : 1 - a, + o = i * e; + r[o] = s, r.set(n, o + 1) + } + updateMorphTargets() {} + dispose() { + this.dispatchEvent({ + type: "dispose" + }), null !== this.morphTexture && (this.morphTexture.dispose(), this.morphTexture = null) + } + } + const pa = new yn, + fa = new yn, + ma = new Qt; + class ga { + constructor(e = new yn(1, 0, 0), t = 0) { + this.isPlane = !0, this.normal = e, this.constant = t + } + set(e, t) { + return this.normal.copy(e), this.constant = t, this + } + setComponents(e, t, n, i) { + return this.normal.set(e, t, n), this.constant = i, this + } + setFromNormalAndCoplanarPoint(e, t) { + return this.normal.copy(e), this.constant = -t.dot(this.normal), this + } + setFromCoplanarPoints(e, t, n) { + const i = pa.subVectors(n, t).cross(fa.subVectors(e, t)).normalize(); + return this.setFromNormalAndCoplanarPoint(i, e), this + } + copy(e) { + return this.normal.copy(e.normal), this.constant = e.constant, this + } + normalize() { + const e = 1 / this.normal.length(); + return this.normal.multiplyScalar(e), this.constant *= e, this + } + negate() { + return this.constant *= -1, this.normal.negate(), this + } + distanceToPoint(e) { + return this.normal.dot(e) + this.constant + } + distanceToSphere(e) { + return this.distanceToPoint(e.center) - e.radius + } + projectPoint(e, t) { + return t.copy(e).addScaledVector(this.normal, -this.distanceToPoint(e)) + } + intersectLine(e, t) { + const n = e.delta(pa), + i = this.normal.dot(n); + if (0 === i) return 0 === this.distanceToPoint(e.start) ? t.copy(e.start) : null; + const r = -(e.start.dot(this.normal) + this.constant) / i; + return r < 0 || r > 1 ? null : t.copy(e.start).addScaledVector(n, r) + } + intersectsLine(e) { + const t = this.distanceToPoint(e.start), + n = this.distanceToPoint(e.end); + return t < 0 && n > 0 || n < 0 && t > 0 + } + intersectsBox(e) { + return e.intersectsPlane(this) + } + intersectsSphere(e) { + return e.intersectsPlane(this) + } + coplanarPoint(e) { + return e.copy(this.normal).multiplyScalar(-this.constant) + } + applyMatrix4(e, t) { + const n = t || ma.getNormalMatrix(e), + i = this.coplanarPoint(pa).applyMatrix4(e), + r = this.normal.applyMatrix3(n).normalize(); + return this.constant = -i.dot(r), this + } + translate(e) { + return this.constant -= e.dot(this.normal), this + } + equals(e) { + return e.normal.equals(this.normal) && e.constant === this.constant + } + clone() { + return (new this.constructor).copy(this) + } + } + const va = new Fn, + wa = new yn; + class ya { + constructor(e = new ga, t = new ga, n = new ga, i = new ga, r = new ga, a = new ga) { + this.planes = [e, t, n, i, r, a] + } + set(e, t, n, i, r, a) { + const s = this.planes; + return s[0].copy(e), s[1].copy(t), s[2].copy(n), s[3].copy(i), s[4].copy(r), s[5].copy(a), this + } + copy(e) { + const t = this.planes; + for (let n = 0; n < 6; n++) t[n].copy(e.planes[n]); + return this + } + setFromProjectionMatrix(e, t = 2e3) { + const n = this.planes, + i = e.elements, + r = i[0], + a = i[1], + s = i[2], + o = i[3], + l = i[4], + c = i[5], + h = i[6], + d = i[7], + u = i[8], + p = i[9], + f = i[10], + m = i[11], + g = i[12], + v = i[13], + w = i[14], + y = i[15]; + if (n[0].setComponents(o - r, d - l, m - u, y - g).normalize(), n[1].setComponents(o + r, d + l, m + u, y + g).normalize(), n[2].setComponents(o + a, d + c, m + p, y + v).normalize(), n[3].setComponents(o - a, d - c, m - p, y - v).normalize(), n[4].setComponents(o - s, d - h, m - f, y - w).normalize(), t === It) n[5].setComponents(o + s, d + h, m + f, y + w).normalize(); + else { + if (t !== Rt) throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: " + t); + n[5].setComponents(s, h, f, w).normalize() + } + return this + } + intersectsObject(e) { + if (void 0 !== e.boundingSphere) null === e.boundingSphere && e.computeBoundingSphere(), va.copy(e.boundingSphere).applyMatrix4(e.matrixWorld); + else { + const t = e.geometry; + null === t.boundingSphere && t.computeBoundingSphere(), va.copy(t.boundingSphere).applyMatrix4(e.matrixWorld) + } + return this.intersectsSphere(va) + } + intersectsSprite(e) { + return va.center.set(0, 0, 0), va.radius = .7071067811865476, va.applyMatrix4(e.matrixWorld), this.intersectsSphere(va) + } + intersectsSphere(e) { + const t = this.planes, + n = e.center, + i = -e.radius; + for (let e = 0; e < 6; e++) { + if (t[e].distanceToPoint(n) < i) return !1 + } + return !0 + } + intersectsBox(e) { + const t = this.planes; + for (let n = 0; n < 6; n++) { + const i = t[n]; + if (wa.x = i.normal.x > 0 ? e.max.x : e.min.x, wa.y = i.normal.y > 0 ? e.max.y : e.min.y, wa.z = i.normal.z > 0 ? e.max.z : e.min.z, i.distanceToPoint(wa) < 0) return !1 + } + return !0 + } + containsPoint(e) { + const t = this.planes; + for (let n = 0; n < 6; n++) + if (t[n].distanceToPoint(e) < 0) return !1; + return !0 + } + clone() { + return (new this.constructor).copy(this) + } + } + class Aa extends Gi { + constructor(e) { + super(), this.isLineBasicMaterial = !0, this.type = "LineBasicMaterial", this.color = new Wi(16777215), this.map = null, this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.color.copy(e.color), this.map = e.map, this.linewidth = e.linewidth, this.linecap = e.linecap, this.linejoin = e.linejoin, this.fog = e.fog, this + } + } + const ba = new yn, + xa = new yn, + ka = new qn, + Ea = new Kn, + Sa = new Fn, + Ma = new yn, + Ta = new yn; + class _a extends xi { + constructor(e = new sr, t = new Aa) { + super(), this.isLine = !0, this.type = "Line", this.geometry = e, this.material = t, this.morphTargetDictionary = void 0, this.morphTargetInfluences = void 0, this.updateMorphTargets() + } + copy(e, t) { + return super.copy(e, t), this.material = Array.isArray(e.material) ? e.material.slice() : e.material, this.geometry = e.geometry, this + } + computeLineDistances() { + const e = this.geometry; + if (null === e.index) { + const t = e.attributes.position, + n = [0]; + for (let e = 1, i = t.count; e < i; e++) ba.fromBufferAttribute(t, e - 1), xa.fromBufferAttribute(t, e), n[e] = n[e - 1], n[e] += ba.distanceTo(xa); + e.setAttribute("lineDistance", new Ji(n, 1)) + } else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + return this + } + raycast(e, t) { + const n = this.geometry, + i = this.matrixWorld, + r = e.params.Line.threshold, + a = n.drawRange; + if (null === n.boundingSphere && n.computeBoundingSphere(), Sa.copy(n.boundingSphere), Sa.applyMatrix4(i), Sa.radius += r, !1 === e.ray.intersectsSphere(Sa)) return; + ka.copy(i).invert(), Ea.copy(e.ray).applyMatrix4(ka); + const s = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + o = s * s, + l = this.isLineSegments ? 2 : 1, + c = n.index, + h = n.attributes.position; + if (null !== c) { + const n = Math.max(0, a.start), + i = Math.min(c.count, a.start + a.count); + for (let r = n, a = i - 1; r < a; r += l) { + const n = c.getX(r), + i = c.getX(r + 1), + a = Ca(this, e, Ea, o, n, i, r); + a && t.push(a) + } + if (this.isLineLoop) { + const r = c.getX(i - 1), + a = c.getX(n), + s = Ca(this, e, Ea, o, r, a, i - 1); + s && t.push(s) + } + } else { + const n = Math.max(0, a.start), + i = Math.min(h.count, a.start + a.count); + for (let r = n, a = i - 1; r < a; r += l) { + const n = Ca(this, e, Ea, o, r, r + 1, r); + n && t.push(n) + } + if (this.isLineLoop) { + const r = Ca(this, e, Ea, o, i - 1, n, i - 1); + r && t.push(r) + } + } + } + updateMorphTargets() { + const e = this.geometry.morphAttributes, + t = Object.keys(e); + if (t.length > 0) { + const n = e[t[0]]; + if (void 0 !== n) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, t = n.length; e < t; e++) { + const t = n[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[t] = e + } + } + } + } + } + + function Ca(e, t, n, i, r, a, s) { + const o = e.geometry.attributes.position; + ba.fromBufferAttribute(o, r), xa.fromBufferAttribute(o, a); + if (n.distanceSqToSegment(ba, xa, Ma, Ta) > i) return; + Ma.applyMatrix4(e.matrixWorld); + const l = t.ray.origin.distanceTo(Ma); + return l < t.near || l > t.far ? void 0 : { + distance: l, + point: Ta.clone().applyMatrix4(e.matrixWorld), + index: s, + face: null, + faceIndex: null, + barycoord: null, + object: e + } + } + const Pa = new yn, + Ia = new yn; + class Ra extends _a { + constructor(e, t) { + super(e, t), this.isLineSegments = !0, this.type = "LineSegments" + } + computeLineDistances() { + const e = this.geometry; + if (null === e.index) { + const t = e.attributes.position, + n = []; + for (let e = 0, i = t.count; e < i; e += 2) Pa.fromBufferAttribute(t, e), Ia.fromBufferAttribute(t, e + 1), n[e] = 0 === e ? 0 : n[e - 1], n[e + 1] = n[e] + Pa.distanceTo(Ia); + e.setAttribute("lineDistance", new Ji(n, 1)) + } else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + return this + } + } + class La extends _a { + constructor(e, t) { + super(e, t), this.isLineLoop = !0, this.type = "LineLoop" + } + } + class Da extends Gi { + constructor(e) { + super(), this.isPointsMaterial = !0, this.type = "PointsMaterial", this.color = new Wi(16777215), this.map = null, this.alphaMap = null, this.size = 1, this.sizeAttenuation = !0, this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.color.copy(e.color), this.map = e.map, this.alphaMap = e.alphaMap, this.size = e.size, this.sizeAttenuation = e.sizeAttenuation, this.fog = e.fog, this + } + } + const Na = new qn, + Ba = new Kn, + Ua = new Fn, + za = new yn; + class Oa extends xi { + constructor(e = new sr, t = new Da) { + super(), this.isPoints = !0, this.type = "Points", this.geometry = e, this.material = t, this.morphTargetDictionary = void 0, this.morphTargetInfluences = void 0, this.updateMorphTargets() + } + copy(e, t) { + return super.copy(e, t), this.material = Array.isArray(e.material) ? e.material.slice() : e.material, this.geometry = e.geometry, this + } + raycast(e, t) { + const n = this.geometry, + i = this.matrixWorld, + r = e.params.Points.threshold, + a = n.drawRange; + if (null === n.boundingSphere && n.computeBoundingSphere(), Ua.copy(n.boundingSphere), Ua.applyMatrix4(i), Ua.radius += r, !1 === e.ray.intersectsSphere(Ua)) return; + Na.copy(i).invert(), Ba.copy(e.ray).applyMatrix4(Na); + const s = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + o = s * s, + l = n.index, + c = n.attributes.position; + if (null !== l) { + for (let n = Math.max(0, a.start), r = Math.min(l.count, a.start + a.count); n < r; n++) { + const r = l.getX(n); + za.fromBufferAttribute(c, r), Fa(za, r, o, i, e, t, this) + } + } else { + for (let n = Math.max(0, a.start), r = Math.min(c.count, a.start + a.count); n < r; n++) za.fromBufferAttribute(c, n), Fa(za, n, o, i, e, t, this) + } + } + updateMorphTargets() { + const e = this.geometry.morphAttributes, + t = Object.keys(e); + if (t.length > 0) { + const n = e[t[0]]; + if (void 0 !== n) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, t = n.length; e < t; e++) { + const t = n[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[t] = e + } + } + } + } + } + + function Fa(e, t, n, i, r, a, s) { + const o = Ba.distanceSqToPoint(e); + if (o < n) { + const n = new yn; + Ba.closestPointToPoint(e, n), n.applyMatrix4(i); + const l = r.ray.origin.distanceTo(n); + if (l < r.near || l > r.far) return; + a.push({ + distance: l, + distanceToRay: Math.sqrt(o), + point: n, + index: t, + face: null, + faceIndex: null, + barycoord: null, + object: s + }) + } + } + class Wa extends un { + constructor(e, t, n, i, r, a, s, o, l, c = 1026) { + if (c !== Me && c !== Te) throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + void 0 === n && c === Me && (n = we), void 0 === n && c === Te && (n = ke), super(null, i, r, a, s, o, c, n, l), this.isDepthTexture = !0, this.image = { + width: e, + height: t + }, this.magFilter = void 0 !== s ? s : oe, this.minFilter = void 0 !== o ? o : oe, this.flipY = !1, this.generateMipmaps = !1, this.compareFunction = null + } + copy(e) { + return super.copy(e), this.source = new cn(Object.assign({}, e.image)), this.compareFunction = e.compareFunction, this + } + toJSON(e) { + const t = super.toJSON(e); + return null !== this.compareFunction && (t.compareFunction = this.compareFunction), t + } + } + class Va { + constructor() { + this.type = "Curve", this.arcLengthDivisions = 200, this.needsUpdate = !1, this.cacheArcLengths = null + } + getPoint() { + console.warn("THREE.Curve: .getPoint() not implemented.") + } + getPointAt(e, t) { + const n = this.getUtoTmapping(e); + return this.getPoint(n, t) + } + getPoints(e = 5) { + const t = []; + for (let n = 0; n <= e; n++) t.push(this.getPoint(n / e)); + return t + } + getSpacedPoints(e = 5) { + const t = []; + for (let n = 0; n <= e; n++) t.push(this.getPointAt(n / e)); + return t + } + getLength() { + const e = this.getLengths(); + return e[e.length - 1] + } + getLengths(e = this.arcLengthDivisions) { + if (this.cacheArcLengths && this.cacheArcLengths.length === e + 1 && !this.needsUpdate) return this.cacheArcLengths; + this.needsUpdate = !1; + const t = []; + let n, i = this.getPoint(0), + r = 0; + t.push(0); + for (let a = 1; a <= e; a++) n = this.getPoint(a / e), r += n.distanceTo(i), t.push(r), i = n; + return this.cacheArcLengths = t, t + } + updateArcLengths() { + this.needsUpdate = !0, this.getLengths() + } + getUtoTmapping(e, t = null) { + const n = this.getLengths(); + let i = 0; + const r = n.length; + let a; + a = t || e * n[r - 1]; + let s, o = 0, + l = r - 1; + for (; o <= l;) + if (i = Math.floor(o + (l - o) / 2), s = n[i] - a, s < 0) o = i + 1; + else { + if (!(s > 0)) { + l = i; + break + } + l = i - 1 + } if (i = l, n[i] === a) return i / (r - 1); + const c = n[i]; + return (i + (a - c) / (n[i + 1] - c)) / (r - 1) + } + getTangent(e, t) { + const n = 1e-4; + let i = e - n, + r = e + n; + i < 0 && (i = 0), r > 1 && (r = 1); + const a = this.getPoint(i), + s = this.getPoint(r), + o = t || (a.isVector2 ? new jt : new yn); + return o.copy(s).sub(a).normalize(), o + } + getTangentAt(e, t) { + const n = this.getUtoTmapping(e); + return this.getTangent(n, t) + } + computeFrenetFrames(e, t = !1) { + const n = new yn, + i = [], + r = [], + a = [], + s = new yn, + o = new qn; + for (let t = 0; t <= e; t++) { + const n = t / e; + i[t] = this.getTangentAt(n, new yn) + } + r[0] = new yn, a[0] = new yn; + let l = Number.MAX_VALUE; + const c = Math.abs(i[0].x), + h = Math.abs(i[0].y), + d = Math.abs(i[0].z); + c <= l && (l = c, n.set(1, 0, 0)), h <= l && (l = h, n.set(0, 1, 0)), d <= l && n.set(0, 0, 1), s.crossVectors(i[0], n).normalize(), r[0].crossVectors(i[0], s), a[0].crossVectors(i[0], r[0]); + for (let t = 1; t <= e; t++) { + if (r[t] = r[t - 1].clone(), a[t] = a[t - 1].clone(), s.crossVectors(i[t - 1], i[t]), s.length() > Number.EPSILON) { + s.normalize(); + const e = Math.acos(Ot(i[t - 1].dot(i[t]), -1, 1)); + r[t].applyMatrix4(o.makeRotationAxis(s, e)) + } + a[t].crossVectors(i[t], r[t]) + } + if (!0 === t) { + let t = Math.acos(Ot(r[0].dot(r[e]), -1, 1)); + t /= e, i[0].dot(s.crossVectors(r[0], r[e])) > 0 && (t = -t); + for (let n = 1; n <= e; n++) r[n].applyMatrix4(o.makeRotationAxis(i[n], t * n)), a[n].crossVectors(i[n], r[n]) + } + return { + tangents: i, + normals: r, + binormals: a + } + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + return this.arcLengthDivisions = e.arcLengthDivisions, this + } + toJSON() { + const e = { + metadata: { + version: 4.6, + type: "Curve", + generator: "Curve.toJSON" + } + }; + return e.arcLengthDivisions = this.arcLengthDivisions, e.type = this.type, e + } + fromJSON(e) { + return this.arcLengthDivisions = e.arcLengthDivisions, this + } + } + class Ha extends Va { + constructor(e = 0, t = 0, n = 1, i = 1, r = 0, a = 2 * Math.PI, s = !1, o = 0) { + super(), this.isEllipseCurve = !0, this.type = "EllipseCurve", this.aX = e, this.aY = t, this.xRadius = n, this.yRadius = i, this.aStartAngle = r, this.aEndAngle = a, this.aClockwise = s, this.aRotation = o + } + getPoint(e, t = new jt) { + const n = t, + i = 2 * Math.PI; + let r = this.aEndAngle - this.aStartAngle; + const a = Math.abs(r) < Number.EPSILON; + for (; r < 0;) r += i; + for (; r > i;) r -= i; + r < Number.EPSILON && (r = a ? 0 : i), !0 !== this.aClockwise || a || (r === i ? r = -i : r -= i); + const s = this.aStartAngle + e * r; + let o = this.aX + this.xRadius * Math.cos(s), + l = this.aY + this.yRadius * Math.sin(s); + if (0 !== this.aRotation) { + const e = Math.cos(this.aRotation), + t = Math.sin(this.aRotation), + n = o - this.aX, + i = l - this.aY; + o = n * e - i * t + this.aX, l = n * t + i * e + this.aY + } + return n.set(o, l) + } + copy(e) { + return super.copy(e), this.aX = e.aX, this.aY = e.aY, this.xRadius = e.xRadius, this.yRadius = e.yRadius, this.aStartAngle = e.aStartAngle, this.aEndAngle = e.aEndAngle, this.aClockwise = e.aClockwise, this.aRotation = e.aRotation, this + } + toJSON() { + const e = super.toJSON(); + return e.aX = this.aX, e.aY = this.aY, e.xRadius = this.xRadius, e.yRadius = this.yRadius, e.aStartAngle = this.aStartAngle, e.aEndAngle = this.aEndAngle, e.aClockwise = this.aClockwise, e.aRotation = this.aRotation, e + } + fromJSON(e) { + return super.fromJSON(e), this.aX = e.aX, this.aY = e.aY, this.xRadius = e.xRadius, this.yRadius = e.yRadius, this.aStartAngle = e.aStartAngle, this.aEndAngle = e.aEndAngle, this.aClockwise = e.aClockwise, this.aRotation = e.aRotation, this + } + } + + function Ga() { + let e = 0, + t = 0, + n = 0, + i = 0; + + function r(r, a, s, o) { + e = r, t = s, n = -3 * r + 3 * a - 2 * s - o, i = 2 * r - 2 * a + s + o + } + return { + initCatmullRom: function(e, t, n, i, a) { + r(t, n, a * (n - e), a * (i - t)) + }, + initNonuniformCatmullRom: function(e, t, n, i, a, s, o) { + let l = (t - e) / a - (n - e) / (a + s) + (n - t) / s, + c = (n - t) / s - (i - t) / (s + o) + (i - n) / o; + l *= s, c *= s, r(t, n, l, c) + }, + calc: function(r) { + const a = r * r; + return e + t * r + n * a + i * (a * r) + } + } + } + const ja = new yn, + Qa = new Ga, + Ya = new Ga, + Ka = new Ga; + + function qa(e, t, n, i, r) { + const a = .5 * (i - t), + s = .5 * (r - n), + o = e * e; + return (2 * n - 2 * i + a + s) * (e * o) + (-3 * n + 3 * i - 2 * a - s) * o + a * e + n + } + + function Xa(e, t, n, i) { + return function(e, t) { + const n = 1 - e; + return n * n * t + }(e, t) + function(e, t) { + return 2 * (1 - e) * e * t + }(e, n) + function(e, t) { + return e * e * t + }(e, i) + } + + function Za(e, t, n, i, r) { + return function(e, t) { + const n = 1 - e; + return n * n * n * t + }(e, t) + function(e, t) { + const n = 1 - e; + return 3 * n * n * e * t + }(e, n) + function(e, t) { + return 3 * (1 - e) * e * e * t + }(e, i) + function(e, t) { + return e * e * e * t + }(e, r) + } + class Ja extends Va { + constructor(e = new jt, t = new jt, n = new jt, i = new jt) { + super(), this.isCubicBezierCurve = !0, this.type = "CubicBezierCurve", this.v0 = e, this.v1 = t, this.v2 = n, this.v3 = i + } + getPoint(e, t = new jt) { + const n = t, + i = this.v0, + r = this.v1, + a = this.v2, + s = this.v3; + return n.set(Za(e, i.x, r.x, a.x, s.x), Za(e, i.y, r.y, a.y, s.y)), n + } + copy(e) { + return super.copy(e), this.v0.copy(e.v0), this.v1.copy(e.v1), this.v2.copy(e.v2), this.v3.copy(e.v3), this + } + toJSON() { + const e = super.toJSON(); + return e.v0 = this.v0.toArray(), e.v1 = this.v1.toArray(), e.v2 = this.v2.toArray(), e.v3 = this.v3.toArray(), e + } + fromJSON(e) { + return super.fromJSON(e), this.v0.fromArray(e.v0), this.v1.fromArray(e.v1), this.v2.fromArray(e.v2), this.v3.fromArray(e.v3), this + } + } + class $a extends Va { + constructor(e = new jt, t = new jt) { + super(), this.isLineCurve = !0, this.type = "LineCurve", this.v1 = e, this.v2 = t + } + getPoint(e, t = new jt) { + const n = t; + return 1 === e ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(e).add(this.v1)), n + } + getPointAt(e, t) { + return this.getPoint(e, t) + } + getTangent(e, t = new jt) { + return t.subVectors(this.v2, this.v1).normalize() + } + getTangentAt(e, t) { + return this.getTangent(e, t) + } + copy(e) { + return super.copy(e), this.v1.copy(e.v1), this.v2.copy(e.v2), this + } + toJSON() { + const e = super.toJSON(); + return e.v1 = this.v1.toArray(), e.v2 = this.v2.toArray(), e + } + fromJSON(e) { + return super.fromJSON(e), this.v1.fromArray(e.v1), this.v2.fromArray(e.v2), this + } + } + class es extends Va { + constructor(e = new jt, t = new jt, n = new jt) { + super(), this.isQuadraticBezierCurve = !0, this.type = "QuadraticBezierCurve", this.v0 = e, this.v1 = t, this.v2 = n + } + getPoint(e, t = new jt) { + const n = t, + i = this.v0, + r = this.v1, + a = this.v2; + return n.set(Xa(e, i.x, r.x, a.x), Xa(e, i.y, r.y, a.y)), n + } + copy(e) { + return super.copy(e), this.v0.copy(e.v0), this.v1.copy(e.v1), this.v2.copy(e.v2), this + } + toJSON() { + const e = super.toJSON(); + return e.v0 = this.v0.toArray(), e.v1 = this.v1.toArray(), e.v2 = this.v2.toArray(), e + } + fromJSON(e) { + return super.fromJSON(e), this.v0.fromArray(e.v0), this.v1.fromArray(e.v1), this.v2.fromArray(e.v2), this + } + } + class ts extends Va { + constructor(e = new yn, t = new yn, n = new yn) { + super(), this.isQuadraticBezierCurve3 = !0, this.type = "QuadraticBezierCurve3", this.v0 = e, this.v1 = t, this.v2 = n + } + getPoint(e, t = new yn) { + const n = t, + i = this.v0, + r = this.v1, + a = this.v2; + return n.set(Xa(e, i.x, r.x, a.x), Xa(e, i.y, r.y, a.y), Xa(e, i.z, r.z, a.z)), n + } + copy(e) { + return super.copy(e), this.v0.copy(e.v0), this.v1.copy(e.v1), this.v2.copy(e.v2), this + } + toJSON() { + const e = super.toJSON(); + return e.v0 = this.v0.toArray(), e.v1 = this.v1.toArray(), e.v2 = this.v2.toArray(), e + } + fromJSON(e) { + return super.fromJSON(e), this.v0.fromArray(e.v0), this.v1.fromArray(e.v1), this.v2.fromArray(e.v2), this + } + } + class ns extends Va { + constructor(e = []) { + super(), this.isSplineCurve = !0, this.type = "SplineCurve", this.points = e + } + getPoint(e, t = new jt) { + const n = t, + i = this.points, + r = (i.length - 1) * e, + a = Math.floor(r), + s = r - a, + o = i[0 === a ? a : a - 1], + l = i[a], + c = i[a > i.length - 2 ? i.length - 1 : a + 1], + h = i[a > i.length - 3 ? i.length - 1 : a + 2]; + return n.set(qa(s, o.x, l.x, c.x, h.x), qa(s, o.y, l.y, c.y, h.y)), n + } + copy(e) { + super.copy(e), this.points = []; + for (let t = 0, n = e.points.length; t < n; t++) { + const n = e.points[t]; + this.points.push(n.clone()) + } + return this + } + toJSON() { + const e = super.toJSON(); + e.points = []; + for (let t = 0, n = this.points.length; t < n; t++) { + const n = this.points[t]; + e.points.push(n.toArray()) + } + return e + } + fromJSON(e) { + super.fromJSON(e), this.points = []; + for (let t = 0, n = e.points.length; t < n; t++) { + const n = e.points[t]; + this.points.push((new jt).fromArray(n)) + } + return this + } + } + var is = Object.freeze({ + __proto__: null, + ArcCurve: class extends Ha { + constructor(e, t, n, i, r, a) { + super(e, t, n, n, i, r, a), this.isArcCurve = !0, this.type = "ArcCurve" + } + }, + CatmullRomCurve3: class extends Va { + constructor(e = [], t = !1, n = "centripetal", i = .5) { + super(), this.isCatmullRomCurve3 = !0, this.type = "CatmullRomCurve3", this.points = e, this.closed = t, this.curveType = n, this.tension = i + } + getPoint(e, t = new yn) { + const n = t, + i = this.points, + r = i.length, + a = (r - (this.closed ? 0 : 1)) * e; + let s, o, l = Math.floor(a), + c = a - l; + this.closed ? l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r : 0 === c && l === r - 1 && (l = r - 2, c = 1), this.closed || l > 0 ? s = i[(l - 1) % r] : (ja.subVectors(i[0], i[1]).add(i[0]), s = ja); + const h = i[l % r], + d = i[(l + 1) % r]; + if (this.closed || l + 2 < r ? o = i[(l + 2) % r] : (ja.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), o = ja), "centripetal" === this.curveType || "chordal" === this.curveType) { + const e = "chordal" === this.curveType ? .5 : .25; + let t = Math.pow(s.distanceToSquared(h), e), + n = Math.pow(h.distanceToSquared(d), e), + i = Math.pow(d.distanceToSquared(o), e); + n < 1e-4 && (n = 1), t < 1e-4 && (t = n), i < 1e-4 && (i = n), Qa.initNonuniformCatmullRom(s.x, h.x, d.x, o.x, t, n, i), Ya.initNonuniformCatmullRom(s.y, h.y, d.y, o.y, t, n, i), Ka.initNonuniformCatmullRom(s.z, h.z, d.z, o.z, t, n, i) + } else "catmullrom" === this.curveType && (Qa.initCatmullRom(s.x, h.x, d.x, o.x, this.tension), Ya.initCatmullRom(s.y, h.y, d.y, o.y, this.tension), Ka.initCatmullRom(s.z, h.z, d.z, o.z, this.tension)); + return n.set(Qa.calc(c), Ya.calc(c), Ka.calc(c)), n + } + copy(e) { + super.copy(e), this.points = []; + for (let t = 0, n = e.points.length; t < n; t++) { + const n = e.points[t]; + this.points.push(n.clone()) + } + return this.closed = e.closed, this.curveType = e.curveType, this.tension = e.tension, this + } + toJSON() { + const e = super.toJSON(); + e.points = []; + for (let t = 0, n = this.points.length; t < n; t++) { + const n = this.points[t]; + e.points.push(n.toArray()) + } + return e.closed = this.closed, e.curveType = this.curveType, e.tension = this.tension, e + } + fromJSON(e) { + super.fromJSON(e), this.points = []; + for (let t = 0, n = e.points.length; t < n; t++) { + const n = e.points[t]; + this.points.push((new yn).fromArray(n)) + } + return this.closed = e.closed, this.curveType = e.curveType, this.tension = e.tension, this + } + }, + CubicBezierCurve: Ja, + CubicBezierCurve3: class extends Va { + constructor(e = new yn, t = new yn, n = new yn, i = new yn) { + super(), this.isCubicBezierCurve3 = !0, this.type = "CubicBezierCurve3", this.v0 = e, this.v1 = t, this.v2 = n, this.v3 = i + } + getPoint(e, t = new yn) { + const n = t, + i = this.v0, + r = this.v1, + a = this.v2, + s = this.v3; + return n.set(Za(e, i.x, r.x, a.x, s.x), Za(e, i.y, r.y, a.y, s.y), Za(e, i.z, r.z, a.z, s.z)), n + } + copy(e) { + return super.copy(e), this.v0.copy(e.v0), this.v1.copy(e.v1), this.v2.copy(e.v2), this.v3.copy(e.v3), this + } + toJSON() { + const e = super.toJSON(); + return e.v0 = this.v0.toArray(), e.v1 = this.v1.toArray(), e.v2 = this.v2.toArray(), e.v3 = this.v3.toArray(), e + } + fromJSON(e) { + return super.fromJSON(e), this.v0.fromArray(e.v0), this.v1.fromArray(e.v1), this.v2.fromArray(e.v2), this.v3.fromArray(e.v3), this + } + }, + EllipseCurve: Ha, + LineCurve: $a, + LineCurve3: class extends Va { + constructor(e = new yn, t = new yn) { + super(), this.isLineCurve3 = !0, this.type = "LineCurve3", this.v1 = e, this.v2 = t + } + getPoint(e, t = new yn) { + const n = t; + return 1 === e ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(e).add(this.v1)), n + } + getPointAt(e, t) { + return this.getPoint(e, t) + } + getTangent(e, t = new yn) { + return t.subVectors(this.v2, this.v1).normalize() + } + getTangentAt(e, t) { + return this.getTangent(e, t) + } + copy(e) { + return super.copy(e), this.v1.copy(e.v1), this.v2.copy(e.v2), this + } + toJSON() { + const e = super.toJSON(); + return e.v1 = this.v1.toArray(), e.v2 = this.v2.toArray(), e + } + fromJSON(e) { + return super.fromJSON(e), this.v1.fromArray(e.v1), this.v2.fromArray(e.v2), this + } + }, + QuadraticBezierCurve: es, + QuadraticBezierCurve3: ts, + SplineCurve: ns + }); + class rs extends Va { + constructor() { + super(), this.type = "CurvePath", this.curves = [], this.autoClose = !1 + } + add(e) { + this.curves.push(e) + } + closePath() { + const e = this.curves[0].getPoint(0), + t = this.curves[this.curves.length - 1].getPoint(1); + if (!e.equals(t)) { + const n = !0 === e.isVector2 ? "LineCurve" : "LineCurve3"; + this.curves.push(new is[n](t, e)) + } + return this + } + getPoint(e, t) { + const n = e * this.getLength(), + i = this.getCurveLengths(); + let r = 0; + for (; r < i.length;) { + if (i[r] >= n) { + const e = i[r] - n, + a = this.curves[r], + s = a.getLength(), + o = 0 === s ? 0 : 1 - e / s; + return a.getPointAt(o, t) + } + r++ + } + return null + } + getLength() { + const e = this.getCurveLengths(); + return e[e.length - 1] + } + updateArcLengths() { + this.needsUpdate = !0, this.cacheLengths = null, this.getCurveLengths() + } + getCurveLengths() { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) return this.cacheLengths; + const e = []; + let t = 0; + for (let n = 0, i = this.curves.length; n < i; n++) t += this.curves[n].getLength(), e.push(t); + return this.cacheLengths = e, e + } + getSpacedPoints(e = 40) { + const t = []; + for (let n = 0; n <= e; n++) t.push(this.getPoint(n / e)); + return this.autoClose && t.push(t[0]), t + } + getPoints(e = 12) { + const t = []; + let n; + for (let i = 0, r = this.curves; i < r.length; i++) { + const a = r[i], + s = a.isEllipseCurve ? 2 * e : a.isLineCurve || a.isLineCurve3 ? 1 : a.isSplineCurve ? e * a.points.length : e, + o = a.getPoints(s); + for (let e = 0; e < o.length; e++) { + const i = o[e]; + n && n.equals(i) || (t.push(i), n = i) + } + } + return this.autoClose && t.length > 1 && !t[t.length - 1].equals(t[0]) && t.push(t[0]), t + } + copy(e) { + super.copy(e), this.curves = []; + for (let t = 0, n = e.curves.length; t < n; t++) { + const n = e.curves[t]; + this.curves.push(n.clone()) + } + return this.autoClose = e.autoClose, this + } + toJSON() { + const e = super.toJSON(); + e.autoClose = this.autoClose, e.curves = []; + for (let t = 0, n = this.curves.length; t < n; t++) { + const n = this.curves[t]; + e.curves.push(n.toJSON()) + } + return e + } + fromJSON(e) { + super.fromJSON(e), this.autoClose = e.autoClose, this.curves = []; + for (let t = 0, n = e.curves.length; t < n; t++) { + const n = e.curves[t]; + this.curves.push((new is[n.type]).fromJSON(n)) + } + return this + } + } + class as extends rs { + constructor(e) { + super(), this.type = "Path", this.currentPoint = new jt, e && this.setFromPoints(e) + } + setFromPoints(e) { + this.moveTo(e[0].x, e[0].y); + for (let t = 1, n = e.length; t < n; t++) this.lineTo(e[t].x, e[t].y); + return this + } + moveTo(e, t) { + return this.currentPoint.set(e, t), this + } + lineTo(e, t) { + const n = new $a(this.currentPoint.clone(), new jt(e, t)); + return this.curves.push(n), this.currentPoint.set(e, t), this + } + quadraticCurveTo(e, t, n, i) { + const r = new es(this.currentPoint.clone(), new jt(e, t), new jt(n, i)); + return this.curves.push(r), this.currentPoint.set(n, i), this + } + bezierCurveTo(e, t, n, i, r, a) { + const s = new Ja(this.currentPoint.clone(), new jt(e, t), new jt(n, i), new jt(r, a)); + return this.curves.push(s), this.currentPoint.set(r, a), this + } + splineThru(e) { + const t = [this.currentPoint.clone()].concat(e), + n = new ns(t); + return this.curves.push(n), this.currentPoint.copy(e[e.length - 1]), this + } + arc(e, t, n, i, r, a) { + const s = this.currentPoint.x, + o = this.currentPoint.y; + return this.absarc(e + s, t + o, n, i, r, a), this + } + absarc(e, t, n, i, r, a) { + return this.absellipse(e, t, n, n, i, r, a), this + } + ellipse(e, t, n, i, r, a, s, o) { + const l = this.currentPoint.x, + c = this.currentPoint.y; + return this.absellipse(e + l, t + c, n, i, r, a, s, o), this + } + absellipse(e, t, n, i, r, a, s, o) { + const l = new Ha(e, t, n, i, r, a, s, o); + if (this.curves.length > 0) { + const e = l.getPoint(0); + e.equals(this.currentPoint) || this.lineTo(e.x, e.y) + } + this.curves.push(l); + const c = l.getPoint(1); + return this.currentPoint.copy(c), this + } + copy(e) { + return super.copy(e), this.currentPoint.copy(e.currentPoint), this + } + toJSON() { + const e = super.toJSON(); + return e.currentPoint = this.currentPoint.toArray(), e + } + fromJSON(e) { + return super.fromJSON(e), this.currentPoint.fromArray(e.currentPoint), this + } + } + class ss extends as { + constructor(e) { + super(e), this.uuid = zt(), this.type = "Shape", this.holes = [] + } + getPointsHoles(e) { + const t = []; + for (let n = 0, i = this.holes.length; n < i; n++) t[n] = this.holes[n].getPoints(e); + return t + } + extractPoints(e) { + return { + shape: this.getPoints(e), + holes: this.getPointsHoles(e) + } + } + copy(e) { + super.copy(e), this.holes = []; + for (let t = 0, n = e.holes.length; t < n; t++) { + const n = e.holes[t]; + this.holes.push(n.clone()) + } + return this + } + toJSON() { + const e = super.toJSON(); + e.uuid = this.uuid, e.holes = []; + for (let t = 0, n = this.holes.length; t < n; t++) { + const n = this.holes[t]; + e.holes.push(n.toJSON()) + } + return e + } + fromJSON(e) { + super.fromJSON(e), this.uuid = e.uuid, this.holes = []; + for (let t = 0, n = e.holes.length; t < n; t++) { + const n = e.holes[t]; + this.holes.push((new as).fromJSON(n)) + } + return this + } + } + class os { + static triangulate(e, t, n = 2) { + const i = t && t.length, + r = i ? t[0] * n : e.length; + let a = ls(e, 0, r, n, !0); + const s = []; + if (!a || a.next === a.prev) return s; + let o, l, c, h, d, u, p; + if (i && (a = function(e, t, n, i) { + const r = []; + let a, s, o, l, c; + for (a = 0, s = t.length; a < s; a++) o = t[a] * i, l = a < s - 1 ? t[a + 1] * i : e.length, c = ls(e, o, l, i, !1), c === c.next && (c.steiner = !0), r.push(ys(c)); + for (r.sort(ms), a = 0; a < r.length; a++) n = gs(r[a], n); + return n + }(e, t, a, n)), e.length > 80 * n) { + o = c = e[0], l = h = e[1]; + for (let t = n; t < r; t += n) d = e[t], u = e[t + 1], d < o && (o = d), u < l && (l = u), d > c && (c = d), u > h && (h = u); + p = Math.max(c - o, h - l), p = 0 !== p ? 32767 / p : 0 + } + return hs(a, s, n, o, l, p, 0), s + } + } + + function ls(e, t, n, i, r) { + let a, s; + if (r === function(e, t, n, i) { + let r = 0; + for (let a = t, s = n - i; a < n; a += i) r += (e[s] - e[a]) * (e[a + 1] + e[s + 1]), s = a; + return r + }(e, t, n, i) > 0) + for (a = t; a < n; a += i) s = Cs(a, e[a], e[a + 1], s); + else + for (a = n - i; a >= t; a -= i) s = Cs(a, e[a], e[a + 1], s); + return s && ks(s, s.next) && (Ps(s), s = s.next), s + } + + function cs(e, t) { + if (!e) return e; + t || (t = e); + let n, i = e; + do { + if (n = !1, i.steiner || !ks(i, i.next) && 0 !== xs(i.prev, i, i.next)) i = i.next; + else { + if (Ps(i), i = t = i.prev, i === i.next) break; + n = !0 + } + } while (n || i !== t); + return t + } + + function hs(e, t, n, i, r, a, s) { + if (!e) return; + !s && a && function(e, t, n, i) { + let r = e; + do { + 0 === r.z && (r.z = ws(r.x, r.y, t, n, i)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next + } while (r !== e); + r.prevZ.nextZ = null, r.prevZ = null, + function(e) { + let t, n, i, r, a, s, o, l, c = 1; + do { + for (n = e, e = null, a = null, s = 0; n;) { + for (s++, i = n, o = 0, t = 0; t < c && (o++, i = i.nextZ, i); t++); + for (l = c; o > 0 || l > 0 && i;) 0 !== o && (0 === l || !i || n.z <= i.z) ? (r = n, n = n.nextZ, o--) : (r = i, i = i.nextZ, l--), a ? a.nextZ = r : e = r, r.prevZ = a, a = r; + n = i + } + a.nextZ = null, c *= 2 + } while (s > 1) + }(r) + }(e, i, r, a); + let o, l, c = e; + for (; e.prev !== e.next;) + if (o = e.prev, l = e.next, a ? us(e, i, r, a) : ds(e)) t.push(o.i / n | 0), t.push(e.i / n | 0), t.push(l.i / n | 0), Ps(e), e = l.next, c = l.next; + else if ((e = l) === c) { + s ? 1 === s ? hs(e = ps(cs(e), t, n), t, n, i, r, a, 2) : 2 === s && fs(e, t, n, i, r, a) : hs(cs(e), t, n, i, r, a, 1); + break + } + } + + function ds(e) { + const t = e.prev, + n = e, + i = e.next; + if (xs(t, n, i) >= 0) return !1; + const r = t.x, + a = n.x, + s = i.x, + o = t.y, + l = n.y, + c = i.y, + h = r < a ? r < s ? r : s : a < s ? a : s, + d = o < l ? o < c ? o : c : l < c ? l : c, + u = r > a ? r > s ? r : s : a > s ? a : s, + p = o > l ? o > c ? o : c : l > c ? l : c; + let f = i.next; + for (; f !== t;) { + if (f.x >= h && f.x <= u && f.y >= d && f.y <= p && As(r, o, a, l, s, c, f.x, f.y) && xs(f.prev, f, f.next) >= 0) return !1; + f = f.next + } + return !0 + } + + function us(e, t, n, i) { + const r = e.prev, + a = e, + s = e.next; + if (xs(r, a, s) >= 0) return !1; + const o = r.x, + l = a.x, + c = s.x, + h = r.y, + d = a.y, + u = s.y, + p = o < l ? o < c ? o : c : l < c ? l : c, + f = h < d ? h < u ? h : u : d < u ? d : u, + m = o > l ? o > c ? o : c : l > c ? l : c, + g = h > d ? h > u ? h : u : d > u ? d : u, + v = ws(p, f, t, n, i), + w = ws(m, g, t, n, i); + let y = e.prevZ, + A = e.nextZ; + for (; y && y.z >= v && A && A.z <= w;) { + if (y.x >= p && y.x <= m && y.y >= f && y.y <= g && y !== r && y !== s && As(o, h, l, d, c, u, y.x, y.y) && xs(y.prev, y, y.next) >= 0) return !1; + if (y = y.prevZ, A.x >= p && A.x <= m && A.y >= f && A.y <= g && A !== r && A !== s && As(o, h, l, d, c, u, A.x, A.y) && xs(A.prev, A, A.next) >= 0) return !1; + A = A.nextZ + } + for (; y && y.z >= v;) { + if (y.x >= p && y.x <= m && y.y >= f && y.y <= g && y !== r && y !== s && As(o, h, l, d, c, u, y.x, y.y) && xs(y.prev, y, y.next) >= 0) return !1; + y = y.prevZ + } + for (; A && A.z <= w;) { + if (A.x >= p && A.x <= m && A.y >= f && A.y <= g && A !== r && A !== s && As(o, h, l, d, c, u, A.x, A.y) && xs(A.prev, A, A.next) >= 0) return !1; + A = A.nextZ + } + return !0 + } + + function ps(e, t, n) { + let i = e; + do { + const r = i.prev, + a = i.next.next; + !ks(r, a) && Es(r, i, i.next, a) && Ts(r, a) && Ts(a, r) && (t.push(r.i / n | 0), t.push(i.i / n | 0), t.push(a.i / n | 0), Ps(i), Ps(i.next), i = e = a), i = i.next + } while (i !== e); + return cs(i) + } + + function fs(e, t, n, i, r, a) { + let s = e; + do { + let e = s.next.next; + for (; e !== s.prev;) { + if (s.i !== e.i && bs(s, e)) { + let o = _s(s, e); + return s = cs(s, s.next), o = cs(o, o.next), hs(s, t, n, i, r, a, 0), void hs(o, t, n, i, r, a, 0) + } + e = e.next + } + s = s.next + } while (s !== e) + } + + function ms(e, t) { + return e.x - t.x + } + + function gs(e, t) { + const n = function(e, t) { + let n, i = t, + r = -1 / 0; + const a = e.x, + s = e.y; + do { + if (s <= i.y && s >= i.next.y && i.next.y !== i.y) { + const e = i.x + (s - i.y) * (i.next.x - i.x) / (i.next.y - i.y); + if (e <= a && e > r && (r = e, n = i.x < i.next.x ? i : i.next, e === a)) return n + } + i = i.next + } while (i !== t); + if (!n) return null; + const o = n, + l = n.x, + c = n.y; + let h, d = 1 / 0; + i = n; + do { + a >= i.x && i.x >= l && a !== i.x && As(s < c ? a : r, s, l, c, s < c ? r : a, s, i.x, i.y) && (h = Math.abs(s - i.y) / (a - i.x), Ts(i, e) && (h < d || h === d && (i.x > n.x || i.x === n.x && vs(n, i))) && (n = i, d = h)), i = i.next + } while (i !== o); + return n + }(e, t); + if (!n) return t; + const i = _s(n, e); + return cs(i, i.next), cs(n, n.next) + } + + function vs(e, t) { + return xs(e.prev, e, t.prev) < 0 && xs(t.next, e, e.next) < 0 + } + + function ws(e, t, n, i, r) { + return (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = (e - n) * r | 0) | e << 8)) | e << 4)) | e << 2)) | e << 1)) | (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = (t - i) * r | 0) | t << 8)) | t << 4)) | t << 2)) | t << 1)) << 1 + } + + function ys(e) { + let t = e, + n = e; + do { + (t.x < n.x || t.x === n.x && t.y < n.y) && (n = t), t = t.next + } while (t !== e); + return n + } + + function As(e, t, n, i, r, a, s, o) { + return (r - s) * (t - o) >= (e - s) * (a - o) && (e - s) * (i - o) >= (n - s) * (t - o) && (n - s) * (a - o) >= (r - s) * (i - o) + } + + function bs(e, t) { + return e.next.i !== t.i && e.prev.i !== t.i && ! function(e, t) { + let n = e; + do { + if (n.i !== e.i && n.next.i !== e.i && n.i !== t.i && n.next.i !== t.i && Es(n, n.next, e, t)) return !0; + n = n.next + } while (n !== e); + return !1 + }(e, t) && (Ts(e, t) && Ts(t, e) && function(e, t) { + let n = e, + i = !1; + const r = (e.x + t.x) / 2, + a = (e.y + t.y) / 2; + do { + n.y > a != n.next.y > a && n.next.y !== n.y && r < (n.next.x - n.x) * (a - n.y) / (n.next.y - n.y) + n.x && (i = !i), n = n.next + } while (n !== e); + return i + }(e, t) && (xs(e.prev, e, t.prev) || xs(e, t.prev, t)) || ks(e, t) && xs(e.prev, e, e.next) > 0 && xs(t.prev, t, t.next) > 0) + } + + function xs(e, t, n) { + return (t.y - e.y) * (n.x - t.x) - (t.x - e.x) * (n.y - t.y) + } + + function ks(e, t) { + return e.x === t.x && e.y === t.y + } + + function Es(e, t, n, i) { + const r = Ms(xs(e, t, n)), + a = Ms(xs(e, t, i)), + s = Ms(xs(n, i, e)), + o = Ms(xs(n, i, t)); + return r !== a && s !== o || (!(0 !== r || !Ss(e, n, t)) || (!(0 !== a || !Ss(e, i, t)) || (!(0 !== s || !Ss(n, e, i)) || !(0 !== o || !Ss(n, t, i))))) + } + + function Ss(e, t, n) { + return t.x <= Math.max(e.x, n.x) && t.x >= Math.min(e.x, n.x) && t.y <= Math.max(e.y, n.y) && t.y >= Math.min(e.y, n.y) + } + + function Ms(e) { + return e > 0 ? 1 : e < 0 ? -1 : 0 + } + + function Ts(e, t) { + return xs(e.prev, e, e.next) < 0 ? xs(e, t, e.next) >= 0 && xs(e, e.prev, t) >= 0 : xs(e, t, e.prev) < 0 || xs(e, e.next, t) < 0 + } + + function _s(e, t) { + const n = new Is(e.i, e.x, e.y), + i = new Is(t.i, t.x, t.y), + r = e.next, + a = t.prev; + return e.next = t, t.prev = e, n.next = r, r.prev = n, i.next = n, n.prev = i, a.next = i, i.prev = a, i + } + + function Cs(e, t, n, i) { + const r = new Is(e, t, n); + return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r), r + } + + function Ps(e) { + e.next.prev = e.prev, e.prev.next = e.next, e.prevZ && (e.prevZ.nextZ = e.nextZ), e.nextZ && (e.nextZ.prevZ = e.prevZ) + } + + function Is(e, t, n) { + this.i = e, this.x = t, this.y = n, this.prev = null, this.next = null, this.z = 0, this.prevZ = null, this.nextZ = null, this.steiner = !1 + } + class Rs { + static area(e) { + const t = e.length; + let n = 0; + for (let i = t - 1, r = 0; r < t; i = r++) n += e[i].x * e[r].y - e[r].x * e[i].y; + return .5 * n + } + static isClockWise(e) { + return Rs.area(e) < 0 + } + static triangulateShape(e, t) { + const n = [], + i = [], + r = []; + Ls(e), Ds(n, e); + let a = e.length; + t.forEach(Ls); + for (let e = 0; e < t.length; e++) i.push(a), a += t[e].length, Ds(n, t[e]); + const s = os.triangulate(n, i); + for (let e = 0; e < s.length; e += 3) r.push(s.slice(e, e + 3)); + return r + } + } + + function Ls(e) { + const t = e.length; + t > 2 && e[t - 1].equals(e[0]) && e.pop() + } + + function Ds(e, t) { + for (let n = 0; n < t.length; n++) e.push(t[n].x), e.push(t[n].y) + } + class Ns extends sr { + constructor(e = 1, t = 1, n = 1, i = 1) { + super(), this.type = "PlaneGeometry", this.parameters = { + width: e, + height: t, + widthSegments: n, + heightSegments: i + }; + const r = e / 2, + a = t / 2, + s = Math.floor(n), + o = Math.floor(i), + l = s + 1, + c = o + 1, + h = e / s, + d = t / o, + u = [], + p = [], + f = [], + m = []; + for (let e = 0; e < c; e++) { + const t = e * d - a; + for (let n = 0; n < l; n++) { + const i = n * h - r; + p.push(i, -t, 0), f.push(0, 0, 1), m.push(n / s), m.push(1 - e / o) + } + } + for (let e = 0; e < o; e++) + for (let t = 0; t < s; t++) { + const n = t + l * e, + i = t + l * (e + 1), + r = t + 1 + l * (e + 1), + a = t + 1 + l * e; + u.push(n, i, a), u.push(i, r, a) + } + this.setIndex(u), this.setAttribute("position", new Ji(p, 3)), this.setAttribute("normal", new Ji(f, 3)), this.setAttribute("uv", new Ji(m, 2)) + } + copy(e) { + return super.copy(e), this.parameters = Object.assign({}, e.parameters), this + } + static fromJSON(e) { + return new Ns(e.width, e.height, e.widthSegments, e.heightSegments) + } + } + class Bs extends sr { + constructor(e = new ss([new jt(0, .5), new jt(-.5, -.5), new jt(.5, -.5)]), t = 12) { + super(), this.type = "ShapeGeometry", this.parameters = { + shapes: e, + curveSegments: t + }; + const n = [], + i = [], + r = [], + a = []; + let s = 0, + o = 0; + if (!1 === Array.isArray(e)) l(e); + else + for (let t = 0; t < e.length; t++) l(e[t]), this.addGroup(s, o, t), s += o, o = 0; + + function l(e) { + const s = i.length / 3, + l = e.extractPoints(t); + let c = l.shape; + const h = l.holes; + !1 === Rs.isClockWise(c) && (c = c.reverse()); + for (let e = 0, t = h.length; e < t; e++) { + const t = h[e]; + !0 === Rs.isClockWise(t) && (h[e] = t.reverse()) + } + const d = Rs.triangulateShape(c, h); + for (let e = 0, t = h.length; e < t; e++) { + const t = h[e]; + c = c.concat(t) + } + for (let e = 0, t = c.length; e < t; e++) { + const t = c[e]; + i.push(t.x, t.y, 0), r.push(0, 0, 1), a.push(t.x, t.y) + } + for (let e = 0, t = d.length; e < t; e++) { + const t = d[e], + i = t[0] + s, + r = t[1] + s, + a = t[2] + s; + n.push(i, r, a), o += 3 + } + } + this.setIndex(n), this.setAttribute("position", new Ji(i, 3)), this.setAttribute("normal", new Ji(r, 3)), this.setAttribute("uv", new Ji(a, 2)) + } + copy(e) { + return super.copy(e), this.parameters = Object.assign({}, e.parameters), this + } + toJSON() { + const e = super.toJSON(); + return function(e, t) { + if (t.shapes = [], Array.isArray(e)) + for (let n = 0, i = e.length; n < i; n++) { + const i = e[n]; + t.shapes.push(i.uuid) + } else t.shapes.push(e.uuid); + return t + }(this.parameters.shapes, e) + } + static fromJSON(e, t) { + const n = []; + for (let i = 0, r = e.shapes.length; i < r; i++) { + const r = t[e.shapes[i]]; + n.push(r) + } + return new Bs(n, e.curveSegments) + } + } + class Us extends sr { + constructor(e = 1, t = 32, n = 16, i = 0, r = 2 * Math.PI, a = 0, s = Math.PI) { + super(), this.type = "SphereGeometry", this.parameters = { + radius: e, + widthSegments: t, + heightSegments: n, + phiStart: i, + phiLength: r, + thetaStart: a, + thetaLength: s + }, t = Math.max(3, Math.floor(t)), n = Math.max(2, Math.floor(n)); + const o = Math.min(a + s, Math.PI); + let l = 0; + const c = [], + h = new yn, + d = new yn, + u = [], + p = [], + f = [], + m = []; + for (let u = 0; u <= n; u++) { + const g = [], + v = u / n; + let w = 0; + 0 === u && 0 === a ? w = .5 / t : u === n && o === Math.PI && (w = -.5 / t); + for (let n = 0; n <= t; n++) { + const o = n / t; + h.x = -e * Math.cos(i + o * r) * Math.sin(a + v * s), h.y = e * Math.cos(a + v * s), h.z = e * Math.sin(i + o * r) * Math.sin(a + v * s), p.push(h.x, h.y, h.z), d.copy(h).normalize(), f.push(d.x, d.y, d.z), m.push(o + w, 1 - v), g.push(l++) + } + c.push(g) + } + for (let e = 0; e < n; e++) + for (let i = 0; i < t; i++) { + const t = c[e][i + 1], + r = c[e][i], + s = c[e + 1][i], + l = c[e + 1][i + 1]; + (0 !== e || a > 0) && u.push(t, r, l), (e !== n - 1 || o < Math.PI) && u.push(r, s, l) + } + this.setIndex(u), this.setAttribute("position", new Ji(p, 3)), this.setAttribute("normal", new Ji(f, 3)), this.setAttribute("uv", new Ji(m, 2)) + } + copy(e) { + return super.copy(e), this.parameters = Object.assign({}, e.parameters), this + } + static fromJSON(e) { + return new Us(e.radius, e.widthSegments, e.heightSegments, e.phiStart, e.phiLength, e.thetaStart, e.thetaLength) + } + } + class zs extends Gi { + constructor(e) { + super(), this.isMeshStandardMaterial = !0, this.type = "MeshStandardMaterial", this.defines = { + STANDARD: "" + }, this.color = new Wi(16777215), this.roughness = 1, this.metalness = 0, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Wi(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new jt(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapRotation = new ai, this.envMapIntensity = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.flatShading = !1, this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.defines = { + STANDARD: "" + }, this.color.copy(e.color), this.roughness = e.roughness, this.metalness = e.metalness, this.map = e.map, this.lightMap = e.lightMap, this.lightMapIntensity = e.lightMapIntensity, this.aoMap = e.aoMap, this.aoMapIntensity = e.aoMapIntensity, this.emissive.copy(e.emissive), this.emissiveMap = e.emissiveMap, this.emissiveIntensity = e.emissiveIntensity, this.bumpMap = e.bumpMap, this.bumpScale = e.bumpScale, this.normalMap = e.normalMap, this.normalMapType = e.normalMapType, this.normalScale.copy(e.normalScale), this.displacementMap = e.displacementMap, this.displacementScale = e.displacementScale, this.displacementBias = e.displacementBias, this.roughnessMap = e.roughnessMap, this.metalnessMap = e.metalnessMap, this.alphaMap = e.alphaMap, this.envMap = e.envMap, this.envMapRotation.copy(e.envMapRotation), this.envMapIntensity = e.envMapIntensity, this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this.wireframeLinecap = e.wireframeLinecap, this.wireframeLinejoin = e.wireframeLinejoin, this.flatShading = e.flatShading, this.fog = e.fog, this + } + } + class Os extends zs { + constructor(e) { + super(), this.isMeshPhysicalMaterial = !0, this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.type = "MeshPhysicalMaterial", this.anisotropyRotation = 0, this.anisotropyMap = null, this.clearcoatMap = null, this.clearcoatRoughness = 0, this.clearcoatRoughnessMap = null, this.clearcoatNormalScale = new jt(1, 1), this.clearcoatNormalMap = null, this.ior = 1.5, Object.defineProperty(this, "reflectivity", { + get: function() { + return Ot(2.5 * (this.ior - 1) / (this.ior + 1), 0, 1) + }, + set: function(e) { + this.ior = (1 + .4 * e) / (1 - .4 * e) + } + }), this.iridescenceMap = null, this.iridescenceIOR = 1.3, this.iridescenceThicknessRange = [100, 400], this.iridescenceThicknessMap = null, this.sheenColor = new Wi(0), this.sheenColorMap = null, this.sheenRoughness = 1, this.sheenRoughnessMap = null, this.transmissionMap = null, this.thickness = 0, this.thicknessMap = null, this.attenuationDistance = 1 / 0, this.attenuationColor = new Wi(1, 1, 1), this.specularIntensity = 1, this.specularIntensityMap = null, this.specularColor = new Wi(1, 1, 1), this.specularColorMap = null, this._anisotropy = 0, this._clearcoat = 0, this._dispersion = 0, this._iridescence = 0, this._sheen = 0, this._transmission = 0, this.setValues(e) + } + get anisotropy() { + return this._anisotropy + } + set anisotropy(e) { + this._anisotropy > 0 != e > 0 && this.version++, this._anisotropy = e + } + get clearcoat() { + return this._clearcoat + } + set clearcoat(e) { + this._clearcoat > 0 != e > 0 && this.version++, this._clearcoat = e + } + get iridescence() { + return this._iridescence + } + set iridescence(e) { + this._iridescence > 0 != e > 0 && this.version++, this._iridescence = e + } + get dispersion() { + return this._dispersion + } + set dispersion(e) { + this._dispersion > 0 != e > 0 && this.version++, this._dispersion = e + } + get sheen() { + return this._sheen + } + set sheen(e) { + this._sheen > 0 != e > 0 && this.version++, this._sheen = e + } + get transmission() { + return this._transmission + } + set transmission(e) { + this._transmission > 0 != e > 0 && this.version++, this._transmission = e + } + copy(e) { + return super.copy(e), this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.anisotropy = e.anisotropy, this.anisotropyRotation = e.anisotropyRotation, this.anisotropyMap = e.anisotropyMap, this.clearcoat = e.clearcoat, this.clearcoatMap = e.clearcoatMap, this.clearcoatRoughness = e.clearcoatRoughness, this.clearcoatRoughnessMap = e.clearcoatRoughnessMap, this.clearcoatNormalMap = e.clearcoatNormalMap, this.clearcoatNormalScale.copy(e.clearcoatNormalScale), this.dispersion = e.dispersion, this.ior = e.ior, this.iridescence = e.iridescence, this.iridescenceMap = e.iridescenceMap, this.iridescenceIOR = e.iridescenceIOR, this.iridescenceThicknessRange = [...e.iridescenceThicknessRange], this.iridescenceThicknessMap = e.iridescenceThicknessMap, this.sheen = e.sheen, this.sheenColor.copy(e.sheenColor), this.sheenColorMap = e.sheenColorMap, this.sheenRoughness = e.sheenRoughness, this.sheenRoughnessMap = e.sheenRoughnessMap, this.transmission = e.transmission, this.transmissionMap = e.transmissionMap, this.thickness = e.thickness, this.thicknessMap = e.thicknessMap, this.attenuationDistance = e.attenuationDistance, this.attenuationColor.copy(e.attenuationColor), this.specularIntensity = e.specularIntensity, this.specularIntensityMap = e.specularIntensityMap, this.specularColor.copy(e.specularColor), this.specularColorMap = e.specularColorMap, this + } + } + class Fs extends Gi { + constructor(e) { + super(), this.isMeshLambertMaterial = !0, this.type = "MeshLambertMaterial", this.color = new Wi(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Wi(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new jt(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.envMapRotation = new ai, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.flatShading = !1, this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.color.copy(e.color), this.map = e.map, this.lightMap = e.lightMap, this.lightMapIntensity = e.lightMapIntensity, this.aoMap = e.aoMap, this.aoMapIntensity = e.aoMapIntensity, this.emissive.copy(e.emissive), this.emissiveMap = e.emissiveMap, this.emissiveIntensity = e.emissiveIntensity, this.bumpMap = e.bumpMap, this.bumpScale = e.bumpScale, this.normalMap = e.normalMap, this.normalMapType = e.normalMapType, this.normalScale.copy(e.normalScale), this.displacementMap = e.displacementMap, this.displacementScale = e.displacementScale, this.displacementBias = e.displacementBias, this.specularMap = e.specularMap, this.alphaMap = e.alphaMap, this.envMap = e.envMap, this.envMapRotation.copy(e.envMapRotation), this.combine = e.combine, this.reflectivity = e.reflectivity, this.refractionRatio = e.refractionRatio, this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this.wireframeLinecap = e.wireframeLinecap, this.wireframeLinejoin = e.wireframeLinejoin, this.flatShading = e.flatShading, this.fog = e.fog, this + } + } + class Ws extends Gi { + constructor(e) { + super(), this.isMeshDepthMaterial = !0, this.type = "MeshDepthMaterial", this.depthPacking = 3200, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.setValues(e) + } + copy(e) { + return super.copy(e), this.depthPacking = e.depthPacking, this.map = e.map, this.alphaMap = e.alphaMap, this.displacementMap = e.displacementMap, this.displacementScale = e.displacementScale, this.displacementBias = e.displacementBias, this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this + } + } + class Vs extends Gi { + constructor(e) { + super(), this.isMeshDistanceMaterial = !0, this.type = "MeshDistanceMaterial", this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.map = e.map, this.alphaMap = e.alphaMap, this.displacementMap = e.displacementMap, this.displacementScale = e.displacementScale, this.displacementBias = e.displacementBias, this + } + } + + function Hs(e, t, n) { + return !e || !n && e.constructor === t ? e : "number" == typeof t.BYTES_PER_ELEMENT ? new t(e) : Array.prototype.slice.call(e) + } + + function Gs(e) { + return ArrayBuffer.isView(e) && !(e instanceof DataView) + } + + function js(e) { + const t = e.length, + n = new Array(t); + for (let e = 0; e !== t; ++e) n[e] = e; + return n.sort((function(t, n) { + return e[t] - e[n] + })), n + } + + function Qs(e, t, n) { + const i = e.length, + r = new e.constructor(i); + for (let a = 0, s = 0; s !== i; ++a) { + const i = n[a] * t; + for (let n = 0; n !== t; ++n) r[s++] = e[i + n] + } + return r + } + + function Ys(e, t, n, i) { + let r = 1, + a = e[0]; + for (; void 0 !== a && void 0 === a[i];) a = e[r++]; + if (void 0 === a) return; + let s = a[i]; + if (void 0 !== s) + if (Array.isArray(s)) + do { + s = a[i], void 0 !== s && (t.push(a.time), n.push(...s)), a = e[r++] + } while (void 0 !== a); + else if (void 0 !== s.toArray) + do { + s = a[i], void 0 !== s && (t.push(a.time), s.toArray(n, n.length)), a = e[r++] + } while (void 0 !== a); + else + do { + s = a[i], void 0 !== s && (t.push(a.time), n.push(s)), a = e[r++] + } while (void 0 !== a) + } + class Ks { + constructor(e, t, n, i) { + this.parameterPositions = e, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new t.constructor(n), this.sampleValues = t, this.valueSize = n, this.settings = null, this.DefaultSettings_ = {} + } + evaluate(e) { + const t = this.parameterPositions; + let n = this._cachedIndex, + i = t[n], + r = t[n - 1]; + e: { + t: { + let a;n: { + i: if (!(e < i)) { + for (let a = n + 2;;) { + if (void 0 === i) { + if (e < r) break i; + return n = t.length, this._cachedIndex = n, this.copySampleValue_(n - 1) + } + if (n === a) break; + if (r = i, i = t[++n], e < i) break t + } + a = t.length; + break n + }if (e >= r) break e; + { + const s = t[1]; + e < s && (n = 2, r = s); + for (let a = n - 2;;) { + if (void 0 === r) return this._cachedIndex = 0, this.copySampleValue_(0); + if (n === a) break; + if (i = r, r = t[--n - 1], e >= r) break t + } + a = n, n = 0 + } + } + for (; n < a;) { + const i = n + a >>> 1; + e < t[i] ? a = i : n = i + 1 + } + if (i = t[n], r = t[n - 1], void 0 === r) return this._cachedIndex = 0, + this.copySampleValue_(0); + if (void 0 === i) return n = t.length, + this._cachedIndex = n, + this.copySampleValue_(n - 1) + } + this._cachedIndex = n, + this.intervalChanged_(n, r, i) + } + return this.interpolate_(n, r, e, i) + } + getSettings_() { + return this.settings || this.DefaultSettings_ + } + copySampleValue_(e) { + const t = this.resultBuffer, + n = this.sampleValues, + i = this.valueSize, + r = e * i; + for (let e = 0; e !== i; ++e) t[e] = n[r + e]; + return t + } + interpolate_() { + throw new Error("call to abstract method") + } + intervalChanged_() {} + } + class qs extends Ks { + constructor(e, t, n, i) { + super(e, t, n, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0, this.DefaultSettings_ = { + endingStart: ut, + endingEnd: ut + } + } + intervalChanged_(e, t, n) { + const i = this.parameterPositions; + let r = e - 2, + a = e + 1, + s = i[r], + o = i[a]; + if (void 0 === s) switch (this.getSettings_().endingStart) { + case pt: + r = e, s = 2 * t - n; + break; + case ft: + r = i.length - 2, s = t + i[r] - i[r + 1]; + break; + default: + r = e, s = n + } + if (void 0 === o) switch (this.getSettings_().endingEnd) { + case pt: + a = e, o = 2 * n - t; + break; + case ft: + a = 1, o = n + i[1] - i[0]; + break; + default: + a = e - 1, o = t + } + const l = .5 * (n - t), + c = this.valueSize; + this._weightPrev = l / (t - s), this._weightNext = l / (o - n), this._offsetPrev = r * c, this._offsetNext = a * c + } + interpolate_(e, t, n, i) { + const r = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + o = e * s, + l = o - s, + c = this._offsetPrev, + h = this._offsetNext, + d = this._weightPrev, + u = this._weightNext, + p = (n - t) / (i - t), + f = p * p, + m = f * p, + g = -d * m + 2 * d * f - d * p, + v = (1 + d) * m + (-1.5 - 2 * d) * f + (-.5 + d) * p + 1, + w = (-1 - u) * m + (1.5 + u) * f + .5 * p, + y = u * m - u * f; + for (let e = 0; e !== s; ++e) r[e] = g * a[c + e] + v * a[l + e] + w * a[o + e] + y * a[h + e]; + return r + } + } + class Xs extends Ks { + constructor(e, t, n, i) { + super(e, t, n, i) + } + interpolate_(e, t, n, i) { + const r = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + o = e * s, + l = o - s, + c = (n - t) / (i - t), + h = 1 - c; + for (let e = 0; e !== s; ++e) r[e] = a[l + e] * h + a[o + e] * c; + return r + } + } + class Zs extends Ks { + constructor(e, t, n, i) { + super(e, t, n, i) + } + interpolate_(e) { + return this.copySampleValue_(e - 1) + } + } + class Js { + constructor(e, t, n, i) { + if (void 0 === e) throw new Error("THREE.KeyframeTrack: track name is undefined"); + if (void 0 === t || 0 === t.length) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + e); + this.name = e, this.times = Hs(t, this.TimeBufferType), this.values = Hs(n, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation) + } + static toJSON(e) { + const t = e.constructor; + let n; + if (t.toJSON !== this.toJSON) n = t.toJSON(e); + else { + n = { + name: e.name, + times: Hs(e.times, Array), + values: Hs(e.values, Array) + }; + const t = e.getInterpolation(); + t !== e.DefaultInterpolation && (n.interpolation = t) + } + return n.type = e.ValueTypeName, n + } + InterpolantFactoryMethodDiscrete(e) { + return new Zs(this.times, this.values, this.getValueSize(), e) + } + InterpolantFactoryMethodLinear(e) { + return new Xs(this.times, this.values, this.getValueSize(), e) + } + InterpolantFactoryMethodSmooth(e) { + return new qs(this.times, this.values, this.getValueSize(), e) + } + setInterpolation(e) { + let t; + switch (e) { + case ct: + t = this.InterpolantFactoryMethodDiscrete; + break; + case ht: + t = this.InterpolantFactoryMethodLinear; + break; + case dt: + t = this.InterpolantFactoryMethodSmooth + } + if (void 0 === t) { + const t = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; + if (void 0 === this.createInterpolant) { + if (e === this.DefaultInterpolation) throw new Error(t); + this.setInterpolation(this.DefaultInterpolation) + } + return console.warn("THREE.KeyframeTrack:", t), this + } + return this.createInterpolant = t, this + } + getInterpolation() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return ct; + case this.InterpolantFactoryMethodLinear: + return ht; + case this.InterpolantFactoryMethodSmooth: + return dt + } + } + getValueSize() { + return this.values.length / this.times.length + } + shift(e) { + if (0 !== e) { + const t = this.times; + for (let n = 0, i = t.length; n !== i; ++n) t[n] += e + } + return this + } + scale(e) { + if (1 !== e) { + const t = this.times; + for (let n = 0, i = t.length; n !== i; ++n) t[n] *= e + } + return this + } + trim(e, t) { + const n = this.times, + i = n.length; + let r = 0, + a = i - 1; + for (; r !== i && n[r] < e;) ++r; + for (; - 1 !== a && n[a] > t;) --a; + if (++a, 0 !== r || a !== i) { + r >= a && (a = Math.max(a, 1), r = a - 1); + const e = this.getValueSize(); + this.times = n.slice(r, a), this.values = this.values.slice(r * e, a * e) + } + return this + } + validate() { + let e = !0; + const t = this.getValueSize(); + t - Math.floor(t) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), e = !1); + const n = this.times, + i = this.values, + r = n.length; + 0 === r && (console.error("THREE.KeyframeTrack: Track is empty.", this), e = !1); + let a = null; + for (let t = 0; t !== r; t++) { + const i = n[t]; + if ("number" == typeof i && isNaN(i)) { + console.error("THREE.KeyframeTrack: Time is not a valid number.", this, t, i), e = !1; + break + } + if (null !== a && a > i) { + console.error("THREE.KeyframeTrack: Out of order keys.", this, t, i, a), e = !1; + break + } + a = i + } + if (void 0 !== i && Gs(i)) + for (let t = 0, n = i.length; t !== n; ++t) { + const n = i[t]; + if (isNaN(n)) { + console.error("THREE.KeyframeTrack: Value is not a valid number.", this, t, n), e = !1; + break + } + } + return e + } + optimize() { + const e = this.times.slice(), + t = this.values.slice(), + n = this.getValueSize(), + i = this.getInterpolation() === dt, + r = e.length - 1; + let a = 1; + for (let s = 1; s < r; ++s) { + let r = !1; + const o = e[s]; + if (o !== e[s + 1] && (1 !== s || o !== e[0])) + if (i) r = !0; + else { + const e = s * n, + i = e - n, + a = e + n; + for (let s = 0; s !== n; ++s) { + const n = t[e + s]; + if (n !== t[i + s] || n !== t[a + s]) { + r = !0; + break + } + } + } if (r) { + if (s !== a) { + e[a] = e[s]; + const i = s * n, + r = a * n; + for (let e = 0; e !== n; ++e) t[r + e] = t[i + e] + }++a + } + } + if (r > 0) { + e[a] = e[r]; + for (let e = r * n, i = a * n, s = 0; s !== n; ++s) t[i + s] = t[e + s]; + ++a + } + return a !== e.length ? (this.times = e.slice(0, a), this.values = t.slice(0, a * n)) : (this.times = e, this.values = t), this + } + clone() { + const e = this.times.slice(), + t = this.values.slice(), + n = new(0, this.constructor)(this.name, e, t); + return n.createInterpolant = this.createInterpolant, n + } + } + Js.prototype.TimeBufferType = Float32Array, Js.prototype.ValueBufferType = Float32Array, Js.prototype.DefaultInterpolation = ht; + class $s extends Js { + constructor(e, t, n) { + super(e, t, n) + } + } + $s.prototype.ValueTypeName = "bool", $s.prototype.ValueBufferType = Array, $s.prototype.DefaultInterpolation = ct, $s.prototype.InterpolantFactoryMethodLinear = void 0, $s.prototype.InterpolantFactoryMethodSmooth = void 0; + class eo extends Js {} + eo.prototype.ValueTypeName = "color"; + class to extends Js {} + to.prototype.ValueTypeName = "number"; + class no extends Ks { + constructor(e, t, n, i) { + super(e, t, n, i) + } + interpolate_(e, t, n, i) { + const r = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + o = (n - t) / (i - t); + let l = e * s; + for (let e = l + s; l !== e; l += 4) wn.slerpFlat(r, 0, a, l - s, a, l, o); + return r + } + } + class io extends Js { + InterpolantFactoryMethodLinear(e) { + return new no(this.times, this.values, this.getValueSize(), e) + } + } + io.prototype.ValueTypeName = "quaternion", io.prototype.InterpolantFactoryMethodSmooth = void 0; + class ro extends Js { + constructor(e, t, n) { + super(e, t, n) + } + } + ro.prototype.ValueTypeName = "string", ro.prototype.ValueBufferType = Array, ro.prototype.DefaultInterpolation = ct, ro.prototype.InterpolantFactoryMethodLinear = void 0, ro.prototype.InterpolantFactoryMethodSmooth = void 0; + class ao extends Js {} + ao.prototype.ValueTypeName = "vector"; + class so { + constructor(e = "", t = -1, n = [], i = 2500) { + this.name = e, this.tracks = n, this.duration = t, this.blendMode = i, this.uuid = zt(), this.duration < 0 && this.resetDuration() + } + static parse(e) { + const t = [], + n = e.tracks, + i = 1 / (e.fps || 1); + for (let e = 0, r = n.length; e !== r; ++e) t.push(oo(n[e]).scale(i)); + const r = new this(e.name, e.duration, t, e.blendMode); + return r.uuid = e.uuid, r + } + static toJSON(e) { + const t = [], + n = e.tracks, + i = { + name: e.name, + duration: e.duration, + tracks: t, + uuid: e.uuid, + blendMode: e.blendMode + }; + for (let e = 0, i = n.length; e !== i; ++e) t.push(Js.toJSON(n[e])); + return i + } + static CreateFromMorphTargetSequence(e, t, n, i) { + const r = t.length, + a = []; + for (let e = 0; e < r; e++) { + let s = [], + o = []; + s.push((e + r - 1) % r, e, (e + 1) % r), o.push(0, 1, 0); + const l = js(s); + s = Qs(s, 1, l), o = Qs(o, 1, l), i || 0 !== s[0] || (s.push(r), o.push(o[0])), a.push(new to(".morphTargetInfluences[" + t[e].name + "]", s, o).scale(1 / n)) + } + return new this(e, -1, a) + } + static findByName(e, t) { + let n = e; + if (!Array.isArray(e)) { + const t = e; + n = t.geometry && t.geometry.animations || t.animations + } + for (let e = 0; e < n.length; e++) + if (n[e].name === t) return n[e]; + return null + } + static CreateClipsFromMorphTargetSequences(e, t, n) { + const i = {}, + r = /^([\w-]*?)([\d]+)$/; + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t], + a = n.name.match(r); + if (a && a.length > 1) { + const e = a[1]; + let t = i[e]; + t || (i[e] = t = []), t.push(n) + } + } + const a = []; + for (const e in i) a.push(this.CreateFromMorphTargetSequence(e, i[e], t, n)); + return a + } + static parseAnimation(e, t) { + if (!e) return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null; + const n = function(e, t, n, i, r) { + if (0 !== n.length) { + const a = [], + s = []; + Ys(n, a, s, i), 0 !== a.length && r.push(new e(t, a, s)) + } + }, + i = [], + r = e.name || "default", + a = e.fps || 30, + s = e.blendMode; + let o = e.length || -1; + const l = e.hierarchy || []; + for (let e = 0; e < l.length; e++) { + const r = l[e].keys; + if (r && 0 !== r.length) + if (r[0].morphTargets) { + const e = {}; + let t; + for (t = 0; t < r.length; t++) + if (r[t].morphTargets) + for (let n = 0; n < r[t].morphTargets.length; n++) e[r[t].morphTargets[n]] = -1; + for (const n in e) { + const e = [], + a = []; + for (let i = 0; i !== r[t].morphTargets.length; ++i) { + const i = r[t]; + e.push(i.time), a.push(i.morphTarget === n ? 1 : 0) + } + i.push(new to(".morphTargetInfluence[" + n + "]", e, a)) + } + o = e.length * a + } else { + const a = ".bones[" + t[e].name + "]"; + n(ao, a + ".position", r, "pos", i), n(io, a + ".quaternion", r, "rot", i), n(ao, a + ".scale", r, "scl", i) + } + } + if (0 === i.length) return null; + return new this(r, o, i, s) + } + resetDuration() { + let e = 0; + for (let t = 0, n = this.tracks.length; t !== n; ++t) { + const n = this.tracks[t]; + e = Math.max(e, n.times[n.times.length - 1]) + } + return this.duration = e, this + } + trim() { + for (let e = 0; e < this.tracks.length; e++) this.tracks[e].trim(0, this.duration); + return this + } + validate() { + let e = !0; + for (let t = 0; t < this.tracks.length; t++) e = e && this.tracks[t].validate(); + return e + } + optimize() { + for (let e = 0; e < this.tracks.length; e++) this.tracks[e].optimize(); + return this + } + clone() { + const e = []; + for (let t = 0; t < this.tracks.length; t++) e.push(this.tracks[t].clone()); + return new this.constructor(this.name, this.duration, e, this.blendMode) + } + toJSON() { + return this.constructor.toJSON(this) + } + } + + function oo(e) { + if (void 0 === e.type) throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); + const t = function(e) { + switch (e.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return to; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return ao; + case "color": + return eo; + case "quaternion": + return io; + case "bool": + case "boolean": + return $s; + case "string": + return ro + } + throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + e) + }(e.type); + if (void 0 === e.times) { + const t = [], + n = []; + Ys(e.keys, t, n, "value"), e.times = t, e.values = n + } + return void 0 !== t.parse ? t.parse(e) : new t(e.name, e.times, e.values, e.interpolation) + } + const lo = { + enabled: !1, + files: {}, + add: function(e, t) { + !1 !== this.enabled && (this.files[e] = t) + }, + get: function(e) { + if (!1 !== this.enabled) return this.files[e] + }, + remove: function(e) { + delete this.files[e] + }, + clear: function() { + this.files = {} + } + }; + class co { + constructor(e, t, n) { + const i = this; + let r, a = !1, + s = 0, + o = 0; + const l = []; + this.onStart = void 0, this.onLoad = e, this.onProgress = t, this.onError = n, this.itemStart = function(e) { + o++, !1 === a && void 0 !== i.onStart && i.onStart(e, s, o), a = !0 + }, this.itemEnd = function(e) { + s++, void 0 !== i.onProgress && i.onProgress(e, s, o), s === o && (a = !1, void 0 !== i.onLoad && i.onLoad()) + }, this.itemError = function(e) { + void 0 !== i.onError && i.onError(e) + }, this.resolveURL = function(e) { + return r ? r(e) : e + }, this.setURLModifier = function(e) { + return r = e, this + }, this.addHandler = function(e, t) { + return l.push(e, t), this + }, this.removeHandler = function(e) { + const t = l.indexOf(e); + return -1 !== t && l.splice(t, 2), this + }, this.getHandler = function(e) { + for (let t = 0, n = l.length; t < n; t += 2) { + const n = l[t], + i = l[t + 1]; + if (n.global && (n.lastIndex = 0), n.test(e)) return i + } + return null + } + } + } + const ho = new co; + class uo { + constructor(e) { + this.manager = void 0 !== e ? e : ho, this.crossOrigin = "anonymous", this.withCredentials = !1, this.path = "", this.resourcePath = "", this.requestHeader = {} + } + load() {} + loadAsync(e, t) { + const n = this; + return new Promise((function(i, r) { + n.load(e, i, t, r) + })) + } + parse() {} + setCrossOrigin(e) { + return this.crossOrigin = e, this + } + setWithCredentials(e) { + return this.withCredentials = e, this + } + setPath(e) { + return this.path = e, this + } + setResourcePath(e) { + return this.resourcePath = e, this + } + setRequestHeader(e) { + return this.requestHeader = e, this + } + } + uo.DEFAULT_MATERIAL_NAME = "__DEFAULT"; + const po = {}; + class fo extends Error { + constructor(e, t) { + super(e), this.response = t + } + } + class mo extends uo { + constructor(e) { + super(e) + } + load(e, t, n, i) { + void 0 === e && (e = ""), void 0 !== this.path && (e = this.path + e), e = this.manager.resolveURL(e); + const r = lo.get(e); + if (void 0 !== r) return this.manager.itemStart(e), setTimeout((() => { + t && t(r), this.manager.itemEnd(e) + }), 0), r; + if (void 0 !== po[e]) return void po[e].push({ + onLoad: t, + onProgress: n, + onError: i + }); + po[e] = [], po[e].push({ + onLoad: t, + onProgress: n, + onError: i + }); + const a = new Request(e, { + headers: new Headers(this.requestHeader), + credentials: this.withCredentials ? "include" : "same-origin" + }), + s = this.mimeType, + o = this.responseType; + fetch(a).then((t => { + if (200 === t.status || 0 === t.status) { + if (0 === t.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), "undefined" == typeof ReadableStream || void 0 === t.body || void 0 === t.body.getReader) return t; + const n = po[e], + i = t.body.getReader(), + r = t.headers.get("X-File-Size") || t.headers.get("Content-Length"), + a = r ? parseInt(r) : 0, + s = 0 !== a; + let o = 0; + const l = new ReadableStream({ + start(e) { + ! function t() { + i.read().then((({ + done: i, + value: r + }) => { + if (i) e.close(); + else { + o += r.byteLength; + const i = new ProgressEvent("progress", { + lengthComputable: s, + loaded: o, + total: a + }); + for (let e = 0, t = n.length; e < t; e++) { + const t = n[e]; + t.onProgress && t.onProgress(i) + } + e.enqueue(r), t() + } + }), (t => { + e.error(t) + })) + }() + } + }); + return new Response(l) + } + throw new fo(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`, t) + })).then((e => { + switch (o) { + case "arraybuffer": + return e.arrayBuffer(); + case "blob": + return e.blob(); + case "document": + return e.text().then((e => (new DOMParser).parseFromString(e, s))); + case "json": + return e.json(); + default: + if (void 0 === s) return e.text(); + { + const t = /charset="?([^;"\s]*)"?/i.exec(s), + n = t && t[1] ? t[1].toLowerCase() : void 0, + i = new TextDecoder(n); + return e.arrayBuffer().then((e => i.decode(e))) + } + } + })).then((t => { + lo.add(e, t); + const n = po[e]; + delete po[e]; + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e]; + i.onLoad && i.onLoad(t) + } + })).catch((t => { + const n = po[e]; + if (void 0 === n) throw this.manager.itemError(e), t; + delete po[e]; + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e]; + i.onError && i.onError(t) + } + this.manager.itemError(e) + })).finally((() => { + this.manager.itemEnd(e) + })), this.manager.itemStart(e) + } + setResponseType(e) { + return this.responseType = e, this + } + setMimeType(e) { + return this.mimeType = e, this + } + } + class go extends uo { + constructor(e) { + super(e) + } + load(e, t, n, i) { + void 0 !== this.path && (e = this.path + e), e = this.manager.resolveURL(e); + const r = this, + a = lo.get(e); + if (void 0 !== a) return r.manager.itemStart(e), setTimeout((function() { + t && t(a), r.manager.itemEnd(e) + }), 0), a; + const s = qt("img"); + + function o() { + c(), lo.add(e, this), t && t(this), r.manager.itemEnd(e) + } + + function l(t) { + c(), i && i(t), r.manager.itemError(e), r.manager.itemEnd(e) + } + + function c() { + s.removeEventListener("load", o, !1), s.removeEventListener("error", l, !1) + } + return s.addEventListener("load", o, !1), s.addEventListener("error", l, !1), "data:" !== e.slice(0, 5) && void 0 !== this.crossOrigin && (s.crossOrigin = this.crossOrigin), r.manager.itemStart(e), s.src = e, s + } + } + class vo extends uo { + constructor(e) { + super(e) + } + load(e, t, n, i) { + const r = new un, + a = new go(this.manager); + return a.setCrossOrigin(this.crossOrigin), a.setPath(this.path), a.load(e, (function(e) { + r.image = e, r.needsUpdate = !0, void 0 !== t && t(r) + }), n, i), r + } + } + class wo extends xi { + constructor(e, t = 1) { + super(), this.isLight = !0, this.type = "Light", this.color = new Wi(e), this.intensity = t + } + dispose() {} + copy(e, t) { + return super.copy(e, t), this.color.copy(e.color), this.intensity = e.intensity, this + } + toJSON(e) { + const t = super.toJSON(e); + return t.object.color = this.color.getHex(), t.object.intensity = this.intensity, void 0 !== this.groundColor && (t.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (t.object.distance = this.distance), void 0 !== this.angle && (t.object.angle = this.angle), void 0 !== this.decay && (t.object.decay = this.decay), void 0 !== this.penumbra && (t.object.penumbra = this.penumbra), void 0 !== this.shadow && (t.object.shadow = this.shadow.toJSON()), void 0 !== this.target && (t.object.target = this.target.uuid), t + } + } + class yo extends wo { + constructor(e, t, n) { + super(e, n), this.isHemisphereLight = !0, this.type = "HemisphereLight", this.position.copy(xi.DEFAULT_UP), this.updateMatrix(), this.groundColor = new Wi(t) + } + copy(e, t) { + return super.copy(e, t), this.groundColor.copy(e.groundColor), this + } + } + const Ao = new qn, + bo = new yn, + xo = new yn; + class ko { + constructor(e) { + this.camera = e, this.intensity = 1, this.bias = 0, this.normalBias = 0, this.radius = 1, this.blurSamples = 8, this.mapSize = new jt(512, 512), this.map = null, this.mapPass = null, this.matrix = new qn, this.autoUpdate = !0, this.needsUpdate = !1, this._frustum = new ya, this._frameExtents = new jt(1, 1), this._viewportCount = 1, this._viewports = [new pn(0, 0, 1, 1)] + } + getViewportCount() { + return this._viewportCount + } + getFrustum() { + return this._frustum + } + updateMatrices(e) { + const t = this.camera, + n = this.matrix; + bo.setFromMatrixPosition(e.matrixWorld), t.position.copy(bo), xo.setFromMatrixPosition(e.target.matrixWorld), t.lookAt(xo), t.updateMatrixWorld(), Ao.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), this._frustum.setFromProjectionMatrix(Ao), n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), n.multiply(Ao) + } + getViewport(e) { + return this._viewports[e] + } + getFrameExtents() { + return this._frameExtents + } + dispose() { + this.map && this.map.dispose(), this.mapPass && this.mapPass.dispose() + } + copy(e) { + return this.camera = e.camera.clone(), this.intensity = e.intensity, this.bias = e.bias, this.radius = e.radius, this.mapSize.copy(e.mapSize), this + } + clone() { + return (new this.constructor).copy(this) + } + toJSON() { + const e = {}; + return 1 !== this.intensity && (e.intensity = this.intensity), 0 !== this.bias && (e.bias = this.bias), 0 !== this.normalBias && (e.normalBias = this.normalBias), 1 !== this.radius && (e.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (e.mapSize = this.mapSize.toArray()), e.camera = this.camera.toJSON(!1).object, delete e.camera.matrix, e + } + } + class Eo extends ko { + constructor() { + super(new Pr(50, 1, .5, 500)), this.isSpotLightShadow = !0, this.focus = 1 + } + updateMatrices(e) { + const t = this.camera, + n = 2 * Ut * e.angle * this.focus, + i = this.mapSize.width / this.mapSize.height, + r = e.distance || t.far; + n === t.fov && i === t.aspect && r === t.far || (t.fov = n, t.aspect = i, t.far = r, t.updateProjectionMatrix()), super.updateMatrices(e) + } + copy(e) { + return super.copy(e), this.focus = e.focus, this + } + } + class So extends wo { + constructor(e, t, n = 0, i = Math.PI / 3, r = 0, a = 2) { + super(e, t), this.isSpotLight = !0, this.type = "SpotLight", this.position.copy(xi.DEFAULT_UP), this.updateMatrix(), this.target = new xi, this.distance = n, this.angle = i, this.penumbra = r, this.decay = a, this.map = null, this.shadow = new Eo + } + get power() { + return this.intensity * Math.PI + } + set power(e) { + this.intensity = e / Math.PI + } + dispose() { + this.shadow.dispose() + } + copy(e, t) { + return super.copy(e, t), this.distance = e.distance, this.angle = e.angle, this.penumbra = e.penumbra, this.decay = e.decay, this.target = e.target.clone(), this.shadow = e.shadow.clone(), this + } + } + const Mo = new qn, + To = new yn, + _o = new yn; + class Co extends ko { + constructor() { + super(new Pr(90, 1, .5, 500)), this.isPointLightShadow = !0, this._frameExtents = new jt(4, 2), this._viewportCount = 6, this._viewports = [new pn(2, 1, 1, 1), new pn(0, 1, 1, 1), new pn(3, 1, 1, 1), new pn(1, 1, 1, 1), new pn(3, 0, 1, 1), new pn(1, 0, 1, 1)], this._cubeDirections = [new yn(1, 0, 0), new yn(-1, 0, 0), new yn(0, 0, 1), new yn(0, 0, -1), new yn(0, 1, 0), new yn(0, -1, 0)], this._cubeUps = [new yn(0, 1, 0), new yn(0, 1, 0), new yn(0, 1, 0), new yn(0, 1, 0), new yn(0, 0, 1), new yn(0, 0, -1)] + } + updateMatrices(e, t = 0) { + const n = this.camera, + i = this.matrix, + r = e.distance || n.far; + r !== n.far && (n.far = r, n.updateProjectionMatrix()), To.setFromMatrixPosition(e.matrixWorld), n.position.copy(To), _o.copy(n.position), _o.add(this._cubeDirections[t]), n.up.copy(this._cubeUps[t]), n.lookAt(_o), n.updateMatrixWorld(), i.makeTranslation(-To.x, -To.y, -To.z), Mo.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), this._frustum.setFromProjectionMatrix(Mo) + } + } + class Po extends wo { + constructor(e, t, n = 0, i = 2) { + super(e, t), this.isPointLight = !0, this.type = "PointLight", this.distance = n, this.decay = i, this.shadow = new Co + } + get power() { + return 4 * this.intensity * Math.PI + } + set power(e) { + this.intensity = e / (4 * Math.PI) + } + dispose() { + this.shadow.dispose() + } + copy(e, t) { + return super.copy(e, t), this.distance = e.distance, this.decay = e.decay, this.shadow = e.shadow.clone(), this + } + } + class Io extends Mr { + constructor(e = -1, t = 1, n = 1, i = -1, r = .1, a = 2e3) { + super(), this.isOrthographicCamera = !0, this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = e, this.right = t, this.top = n, this.bottom = i, this.near = r, this.far = a, this.updateProjectionMatrix() + } + copy(e, t) { + return super.copy(e, t), this.left = e.left, this.right = e.right, this.top = e.top, this.bottom = e.bottom, this.near = e.near, this.far = e.far, this.zoom = e.zoom, this.view = null === e.view ? null : Object.assign({}, e.view), this + } + setViewOffset(e, t, n, i, r, a) { + null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = !0, this.view.fullWidth = e, this.view.fullHeight = t, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = a, this.updateProjectionMatrix() + } + clearViewOffset() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + } + updateProjectionMatrix() { + const e = (this.right - this.left) / (2 * this.zoom), + t = (this.top - this.bottom) / (2 * this.zoom), + n = (this.right + this.left) / 2, + i = (this.top + this.bottom) / 2; + let r = n - e, + a = n + e, + s = i + t, + o = i - t; + if (null !== this.view && this.view.enabled) { + const e = (this.right - this.left) / this.view.fullWidth / this.zoom, + t = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + r += e * this.view.offsetX, a = r + e * this.view.width, s -= t * this.view.offsetY, o = s - t * this.view.height + } + this.projectionMatrix.makeOrthographic(r, a, s, o, this.near, this.far, this.coordinateSystem), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + } + toJSON(e) { + const t = super.toJSON(e); + return t.object.zoom = this.zoom, t.object.left = this.left, t.object.right = this.right, t.object.top = this.top, t.object.bottom = this.bottom, t.object.near = this.near, t.object.far = this.far, null !== this.view && (t.object.view = Object.assign({}, this.view)), t + } + } + class Ro extends ko { + constructor() { + super(new Io(-5, 5, 5, -5, .5, 500)), this.isDirectionalLightShadow = !0 + } + } + class Lo extends wo { + constructor(e, t) { + super(e, t), this.isDirectionalLight = !0, this.type = "DirectionalLight", this.position.copy(xi.DEFAULT_UP), this.updateMatrix(), this.target = new xi, this.shadow = new Ro + } + dispose() { + this.shadow.dispose() + } + copy(e) { + return super.copy(e), this.target = e.target.clone(), this.shadow = e.shadow.clone(), this + } + } + class Do { + static decodeText(e) { + if (console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."), "undefined" != typeof TextDecoder) return (new TextDecoder).decode(e); + let t = ""; + for (let n = 0, i = e.length; n < i; n++) t += String.fromCharCode(e[n]); + try { + return decodeURIComponent(escape(t)) + } catch (e) { + return t + } + } + static extractUrlBase(e) { + const t = e.lastIndexOf("/"); + return -1 === t ? "./" : e.slice(0, t + 1) + } + static resolveURL(e, t) { + return "string" != typeof e || "" === e ? "" : (/^https?:\/\//i.test(t) && /^\//.test(e) && (t = t.replace(/(^https?:\/\/[^\/]+).*/i, "$1")), /^(https?:)?\/\//i.test(e) || /^data:.*,.*$/i.test(e) || /^blob:.*$/i.test(e) ? e : t + e) + } + } + class No extends uo { + constructor(e) { + super(e), this.isImageBitmapLoader = !0, "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), this.options = { + premultiplyAlpha: "none" + } + } + setOptions(e) { + return this.options = e, this + } + load(e, t, n, i) { + void 0 === e && (e = ""), void 0 !== this.path && (e = this.path + e), e = this.manager.resolveURL(e); + const r = this, + a = lo.get(e); + if (void 0 !== a) return r.manager.itemStart(e), a.then ? void a.then((n => { + t && t(n), r.manager.itemEnd(e) + })).catch((e => { + i && i(e) + })) : (setTimeout((function() { + t && t(a), r.manager.itemEnd(e) + }), 0), a); + const s = {}; + s.credentials = "anonymous" === this.crossOrigin ? "same-origin" : "include", s.headers = this.requestHeader; + const o = fetch(e, s).then((function(e) { + return e.blob() + })).then((function(e) { + return createImageBitmap(e, Object.assign(r.options, { + colorSpaceConversion: "none" + })) + })).then((function(n) { + return lo.add(e, n), t && t(n), r.manager.itemEnd(e), n + })).catch((function(t) { + i && i(t), lo.remove(e), r.manager.itemError(e), r.manager.itemEnd(e) + })); + lo.add(e, o), r.manager.itemStart(e) + } + } + class Bo extends Pr { + constructor(e = []) { + super(), this.isArrayCamera = !0, this.cameras = e, this.index = 0 + } + } + const Uo = "\\[\\]\\.:\\/", + zo = new RegExp("[" + Uo + "]", "g"), + Oo = "[^" + Uo + "]", + Fo = "[^" + Uo.replace("\\.", "") + "]", + Wo = new RegExp("^" + /((?:WC+[\/:])*)/.source.replace("WC", Oo) + /(WCOD+)?/.source.replace("WCOD", Fo) + /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", Oo) + /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", Oo) + "$"), + Vo = ["material", "materials", "bones", "map"]; + class Ho { + constructor(e, t, n) { + this.path = t, this.parsedPath = n || Ho.parseTrackName(t), this.node = Ho.findNode(e, this.parsedPath.nodeName), this.rootNode = e, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound + } + static create(e, t, n) { + return e && e.isAnimationObjectGroup ? new Ho.Composite(e, t, n) : new Ho(e, t, n) + } + static sanitizeNodeName(e) { + return e.replace(/\s/g, "_").replace(zo, "") + } + static parseTrackName(e) { + const t = Wo.exec(e); + if (null === t) throw new Error("PropertyBinding: Cannot parse trackName: " + e); + const n = { + nodeName: t[2], + objectName: t[3], + objectIndex: t[4], + propertyName: t[5], + propertyIndex: t[6] + }, + i = n.nodeName && n.nodeName.lastIndexOf("."); + if (void 0 !== i && -1 !== i) { + const e = n.nodeName.substring(i + 1); - 1 !== Vo.indexOf(e) && (n.nodeName = n.nodeName.substring(0, i), n.objectName = e) + } + if (null === n.propertyName || 0 === n.propertyName.length) throw new Error("PropertyBinding: can not parse propertyName from trackName: " + e); + return n + } + static findNode(e, t) { + if (void 0 === t || "" === t || "." === t || -1 === t || t === e.name || t === e.uuid) return e; + if (e.skeleton) { + const n = e.skeleton.getBoneByName(t); + if (void 0 !== n) return n + } + if (e.children) { + const n = function(e) { + for (let i = 0; i < e.length; i++) { + const r = e[i]; + if (r.name === t || r.uuid === t) return r; + const a = n(r.children); + if (a) return a + } + return null + }, + i = n(e.children); + if (i) return i + } + return null + } + _getValue_unavailable() {} + _setValue_unavailable() {} + _getValue_direct(e, t) { + e[t] = this.targetObject[this.propertyName] + } + _getValue_array(e, t) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) e[t++] = n[i] + } + _getValue_arrayElement(e, t) { + e[t] = this.resolvedProperty[this.propertyIndex] + } + _getValue_toArray(e, t) { + this.resolvedProperty.toArray(e, t) + } + _setValue_direct(e, t) { + this.targetObject[this.propertyName] = e[t] + } + _setValue_direct_setNeedsUpdate(e, t) { + this.targetObject[this.propertyName] = e[t], this.targetObject.needsUpdate = !0 + } + _setValue_direct_setMatrixWorldNeedsUpdate(e, t) { + this.targetObject[this.propertyName] = e[t], this.targetObject.matrixWorldNeedsUpdate = !0 + } + _setValue_array(e, t) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = e[t++] + } + _setValue_array_setNeedsUpdate(e, t) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = e[t++]; + this.targetObject.needsUpdate = !0 + } + _setValue_array_setMatrixWorldNeedsUpdate(e, t) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = e[t++]; + this.targetObject.matrixWorldNeedsUpdate = !0 + } + _setValue_arrayElement(e, t) { + this.resolvedProperty[this.propertyIndex] = e[t] + } + _setValue_arrayElement_setNeedsUpdate(e, t) { + this.resolvedProperty[this.propertyIndex] = e[t], this.targetObject.needsUpdate = !0 + } + _setValue_arrayElement_setMatrixWorldNeedsUpdate(e, t) { + this.resolvedProperty[this.propertyIndex] = e[t], this.targetObject.matrixWorldNeedsUpdate = !0 + } + _setValue_fromArray(e, t) { + this.resolvedProperty.fromArray(e, t) + } + _setValue_fromArray_setNeedsUpdate(e, t) { + this.resolvedProperty.fromArray(e, t), this.targetObject.needsUpdate = !0 + } + _setValue_fromArray_setMatrixWorldNeedsUpdate(e, t) { + this.resolvedProperty.fromArray(e, t), this.targetObject.matrixWorldNeedsUpdate = !0 + } + _getValue_unbound(e, t) { + this.bind(), this.getValue(e, t) + } + _setValue_unbound(e, t) { + this.bind(), this.setValue(e, t) + } + bind() { + let e = this.node; + const t = this.parsedPath, + n = t.objectName, + i = t.propertyName; + let r = t.propertyIndex; + if (e || (e = Ho.findNode(this.rootNode, t.nodeName), this.node = e), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, !e) return void console.warn("THREE.PropertyBinding: No target node found for track: " + this.path + "."); + if (n) { + let i = t.objectIndex; + switch (n) { + case "materials": + if (!e.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + if (!e.material.materials) return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); + e = e.material.materials; + break; + case "bones": + if (!e.skeleton) return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); + e = e.skeleton.bones; + for (let t = 0; t < e.length; t++) + if (e[t].name === i) { + i = t; + break + } break; + case "map": + if ("map" in e) { + e = e.map; + break + } + if (!e.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + if (!e.material.map) return void console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.", this); + e = e.material.map; + break; + default: + if (void 0 === e[n]) return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); + e = e[n] + } + if (void 0 !== i) { + if (void 0 === e[i]) return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, e); + e = e[i] + } + } + const a = e[i]; + if (void 0 === a) { + const n = t.nodeName; + return void console.error("THREE.PropertyBinding: Trying to update property for track: " + n + "." + i + " but it wasn't found.", e) + } + let s = this.Versioning.None; + this.targetObject = e, !0 === e.isMaterial ? s = this.Versioning.NeedsUpdate : !0 === e.isObject3D && (s = this.Versioning.MatrixWorldNeedsUpdate); + let o = this.BindingType.Direct; + if (void 0 !== r) { + if ("morphTargetInfluences" === i) { + if (!e.geometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); + if (!e.geometry.morphAttributes) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); + void 0 !== e.morphTargetDictionary[r] && (r = e.morphTargetDictionary[r]) + } + o = this.BindingType.ArrayElement, this.resolvedProperty = a, this.propertyIndex = r + } else void 0 !== a.fromArray && void 0 !== a.toArray ? (o = this.BindingType.HasFromToArray, this.resolvedProperty = a) : Array.isArray(a) ? (o = this.BindingType.EntireArray, this.resolvedProperty = a) : this.propertyName = i; + this.getValue = this.GetterByBindingType[o], this.setValue = this.SetterByBindingTypeAndVersioning[o][s] + } + unbind() { + this.node = null, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound + } + } + Ho.Composite = class { + constructor(e, t, n) { + const i = n || Ho.parseTrackName(t); + this._targetGroup = e, this._bindings = e.subscribe_(t, i) + } + getValue(e, t) { + this.bind(); + const n = this._targetGroup.nCachedObjects_, + i = this._bindings[n]; + void 0 !== i && i.getValue(e, t) + } + setValue(e, t) { + const n = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i) n[i].setValue(e, t) + } + bind() { + const e = this._bindings; + for (let t = this._targetGroup.nCachedObjects_, n = e.length; t !== n; ++t) e[t].bind() + } + unbind() { + const e = this._bindings; + for (let t = this._targetGroup.nCachedObjects_, n = e.length; t !== n; ++t) e[t].unbind() + } + }, Ho.prototype.BindingType = { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, Ho.prototype.Versioning = { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, Ho.prototype.GetterByBindingType = [Ho.prototype._getValue_direct, Ho.prototype._getValue_array, Ho.prototype._getValue_arrayElement, Ho.prototype._getValue_toArray], Ho.prototype.SetterByBindingTypeAndVersioning = [ + [Ho.prototype._setValue_direct, Ho.prototype._setValue_direct_setNeedsUpdate, Ho.prototype._setValue_direct_setMatrixWorldNeedsUpdate], + [Ho.prototype._setValue_array, Ho.prototype._setValue_array_setNeedsUpdate, Ho.prototype._setValue_array_setMatrixWorldNeedsUpdate], + [Ho.prototype._setValue_arrayElement, Ho.prototype._setValue_arrayElement_setNeedsUpdate, Ho.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate], + [Ho.prototype._setValue_fromArray, Ho.prototype._setValue_fromArray_setNeedsUpdate, Ho.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate] + ]; + new Float32Array(1); + const Go = new qn; + class jo { + constructor(e, t, n = 0, i = 1 / 0) { + this.ray = new Kn(e, t), this.near = n, this.far = i, this.camera = null, this.layers = new si, this.params = { + Mesh: {}, + Line: { + threshold: 1 + }, + LOD: {}, + Points: { + threshold: 1 + }, + Sprite: {} + } + } + set(e, t) { + this.ray.set(e, t) + } + setFromCamera(e, t) { + t.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(t.matrixWorld), this.ray.direction.set(e.x, e.y, .5).unproject(t).sub(this.ray.origin).normalize(), this.camera = t) : t.isOrthographicCamera ? (this.ray.origin.set(e.x, e.y, (t.near + t.far) / (t.near - t.far)).unproject(t), this.ray.direction.set(0, 0, -1).transformDirection(t.matrixWorld), this.camera = t) : console.error("THREE.Raycaster: Unsupported camera type: " + t.type) + } + setFromXRController(e) { + return Go.identity().extractRotation(e.matrixWorld), this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(0, 0, -1).applyMatrix4(Go), this + } + intersectObject(e, t = !0, n = []) { + return Yo(e, this, n, t), n.sort(Qo), n + } + intersectObjects(e, t = !0, n = []) { + for (let i = 0, r = e.length; i < r; i++) Yo(e[i], this, n, t); + return n.sort(Qo), n + } + } + + function Qo(e, t) { + return e.distance - t.distance + } + + function Yo(e, t, n, i) { + let r = !0; + if (e.layers.test(t.layers)) { + !1 === e.raycast(t, n) && (r = !1) + } + if (!0 === r && !0 === i) { + const i = e.children; + for (let e = 0, r = i.length; e < r; e++) Yo(i[e], t, n, !0) + } + } + class Ko { + constructor(e = 1, t = 0, n = 0) { + this.radius = e, this.phi = t, this.theta = n + } + set(e, t, n) { + return this.radius = e, this.phi = t, this.theta = n, this + } + copy(e) { + return this.radius = e.radius, this.phi = e.phi, this.theta = e.theta, this + } + makeSafe() { + const e = 1e-6; + return this.phi = Ot(this.phi, e, Math.PI - e), this + } + setFromVector3(e) { + return this.setFromCartesianCoords(e.x, e.y, e.z) + } + setFromCartesianCoords(e, t, n) { + return this.radius = Math.sqrt(e * e + t * t + n * n), 0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(e, n), this.phi = Math.acos(Ot(t / this.radius, -1, 1))), this + } + clone() { + return (new this.constructor).copy(this) + } + } + class qo { + constructor() { + this.type = "ShapePath", this.color = new Wi, this.subPaths = [], this.currentPath = null + } + moveTo(e, t) { + return this.currentPath = new as, this.subPaths.push(this.currentPath), this.currentPath.moveTo(e, t), this + } + lineTo(e, t) { + return this.currentPath.lineTo(e, t), this + } + quadraticCurveTo(e, t, n, i) { + return this.currentPath.quadraticCurveTo(e, t, n, i), this + } + bezierCurveTo(e, t, n, i, r, a) { + return this.currentPath.bezierCurveTo(e, t, n, i, r, a), this + } + splineThru(e) { + return this.currentPath.splineThru(e), this + } + toShapes(e) { + function t(e, t) { + const n = t.length; + let i = !1; + for (let r = n - 1, a = 0; a < n; r = a++) { + let n = t[r], + s = t[a], + o = s.x - n.x, + l = s.y - n.y; + if (Math.abs(l) > Number.EPSILON) { + if (l < 0 && (n = t[a], o = -o, s = t[r], l = -l), e.y < n.y || e.y > s.y) continue; + if (e.y === n.y) { + if (e.x === n.x) return !0 + } else { + const t = l * (e.x - n.x) - o * (e.y - n.y); + if (0 === t) return !0; + if (t < 0) continue; + i = !i + } + } else { + if (e.y !== n.y) continue; + if (s.x <= e.x && e.x <= n.x || n.x <= e.x && e.x <= s.x) return !0 + } + } + return i + } + const n = Rs.isClockWise, + i = this.subPaths; + if (0 === i.length) return []; + let r, a, s; + const o = []; + if (1 === i.length) return a = i[0], s = new ss, s.curves = a.curves, o.push(s), o; + let l = !n(i[0].getPoints()); + l = e ? !l : l; + const c = [], + h = []; + let d, u, p = [], + f = 0; + h[f] = void 0, p[f] = []; + for (let t = 0, s = i.length; t < s; t++) a = i[t], d = a.getPoints(), r = n(d), r = e ? !r : r, r ? (!l && h[f] && f++, h[f] = { + s: new ss, + p: d + }, h[f].s.curves = a.curves, l && f++, p[f] = []) : p[f].push({ + h: a, + p: d[0] + }); + if (!h[0]) return function(e) { + const t = []; + for (let n = 0, i = e.length; n < i; n++) { + const i = e[n], + r = new ss; + r.curves = i.curves, t.push(r) + } + return t + }(i); + if (h.length > 1) { + let e = !1, + n = 0; + for (let e = 0, t = h.length; e < t; e++) c[e] = []; + for (let i = 0, r = h.length; i < r; i++) { + const r = p[i]; + for (let a = 0; a < r.length; a++) { + const s = r[a]; + let o = !0; + for (let r = 0; r < h.length; r++) t(s.p, h[r].p) && (i !== r && n++, o ? (o = !1, c[r].push(s)) : e = !0); + o && c[i].push(s) + } + } + n > 0 && !1 === e && (p = c) + } + for (let e = 0, t = h.length; e < t; e++) { + s = h[e].s, o.push(s), u = p[e]; + for (let e = 0, t = u.length; e < t; e++) s.holes.push(u[e].h) + } + return o + } + } + class Xo extends Lt { + constructor(e, t = null) { + super(), this.object = e, this.domElement = t, this.enabled = !0, this.state = -1, this.keys = {}, this.mouseButtons = { + LEFT: null, + MIDDLE: null, + RIGHT: null + }, this.touches = { + ONE: null, + TWO: null + } + } + connect() {} + disconnect() {} + dispose() {} + update() {} + } + + function Zo(e, t, n, i) { + const r = function(e) { + switch (e) { + case pe: + case fe: + return { + byteLength: 1, components: 1 + }; + case ge: + case me: + case Ae: + return { + byteLength: 2, components: 1 + }; + case be: + case xe: + return { + byteLength: 2, components: 4 + }; + case we: + case ve: + case ye: + return { + byteLength: 4, components: 1 + }; + case Ee: + return { + byteLength: 4, components: 3 + } + } + throw new Error(`Unknown texture type ${e}.`) + }(i); + switch (n) { + case 1021: + case 1024: + return e * t; + case 1025: + return e * t * 2; + case _e: + case Ce: + return e * t / r.components * r.byteLength; + case 1030: + case Pe: + return e * t * 2 / r.components * r.byteLength; + case 1022: + return e * t * 3 / r.components * r.byteLength; + case Se: + case Ie: + return e * t * 4 / r.components * r.byteLength; + case Re: + case Le: + return Math.floor((e + 3) / 4) * Math.floor((t + 3) / 4) * 8; + case De: + case Ne: + return Math.floor((e + 3) / 4) * Math.floor((t + 3) / 4) * 16; + case Ue: + case Oe: + return Math.max(e, 16) * Math.max(t, 8) / 4; + case Be: + case ze: + return Math.max(e, 8) * Math.max(t, 8) / 2; + case Fe: + case We: + return Math.floor((e + 3) / 4) * Math.floor((t + 3) / 4) * 8; + case Ve: + case He: + return Math.floor((e + 3) / 4) * Math.floor((t + 3) / 4) * 16; + case Ge: + return Math.floor((e + 4) / 5) * Math.floor((t + 3) / 4) * 16; + case je: + return Math.floor((e + 4) / 5) * Math.floor((t + 4) / 5) * 16; + case Qe: + return Math.floor((e + 5) / 6) * Math.floor((t + 4) / 5) * 16; + case Ye: + return Math.floor((e + 5) / 6) * Math.floor((t + 5) / 6) * 16; + case Ke: + return Math.floor((e + 7) / 8) * Math.floor((t + 4) / 5) * 16; + case qe: + return Math.floor((e + 7) / 8) * Math.floor((t + 5) / 6) * 16; + case Xe: + return Math.floor((e + 7) / 8) * Math.floor((t + 7) / 8) * 16; + case Ze: + return Math.floor((e + 9) / 10) * Math.floor((t + 4) / 5) * 16; + case Je: + return Math.floor((e + 9) / 10) * Math.floor((t + 5) / 6) * 16; + case $e: + return Math.floor((e + 9) / 10) * Math.floor((t + 7) / 8) * 16; + case et: + return Math.floor((e + 9) / 10) * Math.floor((t + 9) / 10) * 16; + case tt: + return Math.floor((e + 11) / 12) * Math.floor((t + 9) / 10) * 16; + case nt: + return Math.floor((e + 11) / 12) * Math.floor((t + 11) / 12) * 16; + case it: + case rt: + case at: + return Math.ceil(e / 4) * Math.ceil(t / 4) * 16; + case 36283: + case st: + return Math.ceil(e / 4) * Math.ceil(t / 4) * 8; + case ot: + case lt: + return Math.ceil(e / 4) * Math.ceil(t / 4) * 16 + } + throw new Error(`Unable to determine texture byte length for ${n} format.`) + } + var Jo; + "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { + detail: { + revision: m + } + })), "undefined" != typeof window && (window.__THREE__ ? console.warn("WARNING: Multiple instances of Three.js being imported.") : window.__THREE__ = m), + function(e) { + e[e.ImperialUnitsEnabled = 0] = "ImperialUnitsEnabled", e[e.ResetHintEnabled = 1] = "ResetHintEnabled", e[e.GhostCarEnabled = 2] = "GhostCarEnabled", e[e.DefaultCameraMode = 3] = "DefaultCameraMode", e[e.CockpitCameraToggle = 4] = "CockpitCameraToggle", e[e.Checkpoints = 5] = "Checkpoints", e[e.Timer = 6] = "Timer", e[e.Speedometer = 7] = "Speedometer", e[e.Language = 8] = "Language", e[e.CarShadowQuality = 9] = "CarShadowQuality", e[e.TrackShadowEnabled = 10] = "TrackShadowEnabled", e[e.CloudsEnabled = 11] = "CloudsEnabled", e[e.ParticlesEnabled = 12] = "ParticlesEnabled", e[e.SkidmarksEnabled = 13] = "SkidmarksEnabled", e[e.RenderScale = 14] = "RenderScale", e[e.Antialiasing = 15] = "Antialiasing", e[e.SoundEffectVolume = 16] = "SoundEffectVolume", e[e.MusicVolume = 17] = "MusicVolume", e[e.CheckpointVolume = 18] = "CheckpointVolume" + }(Jo || (Jo = {})); + const $o = Jo; + var el, tl, nl, il, rl, al, sl, ol, ll, cl, hl = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + dl = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + tl = new WeakMap, nl = new WeakMap, il = new WeakMap, rl = new WeakMap, al = new WeakMap, sl = new WeakMap, el = new WeakSet, ol = function e(t, n) { + const i = this.context; + if (null == i) n(null); + else if (0 == t.length) n(null); + else { + const r = t[0], + a = new XMLHttpRequest; + a.open("GET", r, !0), a.responseType = "arraybuffer", a.onload = () => { + i.decodeAudioData(a.response).then((e => { + n(e) + })).catch((() => { + dl(this, el, "m", e).call(this, t.slice(1), n) + })) + }, a.send() + } + }, ll = function(e) { + var t; + let n = Math.min(Math.max(e.getSettingFloat($o.SoundEffectVolume), 0), 1); + Number.isNaN(n) && (n = 0), null == dl(this, al, "f") && null != this.context && null != this.destinationMaster ? (hl(this, al, this.context.createGain(), "f"), dl(this, al, "f").gain.value = n, dl(this, al, "f").connect(this.destinationMaster)) : null === (t = dl(this, al, "f")) || void 0 === t || t.gain.setTargetAtTime(n, 0, .1) + }, cl = function(e, t, n) { + if (t && dl(this, tl, "f").hasLoaded()) { + if (null == dl(this, il, "f")) { + const e = this.getBuffer("music"); + if (null != e && null != this.context && null != this.destinationMaster) { + const t = this.context.createBufferSource(); + t.buffer = e, t.loop = !0; + const n = this.context.createGain(); + n.gain.value = 0, t.connect(n), n.connect(this.destinationMaster), t.start(0), hl(this, il, { + source: t, + gain: n + }, "f") + } + } else { + let e = Math.min(Math.max(n.getSettingFloat($o.MusicVolume), 0), 1); + Number.isNaN(e) && (e = 0), dl(this, il, "f").gain.gain.setTargetAtTime(.25 * e, 0, .5) + } + hl(this, rl, 0, "f") + } else null != dl(this, il, "f") && (dl(this, il, "f").gain.gain.setTargetAtTime(0, 0, .5), dl(this, rl, "f") >= 5 ? (dl(this, il, "f").source.stop(), hl(this, il, null, "f")) : hl(this, rl, dl(this, rl, "f") + e, "f")) + }; + const ul = class { + constructor(e) { + el.add(this), tl.set(this, void 0), this.context = null, nl.set(this, new Map), il.set(this, null), rl.set(this, 0), al.set(this, null), sl.set(this, null), hl(this, tl, e, "f"); + try { + const e = new(window.AudioContext || window.webkitAudioContext); + if ("running" != e.state) { + const t = ["click", "contextmenu", "auxclick", "dblclick", "mousedown", "mouseup", "pointerup", "touchend", "keydown", "keyup"], + n = () => { + e.resume().catch((e => { + console.error(e) + })); + for (const e of t) window.removeEventListener(e, n) + }; + for (const e of t) window.addEventListener(e, n) + } + this.context = e + } catch (e) { + this.context = null, console.error("Failed to create audio context: ", e) + } + null != this.context ? (hl(this, sl, this.context.createGain(), "f"), dl(this, sl, "f").gain.value = 1, dl(this, sl, "f").connect(this.context.destination)) : hl(this, sl, null, "f") + } + get destinationSfx() { + return dl(this, al, "f") + } + get destinationMaster() { + return dl(this, sl, "f") + } + mute() { + null != dl(this, sl, "f") && dl(this, sl, "f").gain.setTargetAtTime(0, 0, .25) + } + unmute() { + null != dl(this, sl, "f") && dl(this, sl, "f").gain.setTargetAtTime(1, 0, .25) + } + load(e, t) { + dl(this, tl, "f").addResource(), dl(this, el, "m", ol).call(this, t, (t => { + dl(this, tl, "f").loadedResource(), null == t ? (console.warn('Audio "' + e + '" failed to load'), dl(this, nl, "f").set(e, null)) : dl(this, nl, "f").set(e, t) + })) + } + getBuffer(e) { + var t; + return null == this.context ? null : dl(this, nl, "f").has(e) && null !== (t = dl(this, nl, "f").get(e)) && void 0 !== t ? t : null + } + playUIClick() { + const e = this.getBuffer("click"); + if (null != e && null != this.context && null != this.destinationSfx) { + const t = this.context.createBufferSource(); + t.buffer = e; + const n = this.context.createGain(); + n.gain.value = .0075, t.connect(n), n.connect(this.destinationSfx), t.start(0) + } + } + refreshListener(e) { + if (null != this.context) { + const t = new yn, + n = new wn, + i = new yn; + e.camera.matrix.decompose(t, n, i); + const r = this.context.listener; + r.positionX && r.positionY && r.positionZ ? (r.positionX.value = t.x, r.positionY.value = t.y, r.positionZ.value = t.z) : r.setPosition(t.x, t.y, t.z); + const a = new yn(0, 0, -1); + a.applyQuaternion(n); + const s = new yn(0, 1, 0); + s.applyQuaternion(n), r.forwardX && r.forwardY && r.forwardZ && r.upX && r.upY && r.upZ ? (r.forwardX.value = a.x, r.forwardY.value = a.y, r.forwardZ.value = a.z, r.upX.value = s.x, r.upY.value = s.y, r.upZ.value = s.z) : r.setOrientation(a.x, a.y, a.z, s.x, s.y, s.z) + } + } + update(e, t, n, i) { + this.refreshListener(n), dl(this, el, "m", ll).call(this, i), dl(this, el, "m", cl).call(this, e, t, i) + } + }; + + function pl(e, t = !1) { + const n = null !== e[0].index, + i = new Set(Object.keys(e[0].attributes)), + r = new Set(Object.keys(e[0].morphAttributes)), + a = {}, + s = {}, + o = e[0].morphTargetsRelative, + l = new sr; + let c = 0; + for (let h = 0; h < e.length; ++h) { + const d = e[h]; + let u = 0; + if (n !== (null !== d.index)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."), null; + for (const e in d.attributes) { + if (!i.has(e)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + '. All geometries must have compatible attributes; make sure "' + e + '" attribute exists among all geometries, or in none of them.'), null; + void 0 === a[e] && (a[e] = []), a[e].push(d.attributes[e]), u++ + } + if (u !== i.size) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". Make sure all geometries have the same number of attributes."), null; + if (o !== d.morphTargetsRelative) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". .morphTargetsRelative must be consistent throughout all geometries."), null; + for (const e in d.morphAttributes) { + if (!r.has(e)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". .morphAttributes must be consistent throughout all geometries."), null; + void 0 === s[e] && (s[e] = []), s[e].push(d.morphAttributes[e]) + } + if (t) { + let e; + if (n) e = d.index.count; + else { + if (void 0 === d.attributes.position) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". The geometry must have either an index or a position attribute"), null; + e = d.attributes.position.count + } + l.addGroup(c, e, h), c += e + } + } + if (n) { + let t = 0; + const n = []; + for (let i = 0; i < e.length; ++i) { + const r = e[i].index; + for (let e = 0; e < r.count; ++e) n.push(r.getX(e) + t); + t += e[i].attributes.position.count + } + l.setIndex(n) + } + for (const e in a) { + const t = fl(a[e]); + if (!t) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + e + " attribute."), null; + l.setAttribute(e, t) + } + for (const e in s) { + const t = s[e][0].length; + if (0 === t) break; + l.morphAttributes = l.morphAttributes || {}, l.morphAttributes[e] = []; + for (let n = 0; n < t; ++n) { + const t = []; + for (let i = 0; i < s[e].length; ++i) t.push(s[e][i][n]); + const i = fl(t); + if (!i) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + e + " morphAttribute."), null; + l.morphAttributes[e].push(i) + } + } + return l + } + + function fl(e) { + let t, n, i, r = -1, + a = 0; + for (let s = 0; s < e.length; ++s) { + const o = e[s]; + if (void 0 === t && (t = o.array.constructor), t !== o.array.constructor) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."), null; + if (void 0 === n && (n = o.itemSize), n !== o.itemSize) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."), null; + if (void 0 === i && (i = o.normalized), i !== o.normalized) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."), null; + if (-1 === r && (r = o.gpuType), r !== o.gpuType) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."), null; + a += o.count * n + } + const s = new t(a), + o = new qi(s, n, i); + let l = 0; + for (let t = 0; t < e.length; ++t) { + const i = e[t]; + if (i.isInterleavedBufferAttribute) { + const e = l / n; + for (let t = 0, r = i.count; t < r; t++) + for (let r = 0; r < n; r++) { + const n = i.getComponent(t, r); + o.setComponent(t + e, r, n) + } + } else s.set(i.array, l); + l += i.count * n + } + return void 0 !== r && (o.gpuType = r), o + } + + function ml(e, t = 1e-4) { + t = Math.max(t, Number.EPSILON); + const n = {}, + i = e.getIndex(), + r = e.getAttribute("position"), + a = i ? i.count : r.count; + let s = 0; + const o = Object.keys(e.attributes), + l = {}, + c = {}, + h = [], + d = ["getX", "getY", "getZ", "getW"], + u = ["setX", "setY", "setZ", "setW"]; + for (let t = 0, n = o.length; t < n; t++) { + const n = o[t], + i = e.attributes[n]; + l[n] = new i.constructor(new i.array.constructor(i.count * i.itemSize), i.itemSize, i.normalized); + const r = e.morphAttributes[n]; + r && (c[n] || (c[n] = []), r.forEach(((e, t) => { + const i = new e.array.constructor(e.count * e.itemSize); + c[n][t] = new e.constructor(i, e.itemSize, e.normalized) + }))) + } + const p = .5 * t, + f = Math.log10(1 / t), + m = Math.pow(10, f), + g = p * m; + for (let t = 0; t < a; t++) { + const r = i ? i.getX(t) : t; + let a = ""; + for (let t = 0, n = o.length; t < n; t++) { + const n = o[t], + i = e.getAttribute(n), + s = i.itemSize; + for (let e = 0; e < s; e++) a += ~~(i[d[e]](r) * m + g) + "," + } + if (a in n) h.push(n[a]); + else { + for (let t = 0, n = o.length; t < n; t++) { + const n = o[t], + i = e.getAttribute(n), + a = e.morphAttributes[n], + h = i.itemSize, + p = l[n], + f = c[n]; + for (let e = 0; e < h; e++) { + const t = d[e], + n = u[e]; + if (p[n](s, i[t](r)), a) + for (let e = 0, i = a.length; e < i; e++) f[e][n](s, a[e][t](r)) + } + } + n[a] = s, h.push(s), s++ + } + } + const v = e.clone(); + for (const t in e.attributes) { + const e = l[t]; + if (v.setAttribute(t, new e.constructor(e.array.slice(0, s * e.itemSize), e.itemSize, e.normalized)), t in c) + for (let e = 0; e < c[t].length; e++) { + const n = c[t][e]; + v.morphAttributes[t][e] = new n.constructor(n.array.slice(0, s * n.itemSize), n.itemSize, n.normalized) + } + } + return v.setIndex(h), v + } + + function gl(e, t) { + if (0 === t) return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), e; + if (2 === t || 1 === t) { + let n = e.getIndex(); + if (null === n) { + const t = [], + i = e.getAttribute("position"); + if (void 0 === i) return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), e; + for (let e = 0; e < i.count; e++) t.push(e); + e.setIndex(t), n = e.getIndex() + } + const i = n.count - 2, + r = []; + if (2 === t) + for (let e = 1; e <= i; e++) r.push(n.getX(0)), r.push(n.getX(e)), r.push(n.getX(e + 1)); + else + for (let e = 0; e < i; e++) e % 2 == 0 ? (r.push(n.getX(e)), r.push(n.getX(e + 1)), r.push(n.getX(e + 2))) : (r.push(n.getX(e + 2)), r.push(n.getX(e + 1)), r.push(n.getX(e))); + r.length / 3 !== i && console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + const a = e.clone(); + return a.setIndex(r), a.clearGroups(), a + } + return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", t), e + } + class vl extends uo { + constructor(e) { + super(e), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register((function(e) { + return new kl(e) + })), this.register((function(e) { + return new El(e) + })), this.register((function(e) { + return new Ll(e) + })), this.register((function(e) { + return new Dl(e) + })), this.register((function(e) { + return new Nl(e) + })), this.register((function(e) { + return new Ml(e) + })), this.register((function(e) { + return new Tl(e) + })), this.register((function(e) { + return new _l(e) + })), this.register((function(e) { + return new Cl(e) + })), this.register((function(e) { + return new xl(e) + })), this.register((function(e) { + return new Pl(e) + })), this.register((function(e) { + return new Sl(e) + })), this.register((function(e) { + return new Rl(e) + })), this.register((function(e) { + return new Il(e) + })), this.register((function(e) { + return new Al(e) + })), this.register((function(e) { + return new Bl(e) + })), this.register((function(e) { + return new Ul(e) + })) + } + load(e, t, n, i) { + const r = this; + let a; + if ("" !== this.resourcePath) a = this.resourcePath; + else if ("" !== this.path) { + const t = Do.extractUrlBase(e); + a = Do.resolveURL(t, this.path) + } else a = Do.extractUrlBase(e); + this.manager.itemStart(e); + const s = function(t) { + i ? i(t) : console.error(t), r.manager.itemError(e), r.manager.itemEnd(e) + }, + o = new mo(this.manager); + o.setPath(this.path), o.setResponseType("arraybuffer"), o.setRequestHeader(this.requestHeader), o.setWithCredentials(this.withCredentials), o.load(e, (function(n) { + try { + r.parse(n, a, (function(n) { + t(n), r.manager.itemEnd(e) + }), s) + } catch (e) { + s(e) + } + }), n, s) + } + setDRACOLoader(e) { + return this.dracoLoader = e, this + } + setKTX2Loader(e) { + return this.ktx2Loader = e, this + } + setMeshoptDecoder(e) { + return this.meshoptDecoder = e, this + } + register(e) { + return -1 === this.pluginCallbacks.indexOf(e) && this.pluginCallbacks.push(e), this + } + unregister(e) { + return -1 !== this.pluginCallbacks.indexOf(e) && this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e), 1), this + } + parse(e, t, n, i) { + let r; + const a = {}, + s = {}, + o = new TextDecoder; + if ("string" == typeof e) r = JSON.parse(e); + else if (e instanceof ArrayBuffer) { + if (o.decode(new Uint8Array(e, 0, 4)) === zl) { + try { + a[yl.KHR_BINARY_GLTF] = new Wl(e) + } catch (e) { + return void(i && i(e)) + } + r = JSON.parse(a[yl.KHR_BINARY_GLTF].content) + } else r = JSON.parse(o.decode(e)) + } else r = e; + if (void 0 === r.asset || r.asset.version[0] < 2) return void(i && i(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."))); + const l = new uc(r, { + path: t || this.resourcePath || "", + crossOrigin: this.crossOrigin, + requestHeader: this.requestHeader, + manager: this.manager, + ktx2Loader: this.ktx2Loader, + meshoptDecoder: this.meshoptDecoder + }); + l.fileLoader.setRequestHeader(this.requestHeader); + for (let e = 0; e < this.pluginCallbacks.length; e++) { + const t = this.pluginCallbacks[e](l); + t.name || console.error("THREE.GLTFLoader: Invalid plugin found: missing name"), s[t.name] = t, a[t.name] = !0 + } + if (r.extensionsUsed) + for (let e = 0; e < r.extensionsUsed.length; ++e) { + const t = r.extensionsUsed[e], + n = r.extensionsRequired || []; + switch (t) { + case yl.KHR_MATERIALS_UNLIT: + a[t] = new bl; + break; + case yl.KHR_DRACO_MESH_COMPRESSION: + a[t] = new Vl(r, this.dracoLoader); + break; + case yl.KHR_TEXTURE_TRANSFORM: + a[t] = new Hl; + break; + case yl.KHR_MESH_QUANTIZATION: + a[t] = new Gl; + break; + default: + n.indexOf(t) >= 0 && void 0 === s[t] && console.warn('THREE.GLTFLoader: Unknown extension "' + t + '".') + } + } + l.setExtensions(a), l.setPlugins(s), l.parse(n, i) + } + parseAsync(e, t) { + const n = this; + return new Promise((function(i, r) { + n.parse(e, t, i, r) + })) + } + } + + function wl() { + let e = {}; + return { + get: function(t) { + return e[t] + }, + add: function(t, n) { + e[t] = n + }, + remove: function(t) { + delete e[t] + }, + removeAll: function() { + e = {} + } + } + } + const yl = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", + KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", + KHR_MATERIALS_IOR: "KHR_materials_ior", + KHR_MATERIALS_SHEEN: "KHR_materials_sheen", + KHR_MATERIALS_SPECULAR: "KHR_materials_specular", + KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", + KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", + KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_MATERIALS_VOLUME: "KHR_materials_volume", + KHR_TEXTURE_BASISU: "KHR_texture_basisu", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", + EXT_MATERIALS_BUMP: "EXT_materials_bump", + EXT_TEXTURE_WEBP: "EXT_texture_webp", + EXT_TEXTURE_AVIF: "EXT_texture_avif", + EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", + EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" + }; + class Al { + constructor(e) { + this.parser = e, this.name = yl.KHR_LIGHTS_PUNCTUAL, this.cache = { + refs: {}, + uses: {} + } + } + _markDefs() { + const e = this.parser, + t = this.parser.json.nodes || []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + i.extensions && i.extensions[this.name] && void 0 !== i.extensions[this.name].light && e._addNodeRef(this.cache, i.extensions[this.name].light) + } + } + _loadLight(e) { + const t = this.parser, + n = "light:" + e; + let i = t.cache.get(n); + if (i) return i; + const r = t.json, + a = ((r.extensions && r.extensions[this.name] || {}).lights || [])[e]; + let s; + const o = new Wi(16777215); + void 0 !== a.color && o.setRGB(a.color[0], a.color[1], a.color[2], vt); + const l = void 0 !== a.range ? a.range : 0; + switch (a.type) { + case "directional": + s = new Lo(o), s.target.position.set(0, 0, -1), s.add(s.target); + break; + case "point": + s = new Po(o), s.distance = l; + break; + case "spot": + s = new So(o), s.distance = l, a.spot = a.spot || {}, a.spot.innerConeAngle = void 0 !== a.spot.innerConeAngle ? a.spot.innerConeAngle : 0, a.spot.outerConeAngle = void 0 !== a.spot.outerConeAngle ? a.spot.outerConeAngle : Math.PI / 4, s.angle = a.spot.outerConeAngle, s.penumbra = 1 - a.spot.innerConeAngle / a.spot.outerConeAngle, s.target.position.set(0, 0, -1), s.add(s.target); + break; + default: + throw new Error("THREE.GLTFLoader: Unexpected light type: " + a.type) + } + return s.position.set(0, 0, 0), sc(s, a), void 0 !== a.intensity && (s.intensity = a.intensity), s.name = t.createUniqueName(a.name || "light_" + e), i = Promise.resolve(s), t.cache.add(n, i), i + } + getDependency(e, t) { + if ("light" === e) return this._loadLight(t) + } + createNodeAttachment(e) { + const t = this, + n = this.parser, + i = n.json.nodes[e], + r = (i.extensions && i.extensions[this.name] || {}).light; + return void 0 === r ? null : this._loadLight(r).then((function(e) { + return n._getNodeRef(t.cache, r, e) + })) + } + } + class bl { + constructor() { + this.name = yl.KHR_MATERIALS_UNLIT + } + getMaterialType() { + return ji + } + extendParams(e, t, n) { + const i = []; + e.color = new Wi(1, 1, 1), e.opacity = 1; + const r = t.pbrMetallicRoughness; + if (r) { + if (Array.isArray(r.baseColorFactor)) { + const t = r.baseColorFactor; + e.color.setRGB(t[0], t[1], t[2], vt), e.opacity = t[3] + } + void 0 !== r.baseColorTexture && i.push(n.assignTexture(e, "map", r.baseColorTexture, gt)) + } + return Promise.all(i) + } + } + class xl { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_EMISSIVE_STRENGTH + } + extendMaterialParams(e, t) { + const n = this.parser.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const i = n.extensions[this.name].emissiveStrength; + return void 0 !== i && (t.emissiveIntensity = i), Promise.resolve() + } + } + class kl { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_CLEARCOAT + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + if (void 0 !== a.clearcoatFactor && (t.clearcoat = a.clearcoatFactor), void 0 !== a.clearcoatTexture && r.push(n.assignTexture(t, "clearcoatMap", a.clearcoatTexture)), void 0 !== a.clearcoatRoughnessFactor && (t.clearcoatRoughness = a.clearcoatRoughnessFactor), void 0 !== a.clearcoatRoughnessTexture && r.push(n.assignTexture(t, "clearcoatRoughnessMap", a.clearcoatRoughnessTexture)), void 0 !== a.clearcoatNormalTexture && (r.push(n.assignTexture(t, "clearcoatNormalMap", a.clearcoatNormalTexture)), void 0 !== a.clearcoatNormalTexture.scale)) { + const e = a.clearcoatNormalTexture.scale; + t.clearcoatNormalScale = new jt(e, e) + } + return Promise.all(r) + } + } + class El { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_DISPERSION + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const i = n.extensions[this.name]; + return t.dispersion = void 0 !== i.dispersion ? i.dispersion : 0, Promise.resolve() + } + } + class Sl { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_IRIDESCENCE + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + return void 0 !== a.iridescenceFactor && (t.iridescence = a.iridescenceFactor), void 0 !== a.iridescenceTexture && r.push(n.assignTexture(t, "iridescenceMap", a.iridescenceTexture)), void 0 !== a.iridescenceIor && (t.iridescenceIOR = a.iridescenceIor), void 0 === t.iridescenceThicknessRange && (t.iridescenceThicknessRange = [100, 400]), void 0 !== a.iridescenceThicknessMinimum && (t.iridescenceThicknessRange[0] = a.iridescenceThicknessMinimum), void 0 !== a.iridescenceThicknessMaximum && (t.iridescenceThicknessRange[1] = a.iridescenceThicknessMaximum), void 0 !== a.iridescenceThicknessTexture && r.push(n.assignTexture(t, "iridescenceThicknessMap", a.iridescenceThicknessTexture)), Promise.all(r) + } + } + class Ml { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_SHEEN + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = []; + t.sheenColor = new Wi(0, 0, 0), t.sheenRoughness = 0, t.sheen = 1; + const a = i.extensions[this.name]; + if (void 0 !== a.sheenColorFactor) { + const e = a.sheenColorFactor; + t.sheenColor.setRGB(e[0], e[1], e[2], vt) + } + return void 0 !== a.sheenRoughnessFactor && (t.sheenRoughness = a.sheenRoughnessFactor), void 0 !== a.sheenColorTexture && r.push(n.assignTexture(t, "sheenColorMap", a.sheenColorTexture, gt)), void 0 !== a.sheenRoughnessTexture && r.push(n.assignTexture(t, "sheenRoughnessMap", a.sheenRoughnessTexture)), Promise.all(r) + } + } + class Tl { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_TRANSMISSION + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + return void 0 !== a.transmissionFactor && (t.transmission = a.transmissionFactor), void 0 !== a.transmissionTexture && r.push(n.assignTexture(t, "transmissionMap", a.transmissionTexture)), Promise.all(r) + } + } + class _l { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_VOLUME + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + t.thickness = void 0 !== a.thicknessFactor ? a.thicknessFactor : 0, void 0 !== a.thicknessTexture && r.push(n.assignTexture(t, "thicknessMap", a.thicknessTexture)), t.attenuationDistance = a.attenuationDistance || 1 / 0; + const s = a.attenuationColor || [1, 1, 1]; + return t.attenuationColor = (new Wi).setRGB(s[0], s[1], s[2], vt), Promise.all(r) + } + } + class Cl { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_IOR + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const i = n.extensions[this.name]; + return t.ior = void 0 !== i.ior ? i.ior : 1.5, Promise.resolve() + } + } + class Pl { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_SPECULAR + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + t.specularIntensity = void 0 !== a.specularFactor ? a.specularFactor : 1, void 0 !== a.specularTexture && r.push(n.assignTexture(t, "specularIntensityMap", a.specularTexture)); + const s = a.specularColorFactor || [1, 1, 1]; + return t.specularColor = (new Wi).setRGB(s[0], s[1], s[2], vt), void 0 !== a.specularColorTexture && r.push(n.assignTexture(t, "specularColorMap", a.specularColorTexture, gt)), Promise.all(r) + } + } + class Il { + constructor(e) { + this.parser = e, this.name = yl.EXT_MATERIALS_BUMP + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + return t.bumpScale = void 0 !== a.bumpFactor ? a.bumpFactor : 1, void 0 !== a.bumpTexture && r.push(n.assignTexture(t, "bumpMap", a.bumpTexture)), Promise.all(r) + } + } + class Rl { + constructor(e) { + this.parser = e, this.name = yl.KHR_MATERIALS_ANISOTROPY + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? Os : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + return void 0 !== a.anisotropyStrength && (t.anisotropy = a.anisotropyStrength), void 0 !== a.anisotropyRotation && (t.anisotropyRotation = a.anisotropyRotation), void 0 !== a.anisotropyTexture && r.push(n.assignTexture(t, "anisotropyMap", a.anisotropyTexture)), Promise.all(r) + } + } + class Ll { + constructor(e) { + this.parser = e, this.name = yl.KHR_TEXTURE_BASISU + } + loadTexture(e) { + const t = this.parser, + n = t.json, + i = n.textures[e]; + if (!i.extensions || !i.extensions[this.name]) return null; + const r = i.extensions[this.name], + a = t.options.ktx2Loader; + if (!a) { + if (n.extensionsRequired && n.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); + return null + } + return t.loadTextureImage(e, r.source, a) + } + } + class Dl { + constructor(e) { + this.parser = e, this.name = yl.EXT_TEXTURE_WEBP, this.isSupported = null + } + loadTexture(e) { + const t = this.name, + n = this.parser, + i = n.json, + r = i.textures[e]; + if (!r.extensions || !r.extensions[t]) return null; + const a = r.extensions[t], + s = i.images[a.source]; + let o = n.textureLoader; + if (s.uri) { + const e = n.options.manager.getHandler(s.uri); + null !== e && (o = e) + } + return this.detectSupport().then((function(r) { + if (r) return n.loadTextureImage(e, a.source, o); + if (i.extensionsRequired && i.extensionsRequired.indexOf(t) >= 0) throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); + return n.loadTexture(e) + })) + } + detectSupport() { + return this.isSupported || (this.isSupported = new Promise((function(e) { + const t = new Image; + t.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA", t.onload = t.onerror = function() { + e(1 === t.height) + } + }))), this.isSupported + } + } + class Nl { + constructor(e) { + this.parser = e, this.name = yl.EXT_TEXTURE_AVIF, this.isSupported = null + } + loadTexture(e) { + const t = this.name, + n = this.parser, + i = n.json, + r = i.textures[e]; + if (!r.extensions || !r.extensions[t]) return null; + const a = r.extensions[t], + s = i.images[a.source]; + let o = n.textureLoader; + if (s.uri) { + const e = n.options.manager.getHandler(s.uri); + null !== e && (o = e) + } + return this.detectSupport().then((function(r) { + if (r) return n.loadTextureImage(e, a.source, o); + if (i.extensionsRequired && i.extensionsRequired.indexOf(t) >= 0) throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); + return n.loadTexture(e) + })) + } + detectSupport() { + return this.isSupported || (this.isSupported = new Promise((function(e) { + const t = new Image; + t.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=", t.onload = t.onerror = function() { + e(1 === t.height) + } + }))), this.isSupported + } + } + class Bl { + constructor(e) { + this.name = yl.EXT_MESHOPT_COMPRESSION, this.parser = e + } + loadBufferView(e) { + const t = this.parser.json, + n = t.bufferViews[e]; + if (n.extensions && n.extensions[this.name]) { + const e = n.extensions[this.name], + i = this.parser.getDependency("buffer", e.buffer), + r = this.parser.options.meshoptDecoder; + if (!r || !r.supported) { + if (t.extensionsRequired && t.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); + return null + } + return i.then((function(t) { + const n = e.byteOffset || 0, + i = e.byteLength || 0, + a = e.count, + s = e.byteStride, + o = new Uint8Array(t, n, i); + return r.decodeGltfBufferAsync ? r.decodeGltfBufferAsync(a, s, o, e.mode, e.filter).then((function(e) { + return e.buffer + })) : r.ready.then((function() { + const t = new ArrayBuffer(a * s); + return r.decodeGltfBuffer(new Uint8Array(t), a, s, o, e.mode, e.filter), t + })) + })) + } + return null + } + } + class Ul { + constructor(e) { + this.name = yl.EXT_MESH_GPU_INSTANCING, this.parser = e + } + createNodeMesh(e) { + const t = this.parser.json, + n = t.nodes[e]; + if (!n.extensions || !n.extensions[this.name] || void 0 === n.mesh) return null; + const i = t.meshes[n.mesh]; + for (const e of i.primitives) + if (e.mode !== Kl.TRIANGLES && e.mode !== Kl.TRIANGLE_STRIP && e.mode !== Kl.TRIANGLE_FAN && void 0 !== e.mode) return null; + const r = n.extensions[this.name].attributes, + a = [], + s = {}; + for (const e in r) a.push(this.parser.getDependency("accessor", r[e]).then((t => (s[e] = t, s[e])))); + return a.length < 1 ? null : (a.push(this.parser.createNodeMesh(e)), Promise.all(a).then((e => { + const t = e.pop(), + n = t.isGroup ? t.children : [t], + i = e[0].count, + r = []; + for (const e of n) { + const t = new qn, + n = new yn, + a = new wn, + o = new yn(1, 1, 1), + l = new ua(e.geometry, e.material, i); + for (let e = 0; e < i; e++) s.TRANSLATION && n.fromBufferAttribute(s.TRANSLATION, e), s.ROTATION && a.fromBufferAttribute(s.ROTATION, e), s.SCALE && o.fromBufferAttribute(s.SCALE, e), l.setMatrixAt(e, t.compose(n, a, o)); + for (const t in s) + if ("_COLOR_0" === t) { + const e = s[t]; + l.instanceColor = new ra(e.array, e.itemSize, e.normalized) + } else "TRANSLATION" !== t && "ROTATION" !== t && "SCALE" !== t && e.geometry.setAttribute(t, s[t]); + xi.prototype.copy.call(l, e), this.parser.assignFinalMaterial(l), r.push(l) + } + return t.isGroup ? (t.clear(), t.add(...r), t) : r[0] + }))) + } + } + const zl = "glTF", + Ol = 1313821514, + Fl = 5130562; + class Wl { + constructor(e) { + this.name = yl.KHR_BINARY_GLTF, this.content = null, this.body = null; + const t = new DataView(e, 0, 12), + n = new TextDecoder; + if (this.header = { + magic: n.decode(new Uint8Array(e.slice(0, 4))), + version: t.getUint32(4, !0), + length: t.getUint32(8, !0) + }, this.header.magic !== zl) throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + if (this.header.version < 2) throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + const i = this.header.length - 12, + r = new DataView(e, 12); + let a = 0; + for (; a < i;) { + const t = r.getUint32(a, !0); + a += 4; + const i = r.getUint32(a, !0); + if (a += 4, i === Ol) { + const i = new Uint8Array(e, 12 + a, t); + this.content = n.decode(i) + } else if (i === Fl) { + const n = 12 + a; + this.body = e.slice(n, n + t) + } + a += t + } + if (null === this.content) throw new Error("THREE.GLTFLoader: JSON content not found.") + } + } + class Vl { + constructor(e, t) { + if (!t) throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + this.name = yl.KHR_DRACO_MESH_COMPRESSION, this.json = e, this.dracoLoader = t, this.dracoLoader.preload() + } + decodePrimitive(e, t) { + const n = this.json, + i = this.dracoLoader, + r = e.extensions[this.name].bufferView, + a = e.extensions[this.name].attributes, + s = {}, + o = {}, + l = {}; + for (const e in a) { + const t = $l[e] || e.toLowerCase(); + s[t] = a[e] + } + for (const t in e.attributes) { + const i = $l[t] || t.toLowerCase(); + if (void 0 !== a[t]) { + const r = n.accessors[e.attributes[t]], + a = ql[r.componentType]; + l[i] = a.name, o[i] = !0 === r.normalized + } + } + return t.getDependency("bufferView", r).then((function(e) { + return new Promise((function(t, n) { + i.decodeDracoFile(e, (function(e) { + for (const t in e.attributes) { + const n = e.attributes[t], + i = o[t]; + void 0 !== i && (n.normalized = i) + } + t(e) + }), s, l, vt, n) + })) + })) + } + } + class Hl { + constructor() { + this.name = yl.KHR_TEXTURE_TRANSFORM + } + extendTexture(e, t) { + return void 0 !== t.texCoord && t.texCoord !== e.channel || void 0 !== t.offset || void 0 !== t.rotation || void 0 !== t.scale ? (e = e.clone(), void 0 !== t.texCoord && (e.channel = t.texCoord), void 0 !== t.offset && e.offset.fromArray(t.offset), void 0 !== t.rotation && (e.rotation = t.rotation), void 0 !== t.scale && e.repeat.fromArray(t.scale), e.needsUpdate = !0, e) : e + } + } + class Gl { + constructor() { + this.name = yl.KHR_MESH_QUANTIZATION + } + } + class jl extends Ks { + constructor(e, t, n, i) { + super(e, t, n, i) + } + copySampleValue_(e) { + const t = this.resultBuffer, + n = this.sampleValues, + i = this.valueSize, + r = e * i * 3 + i; + for (let e = 0; e !== i; e++) t[e] = n[r + e]; + return t + } + interpolate_(e, t, n, i) { + const r = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + o = 2 * s, + l = 3 * s, + c = i - t, + h = (n - t) / c, + d = h * h, + u = d * h, + p = e * l, + f = p - l, + m = -2 * u + 3 * d, + g = u - d, + v = 1 - m, + w = g - d + h; + for (let e = 0; e !== s; e++) { + const t = a[f + e + s], + n = a[f + e + o] * c, + i = a[p + e + s], + l = a[p + e] * c; + r[e] = v * t + w * n + m * i + g * l + } + return r + } + } + const Ql = new wn; + class Yl extends jl { + interpolate_(e, t, n, i) { + const r = super.interpolate_(e, t, n, i); + return Ql.fromArray(r).normalize().toArray(r), r + } + } + const Kl = { + FLOAT: 5126, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 + }, + ql = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }, + Xl = { + 9728: oe, + 9729: he, + 9984: le, + 9985: de, + 9986: ce, + 9987: ue + }, + Zl = { + 33071: ae, + 33648: se, + 10497: re + }, + Jl = { + SCALAR: 1, + VEC2: 2, + VEC3: 3, + VEC4: 4, + MAT2: 4, + MAT3: 9, + MAT4: 16 + }, + $l = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + TEXCOORD_0: "uv", + TEXCOORD_1: "uv1", + TEXCOORD_2: "uv2", + TEXCOORD_3: "uv3", + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" + }, + ec = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" + }, + tc = { + CUBICSPLINE: void 0, + LINEAR: ht, + STEP: ct + }, + nc = "OPAQUE", + ic = "MASK", + rc = "BLEND"; + + function ac(e, t, n) { + for (const i in n.extensions) void 0 === e[i] && (t.userData.gltfExtensions = t.userData.gltfExtensions || {}, t.userData.gltfExtensions[i] = n.extensions[i]) + } + + function sc(e, t) { + void 0 !== t.extras && ("object" == typeof t.extras ? Object.assign(e.userData, t.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + t.extras)) + } + + function oc(e, t) { + if (e.updateMorphTargets(), void 0 !== t.weights) + for (let n = 0, i = t.weights.length; n < i; n++) e.morphTargetInfluences[n] = t.weights[n]; + if (t.extras && Array.isArray(t.extras.targetNames)) { + const n = t.extras.targetNames; + if (e.morphTargetInfluences.length === n.length) { + e.morphTargetDictionary = {}; + for (let t = 0, i = n.length; t < i; t++) e.morphTargetDictionary[n[t]] = t + } else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.") + } + } + + function lc(e) { + let t; + const n = e.extensions && e.extensions[yl.KHR_DRACO_MESH_COMPRESSION]; + if (t = n ? "draco:" + n.bufferView + ":" + n.indices + ":" + cc(n.attributes) : e.indices + ":" + cc(e.attributes) + ":" + e.mode, void 0 !== e.targets) + for (let n = 0, i = e.targets.length; n < i; n++) t += ":" + cc(e.targets[n]); + return t + } + + function cc(e) { + let t = ""; + const n = Object.keys(e).sort(); + for (let i = 0, r = n.length; i < r; i++) t += n[i] + ":" + e[n[i]] + ";"; + return t + } + + function hc(e) { + switch (e) { + case Int8Array: + return 1 / 127; + case Uint8Array: + return 1 / 255; + case Int16Array: + return 1 / 32767; + case Uint16Array: + return 1 / 65535; + default: + throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.") + } + } + const dc = new qn; + class uc { + constructor(e = {}, t = {}) { + this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new wl, this.associations = new Map, this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { + refs: {}, + uses: {} + }, this.cameraCache = { + refs: {}, + uses: {} + }, this.lightCache = { + refs: {}, + uses: {} + }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {}; + let n = !1, + i = -1, + r = !1, + a = -1; + if ("undefined" != typeof navigator) { + const e = navigator.userAgent; + n = !0 === /^((?!chrome|android).)*safari/i.test(e); + const t = e.match(/Version\/(\d+)/); + i = n && t ? parseInt(t[1], 10) : -1, r = e.indexOf("Firefox") > -1, a = r ? e.match(/Firefox\/([0-9]+)\./)[1] : -1 + } + "undefined" == typeof createImageBitmap || n && i < 17 || r && a < 98 ? this.textureLoader = new vo(this.options.manager) : this.textureLoader = new No(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new mo(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), "use-credentials" === this.options.crossOrigin && this.fileLoader.setWithCredentials(!0) + } + setExtensions(e) { + this.extensions = e + } + setPlugins(e) { + this.plugins = e + } + parse(e, t) { + const n = this, + i = this.json, + r = this.extensions; + this.cache.removeAll(), this.nodeCache = {}, this._invokeAll((function(e) { + return e._markDefs && e._markDefs() + })), Promise.all(this._invokeAll((function(e) { + return e.beforeRoot && e.beforeRoot() + }))).then((function() { + return Promise.all([n.getDependencies("scene"), n.getDependencies("animation"), n.getDependencies("camera")]) + })).then((function(t) { + const a = { + scene: t[0][i.scene || 0], + scenes: t[0], + animations: t[1], + cameras: t[2], + asset: i.asset, + parser: n, + userData: {} + }; + return ac(r, a, i), sc(a, i), Promise.all(n._invokeAll((function(e) { + return e.afterRoot && e.afterRoot(a) + }))).then((function() { + for (const e of a.scenes) e.updateMatrixWorld(); + e(a) + })) + })).catch(t) + } + _markDefs() { + const e = this.json.nodes || [], + t = this.json.skins || [], + n = this.json.meshes || []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n].joints; + for (let t = 0, n = i.length; t < n; t++) e[i[t]].isBone = !0 + } + for (let t = 0, i = e.length; t < i; t++) { + const i = e[t]; + void 0 !== i.mesh && (this._addNodeRef(this.meshCache, i.mesh), void 0 !== i.skin && (n[i.mesh].isSkinnedMesh = !0)), void 0 !== i.camera && this._addNodeRef(this.cameraCache, i.camera) + } + } + _addNodeRef(e, t) { + void 0 !== t && (void 0 === e.refs[t] && (e.refs[t] = e.uses[t] = 0), e.refs[t]++) + } + _getNodeRef(e, t, n) { + if (e.refs[t] <= 1) return n; + const i = n.clone(), + r = (e, t) => { + const n = this.associations.get(e); + null != n && this.associations.set(t, n); + for (const [n, i] of e.children.entries()) r(i, t.children[n]) + }; + return r(n, i), i.name += "_instance_" + e.uses[t]++, i + } + _invokeOne(e) { + const t = Object.values(this.plugins); + t.push(this); + for (let n = 0; n < t.length; n++) { + const i = e(t[n]); + if (i) return i + } + return null + } + _invokeAll(e) { + const t = Object.values(this.plugins); + t.unshift(this); + const n = []; + for (let i = 0; i < t.length; i++) { + const r = e(t[i]); + r && n.push(r) + } + return n + } + getDependency(e, t) { + const n = e + ":" + t; + let i = this.cache.get(n); + if (!i) { + switch (e) { + case "scene": + i = this.loadScene(t); + break; + case "node": + i = this._invokeOne((function(e) { + return e.loadNode && e.loadNode(t) + })); + break; + case "mesh": + i = this._invokeOne((function(e) { + return e.loadMesh && e.loadMesh(t) + })); + break; + case "accessor": + i = this.loadAccessor(t); + break; + case "bufferView": + i = this._invokeOne((function(e) { + return e.loadBufferView && e.loadBufferView(t) + })); + break; + case "buffer": + i = this.loadBuffer(t); + break; + case "material": + i = this._invokeOne((function(e) { + return e.loadMaterial && e.loadMaterial(t) + })); + break; + case "texture": + i = this._invokeOne((function(e) { + return e.loadTexture && e.loadTexture(t) + })); + break; + case "skin": + i = this.loadSkin(t); + break; + case "animation": + i = this._invokeOne((function(e) { + return e.loadAnimation && e.loadAnimation(t) + })); + break; + case "camera": + i = this.loadCamera(t); + break; + default: + if (i = this._invokeOne((function(n) { + return n != this && n.getDependency && n.getDependency(e, t) + })), !i) throw new Error("Unknown type: " + e) + } + this.cache.add(n, i) + } + return i + } + getDependencies(e) { + let t = this.cache.get(e); + if (!t) { + const n = this, + i = this.json[e + ("mesh" === e ? "es" : "s")] || []; + t = Promise.all(i.map((function(t, i) { + return n.getDependency(e, i) + }))), this.cache.add(e, t) + } + return t + } + loadBuffer(e) { + const t = this.json.buffers[e], + n = this.fileLoader; + if (t.type && "arraybuffer" !== t.type) throw new Error("THREE.GLTFLoader: " + t.type + " buffer type is not supported."); + if (void 0 === t.uri && 0 === e) return Promise.resolve(this.extensions[yl.KHR_BINARY_GLTF].body); + const i = this.options; + return new Promise((function(e, r) { + n.load(Do.resolveURL(t.uri, i.path), e, void 0, (function() { + r(new Error('THREE.GLTFLoader: Failed to load buffer "' + t.uri + '".')) + })) + })) + } + loadBufferView(e) { + const t = this.json.bufferViews[e]; + return this.getDependency("buffer", t.buffer).then((function(e) { + const n = t.byteLength || 0, + i = t.byteOffset || 0; + return e.slice(i, i + n) + })) + } + loadAccessor(e) { + const t = this, + n = this.json, + i = this.json.accessors[e]; + if (void 0 === i.bufferView && void 0 === i.sparse) { + const e = Jl[i.type], + t = ql[i.componentType], + n = !0 === i.normalized, + r = new t(i.count * e); + return Promise.resolve(new qi(r, e, n)) + } + const r = []; + return void 0 !== i.bufferView ? r.push(this.getDependency("bufferView", i.bufferView)) : r.push(null), void 0 !== i.sparse && (r.push(this.getDependency("bufferView", i.sparse.indices.bufferView)), r.push(this.getDependency("bufferView", i.sparse.values.bufferView))), Promise.all(r).then((function(e) { + const r = e[0], + a = Jl[i.type], + s = ql[i.componentType], + o = s.BYTES_PER_ELEMENT, + l = o * a, + c = i.byteOffset || 0, + h = void 0 !== i.bufferView ? n.bufferViews[i.bufferView].byteStride : void 0, + d = !0 === i.normalized; + let u, p; + if (h && h !== l) { + const e = Math.floor(c / h), + n = "InterleavedBuffer:" + i.bufferView + ":" + i.componentType + ":" + e + ":" + i.count; + let l = t.cache.get(n); + l || (u = new s(r, e * h, i.count * h / o), l = new Fr(u, h / o), t.cache.add(n, l)), p = new Vr(l, a, c % h / o, d) + } else u = null === r ? new s(i.count * a) : new s(r, c, i.count * a), p = new qi(u, a, d); + if (void 0 !== i.sparse) { + const t = Jl.SCALAR, + n = ql[i.sparse.indices.componentType], + o = i.sparse.indices.byteOffset || 0, + l = i.sparse.values.byteOffset || 0, + c = new n(e[1], o, i.sparse.count * t), + h = new s(e[2], l, i.sparse.count * a); + null !== r && (p = new qi(p.array.slice(), p.itemSize, p.normalized)), p.normalized = !1; + for (let e = 0, t = c.length; e < t; e++) { + const t = c[e]; + if (p.setX(t, h[e * a]), a >= 2 && p.setY(t, h[e * a + 1]), a >= 3 && p.setZ(t, h[e * a + 2]), a >= 4 && p.setW(t, h[e * a + 3]), a >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.") + } + p.normalized = d + } + return p + })) + } + loadTexture(e) { + const t = this.json, + n = this.options, + i = t.textures[e].source, + r = t.images[i]; + let a = this.textureLoader; + if (r.uri) { + const e = n.manager.getHandler(r.uri); + null !== e && (a = e) + } + return this.loadTextureImage(e, i, a) + } + loadTextureImage(e, t, n) { + const i = this, + r = this.json, + a = r.textures[e], + s = r.images[t], + o = (s.uri || s.bufferView) + ":" + a.sampler; + if (this.textureCache[o]) return this.textureCache[o]; + const l = this.loadImageSource(t, n).then((function(t) { + t.flipY = !1, t.name = a.name || s.name || "", "" === t.name && "string" == typeof s.uri && !1 === s.uri.startsWith("data:image/") && (t.name = s.uri); + const n = (r.samplers || {})[a.sampler] || {}; + return t.magFilter = Xl[n.magFilter] || he, t.minFilter = Xl[n.minFilter] || ue, t.wrapS = Zl[n.wrapS] || re, t.wrapT = Zl[n.wrapT] || re, t.generateMipmaps = !t.isCompressedTexture && t.minFilter !== oe && t.minFilter !== he, i.associations.set(t, { + textures: e + }), t + })).catch((function() { + return null + })); + return this.textureCache[o] = l, l + } + loadImageSource(e, t) { + const n = this, + i = this.json, + r = this.options; + if (void 0 !== this.sourceCache[e]) return this.sourceCache[e].then((e => e.clone())); + const a = i.images[e], + s = self.URL || self.webkitURL; + let o = a.uri || "", + l = !1; + if (void 0 !== a.bufferView) o = n.getDependency("bufferView", a.bufferView).then((function(e) { + l = !0; + const t = new Blob([e], { + type: a.mimeType + }); + return o = s.createObjectURL(t), o + })); + else if (void 0 === a.uri) throw new Error("THREE.GLTFLoader: Image " + e + " is missing URI and bufferView"); + const c = Promise.resolve(o).then((function(e) { + return new Promise((function(n, i) { + let a = n; + !0 === t.isImageBitmapLoader && (a = function(e) { + const t = new un(e); + t.needsUpdate = !0, n(t) + }), t.load(Do.resolveURL(e, r.path), a, void 0, i) + })) + })).then((function(e) { + var t; + return !0 === l && s.revokeObjectURL(o), sc(e, a), e.userData.mimeType = a.mimeType || ((t = a.uri).search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/) ? "image/jpeg" : t.search(/\.webp($|\?)/i) > 0 || 0 === t.search(/^data\:image\/webp/) ? "image/webp" : t.search(/\.ktx2($|\?)/i) > 0 || 0 === t.search(/^data\:image\/ktx2/) ? "image/ktx2" : "image/png"), e + })).catch((function(e) { + throw console.error("THREE.GLTFLoader: Couldn't load texture", o), e + })); + return this.sourceCache[e] = c, c + } + assignTexture(e, t, n, i) { + const r = this; + return this.getDependency("texture", n.index).then((function(a) { + if (!a) return null; + if (void 0 !== n.texCoord && n.texCoord > 0 && ((a = a.clone()).channel = n.texCoord), r.extensions[yl.KHR_TEXTURE_TRANSFORM]) { + const e = void 0 !== n.extensions ? n.extensions[yl.KHR_TEXTURE_TRANSFORM] : void 0; + if (e) { + const t = r.associations.get(a); + a = r.extensions[yl.KHR_TEXTURE_TRANSFORM].extendTexture(a, e), r.associations.set(a, t) + } + } + return void 0 !== i && (a.colorSpace = i), e[t] = a, a + })) + } + assignFinalMaterial(e) { + const t = e.geometry; + let n = e.material; + const i = void 0 === t.attributes.tangent, + r = void 0 !== t.attributes.color, + a = void 0 === t.attributes.normal; + if (e.isPoints) { + const e = "PointsMaterial:" + n.uuid; + let t = this.cache.get(e); + t || (t = new Da, Gi.prototype.copy.call(t, n), t.color.copy(n.color), t.map = n.map, t.sizeAttenuation = !1, this.cache.add(e, t)), n = t + } else if (e.isLine) { + const e = "LineBasicMaterial:" + n.uuid; + let t = this.cache.get(e); + t || (t = new Aa, Gi.prototype.copy.call(t, n), t.color.copy(n.color), t.map = n.map, this.cache.add(e, t)), n = t + } + if (i || r || a) { + let e = "ClonedMaterial:" + n.uuid + ":"; + i && (e += "derivative-tangents:"), r && (e += "vertex-colors:"), a && (e += "flat-shading:"); + let t = this.cache.get(e); + t || (t = n.clone(), r && (t.vertexColors = !0), a && (t.flatShading = !0), i && (t.normalScale && (t.normalScale.y *= -1), t.clearcoatNormalScale && (t.clearcoatNormalScale.y *= -1)), this.cache.add(e, t), this.associations.set(t, this.associations.get(n))), n = t + } + e.material = n + } + getMaterialType() { + return zs + } + loadMaterial(e) { + const t = this, + n = this.json, + i = this.extensions, + r = n.materials[e]; + let a; + const s = {}, + o = []; + if ((r.extensions || {})[yl.KHR_MATERIALS_UNLIT]) { + const e = i[yl.KHR_MATERIALS_UNLIT]; + a = e.getMaterialType(), o.push(e.extendParams(s, r, t)) + } else { + const n = r.pbrMetallicRoughness || {}; + if (s.color = new Wi(1, 1, 1), s.opacity = 1, Array.isArray(n.baseColorFactor)) { + const e = n.baseColorFactor; + s.color.setRGB(e[0], e[1], e[2], vt), s.opacity = e[3] + } + void 0 !== n.baseColorTexture && o.push(t.assignTexture(s, "map", n.baseColorTexture, gt)), s.metalness = void 0 !== n.metallicFactor ? n.metallicFactor : 1, s.roughness = void 0 !== n.roughnessFactor ? n.roughnessFactor : 1, void 0 !== n.metallicRoughnessTexture && (o.push(t.assignTexture(s, "metalnessMap", n.metallicRoughnessTexture)), o.push(t.assignTexture(s, "roughnessMap", n.metallicRoughnessTexture))), a = this._invokeOne((function(t) { + return t.getMaterialType && t.getMaterialType(e) + })), o.push(Promise.all(this._invokeAll((function(t) { + return t.extendMaterialParams && t.extendMaterialParams(e, s) + })))) + }!0 === r.doubleSided && (s.side = 2); + const l = r.alphaMode || nc; + if (l === rc ? (s.transparent = !0, s.depthWrite = !1) : (s.transparent = !1, l === ic && (s.alphaTest = void 0 !== r.alphaCutoff ? r.alphaCutoff : .5)), void 0 !== r.normalTexture && a !== ji && (o.push(t.assignTexture(s, "normalMap", r.normalTexture)), s.normalScale = new jt(1, 1), void 0 !== r.normalTexture.scale)) { + const e = r.normalTexture.scale; + s.normalScale.set(e, e) + } + if (void 0 !== r.occlusionTexture && a !== ji && (o.push(t.assignTexture(s, "aoMap", r.occlusionTexture)), void 0 !== r.occlusionTexture.strength && (s.aoMapIntensity = r.occlusionTexture.strength)), void 0 !== r.emissiveFactor && a !== ji) { + const e = r.emissiveFactor; + s.emissive = (new Wi).setRGB(e[0], e[1], e[2], vt) + } + return void 0 !== r.emissiveTexture && a !== ji && o.push(t.assignTexture(s, "emissiveMap", r.emissiveTexture, gt)), Promise.all(o).then((function() { + const n = new a(s); + return r.name && (n.name = r.name), sc(n, r), t.associations.set(n, { + materials: e + }), r.extensions && ac(i, n, r), n + })) + } + createUniqueName(e) { + const t = Ho.sanitizeNodeName(e || ""); + return t in this.nodeNamesUsed ? t + "_" + ++this.nodeNamesUsed[t] : (this.nodeNamesUsed[t] = 0, t) + } + loadGeometries(e) { + const t = this, + n = this.extensions, + i = this.primitiveCache; + + function r(e) { + return n[yl.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e, t).then((function(n) { + return pc(n, e, t) + })) + } + const a = []; + for (let n = 0, s = e.length; n < s; n++) { + const s = e[n], + o = lc(s), + l = i[o]; + if (l) a.push(l.promise); + else { + let e; + e = s.extensions && s.extensions[yl.KHR_DRACO_MESH_COMPRESSION] ? r(s) : pc(new sr, s, t), i[o] = { + primitive: s, + promise: e + }, a.push(e) + } + } + return Promise.all(a) + } + loadMesh(e) { + const t = this, + n = this.json, + i = this.extensions, + r = n.meshes[e], + a = r.primitives, + s = []; + for (let e = 0, t = a.length; e < t; e++) { + const t = void 0 === a[e].material ? (void 0 === (o = this.cache).DefaultMaterial && (o.DefaultMaterial = new zs({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: !1, + depthTest: !0, + side: 0 + })), o.DefaultMaterial) : this.getDependency("material", a[e].material); + s.push(t) + } + var o; + return s.push(t.loadGeometries(a)), Promise.all(s).then((function(n) { + const s = n.slice(0, n.length - 1), + o = n[n.length - 1], + l = []; + for (let n = 0, c = o.length; n < c; n++) { + const c = o[n], + h = a[n]; + let d; + const u = s[n]; + if (h.mode === Kl.TRIANGLES || h.mode === Kl.TRIANGLE_STRIP || h.mode === Kl.TRIANGLE_FAN || void 0 === h.mode) d = !0 === r.isSkinnedMesh ? new Jr(c, u) : new wr(c, u), !0 === d.isSkinnedMesh && d.normalizeSkinWeights(), h.mode === Kl.TRIANGLE_STRIP ? d.geometry = gl(d.geometry, 1) : h.mode === Kl.TRIANGLE_FAN && (d.geometry = gl(d.geometry, 2)); + else if (h.mode === Kl.LINES) d = new Ra(c, u); + else if (h.mode === Kl.LINE_STRIP) d = new _a(c, u); + else if (h.mode === Kl.LINE_LOOP) d = new La(c, u); + else { + if (h.mode !== Kl.POINTS) throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + h.mode); + d = new Oa(c, u) + } + Object.keys(d.geometry.morphAttributes).length > 0 && oc(d, r), d.name = t.createUniqueName(r.name || "mesh_" + e), sc(d, r), h.extensions && ac(i, d, h), t.assignFinalMaterial(d), l.push(d) + } + for (let n = 0, i = l.length; n < i; n++) t.associations.set(l[n], { + meshes: e, + primitives: n + }); + if (1 === l.length) return r.extensions && ac(i, l[0], r), l[0]; + const c = new Nr; + r.extensions && ac(i, c, r), t.associations.set(c, { + meshes: e + }); + for (let e = 0, t = l.length; e < t; e++) c.add(l[e]); + return c + })) + } + loadCamera(e) { + let t; + const n = this.json.cameras[e], + i = n[n.type]; + if (i) return "perspective" === n.type ? t = new Pr(Gt.radToDeg(i.yfov), i.aspectRatio || 1, i.znear || 1, i.zfar || 2e6) : "orthographic" === n.type && (t = new Io(-i.xmag, i.xmag, i.ymag, -i.ymag, i.znear, i.zfar)), n.name && (t.name = this.createUniqueName(n.name)), sc(t, n), Promise.resolve(t); + console.warn("THREE.GLTFLoader: Missing camera parameters.") + } + loadSkin(e) { + const t = this.json.skins[e], + n = []; + for (let e = 0, i = t.joints.length; e < i; e++) n.push(this._loadNodeShallow(t.joints[e])); + return void 0 !== t.inverseBindMatrices ? n.push(this.getDependency("accessor", t.inverseBindMatrices)) : n.push(null), Promise.all(n).then((function(e) { + const n = e.pop(), + i = e, + r = [], + a = []; + for (let e = 0, s = i.length; e < s; e++) { + const s = i[e]; + if (s) { + r.push(s); + const t = new qn; + null !== n && t.fromArray(n.array, 16 * e), a.push(t) + } else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', t.joints[e]) + } + return new ia(r, a) + })) + } + loadAnimation(e) { + const t = this.json, + n = this, + i = t.animations[e], + r = i.name ? i.name : "animation_" + e, + a = [], + s = [], + o = [], + l = [], + c = []; + for (let e = 0, t = i.channels.length; e < t; e++) { + const t = i.channels[e], + n = i.samplers[t.sampler], + r = t.target, + h = r.node, + d = void 0 !== i.parameters ? i.parameters[n.input] : n.input, + u = void 0 !== i.parameters ? i.parameters[n.output] : n.output; + void 0 !== r.node && (a.push(this.getDependency("node", h)), s.push(this.getDependency("accessor", d)), o.push(this.getDependency("accessor", u)), l.push(n), c.push(r)) + } + return Promise.all([Promise.all(a), Promise.all(s), Promise.all(o), Promise.all(l), Promise.all(c)]).then((function(e) { + const t = e[0], + i = e[1], + a = e[2], + s = e[3], + o = e[4], + l = []; + for (let e = 0, r = t.length; e < r; e++) { + const r = t[e], + c = i[e], + h = a[e], + d = s[e], + u = o[e]; + if (void 0 === r) continue; + r.updateMatrix && r.updateMatrix(); + const p = n._createAnimationTracks(r, c, h, d, u); + if (p) + for (let e = 0; e < p.length; e++) l.push(p[e]) + } + return new so(r, void 0, l) + })) + } + createNodeMesh(e) { + const t = this.json, + n = this, + i = t.nodes[e]; + return void 0 === i.mesh ? null : n.getDependency("mesh", i.mesh).then((function(e) { + const t = n._getNodeRef(n.meshCache, i.mesh, e); + return void 0 !== i.weights && t.traverse((function(e) { + if (e.isMesh) + for (let t = 0, n = i.weights.length; t < n; t++) e.morphTargetInfluences[t] = i.weights[t] + })), t + })) + } + loadNode(e) { + const t = this, + n = this.json.nodes[e], + i = t._loadNodeShallow(e), + r = [], + a = n.children || []; + for (let e = 0, n = a.length; e < n; e++) r.push(t.getDependency("node", a[e])); + const s = void 0 === n.skin ? Promise.resolve(null) : t.getDependency("skin", n.skin); + return Promise.all([i, Promise.all(r), s]).then((function(e) { + const t = e[0], + n = e[1], + i = e[2]; + null !== i && t.traverse((function(e) { + e.isSkinnedMesh && e.bind(i, dc) + })); + for (let e = 0, i = n.length; e < i; e++) t.add(n[e]); + return t + })) + } + _loadNodeShallow(e) { + const t = this.json, + n = this.extensions, + i = this; + if (void 0 !== this.nodeCache[e]) return this.nodeCache[e]; + const r = t.nodes[e], + a = r.name ? i.createUniqueName(r.name) : "", + s = [], + o = i._invokeOne((function(t) { + return t.createNodeMesh && t.createNodeMesh(e) + })); + return o && s.push(o), void 0 !== r.camera && s.push(i.getDependency("camera", r.camera).then((function(e) { + return i._getNodeRef(i.cameraCache, r.camera, e) + }))), i._invokeAll((function(t) { + return t.createNodeAttachment && t.createNodeAttachment(e) + })).forEach((function(e) { + s.push(e) + })), this.nodeCache[e] = Promise.all(s).then((function(t) { + let s; + if (s = !0 === r.isBone ? new $r : t.length > 1 ? new Nr : 1 === t.length ? t[0] : new xi, s !== t[0]) + for (let e = 0, n = t.length; e < n; e++) s.add(t[e]); + if (r.name && (s.userData.name = r.name, s.name = a), sc(s, r), r.extensions && ac(n, s, r), void 0 !== r.matrix) { + const e = new qn; + e.fromArray(r.matrix), s.applyMatrix4(e) + } else void 0 !== r.translation && s.position.fromArray(r.translation), void 0 !== r.rotation && s.quaternion.fromArray(r.rotation), void 0 !== r.scale && s.scale.fromArray(r.scale); + return i.associations.has(s) || i.associations.set(s, {}), i.associations.get(s).nodes = e, s + })), this.nodeCache[e] + } + loadScene(e) { + const t = this.extensions, + n = this.json.scenes[e], + i = this, + r = new Nr; + n.name && (r.name = i.createUniqueName(n.name)), sc(r, n), n.extensions && ac(t, r, n); + const a = n.nodes || [], + s = []; + for (let e = 0, t = a.length; e < t; e++) s.push(i.getDependency("node", a[e])); + return Promise.all(s).then((function(e) { + for (let t = 0, n = e.length; t < n; t++) r.add(e[t]); + return i.associations = (e => { + const t = new Map; + for (const [e, n] of i.associations)(e instanceof Gi || e instanceof un) && t.set(e, n); + return e.traverse((e => { + const n = i.associations.get(e); + null != n && t.set(e, n) + })), t + })(r), r + })) + } + _createAnimationTracks(e, t, n, i, r) { + const a = [], + s = e.name ? e.name : e.uuid, + o = []; + let l; + switch (ec[r.path] === ec.weights ? e.traverse((function(e) { + e.morphTargetInfluences && o.push(e.name ? e.name : e.uuid) + })) : o.push(s), ec[r.path]) { + case ec.weights: + l = to; + break; + case ec.rotation: + l = io; + break; + case ec.position: + case ec.scale: + l = ao; + break; + default: + if (1 === n.itemSize) l = to; + else l = ao + } + const c = void 0 !== i.interpolation ? tc[i.interpolation] : ht, + h = this._getArrayFromAccessor(n); + for (let e = 0, n = o.length; e < n; e++) { + const n = new l(o[e] + "." + ec[r.path], t.array, h, c); + "CUBICSPLINE" === i.interpolation && this._createCubicSplineTrackInterpolant(n), a.push(n) + } + return a + } + _getArrayFromAccessor(e) { + let t = e.array; + if (e.normalized) { + const e = hc(t.constructor), + n = new Float32Array(t.length); + for (let i = 0, r = t.length; i < r; i++) n[i] = t[i] * e; + t = n + } + return t + } + _createCubicSplineTrackInterpolant(e) { + e.createInterpolant = function(e) { + return new(this instanceof io ? Yl : jl)(this.times, this.values, this.getValueSize() / 3, e) + }, e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0 + } + } + + function pc(e, t, n) { + const i = t.attributes, + r = []; + + function a(t, i) { + return n.getDependency("accessor", t).then((function(t) { + e.setAttribute(i, t) + })) + } + for (const t in i) { + const n = $l[t] || t.toLowerCase(); + n in e.attributes || r.push(a(i[t], n)) + } + if (void 0 !== t.indices && !e.index) { + const i = n.getDependency("accessor", t.indices).then((function(t) { + e.setIndex(t) + })); + r.push(i) + } + return nn.workingColorSpace !== vt && "COLOR_0" in i && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${nn.workingColorSpace}" not supported.`), sc(e, t), + function(e, t, n) { + const i = t.attributes, + r = new xn; + if (void 0 === i.POSITION) return; + { + const e = n.json.accessors[i.POSITION], + t = e.min, + a = e.max; + if (void 0 === t || void 0 === a) return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + if (r.set(new yn(t[0], t[1], t[2]), new yn(a[0], a[1], a[2])), e.normalized) { + const t = hc(ql[e.componentType]); + r.min.multiplyScalar(t), r.max.multiplyScalar(t) + } + } + const a = t.targets; + if (void 0 !== a) { + const e = new yn, + t = new yn; + for (let i = 0, r = a.length; i < r; i++) { + const r = a[i]; + if (void 0 !== r.POSITION) { + const i = n.json.accessors[r.POSITION], + a = i.min, + s = i.max; + if (void 0 !== a && void 0 !== s) { + if (t.setX(Math.max(Math.abs(a[0]), Math.abs(s[0]))), t.setY(Math.max(Math.abs(a[1]), Math.abs(s[1]))), t.setZ(Math.max(Math.abs(a[2]), Math.abs(s[2]))), i.normalized) { + const e = hc(ql[i.componentType]); + t.multiplyScalar(e) + } + e.max(t) + } else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") + } + } + r.expandByVector(e) + } + e.boundingBox = r; + const s = new Fn; + r.getCenter(s.center), s.radius = r.min.distanceTo(r.max) / 2, e.boundingSphere = s + }(e, t, n), Promise.all(r).then((function() { + return void 0 !== t.targets ? function(e, t, n) { + let i = !1, + r = !1, + a = !1; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e]; + if (void 0 !== n.POSITION && (i = !0), void 0 !== n.NORMAL && (r = !0), void 0 !== n.COLOR_0 && (a = !0), i && r && a) break + } + if (!i && !r && !a) return Promise.resolve(e); + const s = [], + o = [], + l = []; + for (let c = 0, h = t.length; c < h; c++) { + const h = t[c]; + if (i) { + const t = void 0 !== h.POSITION ? n.getDependency("accessor", h.POSITION) : e.attributes.position; + s.push(t) + } + if (r) { + const t = void 0 !== h.NORMAL ? n.getDependency("accessor", h.NORMAL) : e.attributes.normal; + o.push(t) + } + if (a) { + const t = void 0 !== h.COLOR_0 ? n.getDependency("accessor", h.COLOR_0) : e.attributes.color; + l.push(t) + } + } + return Promise.all([Promise.all(s), Promise.all(o), Promise.all(l)]).then((function(t) { + const n = t[0], + s = t[1], + o = t[2]; + return i && (e.morphAttributes.position = n), r && (e.morphAttributes.normal = s), a && (e.morphAttributes.color = o), e.morphTargetsRelative = !0, e + })) + }(e, t.targets, n) : e + })) + } + /** + * @license + * Copyright 2010-2025 Three.js Authors + * SPDX-License-Identifier: MIT + */ + function fc() { + let e = null, + t = !1, + n = null, + i = null; + + function r(t, a) { + n(t, a), i = e.requestAnimationFrame(r) + } + return { + start: function() { + !0 !== t && null !== n && (i = e.requestAnimationFrame(r), t = !0) + }, + stop: function() { + e.cancelAnimationFrame(i), t = !1 + }, + setAnimationLoop: function(e) { + n = e + }, + setContext: function(t) { + e = t + } + } + } + + function mc(e) { + const t = new WeakMap; + return { + get: function(e) { + return e.isInterleavedBufferAttribute && (e = e.data), t.get(e) + }, + remove: function(n) { + n.isInterleavedBufferAttribute && (n = n.data); + const i = t.get(n); + i && (e.deleteBuffer(i.buffer), t.delete(n)) + }, + update: function(n, i) { + if (n.isInterleavedBufferAttribute && (n = n.data), n.isGLBufferAttribute) { + const e = t.get(n); + return void((!e || e.version < n.version) && t.set(n, { + buffer: n.buffer, + type: n.type, + bytesPerElement: n.elementSize, + version: n.version + })) + } + const r = t.get(n); + if (void 0 === r) t.set(n, function(t, n) { + const i = t.array, + r = t.usage, + a = i.byteLength, + s = e.createBuffer(); + let o; + if (e.bindBuffer(n, s), e.bufferData(n, i, r), t.onUploadCallback(), i instanceof Float32Array) o = e.FLOAT; + else if (i instanceof Uint16Array) o = t.isFloat16BufferAttribute ? e.HALF_FLOAT : e.UNSIGNED_SHORT; + else if (i instanceof Int16Array) o = e.SHORT; + else if (i instanceof Uint32Array) o = e.UNSIGNED_INT; + else if (i instanceof Int32Array) o = e.INT; + else if (i instanceof Int8Array) o = e.BYTE; + else if (i instanceof Uint8Array) o = e.UNSIGNED_BYTE; + else { + if (!(i instanceof Uint8ClampedArray)) throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: " + i); + o = e.UNSIGNED_BYTE + } + return { + buffer: s, + type: o, + bytesPerElement: i.BYTES_PER_ELEMENT, + version: t.version, + size: a + } + }(n, i)); + else if (r.version < n.version) { + if (r.size !== n.array.byteLength) throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported."); + ! function(t, n, i) { + const r = n.array, + a = n.updateRanges; + if (e.bindBuffer(i, t), 0 === a.length) e.bufferSubData(i, 0, r); + else { + a.sort(((e, t) => e.start - t.start)); + let t = 0; + for (let e = 1; e < a.length; e++) { + const n = a[t], + i = a[e]; + i.start <= n.start + n.count + 1 ? n.count = Math.max(n.count, i.start + i.count - n.start) : (++t, a[t] = i) + } + a.length = t + 1; + for (let t = 0, n = a.length; t < n; t++) { + const n = a[t]; + e.bufferSubData(i, n.start * r.BYTES_PER_ELEMENT, r, n.start, n.count) + } + n.clearUpdateRanges() + } + n.onUploadCallback() + }(r.buffer, n, i), r.version = n.version + } + } + } + } + const gc = { + alphahash_fragment: "#ifdef USE_ALPHAHASH\n\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif", + alphahash_pars_fragment: "#ifdef USE_ALPHAHASH\n\tconst float ALPHA_HASH_SCALE = 0.05;\n\tfloat hash2D( vec2 value ) {\n\t\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n\t}\n\tfloat hash3D( vec3 value ) {\n\t\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\n\t}\n\tfloat getAlphaHashThreshold( vec3 position ) {\n\t\tfloat maxDeriv = max(\n\t\t\tlength( dFdx( position.xyz ) ),\n\t\t\tlength( dFdy( position.xyz ) )\n\t\t);\n\t\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n\t\tvec2 pixScales = vec2(\n\t\t\texp2( floor( log2( pixScale ) ) ),\n\t\t\texp2( ceil( log2( pixScale ) ) )\n\t\t);\n\t\tvec2 alpha = vec2(\n\t\t\thash3D( floor( pixScales.x * position.xyz ) ),\n\t\t\thash3D( floor( pixScales.y * position.xyz ) )\n\t\t);\n\t\tfloat lerpFactor = fract( log2( pixScale ) );\n\t\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n\t\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\n\t\tvec3 cases = vec3(\n\t\t\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\n\t\t\t( x - 0.5 * a ) / ( 1.0 - a ),\n\t\t\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n\t\t);\n\t\tfloat threshold = ( x < ( 1.0 - a ) )\n\t\t\t? ( ( x < a ) ? cases.x : cases.y )\n\t\t\t: cases.z;\n\t\treturn clamp( threshold , 1.0e-6, 1.0 );\n\t}\n#endif", + alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif", + alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + alphatest_fragment: "#ifdef USE_ALPHATEST\n\t#ifdef ALPHA_TO_COVERAGE\n\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\tif ( diffuseColor.a < alphaTest ) discard;\n\t#endif\n#endif", + alphatest_pars_fragment: "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif", + aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_CLEARCOAT ) \n\t\tclearcoatSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_SHEEN ) \n\t\tsheenSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif", + aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", + batching_pars_vertex: "#ifdef USE_BATCHING\n\t#if ! defined( GL_ANGLE_multi_draw )\n\t#define gl_DrawID _gl_DrawID\n\tuniform int _gl_DrawID;\n\t#endif\n\tuniform highp sampler2D batchingTexture;\n\tuniform highp usampler2D batchingIdTexture;\n\tmat4 getBatchingMatrix( const in float i ) {\n\t\tint size = textureSize( batchingTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n\tfloat getIndirectIndex( const in int i ) {\n\t\tint size = textureSize( batchingIdTexture, 0 ).x;\n\t\tint x = i % size;\n\t\tint y = i / size;\n\t\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n\t}\n#endif\n#ifdef USE_BATCHING_COLOR\n\tuniform sampler2D batchingColorTexture;\n\tvec3 getBatchingColor( const in float i ) {\n\t\tint size = textureSize( batchingColorTexture, 0 ).x;\n\t\tint j = int( i );\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n\t}\n#endif", + batching_vertex: "#ifdef USE_BATCHING\n\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif", + begin_vertex: "vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n\tvPosition = vec3( position );\n#endif", + beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", + bsdfs: "float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n} // validated", + iridescence_fragment: "#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\treturn vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif", + bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n\t\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", + clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif", + clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", + clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif", + clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif", + color_fragment: "#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif", + color_pars_fragment: "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif", + color_pars_vertex: "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec3 vColor;\n#endif", + color_vertex: "#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n\tvColor.xyz *= batchingColor.xyz;\n#endif", + common: "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated", + cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif", + defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", + displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", + displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif", + emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n\t\temissiveColor = sRGBTransferEOTF( emissiveColor );\n\t#endif\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", + emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", + colorspace_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", + colorspace_pars_fragment: "vec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}", + envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", + envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", + envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", + envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", + envmap_physical_pars_fragment: "#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif", + envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", + fog_vertex: "#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif", + fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif", + fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif", + fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", + gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}", + lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", + lights_lambert_fragment: "LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;", + lights_lambert_pars_fragment: "varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert", + lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif", + lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;", + lights_toon_pars_fragment: "varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon", + lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + lights_phong_pars_fragment: "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong", + lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif", + lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", + lights_fragment_begin: "\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", + lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif", + lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif", + logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif", + logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif", + map_fragment: "#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif", + map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", + map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", + map_particle_pars_fragment: "#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", + metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", + morphinstance_vertex: "#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif", + morphcolor_vertex: "#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif", + morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif", + morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif", + morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif", + normal_fragment_begin: "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;", + normal_fragment_maps: "#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif", + normal_pars_fragment: "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif", + normal_pars_vertex: "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif", + normal_vertex: "#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif", + normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif", + clearcoat_normal_fragment_begin: "#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif", + clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif", + clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif", + iridescence_pars_fragment: "#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif", + opaque_fragment: "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );", + packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec4( 0., 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec4( 1., 1., 1., 1. );\n\tfloat vuf;\n\tfloat af = modf( v * PackFactors.a, vuf );\n\tfloat bf = modf( vuf * ShiftRight8, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec3( 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec3( 1., 1., 1. );\n\tfloat vuf;\n\tfloat bf = modf( v * PackFactors.b, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec2( 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec2( 1., 1. );\n\tfloat vuf;\n\tfloat gf = modf( v * 256., vuf );\n\treturn vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n\treturn dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}", + premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", + project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", + dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", + dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", + roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", + roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", + shadowmap_pars_fragment: "#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n#endif", + shadowmap_pars_vertex: "#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", + shadowmap_vertex: "#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif", + shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", + skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif", + skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif", + skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif", + skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", + specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif", + specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", + tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", + tonemapping_pars_fragment: "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", + transmission_fragment: "#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif", + transmission_pars_fragment: "#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t#else\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif", + uv_pars_fragment: "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif", + uv_pars_vertex: "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif", + uv_vertex: "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif", + worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", + background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", + background_frag: "uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}", + backgroundCube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + backgroundCube_frag: "#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}", + cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + cube_frag: "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", + depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", + depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}", + distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", + distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", + equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", + equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}", + linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_vert: "#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_frag: "#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", + meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshnormal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", + meshnormal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}", + meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}", + meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", + sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix[ 3 ];\n\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}", + sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}" + }, + vc = { + common: { + diffuse: { + value: new Wi(16777215) + }, + opacity: { + value: 1 + }, + map: { + value: null + }, + mapTransform: { + value: new Qt + }, + alphaMap: { + value: null + }, + alphaMapTransform: { + value: new Qt + }, + alphaTest: { + value: 0 + } + }, + specularmap: { + specularMap: { + value: null + }, + specularMapTransform: { + value: new Qt + } + }, + envmap: { + envMap: { + value: null + }, + envMapRotation: { + value: new Qt + }, + flipEnvMap: { + value: -1 + }, + reflectivity: { + value: 1 + }, + ior: { + value: 1.5 + }, + refractionRatio: { + value: .98 + } + }, + aomap: { + aoMap: { + value: null + }, + aoMapIntensity: { + value: 1 + }, + aoMapTransform: { + value: new Qt + } + }, + lightmap: { + lightMap: { + value: null + }, + lightMapIntensity: { + value: 1 + }, + lightMapTransform: { + value: new Qt + } + }, + bumpmap: { + bumpMap: { + value: null + }, + bumpMapTransform: { + value: new Qt + }, + bumpScale: { + value: 1 + } + }, + normalmap: { + normalMap: { + value: null + }, + normalMapTransform: { + value: new Qt + }, + normalScale: { + value: new jt(1, 1) + } + }, + displacementmap: { + displacementMap: { + value: null + }, + displacementMapTransform: { + value: new Qt + }, + displacementScale: { + value: 1 + }, + displacementBias: { + value: 0 + } + }, + emissivemap: { + emissiveMap: { + value: null + }, + emissiveMapTransform: { + value: new Qt + } + }, + metalnessmap: { + metalnessMap: { + value: null + }, + metalnessMapTransform: { + value: new Qt + } + }, + roughnessmap: { + roughnessMap: { + value: null + }, + roughnessMapTransform: { + value: new Qt + } + }, + gradientmap: { + gradientMap: { + value: null + } + }, + fog: { + fogDensity: { + value: 25e-5 + }, + fogNear: { + value: 1 + }, + fogFar: { + value: 2e3 + }, + fogColor: { + value: new Wi(16777215) + } + }, + lights: { + ambientLightColor: { + value: [] + }, + lightProbe: { + value: [] + }, + directionalLights: { + value: [], + properties: { + direction: {}, + color: {} + } + }, + directionalLightShadows: { + value: [], + properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + directionalShadowMap: { + value: [] + }, + directionalShadowMatrix: { + value: [] + }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } + }, + spotLightShadows: { + value: [], + properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + spotLightMap: { + value: [] + }, + spotShadowMap: { + value: [] + }, + spotLightMatrix: { + value: [] + }, + pointLights: { + value: [], + properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } + }, + pointLightShadows: { + value: [], + properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } + }, + pointShadowMap: { + value: [] + }, + pointShadowMatrix: { + value: [] + }, + hemisphereLights: { + value: [], + properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } + }, + rectAreaLights: { + value: [], + properties: { + color: {}, + position: {}, + width: {}, + height: {} + } + }, + ltc_1: { + value: null + }, + ltc_2: { + value: null + } + }, + points: { + diffuse: { + value: new Wi(16777215) + }, + opacity: { + value: 1 + }, + size: { + value: 1 + }, + scale: { + value: 1 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + alphaMapTransform: { + value: new Qt + }, + alphaTest: { + value: 0 + }, + uvTransform: { + value: new Qt + } + }, + sprite: { + diffuse: { + value: new Wi(16777215) + }, + opacity: { + value: 1 + }, + center: { + value: new jt(.5, .5) + }, + rotation: { + value: 0 + }, + map: { + value: null + }, + mapTransform: { + value: new Qt + }, + alphaMap: { + value: null + }, + alphaMapTransform: { + value: new Qt + }, + alphaTest: { + value: 0 + } + } + }, + wc = { + basic: { + uniforms: xr([vc.common, vc.specularmap, vc.envmap, vc.aomap, vc.lightmap, vc.fog]), + vertexShader: gc.meshbasic_vert, + fragmentShader: gc.meshbasic_frag + }, + lambert: { + uniforms: xr([vc.common, vc.specularmap, vc.envmap, vc.aomap, vc.lightmap, vc.emissivemap, vc.bumpmap, vc.normalmap, vc.displacementmap, vc.fog, vc.lights, { + emissive: { + value: new Wi(0) + } + }]), + vertexShader: gc.meshlambert_vert, + fragmentShader: gc.meshlambert_frag + }, + phong: { + uniforms: xr([vc.common, vc.specularmap, vc.envmap, vc.aomap, vc.lightmap, vc.emissivemap, vc.bumpmap, vc.normalmap, vc.displacementmap, vc.fog, vc.lights, { + emissive: { + value: new Wi(0) + }, + specular: { + value: new Wi(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: gc.meshphong_vert, + fragmentShader: gc.meshphong_frag + }, + standard: { + uniforms: xr([vc.common, vc.envmap, vc.aomap, vc.lightmap, vc.emissivemap, vc.bumpmap, vc.normalmap, vc.displacementmap, vc.roughnessmap, vc.metalnessmap, vc.fog, vc.lights, { + emissive: { + value: new Wi(0) + }, + roughness: { + value: 1 + }, + metalness: { + value: 0 + }, + envMapIntensity: { + value: 1 + } + }]), + vertexShader: gc.meshphysical_vert, + fragmentShader: gc.meshphysical_frag + }, + toon: { + uniforms: xr([vc.common, vc.aomap, vc.lightmap, vc.emissivemap, vc.bumpmap, vc.normalmap, vc.displacementmap, vc.gradientmap, vc.fog, vc.lights, { + emissive: { + value: new Wi(0) + } + }]), + vertexShader: gc.meshtoon_vert, + fragmentShader: gc.meshtoon_frag + }, + matcap: { + uniforms: xr([vc.common, vc.bumpmap, vc.normalmap, vc.displacementmap, vc.fog, { + matcap: { + value: null + } + }]), + vertexShader: gc.meshmatcap_vert, + fragmentShader: gc.meshmatcap_frag + }, + points: { + uniforms: xr([vc.points, vc.fog]), + vertexShader: gc.points_vert, + fragmentShader: gc.points_frag + }, + dashed: { + uniforms: xr([vc.common, vc.fog, { + scale: { + value: 1 + }, + dashSize: { + value: 1 + }, + totalSize: { + value: 2 + } + }]), + vertexShader: gc.linedashed_vert, + fragmentShader: gc.linedashed_frag + }, + depth: { + uniforms: xr([vc.common, vc.displacementmap]), + vertexShader: gc.depth_vert, + fragmentShader: gc.depth_frag + }, + normal: { + uniforms: xr([vc.common, vc.bumpmap, vc.normalmap, vc.displacementmap, { + opacity: { + value: 1 + } + }]), + vertexShader: gc.meshnormal_vert, + fragmentShader: gc.meshnormal_frag + }, + sprite: { + uniforms: xr([vc.sprite, vc.fog]), + vertexShader: gc.sprite_vert, + fragmentShader: gc.sprite_frag + }, + background: { + uniforms: { + uvTransform: { + value: new Qt + }, + t2D: { + value: null + }, + backgroundIntensity: { + value: 1 + } + }, + vertexShader: gc.background_vert, + fragmentShader: gc.background_frag + }, + backgroundCube: { + uniforms: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + }, + backgroundBlurriness: { + value: 0 + }, + backgroundIntensity: { + value: 1 + }, + backgroundRotation: { + value: new Qt + } + }, + vertexShader: gc.backgroundCube_vert, + fragmentShader: gc.backgroundCube_frag + }, + cube: { + uniforms: { + tCube: { + value: null + }, + tFlip: { + value: -1 + }, + opacity: { + value: 1 + } + }, + vertexShader: gc.cube_vert, + fragmentShader: gc.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: gc.equirect_vert, + fragmentShader: gc.equirect_frag + }, + distanceRGBA: { + uniforms: xr([vc.common, vc.displacementmap, { + referencePosition: { + value: new yn + }, + nearDistance: { + value: 1 + }, + farDistance: { + value: 1e3 + } + }]), + vertexShader: gc.distanceRGBA_vert, + fragmentShader: gc.distanceRGBA_frag + }, + shadow: { + uniforms: xr([vc.lights, vc.fog, { + color: { + value: new Wi(0) + }, + opacity: { + value: 1 + } + }]), + vertexShader: gc.shadow_vert, + fragmentShader: gc.shadow_frag + } + }; + wc.physical = { + uniforms: xr([wc.standard.uniforms, { + clearcoat: { + value: 0 + }, + clearcoatMap: { + value: null + }, + clearcoatMapTransform: { + value: new Qt + }, + clearcoatNormalMap: { + value: null + }, + clearcoatNormalMapTransform: { + value: new Qt + }, + clearcoatNormalScale: { + value: new jt(1, 1) + }, + clearcoatRoughness: { + value: 0 + }, + clearcoatRoughnessMap: { + value: null + }, + clearcoatRoughnessMapTransform: { + value: new Qt + }, + dispersion: { + value: 0 + }, + iridescence: { + value: 0 + }, + iridescenceMap: { + value: null + }, + iridescenceMapTransform: { + value: new Qt + }, + iridescenceIOR: { + value: 1.3 + }, + iridescenceThicknessMinimum: { + value: 100 + }, + iridescenceThicknessMaximum: { + value: 400 + }, + iridescenceThicknessMap: { + value: null + }, + iridescenceThicknessMapTransform: { + value: new Qt + }, + sheen: { + value: 0 + }, + sheenColor: { + value: new Wi(0) + }, + sheenColorMap: { + value: null + }, + sheenColorMapTransform: { + value: new Qt + }, + sheenRoughness: { + value: 1 + }, + sheenRoughnessMap: { + value: null + }, + sheenRoughnessMapTransform: { + value: new Qt + }, + transmission: { + value: 0 + }, + transmissionMap: { + value: null + }, + transmissionMapTransform: { + value: new Qt + }, + transmissionSamplerSize: { + value: new jt + }, + transmissionSamplerMap: { + value: null + }, + thickness: { + value: 0 + }, + thicknessMap: { + value: null + }, + thicknessMapTransform: { + value: new Qt + }, + attenuationDistance: { + value: 0 + }, + attenuationColor: { + value: new Wi(0) + }, + specularColor: { + value: new Wi(1, 1, 1) + }, + specularColorMap: { + value: null + }, + specularColorMapTransform: { + value: new Qt + }, + specularIntensity: { + value: 1 + }, + specularIntensityMap: { + value: null + }, + specularIntensityMapTransform: { + value: new Qt + }, + anisotropyVector: { + value: new jt + }, + anisotropyMap: { + value: null + }, + anisotropyMapTransform: { + value: new Qt + } + }]), + vertexShader: gc.meshphysical_vert, + fragmentShader: gc.meshphysical_frag + }; + const yc = { + r: 0, + b: 0, + g: 0 + }, + Ac = new ai, + bc = new qn; + + function xc(e, t, n, i, r, a, s) { + const o = new Wi(0); + let l, c, h = !0 === a ? 0 : 1, + d = null, + u = 0, + p = null; + + function f(e) { + let i = !0 === e.isScene ? e.background : null; + if (i && i.isTexture) { + i = (e.backgroundBlurriness > 0 ? n : t).get(i) + } + return i + } + + function m(t, n) { + t.getRGB(yc, kr(e)), i.buffers.color.setClear(yc.r, yc.g, yc.b, n, s) + } + return { + getClearColor: function() { + return o + }, + setClearColor: function(e, t = 1) { + o.set(e), h = t, m(o, h) + }, + getClearAlpha: function() { + return h + }, + setClearAlpha: function(e) { + h = e, m(o, h) + }, + render: function(t) { + let n = !1; + const r = f(t); + null === r ? m(o, h) : r && r.isColor && (m(r, 1), n = !0); + const a = e.xr.getEnvironmentBlendMode(); + "additive" === a ? i.buffers.color.setClear(0, 0, 0, 1, s) : "alpha-blend" === a && i.buffers.color.setClear(0, 0, 0, 0, s), (e.autoClear || n) && (i.buffers.depth.setTest(!0), i.buffers.depth.setMask(!0), i.buffers.color.setMask(!0), e.clear(e.autoClearColor, e.autoClearDepth, e.autoClearStencil)) + }, + addToRenderList: function(t, n) { + const i = f(n); + i && (i.isCubeTexture || i.mapping === ie) ? (void 0 === c && (c = new wr(new Ar(1, 1, 1), new Sr({ + name: "BackgroundCubeMaterial", + uniforms: br(wc.backgroundCube.uniforms), + vertexShader: wc.backgroundCube.vertexShader, + fragmentShader: wc.backgroundCube.fragmentShader, + side: 1, + depthTest: !1, + depthWrite: !1, + fog: !1 + })), c.geometry.deleteAttribute("normal"), c.geometry.deleteAttribute("uv"), c.onBeforeRender = function(e, t, n) { + this.matrixWorld.copyPosition(n.matrixWorld) + }, Object.defineProperty(c.material, "envMap", { + get: function() { + return this.uniforms.envMap.value + } + }), r.update(c)), Ac.copy(n.backgroundRotation), Ac.x *= -1, Ac.y *= -1, Ac.z *= -1, i.isCubeTexture && !1 === i.isRenderTargetTexture && (Ac.y *= -1, Ac.z *= -1), c.material.uniforms.envMap.value = i, c.material.uniforms.flipEnvMap.value = i.isCubeTexture && !1 === i.isRenderTargetTexture ? -1 : 1, c.material.uniforms.backgroundBlurriness.value = n.backgroundBlurriness, c.material.uniforms.backgroundIntensity.value = n.backgroundIntensity, c.material.uniforms.backgroundRotation.value.setFromMatrix4(bc.makeRotationFromEuler(Ac)), c.material.toneMapped = nn.getTransfer(i.colorSpace) !== yt, d === i && u === i.version && p === e.toneMapping || (c.material.needsUpdate = !0, d = i, u = i.version, p = e.toneMapping), c.layers.enableAll(), t.unshift(c, c.geometry, c.material, 0, 0, null)) : i && i.isTexture && (void 0 === l && (l = new wr(new Ns(2, 2), new Sr({ + name: "BackgroundMaterial", + uniforms: br(wc.background.uniforms), + vertexShader: wc.background.vertexShader, + fragmentShader: wc.background.fragmentShader, + side: 0, + depthTest: !1, + depthWrite: !1, + fog: !1 + })), l.geometry.deleteAttribute("normal"), Object.defineProperty(l.material, "map", { + get: function() { + return this.uniforms.t2D.value + } + }), r.update(l)), l.material.uniforms.t2D.value = i, l.material.uniforms.backgroundIntensity.value = n.backgroundIntensity, l.material.toneMapped = nn.getTransfer(i.colorSpace) !== yt, !0 === i.matrixAutoUpdate && i.updateMatrix(), l.material.uniforms.uvTransform.value.copy(i.matrix), d === i && u === i.version && p === e.toneMapping || (l.material.needsUpdate = !0, d = i, u = i.version, p = e.toneMapping), l.layers.enableAll(), t.unshift(l, l.geometry, l.material, 0, 0, null)) + }, + dispose: function() { + void 0 !== c && (c.geometry.dispose(), c.material.dispose(), c = void 0), void 0 !== l && (l.geometry.dispose(), l.material.dispose(), l = void 0) + } + } + } + + function kc(e, t) { + const n = e.getParameter(e.MAX_VERTEX_ATTRIBS), + i = {}, + r = c(null); + let a = r, + s = !1; + + function o(t) { + return e.bindVertexArray(t) + } + + function l(t) { + return e.deleteVertexArray(t) + } + + function c(e) { + const t = [], + i = [], + r = []; + for (let e = 0; e < n; e++) t[e] = 0, i[e] = 0, r[e] = 0; + return { + geometry: null, + program: null, + wireframe: !1, + newAttributes: t, + enabledAttributes: i, + attributeDivisors: r, + object: e, + attributes: {}, + index: null + } + } + + function h() { + const e = a.newAttributes; + for (let t = 0, n = e.length; t < n; t++) e[t] = 0 + } + + function d(e) { + u(e, 0) + } + + function u(t, n) { + const i = a.newAttributes, + r = a.enabledAttributes, + s = a.attributeDivisors; + i[t] = 1, 0 === r[t] && (e.enableVertexAttribArray(t), r[t] = 1), s[t] !== n && (e.vertexAttribDivisor(t, n), s[t] = n) + } + + function p() { + const t = a.newAttributes, + n = a.enabledAttributes; + for (let i = 0, r = n.length; i < r; i++) n[i] !== t[i] && (e.disableVertexAttribArray(i), n[i] = 0) + } + + function f(t, n, i, r, a, s, o) { + !0 === o ? e.vertexAttribIPointer(t, n, i, a, s) : e.vertexAttribPointer(t, n, i, r, a, s) + } + + function m() { + g(), s = !0, a !== r && (a = r, o(a.object)) + } + + function g() { + r.geometry = null, r.program = null, r.wireframe = !1 + } + return { + setup: function(n, r, l, m, g) { + let v = !1; + const w = function(t, n, r) { + const a = !0 === r.wireframe; + let s = i[t.id]; + void 0 === s && (s = {}, i[t.id] = s); + let o = s[n.id]; + void 0 === o && (o = {}, s[n.id] = o); + let l = o[a]; + void 0 === l && (l = c(e.createVertexArray()), o[a] = l); + return l + }(m, l, r); + a !== w && (a = w, o(a.object)), v = function(e, t, n, i) { + const r = a.attributes, + s = t.attributes; + let o = 0; + const l = n.getAttributes(); + for (const t in l) { + if (l[t].location >= 0) { + const n = r[t]; + let i = s[t]; + if (void 0 === i && ("instanceMatrix" === t && e.instanceMatrix && (i = e.instanceMatrix), "instanceColor" === t && e.instanceColor && (i = e.instanceColor)), void 0 === n) return !0; + if (n.attribute !== i) return !0; + if (i && n.data !== i.data) return !0; + o++ + } + } + return a.attributesNum !== o || a.index !== i + }(n, m, l, g), v && function(e, t, n, i) { + const r = {}, + s = t.attributes; + let o = 0; + const l = n.getAttributes(); + for (const t in l) { + if (l[t].location >= 0) { + let n = s[t]; + void 0 === n && ("instanceMatrix" === t && e.instanceMatrix && (n = e.instanceMatrix), "instanceColor" === t && e.instanceColor && (n = e.instanceColor)); + const i = {}; + i.attribute = n, n && n.data && (i.data = n.data), r[t] = i, o++ + } + } + a.attributes = r, a.attributesNum = o, a.index = i + }(n, m, l, g), null !== g && t.update(g, e.ELEMENT_ARRAY_BUFFER), (v || s) && (s = !1, function(n, i, r, a) { + h(); + const s = a.attributes, + o = r.getAttributes(), + l = i.defaultAttributeValues; + for (const i in o) { + const r = o[i]; + if (r.location >= 0) { + let o = s[i]; + if (void 0 === o && ("instanceMatrix" === i && n.instanceMatrix && (o = n.instanceMatrix), "instanceColor" === i && n.instanceColor && (o = n.instanceColor)), void 0 !== o) { + const i = o.normalized, + s = o.itemSize, + l = t.get(o); + if (void 0 === l) continue; + const c = l.buffer, + h = l.type, + p = l.bytesPerElement, + m = h === e.INT || h === e.UNSIGNED_INT || o.gpuType === ve; + if (o.isInterleavedBufferAttribute) { + const t = o.data, + l = t.stride, + g = o.offset; + if (t.isInstancedInterleavedBuffer) { + for (let e = 0; e < r.locationSize; e++) u(r.location + e, t.meshPerAttribute); + !0 !== n.isInstancedMesh && void 0 === a._maxInstanceCount && (a._maxInstanceCount = t.meshPerAttribute * t.count) + } else + for (let e = 0; e < r.locationSize; e++) d(r.location + e); + e.bindBuffer(e.ARRAY_BUFFER, c); + for (let e = 0; e < r.locationSize; e++) f(r.location + e, s / r.locationSize, h, i, l * p, (g + s / r.locationSize * e) * p, m) + } else { + if (o.isInstancedBufferAttribute) { + for (let e = 0; e < r.locationSize; e++) u(r.location + e, o.meshPerAttribute); + !0 !== n.isInstancedMesh && void 0 === a._maxInstanceCount && (a._maxInstanceCount = o.meshPerAttribute * o.count) + } else + for (let e = 0; e < r.locationSize; e++) d(r.location + e); + e.bindBuffer(e.ARRAY_BUFFER, c); + for (let e = 0; e < r.locationSize; e++) f(r.location + e, s / r.locationSize, h, i, s * p, s / r.locationSize * e * p, m) + } + } else if (void 0 !== l) { + const t = l[i]; + if (void 0 !== t) switch (t.length) { + case 2: + e.vertexAttrib2fv(r.location, t); + break; + case 3: + e.vertexAttrib3fv(r.location, t); + break; + case 4: + e.vertexAttrib4fv(r.location, t); + break; + default: + e.vertexAttrib1fv(r.location, t) + } + } + } + } + p() + }(n, r, l, m), null !== g && e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, t.get(g).buffer)) + }, + reset: m, + resetDefaultState: g, + dispose: function() { + m(); + for (const e in i) { + const t = i[e]; + for (const e in t) { + const n = t[e]; + for (const e in n) l(n[e].object), delete n[e]; + delete t[e] + } + delete i[e] + } + }, + releaseStatesOfGeometry: function(e) { + if (void 0 === i[e.id]) return; + const t = i[e.id]; + for (const e in t) { + const n = t[e]; + for (const e in n) l(n[e].object), delete n[e]; + delete t[e] + } + delete i[e.id] + }, + releaseStatesOfProgram: function(e) { + for (const t in i) { + const n = i[t]; + if (void 0 === n[e.id]) continue; + const r = n[e.id]; + for (const e in r) l(r[e].object), delete r[e]; + delete n[e.id] + } + }, + initAttributes: h, + enableAttribute: d, + disableUnusedAttributes: p + } + } + + function Ec(e, t, n) { + let i; + + function r(t, r, a) { + 0 !== a && (e.drawArraysInstanced(i, t, r, a), n.update(r, i, a)) + } + this.setMode = function(e) { + i = e + }, this.render = function(t, r) { + e.drawArrays(i, t, r), n.update(r, i, 1) + }, this.renderInstances = r, this.renderMultiDraw = function(e, r, a) { + if (0 === a) return; + t.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i, e, 0, r, 0, a); + let s = 0; + for (let e = 0; e < a; e++) s += r[e]; + n.update(s, i, 1) + }, this.renderMultiDrawInstances = function(e, a, s, o) { + if (0 === s) return; + const l = t.get("WEBGL_multi_draw"); + if (null === l) + for (let t = 0; t < e.length; t++) r(e[t], a[t], o[t]); + else { + l.multiDrawArraysInstancedWEBGL(i, e, 0, a, 0, o, 0, s); + let t = 0; + for (let e = 0; e < s; e++) t += a[e] * o[e]; + n.update(t, i, 1) + } + } + } + + function Sc(e, t, n, i) { + let r; + + function a(t) { + if ("highp" === t) { + if (e.getShaderPrecisionFormat(e.VERTEX_SHADER, e.HIGH_FLOAT).precision > 0 && e.getShaderPrecisionFormat(e.FRAGMENT_SHADER, e.HIGH_FLOAT).precision > 0) return "highp"; + t = "mediump" + } + return "mediump" === t && e.getShaderPrecisionFormat(e.VERTEX_SHADER, e.MEDIUM_FLOAT).precision > 0 && e.getShaderPrecisionFormat(e.FRAGMENT_SHADER, e.MEDIUM_FLOAT).precision > 0 ? "mediump" : "lowp" + } + let s = void 0 !== n.precision ? n.precision : "highp"; + const o = a(s); + o !== s && (console.warn("THREE.WebGLRenderer:", s, "not supported, using", o, "instead."), s = o); + const l = !0 === n.logarithmicDepthBuffer, + c = !0 === n.reverseDepthBuffer && t.has("EXT_clip_control"), + h = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS), + d = e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS); + return { + isWebGL2: !0, + getMaxAnisotropy: function() { + if (void 0 !== r) return r; + if (!0 === t.has("EXT_texture_filter_anisotropic")) { + const n = t.get("EXT_texture_filter_anisotropic"); + r = e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) + } else r = 0; + return r + }, + getMaxPrecision: a, + textureFormatReadable: function(t) { + return t === Se || i.convert(t) === e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT) + }, + textureTypeReadable: function(n) { + const r = n === Ae && (t.has("EXT_color_buffer_half_float") || t.has("EXT_color_buffer_float")); + return !(n !== pe && i.convert(n) !== e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE) && n !== ye && !r) + }, + precision: s, + logarithmicDepthBuffer: l, + reverseDepthBuffer: c, + maxTextures: h, + maxVertexTextures: d, + maxTextureSize: e.getParameter(e.MAX_TEXTURE_SIZE), + maxCubemapSize: e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE), + maxAttributes: e.getParameter(e.MAX_VERTEX_ATTRIBS), + maxVertexUniforms: e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS), + maxVaryings: e.getParameter(e.MAX_VARYING_VECTORS), + maxFragmentUniforms: e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS), + vertexTextures: d > 0, + maxSamples: e.getParameter(e.MAX_SAMPLES) + } + } + + function Mc(e) { + const t = this; + let n = null, + i = 0, + r = !1, + a = !1; + const s = new ga, + o = new Qt, + l = { + value: null, + needsUpdate: !1 + }; + + function c(e, n, i, r) { + const a = null !== e ? e.length : 0; + let c = null; + if (0 !== a) { + if (c = l.value, !0 !== r || null === c) { + const t = i + 4 * a, + r = n.matrixWorldInverse; + o.getNormalMatrix(r), (null === c || c.length < t) && (c = new Float32Array(t)); + for (let t = 0, n = i; t !== a; ++t, n += 4) s.copy(e[t]).applyMatrix4(r, o), s.normal.toArray(c, n), c[n + 3] = s.constant + } + l.value = c, l.needsUpdate = !0 + } + return t.numPlanes = a, t.numIntersection = 0, c + } + this.uniform = l, this.numPlanes = 0, this.numIntersection = 0, this.init = function(e, t) { + const n = 0 !== e.length || t || 0 !== i || r; + return r = t, i = e.length, n + }, this.beginShadows = function() { + a = !0, c(null) + }, this.endShadows = function() { + a = !1 + }, this.setGlobalState = function(e, t) { + n = c(e, t, 0) + }, this.setState = function(s, o, h) { + const d = s.clippingPlanes, + u = s.clipIntersection, + p = s.clipShadows, + f = e.get(s); + if (!r || null === d || 0 === d.length || a && !p) a ? c(null) : function() { + l.value !== n && (l.value = n, l.needsUpdate = i > 0); + t.numPlanes = i, t.numIntersection = 0 + }(); + else { + const e = a ? 0 : i, + t = 4 * e; + let r = f.clippingState || null; + l.value = r, r = c(d, o, t, h); + for (let e = 0; e !== t; ++e) r[e] = n[e]; + f.clippingState = r, this.numIntersection = u ? this.numPlanes : 0, this.numPlanes += e + } + } + } + + function Tc(e) { + let t = new WeakMap; + + function n(e, t) { + return t === te ? e.mapping = $ : t === ne && (e.mapping = ee), e + } + + function i(e) { + const n = e.target; + n.removeEventListener("dispose", i); + const r = t.get(n); + void 0 !== r && (t.delete(n), r.dispose()) + } + return { + get: function(r) { + if (r && r.isTexture) { + const a = r.mapping; + if (a === te || a === ne) { + if (t.has(r)) { + return n(t.get(r).texture, r.mapping) + } { + const a = r.image; + if (a && a.height > 0) { + const s = new Dr(a.height); + return s.fromEquirectangularTexture(e, r), t.set(r, s), r.addEventListener("dispose", i), n(s.texture, r.mapping) + } + return null + } + } + } + return r + }, + dispose: function() { + t = new WeakMap + } + } + } + const _c = [.125, .215, .35, .446, .526, .582], + Cc = 20, + Pc = new Io, + Ic = new Wi; + let Rc = null, + Lc = 0, + Dc = 0, + Nc = !1; + const Bc = (1 + Math.sqrt(5)) / 2, + Uc = 1 / Bc, + zc = [new yn(-Bc, Uc, 0), new yn(Bc, Uc, 0), new yn(-Uc, 0, Bc), new yn(Uc, 0, Bc), new yn(0, Bc, -Uc), new yn(0, Bc, Uc), new yn(-1, 1, -1), new yn(1, 1, -1), new yn(-1, 1, 1), new yn(1, 1, 1)], + Oc = new yn; + class Fc { + constructor(e) { + this._renderer = e, this._pingPongRenderTarget = null, this._lodMax = 0, this._cubeSize = 0, this._lodPlanes = [], this._sizeLods = [], this._sigmas = [], this._blurMaterial = null, this._cubemapMaterial = null, this._equirectMaterial = null, this._compileMaterial(this._blurMaterial) + } + fromScene(e, t = 0, n = .1, i = 100, r = {}) { + const { + size: a = 256, + position: s = Oc + } = r; + Rc = this._renderer.getRenderTarget(), Lc = this._renderer.getActiveCubeFace(), Dc = this._renderer.getActiveMipmapLevel(), Nc = this._renderer.xr.enabled, this._renderer.xr.enabled = !1, this._setSize(a); + const o = this._allocateTargets(); + return o.depthBuffer = !0, this._sceneToCubeUV(e, n, i, o, s), t > 0 && this._blur(o, 0, 0, t), this._applyPMREM(o), this._cleanup(o), o + } + fromEquirectangular(e, t = null) { + return this._fromTexture(e, t) + } + fromCubemap(e, t = null) { + return this._fromTexture(e, t) + } + compileCubemapShader() { + null === this._cubemapMaterial && (this._cubemapMaterial = Gc(), this._compileMaterial(this._cubemapMaterial)) + } + compileEquirectangularShader() { + null === this._equirectMaterial && (this._equirectMaterial = Hc(), this._compileMaterial(this._equirectMaterial)) + } + dispose() { + this._dispose(), null !== this._cubemapMaterial && this._cubemapMaterial.dispose(), null !== this._equirectMaterial && this._equirectMaterial.dispose() + } + _setSize(e) { + this._lodMax = Math.floor(Math.log2(e)), this._cubeSize = Math.pow(2, this._lodMax) + } + _dispose() { + null !== this._blurMaterial && this._blurMaterial.dispose(), null !== this._pingPongRenderTarget && this._pingPongRenderTarget.dispose(); + for (let e = 0; e < this._lodPlanes.length; e++) this._lodPlanes[e].dispose() + } + _cleanup(e) { + this._renderer.setRenderTarget(Rc, Lc, Dc), this._renderer.xr.enabled = Nc, e.scissorTest = !1, Vc(e, 0, 0, e.width, e.height) + } + _fromTexture(e, t) { + e.mapping === $ || e.mapping === ee ? this._setSize(0 === e.image.length ? 16 : e.image[0].width || e.image[0].image.width) : this._setSize(e.image.width / 4), Rc = this._renderer.getRenderTarget(), Lc = this._renderer.getActiveCubeFace(), Dc = this._renderer.getActiveMipmapLevel(), Nc = this._renderer.xr.enabled, this._renderer.xr.enabled = !1; + const n = t || this._allocateTargets(); + return this._textureToCubeUV(e, n), this._applyPMREM(n), this._cleanup(n), n + } + _allocateTargets() { + const e = 3 * Math.max(this._cubeSize, 112), + t = 4 * this._cubeSize, + n = { + magFilter: he, + minFilter: he, + generateMipmaps: !1, + type: Ae, + format: Se, + colorSpace: vt, + depthBuffer: !1 + }, + i = Wc(e, t, n); + if (null === this._pingPongRenderTarget || this._pingPongRenderTarget.width !== e || this._pingPongRenderTarget.height !== t) { + null !== this._pingPongRenderTarget && this._dispose(), this._pingPongRenderTarget = Wc(e, t, n); + const { + _lodMax: i + } = this; + ({ + sizeLods: this._sizeLods, + lodPlanes: this._lodPlanes, + sigmas: this._sigmas + } = function(e) { + const t = [], + n = [], + i = []; + let r = e; + const a = e - 4 + 1 + _c.length; + for (let s = 0; s < a; s++) { + const a = Math.pow(2, r); + n.push(a); + let o = 1 / a; + s > e - 4 ? o = _c[s - e + 4 - 1] : 0 === s && (o = 0), i.push(o); + const l = 1 / (a - 2), + c = -l, + h = 1 + l, + d = [c, c, h, c, h, h, c, c, h, h, c, h], + u = 6, + p = 6, + f = 3, + m = 2, + g = 1, + v = new Float32Array(f * p * u), + w = new Float32Array(m * p * u), + y = new Float32Array(g * p * u); + for (let e = 0; e < u; e++) { + const t = e % 3 * 2 / 3 - 1, + n = e > 2 ? 0 : -1, + i = [t, n, 0, t + 2 / 3, n, 0, t + 2 / 3, n + 1, 0, t, n, 0, t + 2 / 3, n + 1, 0, t, n + 1, 0]; + v.set(i, f * p * e), w.set(d, m * p * e); + const r = [e, e, e, e, e, e]; + y.set(r, g * p * e) + } + const A = new sr; + A.setAttribute("position", new qi(v, f)), A.setAttribute("uv", new qi(w, m)), A.setAttribute("faceIndex", new qi(y, g)), t.push(A), r > 4 && r-- + } + return { + lodPlanes: t, + sizeLods: n, + sigmas: i + } + }(i)), this._blurMaterial = function(e, t, n) { + const i = new Float32Array(Cc), + r = new yn(0, 1, 0), + a = new Sr({ + name: "SphericalGaussianBlur", + defines: { + n: Cc, + CUBEUV_TEXEL_WIDTH: 1 / t, + CUBEUV_TEXEL_HEIGHT: 1 / n, + CUBEUV_MAX_MIP: `${e}.0` + }, + uniforms: { + envMap: { + value: null + }, + samples: { + value: 1 + }, + weights: { + value: i + }, + latitudinal: { + value: !1 + }, + dTheta: { + value: 0 + }, + mipInt: { + value: 0 + }, + poleAxis: { + value: r + } + }, + vertexShader: jc(), + fragmentShader: "\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t", + blending: 0, + depthTest: !1, + depthWrite: !1 + }); + return a + }(i, e, t) + } + return i + } + _compileMaterial(e) { + const t = new wr(this._lodPlanes[0], e); + this._renderer.compile(t, Pc) + } + _sceneToCubeUV(e, t, n, i, r) { + const a = new Pr(90, 1, t, n), + s = [1, -1, 1, 1, 1, 1], + o = [1, 1, 1, -1, -1, -1], + l = this._renderer, + c = l.autoClear, + h = l.toneMapping; + l.getClearColor(Ic), l.toneMapping = 0, l.autoClear = !1; + const d = new ji({ + name: "PMREM.Background", + side: 1, + depthWrite: !1, + depthTest: !1 + }), + u = new wr(new Ar, d); + let p = !1; + const f = e.background; + f ? f.isColor && (d.color.copy(f), e.background = null, p = !0) : (d.color.copy(Ic), p = !0); + for (let t = 0; t < 6; t++) { + const n = t % 3; + 0 === n ? (a.up.set(0, s[t], 0), a.position.set(r.x, r.y, r.z), a.lookAt(r.x + o[t], r.y, r.z)) : 1 === n ? (a.up.set(0, 0, s[t]), a.position.set(r.x, r.y, r.z), a.lookAt(r.x, r.y + o[t], r.z)) : (a.up.set(0, s[t], 0), a.position.set(r.x, r.y, r.z), a.lookAt(r.x, r.y, r.z + o[t])); + const c = this._cubeSize; + Vc(i, n * c, t > 2 ? c : 0, c, c), l.setRenderTarget(i), p && l.render(u, a), l.render(e, a) + } + u.geometry.dispose(), u.material.dispose(), l.toneMapping = h, l.autoClear = c, e.background = f + } + _textureToCubeUV(e, t) { + const n = this._renderer, + i = e.mapping === $ || e.mapping === ee; + i ? (null === this._cubemapMaterial && (this._cubemapMaterial = Gc()), this._cubemapMaterial.uniforms.flipEnvMap.value = !1 === e.isRenderTargetTexture ? -1 : 1) : null === this._equirectMaterial && (this._equirectMaterial = Hc()); + const r = i ? this._cubemapMaterial : this._equirectMaterial, + a = new wr(this._lodPlanes[0], r); + r.uniforms.envMap.value = e; + const s = this._cubeSize; + Vc(t, 0, 0, 3 * s, 2 * s), n.setRenderTarget(t), n.render(a, Pc) + } + _applyPMREM(e) { + const t = this._renderer, + n = t.autoClear; + t.autoClear = !1; + const i = this._lodPlanes.length; + for (let t = 1; t < i; t++) { + const n = Math.sqrt(this._sigmas[t] * this._sigmas[t] - this._sigmas[t - 1] * this._sigmas[t - 1]), + r = zc[(i - t - 1) % zc.length]; + this._blur(e, t - 1, t, n, r) + } + t.autoClear = n + } + _blur(e, t, n, i, r) { + const a = this._pingPongRenderTarget; + this._halfBlur(e, a, t, n, i, "latitudinal", r), this._halfBlur(a, e, n, n, i, "longitudinal", r) + } + _halfBlur(e, t, n, i, r, a, s) { + const o = this._renderer, + l = this._blurMaterial; + "latitudinal" !== a && "longitudinal" !== a && console.error("blur direction must be either latitudinal or longitudinal!"); + const c = new wr(this._lodPlanes[i], l), + h = l.uniforms, + d = this._sizeLods[n] - 1, + u = isFinite(r) ? Math.PI / (2 * d) : 2 * Math.PI / 39, + p = r / u, + f = isFinite(r) ? 1 + Math.floor(3 * p) : Cc; + f > Cc && console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`); + const m = []; + let g = 0; + for (let e = 0; e < Cc; ++e) { + const t = e / p, + n = Math.exp(-t * t / 2); + m.push(n), 0 === e ? g += n : e < f && (g += 2 * n) + } + for (let e = 0; e < m.length; e++) m[e] = m[e] / g; + h.envMap.value = e.texture, h.samples.value = f, h.weights.value = m, h.latitudinal.value = "latitudinal" === a, s && (h.poleAxis.value = s); + const { + _lodMax: v + } = this; + h.dTheta.value = u, h.mipInt.value = v - n; + const w = this._sizeLods[i]; + Vc(t, 3 * w * (i > v - 4 ? i - v + 4 : 0), 4 * (this._cubeSize - w), 3 * w, 2 * w), o.setRenderTarget(t), o.render(c, Pc) + } + } + + function Wc(e, t, n) { + const i = new mn(e, t, n); + return i.texture.mapping = ie, i.texture.name = "PMREM.cubeUv", i.scissorTest = !0, i + } + + function Vc(e, t, n, i, r) { + e.viewport.set(t, n, i, r), e.scissor.set(t, n, i, r) + } + + function Hc() { + return new Sr({ + name: "EquirectangularToCubeUV", + uniforms: { + envMap: { + value: null + } + }, + vertexShader: jc(), + fragmentShader: "\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t", + blending: 0, + depthTest: !1, + depthWrite: !1 + }) + } + + function Gc() { + return new Sr({ + name: "CubemapToCubeUV", + uniforms: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + } + }, + vertexShader: jc(), + fragmentShader: "\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t", + blending: 0, + depthTest: !1, + depthWrite: !1 + }) + } + + function jc() { + return "\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t" + } + + function Qc(e) { + let t = new WeakMap, + n = null; + + function i(e) { + const n = e.target; + n.removeEventListener("dispose", i); + const r = t.get(n); + void 0 !== r && (t.delete(n), r.dispose()) + } + return { + get: function(r) { + if (r && r.isTexture) { + const a = r.mapping, + s = a === te || a === ne, + o = a === $ || a === ee; + if (s || o) { + let a = t.get(r); + const l = void 0 !== a ? a.texture.pmremVersion : 0; + if (r.isRenderTargetTexture && r.pmremVersion !== l) return null === n && (n = new Fc(e)), a = s ? n.fromEquirectangular(r, a) : n.fromCubemap(r, a), a.texture.pmremVersion = r.pmremVersion, t.set(r, a), a.texture; + if (void 0 !== a) return a.texture; + { + const l = r.image; + return s && l && l.height > 0 || o && l && function(e) { + let t = 0; + const n = 6; + for (let i = 0; i < n; i++) void 0 !== e[i] && t++; + return t === n + }(l) ? (null === n && (n = new Fc(e)), a = s ? n.fromEquirectangular(r) : n.fromCubemap(r), a.texture.pmremVersion = r.pmremVersion, t.set(r, a), r.addEventListener("dispose", i), a.texture) : null + } + } + } + return r + }, + dispose: function() { + t = new WeakMap, null !== n && (n.dispose(), n = null) + } + } + } + + function Yc(e) { + const t = {}; + + function n(n) { + if (void 0 !== t[n]) return t[n]; + let i; + switch (n) { + case "WEBGL_depth_texture": + i = e.getExtension("WEBGL_depth_texture") || e.getExtension("MOZ_WEBGL_depth_texture") || e.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + i = e.getExtension("EXT_texture_filter_anisotropic") || e.getExtension("MOZ_EXT_texture_filter_anisotropic") || e.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + i = e.getExtension("WEBGL_compressed_texture_s3tc") || e.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + i = e.getExtension("WEBGL_compressed_texture_pvrtc") || e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + i = e.getExtension(n) + } + return t[n] = i, i + } + return { + has: function(e) { + return null !== n(e) + }, + init: function() { + n("EXT_color_buffer_float"), n("WEBGL_clip_cull_distance"), n("OES_texture_float_linear"), n("EXT_color_buffer_half_float"), n("WEBGL_multisampled_render_to_texture"), n("WEBGL_render_shared_exponent") + }, + get: function(e) { + const t = n(e); + return null === t && Jt("THREE.WebGLRenderer: " + e + " extension not supported."), t + } + } + } + + function Kc(e, t, n, i) { + const r = {}, + a = new WeakMap; + + function s(e) { + const o = e.target; + null !== o.index && t.remove(o.index); + for (const e in o.attributes) t.remove(o.attributes[e]); + o.removeEventListener("dispose", s), delete r[o.id]; + const l = a.get(o); + l && (t.remove(l), a.delete(o)), i.releaseStatesOfGeometry(o), !0 === o.isInstancedBufferGeometry && delete o._maxInstanceCount, n.memory.geometries-- + } + + function o(e) { + const n = [], + i = e.index, + r = e.attributes.position; + let s = 0; + if (null !== i) { + const e = i.array; + s = i.version; + for (let t = 0, i = e.length; t < i; t += 3) { + const i = e[t + 0], + r = e[t + 1], + a = e[t + 2]; + n.push(i, r, r, a, a, i) + } + } else { + if (void 0 === r) return; + { + const e = r.array; + s = r.version; + for (let t = 0, i = e.length / 3 - 1; t < i; t += 3) { + const e = t + 0, + i = t + 1, + r = t + 2; + n.push(e, i, i, r, r, e) + } + } + } + const o = new(Kt(n) ? Zi : Xi)(n, 1); + o.version = s; + const l = a.get(e); + l && t.remove(l), a.set(e, o) + } + return { + get: function(e, t) { + return !0 === r[t.id] || (t.addEventListener("dispose", s), r[t.id] = !0, n.memory.geometries++), t + }, + update: function(n) { + const i = n.attributes; + for (const n in i) t.update(i[n], e.ARRAY_BUFFER) + }, + getWireframeAttribute: function(e) { + const t = a.get(e); + if (t) { + const n = e.index; + null !== n && t.version < n.version && o(e) + } else o(e); + return a.get(e) + } + } + } + + function qc(e, t, n) { + let i, r, a; + + function s(t, s, o) { + 0 !== o && (e.drawElementsInstanced(i, s, r, t * a, o), n.update(s, i, o)) + } + this.setMode = function(e) { + i = e + }, this.setIndex = function(e) { + r = e.type, a = e.bytesPerElement + }, this.render = function(t, s) { + e.drawElements(i, s, r, t * a), n.update(s, i, 1) + }, this.renderInstances = s, this.renderMultiDraw = function(e, a, s) { + if (0 === s) return; + t.get("WEBGL_multi_draw").multiDrawElementsWEBGL(i, a, 0, r, e, 0, s); + let o = 0; + for (let e = 0; e < s; e++) o += a[e]; + n.update(o, i, 1) + }, this.renderMultiDrawInstances = function(e, o, l, c) { + if (0 === l) return; + const h = t.get("WEBGL_multi_draw"); + if (null === h) + for (let t = 0; t < e.length; t++) s(e[t] / a, o[t], c[t]); + else { + h.multiDrawElementsInstancedWEBGL(i, o, 0, r, e, 0, c, 0, l); + let t = 0; + for (let e = 0; e < l; e++) t += o[e] * c[e]; + n.update(t, i, 1) + } + } + } + + function Xc(e) { + const t = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + return { + memory: { + geometries: 0, + textures: 0 + }, + render: t, + programs: null, + autoReset: !0, + reset: function() { + t.calls = 0, t.triangles = 0, t.points = 0, t.lines = 0 + }, + update: function(n, i, r) { + switch (t.calls++, i) { + case e.TRIANGLES: + t.triangles += r * (n / 3); + break; + case e.LINES: + t.lines += r * (n / 2); + break; + case e.LINE_STRIP: + t.lines += r * (n - 1); + break; + case e.LINE_LOOP: + t.lines += r * n; + break; + case e.POINTS: + t.points += r * n; + break; + default: + console.error("THREE.WebGLInfo: Unknown draw mode:", i) + } + } + } + } + + function Zc(e, t, n) { + const i = new WeakMap, + r = new pn; + return { + update: function(a, s, o) { + const l = a.morphTargetInfluences, + c = s.morphAttributes.position || s.morphAttributes.normal || s.morphAttributes.color, + h = void 0 !== c ? c.length : 0; + let d = i.get(s); + if (void 0 === d || d.count !== h) { + void 0 !== d && d.texture.dispose(); + const u = void 0 !== s.morphAttributes.position, + p = void 0 !== s.morphAttributes.normal, + f = void 0 !== s.morphAttributes.color, + m = s.morphAttributes.position || [], + g = s.morphAttributes.normal || [], + v = s.morphAttributes.color || []; + let w = 0; + !0 === u && (w = 1), !0 === p && (w = 2), !0 === f && (w = 3); + let y = s.attributes.position.count * w, + A = 1; + y > t.maxTextureSize && (A = Math.ceil(y / t.maxTextureSize), y = t.maxTextureSize); + const b = new Float32Array(y * A * 4 * h), + x = new gn(b, y, A, h); + x.type = ye, x.needsUpdate = !0; + const k = 4 * w; + for (let S = 0; S < h; S++) { + const M = m[S], + T = g[S], + _ = v[S], + C = y * A * 4 * S; + for (let P = 0; P < M.count; P++) { + const I = P * k; + !0 === u && (r.fromBufferAttribute(M, P), b[C + I + 0] = r.x, b[C + I + 1] = r.y, b[C + I + 2] = r.z, b[C + I + 3] = 0), !0 === p && (r.fromBufferAttribute(T, P), b[C + I + 4] = r.x, b[C + I + 5] = r.y, b[C + I + 6] = r.z, b[C + I + 7] = 0), !0 === f && (r.fromBufferAttribute(_, P), b[C + I + 8] = r.x, b[C + I + 9] = r.y, b[C + I + 10] = r.z, b[C + I + 11] = 4 === _.itemSize ? r.w : 1) + } + } + + function E() { + x.dispose(), i.delete(s), s.removeEventListener("dispose", E) + } + d = { + count: h, + texture: x, + size: new jt(y, A) + }, i.set(s, d), s.addEventListener("dispose", E) + } + if (!0 === a.isInstancedMesh && null !== a.morphTexture) o.getUniforms().setValue(e, "morphTexture", a.morphTexture, n); + else { + let R = 0; + for (let D = 0; D < l.length; D++) R += l[D]; + const L = s.morphTargetsRelative ? 1 : 1 - R; + o.getUniforms().setValue(e, "morphTargetBaseInfluence", L), o.getUniforms().setValue(e, "morphTargetInfluences", l) + } + o.getUniforms().setValue(e, "morphTargetsTexture", d.texture, n), o.getUniforms().setValue(e, "morphTargetsTextureSize", d.size) + } + } + } + + function Jc(e, t, n, i) { + let r = new WeakMap; + + function a(e) { + const t = e.target; + t.removeEventListener("dispose", a), n.remove(t.instanceMatrix), null !== t.instanceColor && n.remove(t.instanceColor) + } + return { + update: function(s) { + const o = i.render.frame, + l = s.geometry, + c = t.get(s, l); + if (r.get(c) !== o && (t.update(c), r.set(c, o)), s.isInstancedMesh && (!1 === s.hasEventListener("dispose", a) && s.addEventListener("dispose", a), r.get(s) !== o && (n.update(s.instanceMatrix, e.ARRAY_BUFFER), null !== s.instanceColor && n.update(s.instanceColor, e.ARRAY_BUFFER), r.set(s, o))), s.isSkinnedMesh) { + const e = s.skeleton; + r.get(e) !== o && (e.update(), r.set(e, o)) + } + return c + }, + dispose: function() { + r = new WeakMap + } + } + } + const $c = new un, + eh = new Wa(1, 1), + th = new gn, + nh = new vn, + ih = new Lr, + rh = [], + ah = [], + sh = new Float32Array(16), + oh = new Float32Array(9), + lh = new Float32Array(4); + + function ch(e, t, n) { + const i = e[0]; + if (i <= 0 || i > 0) return e; + const r = t * n; + let a = rh[r]; + if (void 0 === a && (a = new Float32Array(r), rh[r] = a), 0 !== t) { + i.toArray(a, 0); + for (let i = 1, r = 0; i !== t; ++i) r += n, e[i].toArray(a, r) + } + return a + } + + function hh(e, t) { + if (e.length !== t.length) return !1; + for (let n = 0, i = e.length; n < i; n++) + if (e[n] !== t[n]) return !1; + return !0 + } + + function dh(e, t) { + for (let n = 0, i = t.length; n < i; n++) e[n] = t[n] + } + + function uh(e, t) { + let n = ah[t]; + void 0 === n && (n = new Int32Array(t), ah[t] = n); + for (let i = 0; i !== t; ++i) n[i] = e.allocateTextureUnit(); + return n + } + + function ph(e, t) { + const n = this.cache; + n[0] !== t && (e.uniform1f(this.addr, t), n[0] = t) + } + + function fh(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y || (e.uniform2f(this.addr, t.x, t.y), n[0] = t.x, n[1] = t.y); + else { + if (hh(n, t)) return; + e.uniform2fv(this.addr, t), dh(n, t) + } + } + + function mh(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z || (e.uniform3f(this.addr, t.x, t.y, t.z), n[0] = t.x, n[1] = t.y, n[2] = t.z); + else if (void 0 !== t.r) n[0] === t.r && n[1] === t.g && n[2] === t.b || (e.uniform3f(this.addr, t.r, t.g, t.b), n[0] = t.r, n[1] = t.g, n[2] = t.b); + else { + if (hh(n, t)) return; + e.uniform3fv(this.addr, t), dh(n, t) + } + } + + function gh(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z && n[3] === t.w || (e.uniform4f(this.addr, t.x, t.y, t.z, t.w), n[0] = t.x, n[1] = t.y, n[2] = t.z, n[3] = t.w); + else { + if (hh(n, t)) return; + e.uniform4fv(this.addr, t), dh(n, t) + } + } + + function vh(e, t) { + const n = this.cache, + i = t.elements; + if (void 0 === i) { + if (hh(n, t)) return; + e.uniformMatrix2fv(this.addr, !1, t), dh(n, t) + } else { + if (hh(n, i)) return; + lh.set(i), e.uniformMatrix2fv(this.addr, !1, lh), dh(n, i) + } + } + + function wh(e, t) { + const n = this.cache, + i = t.elements; + if (void 0 === i) { + if (hh(n, t)) return; + e.uniformMatrix3fv(this.addr, !1, t), dh(n, t) + } else { + if (hh(n, i)) return; + oh.set(i), e.uniformMatrix3fv(this.addr, !1, oh), dh(n, i) + } + } + + function yh(e, t) { + const n = this.cache, + i = t.elements; + if (void 0 === i) { + if (hh(n, t)) return; + e.uniformMatrix4fv(this.addr, !1, t), dh(n, t) + } else { + if (hh(n, i)) return; + sh.set(i), e.uniformMatrix4fv(this.addr, !1, sh), dh(n, i) + } + } + + function Ah(e, t) { + const n = this.cache; + n[0] !== t && (e.uniform1i(this.addr, t), n[0] = t) + } + + function bh(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y || (e.uniform2i(this.addr, t.x, t.y), n[0] = t.x, n[1] = t.y); + else { + if (hh(n, t)) return; + e.uniform2iv(this.addr, t), dh(n, t) + } + } + + function xh(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z || (e.uniform3i(this.addr, t.x, t.y, t.z), n[0] = t.x, n[1] = t.y, n[2] = t.z); + else { + if (hh(n, t)) return; + e.uniform3iv(this.addr, t), dh(n, t) + } + } + + function kh(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z && n[3] === t.w || (e.uniform4i(this.addr, t.x, t.y, t.z, t.w), n[0] = t.x, n[1] = t.y, n[2] = t.z, n[3] = t.w); + else { + if (hh(n, t)) return; + e.uniform4iv(this.addr, t), dh(n, t) + } + } + + function Eh(e, t) { + const n = this.cache; + n[0] !== t && (e.uniform1ui(this.addr, t), n[0] = t) + } + + function Sh(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y || (e.uniform2ui(this.addr, t.x, t.y), n[0] = t.x, n[1] = t.y); + else { + if (hh(n, t)) return; + e.uniform2uiv(this.addr, t), dh(n, t) + } + } + + function Mh(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z || (e.uniform3ui(this.addr, t.x, t.y, t.z), n[0] = t.x, n[1] = t.y, n[2] = t.z); + else { + if (hh(n, t)) return; + e.uniform3uiv(this.addr, t), dh(n, t) + } + } + + function Th(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z && n[3] === t.w || (e.uniform4ui(this.addr, t.x, t.y, t.z, t.w), n[0] = t.x, n[1] = t.y, n[2] = t.z, n[3] = t.w); + else { + if (hh(n, t)) return; + e.uniform4uiv(this.addr, t), dh(n, t) + } + } + + function _h(e, t, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + let a; + i[0] !== r && (e.uniform1i(this.addr, r), i[0] = r), this.type === e.SAMPLER_2D_SHADOW ? (eh.compareFunction = 515, a = eh) : a = $c, n.setTexture2D(t || a, r) + } + + function Ch(e, t, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (e.uniform1i(this.addr, r), i[0] = r), n.setTexture3D(t || nh, r) + } + + function Ph(e, t, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (e.uniform1i(this.addr, r), i[0] = r), n.setTextureCube(t || ih, r) + } + + function Ih(e, t, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (e.uniform1i(this.addr, r), i[0] = r), n.setTexture2DArray(t || th, r) + } + + function Rh(e, t) { + e.uniform1fv(this.addr, t) + } + + function Lh(e, t) { + const n = ch(t, this.size, 2); + e.uniform2fv(this.addr, n) + } + + function Dh(e, t) { + const n = ch(t, this.size, 3); + e.uniform3fv(this.addr, n) + } + + function Nh(e, t) { + const n = ch(t, this.size, 4); + e.uniform4fv(this.addr, n) + } + + function Bh(e, t) { + const n = ch(t, this.size, 4); + e.uniformMatrix2fv(this.addr, !1, n) + } + + function Uh(e, t) { + const n = ch(t, this.size, 9); + e.uniformMatrix3fv(this.addr, !1, n) + } + + function zh(e, t) { + const n = ch(t, this.size, 16); + e.uniformMatrix4fv(this.addr, !1, n) + } + + function Oh(e, t) { + e.uniform1iv(this.addr, t) + } + + function Fh(e, t) { + e.uniform2iv(this.addr, t) + } + + function Wh(e, t) { + e.uniform3iv(this.addr, t) + } + + function Vh(e, t) { + e.uniform4iv(this.addr, t) + } + + function Hh(e, t) { + e.uniform1uiv(this.addr, t) + } + + function Gh(e, t) { + e.uniform2uiv(this.addr, t) + } + + function jh(e, t) { + e.uniform3uiv(this.addr, t) + } + + function Qh(e, t) { + e.uniform4uiv(this.addr, t) + } + + function Yh(e, t, n) { + const i = this.cache, + r = t.length, + a = uh(n, r); + hh(i, a) || (e.uniform1iv(this.addr, a), dh(i, a)); + for (let e = 0; e !== r; ++e) n.setTexture2D(t[e] || $c, a[e]) + } + + function Kh(e, t, n) { + const i = this.cache, + r = t.length, + a = uh(n, r); + hh(i, a) || (e.uniform1iv(this.addr, a), dh(i, a)); + for (let e = 0; e !== r; ++e) n.setTexture3D(t[e] || nh, a[e]) + } + + function qh(e, t, n) { + const i = this.cache, + r = t.length, + a = uh(n, r); + hh(i, a) || (e.uniform1iv(this.addr, a), dh(i, a)); + for (let e = 0; e !== r; ++e) n.setTextureCube(t[e] || ih, a[e]) + } + + function Xh(e, t, n) { + const i = this.cache, + r = t.length, + a = uh(n, r); + hh(i, a) || (e.uniform1iv(this.addr, a), dh(i, a)); + for (let e = 0; e !== r; ++e) n.setTexture2DArray(t[e] || th, a[e]) + } + class Zh { + constructor(e, t, n) { + this.id = e, this.addr = n, this.cache = [], this.type = t.type, this.setValue = function(e) { + switch (e) { + case 5126: + return ph; + case 35664: + return fh; + case 35665: + return mh; + case 35666: + return gh; + case 35674: + return vh; + case 35675: + return wh; + case 35676: + return yh; + case 5124: + case 35670: + return Ah; + case 35667: + case 35671: + return bh; + case 35668: + case 35672: + return xh; + case 35669: + case 35673: + return kh; + case 5125: + return Eh; + case 36294: + return Sh; + case 36295: + return Mh; + case 36296: + return Th; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return _h; + case 35679: + case 36299: + case 36307: + return Ch; + case 35680: + case 36300: + case 36308: + case 36293: + return Ph; + case 36289: + case 36303: + case 36311: + case 36292: + return Ih + } + }(t.type) + } + } + class Jh { + constructor(e, t, n) { + this.id = e, this.addr = n, this.cache = [], this.type = t.type, this.size = t.size, this.setValue = function(e) { + switch (e) { + case 5126: + return Rh; + case 35664: + return Lh; + case 35665: + return Dh; + case 35666: + return Nh; + case 35674: + return Bh; + case 35675: + return Uh; + case 35676: + return zh; + case 5124: + case 35670: + return Oh; + case 35667: + case 35671: + return Fh; + case 35668: + case 35672: + return Wh; + case 35669: + case 35673: + return Vh; + case 5125: + return Hh; + case 36294: + return Gh; + case 36295: + return jh; + case 36296: + return Qh; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return Yh; + case 35679: + case 36299: + case 36307: + return Kh; + case 35680: + case 36300: + case 36308: + case 36293: + return qh; + case 36289: + case 36303: + case 36311: + case 36292: + return Xh + } + }(t.type) + } + } + class $h { + constructor(e) { + this.id = e, this.seq = [], this.map = {} + } + setValue(e, t, n) { + const i = this.seq; + for (let r = 0, a = i.length; r !== a; ++r) { + const a = i[r]; + a.setValue(e, t[a.id], n) + } + } + } + const ed = /(\w+)(\])?(\[|\.)?/g; + + function td(e, t) { + e.seq.push(t), e.map[t.id] = t + } + + function nd(e, t, n) { + const i = e.name, + r = i.length; + for (ed.lastIndex = 0;;) { + const a = ed.exec(i), + s = ed.lastIndex; + let o = a[1]; + const l = "]" === a[2], + c = a[3]; + if (l && (o |= 0), void 0 === c || "[" === c && s + 2 === r) { + td(n, void 0 === c ? new Zh(o, e, t) : new Jh(o, e, t)); + break + } { + let e = n.map[o]; + void 0 === e && (e = new $h(o), td(n, e)), n = e + } + } + } + class id { + constructor(e, t) { + this.seq = [], this.map = {}; + const n = e.getProgramParameter(t, e.ACTIVE_UNIFORMS); + for (let i = 0; i < n; ++i) { + const n = e.getActiveUniform(t, i); + nd(n, e.getUniformLocation(t, n.name), this) + } + } + setValue(e, t, n, i) { + const r = this.map[t]; + void 0 !== r && r.setValue(e, n, i) + } + setOptional(e, t, n) { + const i = t[n]; + void 0 !== i && this.setValue(e, n, i) + } + static upload(e, t, n, i) { + for (let r = 0, a = t.length; r !== a; ++r) { + const a = t[r], + s = n[a.id]; + !1 !== s.needsUpdate && a.setValue(e, s.value, i) + } + } + static seqWithValue(e, t) { + const n = []; + for (let i = 0, r = e.length; i !== r; ++i) { + const r = e[i]; + r.id in t && n.push(r) + } + return n + } + } + + function rd(e, t, n) { + const i = e.createShader(t); + return e.shaderSource(i, n), e.compileShader(i), i + } + let ad = 0; + const sd = new Qt; + + function od(e, t, n) { + const i = e.getShaderParameter(t, e.COMPILE_STATUS), + r = e.getShaderInfoLog(t).trim(); + if (i && "" === r) return ""; + const a = /ERROR: 0:(\d+)/.exec(r); + if (a) { + const i = parseInt(a[1]); + return n.toUpperCase() + "\n\n" + r + "\n\n" + function(e, t) { + const n = e.split("\n"), + i = [], + r = Math.max(t - 6, 0), + a = Math.min(t + 6, n.length); + for (let e = r; e < a; e++) { + const r = e + 1; + i.push(`${r===t?">":" "} ${r}: ${n[e]}`) + } + return i.join("\n") + }(e.getShaderSource(t), i) + } + return r + } + + function ld(e, t) { + const n = function(e) { + nn._getMatrix(sd, nn.workingColorSpace, e); + const t = `mat3( ${sd.elements.map((e=>e.toFixed(4)))} )`; + switch (nn.getTransfer(e)) { + case wt: + return [t, "LinearTransferOETF"]; + case yt: + return [t, "sRGBTransferOETF"]; + default: + return console.warn("THREE.WebGLProgram: Unsupported color space: ", e), [t, "LinearTransferOETF"] + } + }(t); + return [`vec4 ${e}( vec4 value ) {`, `\treturn ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`, "}"].join("\n") + } + + function cd(e, t) { + let n; + switch (t) { + case 1: + n = "Linear"; + break; + case 2: + n = "Reinhard"; + break; + case 3: + n = "Cineon"; + break; + case 4: + n = "ACESFilmic"; + break; + case 6: + n = "AgX"; + break; + case 7: + n = "Neutral"; + break; + case 5: + n = "Custom"; + break; + default: + console.warn("THREE.WebGLProgram: Unsupported toneMapping:", t), n = "Linear" + } + return "vec3 " + e + "( vec3 color ) { return " + n + "ToneMapping( color ); }" + } + const hd = new yn; + + function dd() { + nn.getLuminanceCoefficients(hd); + return ["float luminance( const in vec3 rgb ) {", `\tconst vec3 weights = vec3( ${hd.x.toFixed(4)}, ${hd.y.toFixed(4)}, ${hd.z.toFixed(4)} );`, "\treturn dot( weights, rgb );", "}"].join("\n") + } + + function ud(e) { + return "" !== e + } + + function pd(e, t) { + const n = t.numSpotLightShadows + t.numSpotLightMaps - t.numSpotLightShadowsWithMaps; + return e.replace(/NUM_DIR_LIGHTS/g, t.numDirLights).replace(/NUM_SPOT_LIGHTS/g, t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g, t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g, n).replace(/NUM_RECT_AREA_LIGHTS/g, t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, t.numPointLights).replace(/NUM_HEMI_LIGHTS/g, t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g, t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, t.numPointLightShadows) + } + + function fd(e, t) { + return e.replace(/NUM_CLIPPING_PLANES/g, t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, t.numClippingPlanes - t.numClipIntersection) + } + const md = /^[ \t]*#include +<([\w\d./]+)>/gm; + + function gd(e) { + return e.replace(md, wd) + } + const vd = new Map; + + function wd(e, t) { + let n = gc[t]; + if (void 0 === n) { + const e = vd.get(t); + if (void 0 === e) throw new Error("Can not resolve #include <" + t + ">"); + n = gc[e], console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.', t, e) + } + return gd(n) + } + const yd = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; + + function Ad(e) { + return e.replace(yd, bd) + } + + function bd(e, t, n, i) { + let r = ""; + for (let e = parseInt(t); e < parseInt(n); e++) r += i.replace(/\[\s*i\s*\]/g, "[ " + e + " ]").replace(/UNROLLED_LOOP_INDEX/g, e); + return r + } + + function xd(e) { + let t = `precision ${e.precision} float;\n\tprecision ${e.precision} int;\n\tprecision ${e.precision} sampler2D;\n\tprecision ${e.precision} samplerCube;\n\tprecision ${e.precision} sampler3D;\n\tprecision ${e.precision} sampler2DArray;\n\tprecision ${e.precision} sampler2DShadow;\n\tprecision ${e.precision} samplerCubeShadow;\n\tprecision ${e.precision} sampler2DArrayShadow;\n\tprecision ${e.precision} isampler2D;\n\tprecision ${e.precision} isampler3D;\n\tprecision ${e.precision} isamplerCube;\n\tprecision ${e.precision} isampler2DArray;\n\tprecision ${e.precision} usampler2D;\n\tprecision ${e.precision} usampler3D;\n\tprecision ${e.precision} usamplerCube;\n\tprecision ${e.precision} usampler2DArray;\n\t`; + return "highp" === e.precision ? t += "\n#define HIGH_PRECISION" : "mediump" === e.precision ? t += "\n#define MEDIUM_PRECISION" : "lowp" === e.precision && (t += "\n#define LOW_PRECISION"), t + } + + function kd(e, t, n, i) { + const r = e.getContext(), + a = n.defines; + let s = n.vertexShader, + o = n.fragmentShader; + const l = function(e) { + let t = "SHADOWMAP_TYPE_BASIC"; + return 1 === e.shadowMapType ? t = "SHADOWMAP_TYPE_PCF" : 2 === e.shadowMapType ? t = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === e.shadowMapType && (t = "SHADOWMAP_TYPE_VSM"), t + }(n), + c = function(e) { + let t = "ENVMAP_TYPE_CUBE"; + if (e.envMap) switch (e.envMapMode) { + case $: + case ee: + t = "ENVMAP_TYPE_CUBE"; + break; + case ie: + t = "ENVMAP_TYPE_CUBE_UV" + } + return t + }(n), + h = function(e) { + let t = "ENVMAP_MODE_REFLECTION"; + e.envMap && e.envMapMode === ee && (t = "ENVMAP_MODE_REFRACTION"); + return t + }(n), + d = function(e) { + let t = "ENVMAP_BLENDING_NONE"; + if (e.envMap) switch (e.combine) { + case 0: + t = "ENVMAP_BLENDING_MULTIPLY"; + break; + case 1: + t = "ENVMAP_BLENDING_MIX"; + break; + case 2: + t = "ENVMAP_BLENDING_ADD" + } + return t + }(n), + u = function(e) { + const t = e.envMapCubeUVHeight; + if (null === t) return null; + const n = Math.log2(t) - 2, + i = 1 / t; + return { + texelWidth: 1 / (3 * Math.max(Math.pow(2, n), 112)), + texelHeight: i, + maxMip: n + } + }(n), + p = function(e) { + return [e.extensionClipCullDistance ? "#extension GL_ANGLE_clip_cull_distance : require" : "", e.extensionMultiDraw ? "#extension GL_ANGLE_multi_draw : require" : ""].filter(ud).join("\n") + }(n), + f = function(e) { + const t = []; + for (const n in e) { + const i = e[n]; + !1 !== i && t.push("#define " + n + " " + i) + } + return t.join("\n") + }(a), + m = r.createProgram(); + let g, v, w = n.glslVersion ? "#version " + n.glslVersion + "\n" : ""; + n.isRawShaderMaterial ? (g = ["#define SHADER_TYPE " + n.shaderType, "#define SHADER_NAME " + n.shaderName, f].filter(ud).join("\n"), g.length > 0 && (g += "\n"), v = ["#define SHADER_TYPE " + n.shaderType, "#define SHADER_NAME " + n.shaderName, f].filter(ud).join("\n"), v.length > 0 && (v += "\n")) : (g = [xd(n), "#define SHADER_TYPE " + n.shaderType, "#define SHADER_NAME " + n.shaderName, f, n.extensionClipCullDistance ? "#define USE_CLIP_DISTANCE" : "", n.batching ? "#define USE_BATCHING" : "", n.batchingColor ? "#define USE_BATCHING_COLOR" : "", n.instancing ? "#define USE_INSTANCING" : "", n.instancingColor ? "#define USE_INSTANCING_COLOR" : "", n.instancingMorph ? "#define USE_INSTANCING_MORPH" : "", n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + h : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", n.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", n.displacementMap ? "#define USE_DISPLACEMENTMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.anisotropy ? "#define USE_ANISOTROPY" : "", n.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", n.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", n.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.alphaHash ? "#define USE_ALPHAHASH" : "", n.transmission ? "#define USE_TRANSMISSION" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.thicknessMap ? "#define USE_THICKNESSMAP" : "", n.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", n.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", n.mapUv ? "#define MAP_UV " + n.mapUv : "", n.alphaMapUv ? "#define ALPHAMAP_UV " + n.alphaMapUv : "", n.lightMapUv ? "#define LIGHTMAP_UV " + n.lightMapUv : "", n.aoMapUv ? "#define AOMAP_UV " + n.aoMapUv : "", n.emissiveMapUv ? "#define EMISSIVEMAP_UV " + n.emissiveMapUv : "", n.bumpMapUv ? "#define BUMPMAP_UV " + n.bumpMapUv : "", n.normalMapUv ? "#define NORMALMAP_UV " + n.normalMapUv : "", n.displacementMapUv ? "#define DISPLACEMENTMAP_UV " + n.displacementMapUv : "", n.metalnessMapUv ? "#define METALNESSMAP_UV " + n.metalnessMapUv : "", n.roughnessMapUv ? "#define ROUGHNESSMAP_UV " + n.roughnessMapUv : "", n.anisotropyMapUv ? "#define ANISOTROPYMAP_UV " + n.anisotropyMapUv : "", n.clearcoatMapUv ? "#define CLEARCOATMAP_UV " + n.clearcoatMapUv : "", n.clearcoatNormalMapUv ? "#define CLEARCOAT_NORMALMAP_UV " + n.clearcoatNormalMapUv : "", n.clearcoatRoughnessMapUv ? "#define CLEARCOAT_ROUGHNESSMAP_UV " + n.clearcoatRoughnessMapUv : "", n.iridescenceMapUv ? "#define IRIDESCENCEMAP_UV " + n.iridescenceMapUv : "", n.iridescenceThicknessMapUv ? "#define IRIDESCENCE_THICKNESSMAP_UV " + n.iridescenceThicknessMapUv : "", n.sheenColorMapUv ? "#define SHEEN_COLORMAP_UV " + n.sheenColorMapUv : "", n.sheenRoughnessMapUv ? "#define SHEEN_ROUGHNESSMAP_UV " + n.sheenRoughnessMapUv : "", n.specularMapUv ? "#define SPECULARMAP_UV " + n.specularMapUv : "", n.specularColorMapUv ? "#define SPECULAR_COLORMAP_UV " + n.specularColorMapUv : "", n.specularIntensityMapUv ? "#define SPECULAR_INTENSITYMAP_UV " + n.specularIntensityMapUv : "", n.transmissionMapUv ? "#define TRANSMISSIONMAP_UV " + n.transmissionMapUv : "", n.thicknessMapUv ? "#define THICKNESSMAP_UV " + n.thicknessMapUv : "", n.vertexTangents && !1 === n.flatShading ? "#define USE_TANGENT" : "", n.vertexColors ? "#define USE_COLOR" : "", n.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", n.vertexUv1s ? "#define USE_UV1" : "", n.vertexUv2s ? "#define USE_UV2" : "", n.vertexUv3s ? "#define USE_UV3" : "", n.pointsUvs ? "#define USE_POINTS_UV" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.skinning ? "#define USE_SKINNING" : "", n.morphTargets ? "#define USE_MORPHTARGETS" : "", n.morphNormals && !1 === n.flatShading ? "#define USE_MORPHNORMALS" : "", n.morphColors ? "#define USE_MORPHCOLORS" : "", n.morphTargetsCount > 0 ? "#define MORPHTARGETS_TEXTURE_STRIDE " + n.morphTextureStride : "", n.morphTargetsCount > 0 ? "#define MORPHTARGETS_COUNT " + n.morphTargetsCount : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", n.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.reverseDepthBuffer ? "#define USE_REVERSEDEPTHBUF" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", "\tattribute mat4 instanceMatrix;", "#endif", "#ifdef USE_INSTANCING_COLOR", "\tattribute vec3 instanceColor;", "#endif", "#ifdef USE_INSTANCING_MORPH", "\tuniform sampler2D morphTexture;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_UV1", "\tattribute vec2 uv1;", "#endif", "#ifdef USE_UV2", "\tattribute vec2 uv2;", "#endif", "#ifdef USE_UV3", "\tattribute vec2 uv3;", "#endif", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#if defined( USE_COLOR_ALPHA )", "\tattribute vec4 color;", "#elif defined( USE_COLOR )", "\tattribute vec3 color;", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(ud).join("\n"), v = [xd(n), "#define SHADER_TYPE " + n.shaderType, "#define SHADER_NAME " + n.shaderName, f, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.alphaToCoverage ? "#define ALPHA_TO_COVERAGE" : "", n.map ? "#define USE_MAP" : "", n.matcap ? "#define USE_MATCAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + c : "", n.envMap ? "#define " + h : "", n.envMap ? "#define " + d : "", u ? "#define CUBEUV_TEXEL_WIDTH " + u.texelWidth : "", u ? "#define CUBEUV_TEXEL_HEIGHT " + u.texelHeight : "", u ? "#define CUBEUV_MAX_MIP " + u.maxMip + ".0" : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", n.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.anisotropy ? "#define USE_ANISOTROPY" : "", n.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", n.clearcoat ? "#define USE_CLEARCOAT" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.dispersion ? "#define USE_DISPERSION" : "", n.iridescence ? "#define USE_IRIDESCENCE" : "", n.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", n.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", n.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.alphaTest ? "#define USE_ALPHATEST" : "", n.alphaHash ? "#define USE_ALPHAHASH" : "", n.sheen ? "#define USE_SHEEN" : "", n.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", n.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", n.transmission ? "#define USE_TRANSMISSION" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.thicknessMap ? "#define USE_THICKNESSMAP" : "", n.vertexTangents && !1 === n.flatShading ? "#define USE_TANGENT" : "", n.vertexColors || n.instancingColor || n.batchingColor ? "#define USE_COLOR" : "", n.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", n.vertexUv1s ? "#define USE_UV1" : "", n.vertexUv2s ? "#define USE_UV2" : "", n.vertexUv3s ? "#define USE_UV3" : "", n.pointsUvs ? "#define USE_POINTS_UV" : "", n.gradientMap ? "#define USE_GRADIENTMAP" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", n.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", n.decodeVideoTexture ? "#define DECODE_VIDEO_TEXTURE" : "", n.decodeVideoTextureEmissive ? "#define DECODE_VIDEO_TEXTURE_EMISSIVE" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.reverseDepthBuffer ? "#define USE_REVERSEDEPTHBUF" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== n.toneMapping ? "#define TONE_MAPPING" : "", 0 !== n.toneMapping ? gc.tonemapping_pars_fragment : "", 0 !== n.toneMapping ? cd("toneMapping", n.toneMapping) : "", n.dithering ? "#define DITHERING" : "", n.opaque ? "#define OPAQUE" : "", gc.colorspace_pars_fragment, ld("linearToOutputTexel", n.outputColorSpace), dd(), n.useDepthPacking ? "#define DEPTH_PACKING " + n.depthPacking : "", "\n"].filter(ud).join("\n")), s = gd(s), s = pd(s, n), s = fd(s, n), o = gd(o), o = pd(o, n), o = fd(o, n), s = Ad(s), o = Ad(o), !0 !== n.isRawShaderMaterial && (w = "#version 300 es\n", g = [p, "#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + g, v = ["#define varying in", n.glslVersion === Pt ? "" : "layout(location = 0) out highp vec4 pc_fragColor;", n.glslVersion === Pt ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + v); + const y = w + g + s, + A = w + v + o, + b = rd(r, r.VERTEX_SHADER, y), + x = rd(r, r.FRAGMENT_SHADER, A); + + function k(t) { + if (e.debug.checkShaderErrors) { + const n = r.getProgramInfoLog(m).trim(), + i = r.getShaderInfoLog(b).trim(), + a = r.getShaderInfoLog(x).trim(); + let s = !0, + o = !0; + if (!1 === r.getProgramParameter(m, r.LINK_STATUS)) + if (s = !1, "function" == typeof e.debug.onShaderError) e.debug.onShaderError(r, m, b, x); + else { + const e = od(r, b, "vertex"), + i = od(r, x, "fragment"); + console.error("THREE.WebGLProgram: Shader Error " + r.getError() + " - VALIDATE_STATUS " + r.getProgramParameter(m, r.VALIDATE_STATUS) + "\n\nMaterial Name: " + t.name + "\nMaterial Type: " + t.type + "\n\nProgram Info Log: " + n + "\n" + e + "\n" + i) + } + else "" !== n ? console.warn("THREE.WebGLProgram: Program Info Log:", n) : "" !== i && "" !== a || (o = !1); + o && (t.diagnostics = { + runnable: s, + programLog: n, + vertexShader: { + log: i, + prefix: g + }, + fragmentShader: { + log: a, + prefix: v + } + }) + } + r.deleteShader(b), r.deleteShader(x), E = new id(r, m), S = function(e, t) { + const n = {}, + i = e.getProgramParameter(t, e.ACTIVE_ATTRIBUTES); + for (let r = 0; r < i; r++) { + const i = e.getActiveAttrib(t, r), + a = i.name; + let s = 1; + i.type === e.FLOAT_MAT2 && (s = 2), i.type === e.FLOAT_MAT3 && (s = 3), i.type === e.FLOAT_MAT4 && (s = 4), n[a] = { + type: i.type, + location: e.getAttribLocation(t, a), + locationSize: s + } + } + return n + }(r, m) + } + let E, S; + r.attachShader(m, b), r.attachShader(m, x), void 0 !== n.index0AttributeName ? r.bindAttribLocation(m, 0, n.index0AttributeName) : !0 === n.morphTargets && r.bindAttribLocation(m, 0, "position"), r.linkProgram(m), this.getUniforms = function() { + return void 0 === E && k(this), E + }, this.getAttributes = function() { + return void 0 === S && k(this), S + }; + let M = !1 === n.rendererExtensionParallelShaderCompile; + return this.isReady = function() { + return !1 === M && (M = r.getProgramParameter(m, 37297)), M + }, this.destroy = function() { + i.releaseStatesOfProgram(this), r.deleteProgram(m), this.program = void 0 + }, this.type = n.shaderType, this.name = n.shaderName, this.id = ad++, this.cacheKey = t, this.usedTimes = 1, this.program = m, this.vertexShader = b, this.fragmentShader = x, this + } + let Ed = 0; + class Sd { + constructor() { + this.shaderCache = new Map, this.materialCache = new Map + } + update(e) { + const t = e.vertexShader, + n = e.fragmentShader, + i = this._getShaderStage(t), + r = this._getShaderStage(n), + a = this._getShaderCacheForMaterial(e); + return !1 === a.has(i) && (a.add(i), i.usedTimes++), !1 === a.has(r) && (a.add(r), r.usedTimes++), this + } + remove(e) { + const t = this.materialCache.get(e); + for (const e of t) e.usedTimes--, 0 === e.usedTimes && this.shaderCache.delete(e.code); + return this.materialCache.delete(e), this + } + getVertexShaderID(e) { + return this._getShaderStage(e.vertexShader).id + } + getFragmentShaderID(e) { + return this._getShaderStage(e.fragmentShader).id + } + dispose() { + this.shaderCache.clear(), this.materialCache.clear() + } + _getShaderCacheForMaterial(e) { + const t = this.materialCache; + let n = t.get(e); + return void 0 === n && (n = new Set, t.set(e, n)), n + } + _getShaderStage(e) { + const t = this.shaderCache; + let n = t.get(e); + return void 0 === n && (n = new Md(e), t.set(e, n)), n + } + } + class Md { + constructor(e) { + this.id = Ed++, this.code = e, this.usedTimes = 0 + } + } + + function Td(e, t, n, i, r, a, s) { + const o = new si, + l = new Sd, + c = new Set, + h = [], + d = r.logarithmicDepthBuffer, + u = r.vertexTextures; + let p = r.precision; + const f = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "toon", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + }; + + function m(e) { + return c.add(e), 0 === e ? "uv" : `uv${e}` + } + return { + getParameters: function(a, o, h, g, v) { + const w = g.fog, + y = v.geometry, + A = a.isMeshStandardMaterial ? g.environment : null, + b = (a.isMeshStandardMaterial ? n : t).get(a.envMap || A), + x = b && b.mapping === ie ? b.image.height : null, + k = f[a.type]; + null !== a.precision && (p = r.getMaxPrecision(a.precision), p !== a.precision && console.warn("THREE.WebGLProgram.getParameters:", a.precision, "not supported, using", p, "instead.")); + const E = y.morphAttributes.position || y.morphAttributes.normal || y.morphAttributes.color, + S = void 0 !== E ? E.length : 0; + let M, T, _, C, P = 0; + if (void 0 !== y.morphAttributes.position && (P = 1), void 0 !== y.morphAttributes.normal && (P = 2), void 0 !== y.morphAttributes.color && (P = 3), k) { + const e = wc[k]; + M = e.vertexShader, T = e.fragmentShader + } else M = a.vertexShader, T = a.fragmentShader, l.update(a), _ = l.getVertexShaderID(a), C = l.getFragmentShaderID(a); + const I = e.getRenderTarget(), + R = e.state.buffers.depth.getReversed(), + L = !0 === v.isInstancedMesh, + D = !0 === v.isBatchedMesh, + N = !!a.map, + B = !!a.matcap, + U = !!b, + z = !!a.aoMap, + O = !!a.lightMap, + F = !!a.bumpMap, + W = !!a.normalMap, + V = !!a.displacementMap, + H = !!a.emissiveMap, + G = !!a.metalnessMap, + j = !!a.roughnessMap, + Q = a.anisotropy > 0, + Y = a.clearcoat > 0, + K = a.dispersion > 0, + q = a.iridescence > 0, + X = a.sheen > 0, + Z = a.transmission > 0, + J = Q && !!a.anisotropyMap, + $ = Y && !!a.clearcoatMap, + ee = Y && !!a.clearcoatNormalMap, + te = Y && !!a.clearcoatRoughnessMap, + ne = q && !!a.iridescenceMap, + re = q && !!a.iridescenceThicknessMap, + ae = X && !!a.sheenColorMap, + se = X && !!a.sheenRoughnessMap, + oe = !!a.specularMap, + le = !!a.specularColorMap, + ce = !!a.specularIntensityMap, + he = Z && !!a.transmissionMap, + de = Z && !!a.thicknessMap, + ue = !!a.gradientMap, + pe = !!a.alphaMap, + fe = a.alphaTest > 0, + me = !!a.alphaHash, + ge = !!a.extensions; + let ve = 0; + a.toneMapped && (null !== I && !0 !== I.isXRRenderTarget || (ve = e.toneMapping)); + const we = { + shaderID: k, + shaderType: a.type, + shaderName: a.name, + vertexShader: M, + fragmentShader: T, + defines: a.defines, + customVertexShaderID: _, + customFragmentShaderID: C, + isRawShaderMaterial: !0 === a.isRawShaderMaterial, + glslVersion: a.glslVersion, + precision: p, + batching: D, + batchingColor: D && null !== v._colorsTexture, + instancing: L, + instancingColor: L && null !== v.instanceColor, + instancingMorph: L && null !== v.morphTexture, + supportsVertexTextures: u, + outputColorSpace: null === I ? e.outputColorSpace : !0 === I.isXRRenderTarget ? I.texture.colorSpace : vt, + alphaToCoverage: !!a.alphaToCoverage, + map: N, + matcap: B, + envMap: U, + envMapMode: U && b.mapping, + envMapCubeUVHeight: x, + aoMap: z, + lightMap: O, + bumpMap: F, + normalMap: W, + displacementMap: u && V, + emissiveMap: H, + normalMapObjectSpace: W && 1 === a.normalMapType, + normalMapTangentSpace: W && 0 === a.normalMapType, + metalnessMap: G, + roughnessMap: j, + anisotropy: Q, + anisotropyMap: J, + clearcoat: Y, + clearcoatMap: $, + clearcoatNormalMap: ee, + clearcoatRoughnessMap: te, + dispersion: K, + iridescence: q, + iridescenceMap: ne, + iridescenceThicknessMap: re, + sheen: X, + sheenColorMap: ae, + sheenRoughnessMap: se, + specularMap: oe, + specularColorMap: le, + specularIntensityMap: ce, + transmission: Z, + transmissionMap: he, + thicknessMap: de, + gradientMap: ue, + opaque: !1 === a.transparent && 1 === a.blending && !1 === a.alphaToCoverage, + alphaMap: pe, + alphaTest: fe, + alphaHash: me, + combine: a.combine, + mapUv: N && m(a.map.channel), + aoMapUv: z && m(a.aoMap.channel), + lightMapUv: O && m(a.lightMap.channel), + bumpMapUv: F && m(a.bumpMap.channel), + normalMapUv: W && m(a.normalMap.channel), + displacementMapUv: V && m(a.displacementMap.channel), + emissiveMapUv: H && m(a.emissiveMap.channel), + metalnessMapUv: G && m(a.metalnessMap.channel), + roughnessMapUv: j && m(a.roughnessMap.channel), + anisotropyMapUv: J && m(a.anisotropyMap.channel), + clearcoatMapUv: $ && m(a.clearcoatMap.channel), + clearcoatNormalMapUv: ee && m(a.clearcoatNormalMap.channel), + clearcoatRoughnessMapUv: te && m(a.clearcoatRoughnessMap.channel), + iridescenceMapUv: ne && m(a.iridescenceMap.channel), + iridescenceThicknessMapUv: re && m(a.iridescenceThicknessMap.channel), + sheenColorMapUv: ae && m(a.sheenColorMap.channel), + sheenRoughnessMapUv: se && m(a.sheenRoughnessMap.channel), + specularMapUv: oe && m(a.specularMap.channel), + specularColorMapUv: le && m(a.specularColorMap.channel), + specularIntensityMapUv: ce && m(a.specularIntensityMap.channel), + transmissionMapUv: he && m(a.transmissionMap.channel), + thicknessMapUv: de && m(a.thicknessMap.channel), + alphaMapUv: pe && m(a.alphaMap.channel), + vertexTangents: !!y.attributes.tangent && (W || Q), + vertexColors: a.vertexColors, + vertexAlphas: !0 === a.vertexColors && !!y.attributes.color && 4 === y.attributes.color.itemSize, + pointsUvs: !0 === v.isPoints && !!y.attributes.uv && (N || pe), + fog: !!w, + useFog: !0 === a.fog, + fogExp2: !!w && w.isFogExp2, + flatShading: !0 === a.flatShading, + sizeAttenuation: !0 === a.sizeAttenuation, + logarithmicDepthBuffer: d, + reverseDepthBuffer: R, + skinning: !0 === v.isSkinnedMesh, + morphTargets: void 0 !== y.morphAttributes.position, + morphNormals: void 0 !== y.morphAttributes.normal, + morphColors: void 0 !== y.morphAttributes.color, + morphTargetsCount: S, + morphTextureStride: P, + numDirLights: o.directional.length, + numPointLights: o.point.length, + numSpotLights: o.spot.length, + numSpotLightMaps: o.spotLightMap.length, + numRectAreaLights: o.rectArea.length, + numHemiLights: o.hemi.length, + numDirLightShadows: o.directionalShadowMap.length, + numPointLightShadows: o.pointShadowMap.length, + numSpotLightShadows: o.spotShadowMap.length, + numSpotLightShadowsWithMaps: o.numSpotLightShadowsWithMaps, + numLightProbes: o.numLightProbes, + numClippingPlanes: s.numPlanes, + numClipIntersection: s.numIntersection, + dithering: a.dithering, + shadowMapEnabled: e.shadowMap.enabled && h.length > 0, + shadowMapType: e.shadowMap.type, + toneMapping: ve, + decodeVideoTexture: N && !0 === a.map.isVideoTexture && nn.getTransfer(a.map.colorSpace) === yt, + decodeVideoTextureEmissive: H && !0 === a.emissiveMap.isVideoTexture && nn.getTransfer(a.emissiveMap.colorSpace) === yt, + premultipliedAlpha: a.premultipliedAlpha, + doubleSided: 2 === a.side, + flipSided: 1 === a.side, + useDepthPacking: a.depthPacking >= 0, + depthPacking: a.depthPacking || 0, + index0AttributeName: a.index0AttributeName, + extensionClipCullDistance: ge && !0 === a.extensions.clipCullDistance && i.has("WEBGL_clip_cull_distance"), + extensionMultiDraw: (ge && !0 === a.extensions.multiDraw || D) && i.has("WEBGL_multi_draw"), + rendererExtensionParallelShaderCompile: i.has("KHR_parallel_shader_compile"), + customProgramCacheKey: a.customProgramCacheKey() + }; + return we.vertexUv1s = c.has(1), we.vertexUv2s = c.has(2), we.vertexUv3s = c.has(3), c.clear(), we + }, + getProgramCacheKey: function(t) { + const n = []; + if (t.shaderID ? n.push(t.shaderID) : (n.push(t.customVertexShaderID), n.push(t.customFragmentShaderID)), void 0 !== t.defines) + for (const e in t.defines) n.push(e), n.push(t.defines[e]); + return !1 === t.isRawShaderMaterial && (! function(e, t) { + e.push(t.precision), e.push(t.outputColorSpace), e.push(t.envMapMode), e.push(t.envMapCubeUVHeight), e.push(t.mapUv), e.push(t.alphaMapUv), e.push(t.lightMapUv), e.push(t.aoMapUv), e.push(t.bumpMapUv), e.push(t.normalMapUv), e.push(t.displacementMapUv), e.push(t.emissiveMapUv), e.push(t.metalnessMapUv), e.push(t.roughnessMapUv), e.push(t.anisotropyMapUv), e.push(t.clearcoatMapUv), e.push(t.clearcoatNormalMapUv), e.push(t.clearcoatRoughnessMapUv), e.push(t.iridescenceMapUv), e.push(t.iridescenceThicknessMapUv), e.push(t.sheenColorMapUv), e.push(t.sheenRoughnessMapUv), e.push(t.specularMapUv), e.push(t.specularColorMapUv), e.push(t.specularIntensityMapUv), e.push(t.transmissionMapUv), e.push(t.thicknessMapUv), e.push(t.combine), e.push(t.fogExp2), e.push(t.sizeAttenuation), e.push(t.morphTargetsCount), e.push(t.morphAttributeCount), e.push(t.numDirLights), e.push(t.numPointLights), e.push(t.numSpotLights), e.push(t.numSpotLightMaps), e.push(t.numHemiLights), e.push(t.numRectAreaLights), e.push(t.numDirLightShadows), e.push(t.numPointLightShadows), e.push(t.numSpotLightShadows), e.push(t.numSpotLightShadowsWithMaps), e.push(t.numLightProbes), e.push(t.shadowMapType), e.push(t.toneMapping), e.push(t.numClippingPlanes), e.push(t.numClipIntersection), e.push(t.depthPacking) + }(n, t), function(e, t) { + o.disableAll(), t.supportsVertexTextures && o.enable(0); + t.instancing && o.enable(1); + t.instancingColor && o.enable(2); + t.instancingMorph && o.enable(3); + t.matcap && o.enable(4); + t.envMap && o.enable(5); + t.normalMapObjectSpace && o.enable(6); + t.normalMapTangentSpace && o.enable(7); + t.clearcoat && o.enable(8); + t.iridescence && o.enable(9); + t.alphaTest && o.enable(10); + t.vertexColors && o.enable(11); + t.vertexAlphas && o.enable(12); + t.vertexUv1s && o.enable(13); + t.vertexUv2s && o.enable(14); + t.vertexUv3s && o.enable(15); + t.vertexTangents && o.enable(16); + t.anisotropy && o.enable(17); + t.alphaHash && o.enable(18); + t.batching && o.enable(19); + t.dispersion && o.enable(20); + t.batchingColor && o.enable(21); + e.push(o.mask), o.disableAll(), t.fog && o.enable(0); + t.useFog && o.enable(1); + t.flatShading && o.enable(2); + t.logarithmicDepthBuffer && o.enable(3); + t.reverseDepthBuffer && o.enable(4); + t.skinning && o.enable(5); + t.morphTargets && o.enable(6); + t.morphNormals && o.enable(7); + t.morphColors && o.enable(8); + t.premultipliedAlpha && o.enable(9); + t.shadowMapEnabled && o.enable(10); + t.doubleSided && o.enable(11); + t.flipSided && o.enable(12); + t.useDepthPacking && o.enable(13); + t.dithering && o.enable(14); + t.transmission && o.enable(15); + t.sheen && o.enable(16); + t.opaque && o.enable(17); + t.pointsUvs && o.enable(18); + t.decodeVideoTexture && o.enable(19); + t.decodeVideoTextureEmissive && o.enable(20); + t.alphaToCoverage && o.enable(21); + e.push(o.mask) + }(n, t), n.push(e.outputColorSpace)), n.push(t.customProgramCacheKey), n.join() + }, + getUniforms: function(e) { + const t = f[e.type]; + let n; + if (t) { + const e = wc[t]; + n = Er.clone(e.uniforms) + } else n = e.uniforms; + return n + }, + acquireProgram: function(t, n) { + let i; + for (let e = 0, t = h.length; e < t; e++) { + const t = h[e]; + if (t.cacheKey === n) { + i = t, ++i.usedTimes; + break + } + } + return void 0 === i && (i = new kd(e, n, t, a), h.push(i)), i + }, + releaseProgram: function(e) { + if (0 == --e.usedTimes) { + const t = h.indexOf(e); + h[t] = h[h.length - 1], h.pop(), e.destroy() + } + }, + releaseShaderCache: function(e) { + l.remove(e) + }, + programs: h, + dispose: function() { + l.dispose() + } + } + } + + function _d() { + let e = new WeakMap; + return { + has: function(t) { + return e.has(t) + }, + get: function(t) { + let n = e.get(t); + return void 0 === n && (n = {}, e.set(t, n)), n + }, + remove: function(t) { + e.delete(t) + }, + update: function(t, n, i) { + e.get(t)[n] = i + }, + dispose: function() { + e = new WeakMap + } + } + } + + function Cd(e, t) { + return e.groupOrder !== t.groupOrder ? e.groupOrder - t.groupOrder : e.renderOrder !== t.renderOrder ? e.renderOrder - t.renderOrder : e.material.id !== t.material.id ? e.material.id - t.material.id : e.z !== t.z ? e.z - t.z : e.id - t.id + } + + function Pd(e, t) { + return e.groupOrder !== t.groupOrder ? e.groupOrder - t.groupOrder : e.renderOrder !== t.renderOrder ? e.renderOrder - t.renderOrder : e.z !== t.z ? t.z - e.z : e.id - t.id + } + + function Id() { + const e = []; + let t = 0; + const n = [], + i = [], + r = []; + + function a(n, i, r, a, s, o) { + let l = e[t]; + return void 0 === l ? (l = { + id: n.id, + object: n, + geometry: i, + material: r, + groupOrder: a, + renderOrder: n.renderOrder, + z: s, + group: o + }, e[t] = l) : (l.id = n.id, l.object = n, l.geometry = i, l.material = r, l.groupOrder = a, l.renderOrder = n.renderOrder, l.z = s, l.group = o), t++, l + } + return { + opaque: n, + transmissive: i, + transparent: r, + init: function() { + t = 0, n.length = 0, i.length = 0, r.length = 0 + }, + push: function(e, t, s, o, l, c) { + const h = a(e, t, s, o, l, c); + s.transmission > 0 ? i.push(h) : !0 === s.transparent ? r.push(h) : n.push(h) + }, + unshift: function(e, t, s, o, l, c) { + const h = a(e, t, s, o, l, c); + s.transmission > 0 ? i.unshift(h) : !0 === s.transparent ? r.unshift(h) : n.unshift(h) + }, + finish: function() { + for (let n = t, i = e.length; n < i; n++) { + const t = e[n]; + if (null === t.id) break; + t.id = null, t.object = null, t.geometry = null, t.material = null, t.group = null + } + }, + sort: function(e, t) { + n.length > 1 && n.sort(e || Cd), i.length > 1 && i.sort(t || Pd), r.length > 1 && r.sort(t || Pd) + } + } + } + + function Rd() { + let e = new WeakMap; + return { + get: function(t, n) { + const i = e.get(t); + let r; + return void 0 === i ? (r = new Id, e.set(t, [r])) : n >= i.length ? (r = new Id, i.push(r)) : r = i[n], r + }, + dispose: function() { + e = new WeakMap + } + } + } + + function Ld() { + const e = {}; + return { + get: function(t) { + if (void 0 !== e[t.id]) return e[t.id]; + let n; + switch (t.type) { + case "DirectionalLight": + n = { + direction: new yn, + color: new Wi + }; + break; + case "SpotLight": + n = { + position: new yn, + direction: new yn, + color: new Wi, + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + case "PointLight": + n = { + position: new yn, + color: new Wi, + distance: 0, + decay: 0 + }; + break; + case "HemisphereLight": + n = { + direction: new yn, + skyColor: new Wi, + groundColor: new Wi + }; + break; + case "RectAreaLight": + n = { + color: new Wi, + position: new yn, + halfWidth: new yn, + halfHeight: new yn + } + } + return e[t.id] = n, n + } + } + } + let Dd = 0; + + function Nd(e, t) { + return (t.castShadow ? 2 : 0) - (e.castShadow ? 2 : 0) + (t.map ? 1 : 0) - (e.map ? 1 : 0) + } + + function Bd(e) { + const t = new Ld, + n = function() { + const e = {}; + return { + get: function(t) { + if (void 0 !== e[t.id]) return e[t.id]; + let n; + switch (t.type) { + case "DirectionalLight": + case "SpotLight": + n = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new jt + }; + break; + case "PointLight": + n = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new jt, + shadowCameraNear: 1, + shadowCameraFar: 1e3 + } + } + return e[t.id] = n, n + } + } + }(), + i = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1, + numSpotMaps: -1, + numLightProbes: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotLightMap: [], + spotShadow: [], + spotShadowMap: [], + spotLightMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [], + numSpotLightShadowsWithMaps: 0, + numLightProbes: 0 + }; + for (let e = 0; e < 9; e++) i.probe.push(new yn); + const r = new yn, + a = new qn, + s = new qn; + return { + setup: function(r) { + let a = 0, + s = 0, + o = 0; + for (let e = 0; e < 9; e++) i.probe[e].set(0, 0, 0); + let l = 0, + c = 0, + h = 0, + d = 0, + u = 0, + p = 0, + f = 0, + m = 0, + g = 0, + v = 0, + w = 0; + r.sort(Nd); + for (let e = 0, y = r.length; e < y; e++) { + const y = r[e], + A = y.color, + b = y.intensity, + x = y.distance, + k = y.shadow && y.shadow.map ? y.shadow.map.texture : null; + if (y.isAmbientLight) a += A.r * b, s += A.g * b, o += A.b * b; + else if (y.isLightProbe) { + for (let e = 0; e < 9; e++) i.probe[e].addScaledVector(y.sh.coefficients[e], b); + w++ + } else if (y.isDirectionalLight) { + const e = t.get(y); + if (e.color.copy(y.color).multiplyScalar(y.intensity), y.castShadow) { + const e = y.shadow, + t = n.get(y); + t.shadowIntensity = e.intensity, t.shadowBias = e.bias, t.shadowNormalBias = e.normalBias, t.shadowRadius = e.radius, t.shadowMapSize = e.mapSize, i.directionalShadow[l] = t, i.directionalShadowMap[l] = k, i.directionalShadowMatrix[l] = y.shadow.matrix, p++ + } + i.directional[l] = e, l++ + } else if (y.isSpotLight) { + const e = t.get(y); + e.position.setFromMatrixPosition(y.matrixWorld), e.color.copy(A).multiplyScalar(b), e.distance = x, e.coneCos = Math.cos(y.angle), e.penumbraCos = Math.cos(y.angle * (1 - y.penumbra)), e.decay = y.decay, i.spot[h] = e; + const r = y.shadow; + if (y.map && (i.spotLightMap[g] = y.map, g++, r.updateMatrices(y), y.castShadow && v++), i.spotLightMatrix[h] = r.matrix, y.castShadow) { + const e = n.get(y); + e.shadowIntensity = r.intensity, e.shadowBias = r.bias, e.shadowNormalBias = r.normalBias, e.shadowRadius = r.radius, e.shadowMapSize = r.mapSize, i.spotShadow[h] = e, i.spotShadowMap[h] = k, m++ + } + h++ + } else if (y.isRectAreaLight) { + const e = t.get(y); + e.color.copy(A).multiplyScalar(b), e.halfWidth.set(.5 * y.width, 0, 0), e.halfHeight.set(0, .5 * y.height, 0), i.rectArea[d] = e, d++ + } else if (y.isPointLight) { + const e = t.get(y); + if (e.color.copy(y.color).multiplyScalar(y.intensity), e.distance = y.distance, e.decay = y.decay, y.castShadow) { + const e = y.shadow, + t = n.get(y); + t.shadowIntensity = e.intensity, t.shadowBias = e.bias, t.shadowNormalBias = e.normalBias, t.shadowRadius = e.radius, t.shadowMapSize = e.mapSize, t.shadowCameraNear = e.camera.near, t.shadowCameraFar = e.camera.far, i.pointShadow[c] = t, i.pointShadowMap[c] = k, i.pointShadowMatrix[c] = y.shadow.matrix, f++ + } + i.point[c] = e, c++ + } else if (y.isHemisphereLight) { + const e = t.get(y); + e.skyColor.copy(y.color).multiplyScalar(b), e.groundColor.copy(y.groundColor).multiplyScalar(b), i.hemi[u] = e, u++ + } + } + d > 0 && (!0 === e.has("OES_texture_float_linear") ? (i.rectAreaLTC1 = vc.LTC_FLOAT_1, i.rectAreaLTC2 = vc.LTC_FLOAT_2) : (i.rectAreaLTC1 = vc.LTC_HALF_1, i.rectAreaLTC2 = vc.LTC_HALF_2)), i.ambient[0] = a, i.ambient[1] = s, i.ambient[2] = o; + const y = i.hash; + y.directionalLength === l && y.pointLength === c && y.spotLength === h && y.rectAreaLength === d && y.hemiLength === u && y.numDirectionalShadows === p && y.numPointShadows === f && y.numSpotShadows === m && y.numSpotMaps === g && y.numLightProbes === w || (i.directional.length = l, i.spot.length = h, i.rectArea.length = d, i.point.length = c, i.hemi.length = u, i.directionalShadow.length = p, i.directionalShadowMap.length = p, i.pointShadow.length = f, i.pointShadowMap.length = f, i.spotShadow.length = m, i.spotShadowMap.length = m, i.directionalShadowMatrix.length = p, i.pointShadowMatrix.length = f, i.spotLightMatrix.length = m + g - v, i.spotLightMap.length = g, i.numSpotLightShadowsWithMaps = v, i.numLightProbes = w, y.directionalLength = l, y.pointLength = c, y.spotLength = h, y.rectAreaLength = d, y.hemiLength = u, y.numDirectionalShadows = p, y.numPointShadows = f, y.numSpotShadows = m, y.numSpotMaps = g, y.numLightProbes = w, i.version = Dd++) + }, + setupView: function(e, t) { + let n = 0, + o = 0, + l = 0, + c = 0, + h = 0; + const d = t.matrixWorldInverse; + for (let t = 0, u = e.length; t < u; t++) { + const u = e[t]; + if (u.isDirectionalLight) { + const e = i.directional[n]; + e.direction.setFromMatrixPosition(u.matrixWorld), r.setFromMatrixPosition(u.target.matrixWorld), e.direction.sub(r), e.direction.transformDirection(d), n++ + } else if (u.isSpotLight) { + const e = i.spot[l]; + e.position.setFromMatrixPosition(u.matrixWorld), e.position.applyMatrix4(d), e.direction.setFromMatrixPosition(u.matrixWorld), r.setFromMatrixPosition(u.target.matrixWorld), e.direction.sub(r), e.direction.transformDirection(d), l++ + } else if (u.isRectAreaLight) { + const e = i.rectArea[c]; + e.position.setFromMatrixPosition(u.matrixWorld), e.position.applyMatrix4(d), s.identity(), a.copy(u.matrixWorld), a.premultiply(d), s.extractRotation(a), e.halfWidth.set(.5 * u.width, 0, 0), e.halfHeight.set(0, .5 * u.height, 0), e.halfWidth.applyMatrix4(s), e.halfHeight.applyMatrix4(s), c++ + } else if (u.isPointLight) { + const e = i.point[o]; + e.position.setFromMatrixPosition(u.matrixWorld), e.position.applyMatrix4(d), o++ + } else if (u.isHemisphereLight) { + const e = i.hemi[h]; + e.direction.setFromMatrixPosition(u.matrixWorld), e.direction.transformDirection(d), h++ + } + } + }, + state: i + } + } + + function Ud(e) { + const t = new Bd(e), + n = [], + i = []; + const r = { + lightsArray: n, + shadowsArray: i, + camera: null, + lights: t, + transmissionRenderTarget: {} + }; + return { + init: function(e) { + r.camera = e, n.length = 0, i.length = 0 + }, + state: r, + setupLights: function() { + t.setup(n) + }, + setupLightsView: function(e) { + t.setupView(n, e) + }, + pushLight: function(e) { + n.push(e) + }, + pushShadow: function(e) { + i.push(e) + } + } + } + + function zd(e) { + let t = new WeakMap; + return { + get: function(n, i = 0) { + const r = t.get(n); + let a; + return void 0 === r ? (a = new Ud(e), t.set(n, [a])) : i >= r.length ? (a = new Ud(e), r.push(a)) : a = r[i], a + }, + dispose: function() { + t = new WeakMap + } + } + } + + function Od(e, t, n) { + let i = new ya; + const r = new jt, + a = new jt, + s = new pn, + o = new Ws({ + depthPacking: 3201 + }), + l = new Vs, + c = {}, + h = n.maxTextureSize, + d = { + [k]: 1, + [E]: 0, + [S]: 2 + }, + u = new Sr({ + defines: { + VSM_SAMPLES: 8 + }, + uniforms: { + shadow_pass: { + value: null + }, + resolution: { + value: new jt + }, + radius: { + value: 4 + } + }, + vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", + fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" + }), + p = u.clone(); + p.defines.HORIZONTAL_PASS = 1; + const f = new sr; + f.setAttribute("position", new qi(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)); + const m = new wr(f, u), + g = this; + this.enabled = !1, this.autoUpdate = !0, this.needsUpdate = !1, this.type = 1; + let v = this.type; + + function w(n, i) { + const a = t.update(m); + u.defines.VSM_SAMPLES !== n.blurSamples && (u.defines.VSM_SAMPLES = n.blurSamples, p.defines.VSM_SAMPLES = n.blurSamples, u.needsUpdate = !0, p.needsUpdate = !0), null === n.mapPass && (n.mapPass = new mn(r.x, r.y)), u.uniforms.shadow_pass.value = n.map.texture, u.uniforms.resolution.value = n.mapSize, u.uniforms.radius.value = n.radius, e.setRenderTarget(n.mapPass), e.clear(), e.renderBufferDirect(i, null, a, u, m, null), p.uniforms.shadow_pass.value = n.mapPass.texture, p.uniforms.resolution.value = n.mapSize, p.uniforms.radius.value = n.radius, e.setRenderTarget(n.map), e.clear(), e.renderBufferDirect(i, null, a, p, m, null) + } + + function y(t, n, i, r) { + let a = null; + const s = !0 === i.isPointLight ? t.customDistanceMaterial : t.customDepthMaterial; + if (void 0 !== s) a = s; + else if (a = !0 === i.isPointLight ? l : o, e.localClippingEnabled && !0 === n.clipShadows && Array.isArray(n.clippingPlanes) && 0 !== n.clippingPlanes.length || n.displacementMap && 0 !== n.displacementScale || n.alphaMap && n.alphaTest > 0 || n.map && n.alphaTest > 0) { + const e = a.uuid, + t = n.uuid; + let i = c[e]; + void 0 === i && (i = {}, c[e] = i); + let r = i[t]; + void 0 === r && (r = a.clone(), i[t] = r, n.addEventListener("dispose", b)), a = r + } + if (a.visible = n.visible, a.wireframe = n.wireframe, a.side = 3 === r ? null !== n.shadowSide ? n.shadowSide : n.side : null !== n.shadowSide ? n.shadowSide : d[n.side], a.alphaMap = n.alphaMap, a.alphaTest = n.alphaTest, a.map = n.map, a.clipShadows = n.clipShadows, a.clippingPlanes = n.clippingPlanes, a.clipIntersection = n.clipIntersection, a.displacementMap = n.displacementMap, a.displacementScale = n.displacementScale, a.displacementBias = n.displacementBias, a.wireframeLinewidth = n.wireframeLinewidth, a.linewidth = n.linewidth, !0 === i.isPointLight && !0 === a.isMeshDistanceMaterial) { + e.properties.get(a).light = i + } + return a + } + + function A(n, r, a, s, o) { + if (!1 === n.visible) return; + if (n.layers.test(r.layers) && (n.isMesh || n.isLine || n.isPoints) && (n.castShadow || n.receiveShadow && 3 === o) && (!n.frustumCulled || i.intersectsObject(n))) { + n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse, n.matrixWorld); + const i = t.update(n), + l = n.material; + if (Array.isArray(l)) { + const t = i.groups; + for (let c = 0, h = t.length; c < h; c++) { + const h = t[c], + d = l[h.materialIndex]; + if (d && d.visible) { + const t = y(n, d, s, o); + n.onBeforeShadow(e, n, r, a, i, t, h), e.renderBufferDirect(a, null, i, t, n, h), n.onAfterShadow(e, n, r, a, i, t, h) + } + } + } else if (l.visible) { + const t = y(n, l, s, o); + n.onBeforeShadow(e, n, r, a, i, t, null), e.renderBufferDirect(a, null, i, t, n, null), n.onAfterShadow(e, n, r, a, i, t, null) + } + } + const l = n.children; + for (let e = 0, t = l.length; e < t; e++) A(l[e], r, a, s, o) + } + + function b(e) { + e.target.removeEventListener("dispose", b); + for (const t in c) { + const n = c[t], + i = e.target.uuid; + if (i in n) { + n[i].dispose(), delete n[i] + } + } + } + this.render = function(t, n, o) { + if (!1 === g.enabled) return; + if (!1 === g.autoUpdate && !1 === g.needsUpdate) return; + if (0 === t.length) return; + const l = e.getRenderTarget(), + c = e.getActiveCubeFace(), + d = e.getActiveMipmapLevel(), + u = e.state; + u.setBlending(0), u.buffers.color.setClear(1, 1, 1, 1), u.buffers.depth.setTest(!0), u.setScissorTest(!1); + const p = 3 !== v && 3 === this.type, + f = 3 === v && 3 !== this.type; + for (let l = 0, c = t.length; l < c; l++) { + const c = t[l], + d = c.shadow; + if (void 0 === d) { + console.warn("THREE.WebGLShadowMap:", c, "has no shadow."); + continue + } + if (!1 === d.autoUpdate && !1 === d.needsUpdate) continue; + r.copy(d.mapSize); + const m = d.getFrameExtents(); + if (r.multiply(m), a.copy(d.mapSize), (r.x > h || r.y > h) && (r.x > h && (a.x = Math.floor(h / m.x), r.x = a.x * m.x, d.mapSize.x = a.x), r.y > h && (a.y = Math.floor(h / m.y), r.y = a.y * m.y, d.mapSize.y = a.y)), null === d.map || !0 === p || !0 === f) { + const e = 3 !== this.type ? { + minFilter: oe, + magFilter: oe + } : {}; + null !== d.map && d.map.dispose(), d.map = new mn(r.x, r.y, e), d.map.texture.name = c.name + ".shadowMap", d.camera.updateProjectionMatrix() + } + e.setRenderTarget(d.map), e.clear(); + const g = d.getViewportCount(); + for (let e = 0; e < g; e++) { + const t = d.getViewport(e); + s.set(a.x * t.x, a.y * t.y, a.x * t.z, a.y * t.w), u.viewport(s), d.updateMatrices(c, e), i = d.getFrustum(), A(n, o, d.camera, c, this.type) + }!0 !== d.isPointLightShadow && 3 === this.type && w(d, o), d.needsUpdate = !1 + } + v = this.type, g.needsUpdate = !1, e.setRenderTarget(l, c, d) + } + } + const Fd = { + [G]: 1, + [Q]: 6, + [K]: 7, + [Y]: 5, + [j]: 0, + [X]: 2, + [Z]: 4, + [q]: 3 + }; + + function Wd(e, t) { + const n = new function() { + let t = !1; + const n = new pn; + let i = null; + const r = new pn(0, 0, 0, 0); + return { + setMask: function(n) { + i === n || t || (e.colorMask(n, n, n, n), i = n) + }, + setLocked: function(e) { + t = e + }, + setClear: function(t, i, a, s, o) { + !0 === o && (t *= s, i *= s, a *= s), n.set(t, i, a, s), !1 === r.equals(n) && (e.clearColor(t, i, a, s), r.copy(n)) + }, + reset: function() { + t = !1, i = null, r.set(-1, 0, 0, 0) + } + } + }, + i = new function() { + let n = !1, + i = !1, + r = null, + a = null, + s = null; + return { + setReversed: function(e) { + if (i !== e) { + const e = t.get("EXT_clip_control"); + i ? e.clipControlEXT(e.LOWER_LEFT_EXT, e.ZERO_TO_ONE_EXT) : e.clipControlEXT(e.LOWER_LEFT_EXT, e.NEGATIVE_ONE_TO_ONE_EXT); + const n = s; + s = null, this.setClear(n) + } + i = e + }, + getReversed: function() { + return i + }, + setTest: function(t) { + t ? re(e.DEPTH_TEST) : ae(e.DEPTH_TEST) + }, + setMask: function(t) { + r === t || n || (e.depthMask(t), r = t) + }, + setFunc: function(t) { + if (i && (t = Fd[t]), a !== t) { + switch (t) { + case 0: + e.depthFunc(e.NEVER); + break; + case 1: + e.depthFunc(e.ALWAYS); + break; + case 2: + e.depthFunc(e.LESS); + break; + case 3: + default: + e.depthFunc(e.LEQUAL); + break; + case 4: + e.depthFunc(e.EQUAL); + break; + case 5: + e.depthFunc(e.GEQUAL); + break; + case 6: + e.depthFunc(e.GREATER); + break; + case 7: + e.depthFunc(e.NOTEQUAL) + } + a = t + } + }, + setLocked: function(e) { + n = e + }, + setClear: function(t) { + s !== t && (i && (t = 1 - t), e.clearDepth(t), s = t) + }, + reset: function() { + n = !1, r = null, a = null, s = null, i = !1 + } + } + }, + r = new function() { + let t = !1, + n = null, + i = null, + r = null, + a = null, + s = null, + o = null, + l = null, + c = null; + return { + setTest: function(n) { + t || (n ? re(e.STENCIL_TEST) : ae(e.STENCIL_TEST)) + }, + setMask: function(i) { + n === i || t || (e.stencilMask(i), n = i) + }, + setFunc: function(t, n, s) { + i === t && r === n && a === s || (e.stencilFunc(t, n, s), i = t, r = n, a = s) + }, + setOp: function(t, n, i) { + s === t && o === n && l === i || (e.stencilOp(t, n, i), s = t, o = n, l = i) + }, + setLocked: function(e) { + t = e + }, + setClear: function(t) { + c !== t && (e.clearStencil(t), c = t) + }, + reset: function() { + t = !1, n = null, i = null, r = null, a = null, s = null, o = null, l = null, c = null + } + } + }, + a = new WeakMap, + s = new WeakMap; + let o = {}, + l = {}, + c = new WeakMap, + h = [], + d = null, + u = !1, + p = null, + f = null, + m = null, + g = null, + v = null, + w = null, + y = null, + A = new Wi(0, 0, 0), + b = 0, + x = !1, + k = null, + E = null, + S = null, + G = null, + j = null; + const Q = e.getParameter(e.MAX_COMBINED_TEXTURE_IMAGE_UNITS); + let Y = !1, + K = 0; + const q = e.getParameter(e.VERSION); - 1 !== q.indexOf("WebGL") ? (K = parseFloat(/^WebGL (\d)/.exec(q)[1]), Y = K >= 1) : -1 !== q.indexOf("OpenGL ES") && (K = parseFloat(/^OpenGL ES (\d)/.exec(q)[1]), Y = K >= 2); + let X = null, + Z = {}; + const J = e.getParameter(e.SCISSOR_BOX), + $ = e.getParameter(e.VIEWPORT), + ee = (new pn).fromArray(J), + te = (new pn).fromArray($); + + function ne(t, n, i, r) { + const a = new Uint8Array(4), + s = e.createTexture(); + e.bindTexture(t, s), e.texParameteri(t, e.TEXTURE_MIN_FILTER, e.NEAREST), e.texParameteri(t, e.TEXTURE_MAG_FILTER, e.NEAREST); + for (let s = 0; s < i; s++) t === e.TEXTURE_3D || t === e.TEXTURE_2D_ARRAY ? e.texImage3D(n, 0, e.RGBA, 1, 1, r, 0, e.RGBA, e.UNSIGNED_BYTE, a) : e.texImage2D(n + s, 0, e.RGBA, 1, 1, 0, e.RGBA, e.UNSIGNED_BYTE, a); + return s + } + const ie = {}; + + function re(t) { + !0 !== o[t] && (e.enable(t), o[t] = !0) + } + + function ae(t) { + !1 !== o[t] && (e.disable(t), o[t] = !1) + } + ie[e.TEXTURE_2D] = ne(e.TEXTURE_2D, e.TEXTURE_2D, 1), ie[e.TEXTURE_CUBE_MAP] = ne(e.TEXTURE_CUBE_MAP, e.TEXTURE_CUBE_MAP_POSITIVE_X, 6), ie[e.TEXTURE_2D_ARRAY] = ne(e.TEXTURE_2D_ARRAY, e.TEXTURE_2D_ARRAY, 1, 1), ie[e.TEXTURE_3D] = ne(e.TEXTURE_3D, e.TEXTURE_3D, 1, 1), n.setClear(0, 0, 0, 1), i.setClear(1), r.setClear(0), re(e.DEPTH_TEST), i.setFunc(3), ce(!1), he(1), re(e.CULL_FACE), le(0); + const se = { + [M]: e.FUNC_ADD, + [T]: e.FUNC_SUBTRACT, + [_]: e.FUNC_REVERSE_SUBTRACT + }; + se[103] = e.MIN, se[104] = e.MAX; + const oe = { + [C]: e.ZERO, + [P]: e.ONE, + [I]: e.SRC_COLOR, + [L]: e.SRC_ALPHA, + [O]: e.SRC_ALPHA_SATURATE, + [U]: e.DST_COLOR, + [N]: e.DST_ALPHA, + [R]: e.ONE_MINUS_SRC_COLOR, + [D]: e.ONE_MINUS_SRC_ALPHA, + [z]: e.ONE_MINUS_DST_COLOR, + [B]: e.ONE_MINUS_DST_ALPHA, + [F]: e.CONSTANT_COLOR, + [W]: e.ONE_MINUS_CONSTANT_COLOR, + [V]: e.CONSTANT_ALPHA, + [H]: e.ONE_MINUS_CONSTANT_ALPHA + }; + + function le(t, n, i, r, a, s, o, l, c, h) { + if (0 !== t) { + if (!1 === u && (re(e.BLEND), u = !0), 5 === t) a = a || n, s = s || i, o = o || r, n === f && a === v || (e.blendEquationSeparate(se[n], se[a]), f = n, v = a), i === m && r === g && s === w && o === y || (e.blendFuncSeparate(oe[i], oe[r], oe[s], oe[o]), m = i, g = r, w = s, y = o), !1 !== l.equals(A) && c === b || (e.blendColor(l.r, l.g, l.b, c), A.copy(l), b = c), p = t, x = !1; + else if (t !== p || h !== x) { + if (f === M && v === M || (e.blendEquation(e.FUNC_ADD), f = M, v = M), h) switch (t) { + case 1: + e.blendFuncSeparate(e.ONE, e.ONE_MINUS_SRC_ALPHA, e.ONE, e.ONE_MINUS_SRC_ALPHA); + break; + case 2: + e.blendFunc(e.ONE, e.ONE); + break; + case 3: + e.blendFuncSeparate(e.ZERO, e.ONE_MINUS_SRC_COLOR, e.ZERO, e.ONE); + break; + case 4: + e.blendFuncSeparate(e.ZERO, e.SRC_COLOR, e.ZERO, e.SRC_ALPHA); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", t) + } else switch (t) { + case 1: + e.blendFuncSeparate(e.SRC_ALPHA, e.ONE_MINUS_SRC_ALPHA, e.ONE, e.ONE_MINUS_SRC_ALPHA); + break; + case 2: + e.blendFunc(e.SRC_ALPHA, e.ONE); + break; + case 3: + e.blendFuncSeparate(e.ZERO, e.ONE_MINUS_SRC_COLOR, e.ZERO, e.ONE); + break; + case 4: + e.blendFunc(e.ZERO, e.SRC_COLOR); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", t) + } + m = null, g = null, w = null, y = null, A.set(0, 0, 0), b = 0, p = t, x = h + } + } else !0 === u && (ae(e.BLEND), u = !1) + } + + function ce(t) { + k !== t && (t ? e.frontFace(e.CW) : e.frontFace(e.CCW), k = t) + } + + function he(t) { + 0 !== t ? (re(e.CULL_FACE), t !== E && (1 === t ? e.cullFace(e.BACK) : 2 === t ? e.cullFace(e.FRONT) : e.cullFace(e.FRONT_AND_BACK))) : ae(e.CULL_FACE), E = t + } + + function de(t, n, i) { + t ? (re(e.POLYGON_OFFSET_FILL), G === n && j === i || (e.polygonOffset(n, i), G = n, j = i)) : ae(e.POLYGON_OFFSET_FILL) + } + return { + buffers: { + color: n, + depth: i, + stencil: r + }, + enable: re, + disable: ae, + bindFramebuffer: function(t, n) { + return l[t] !== n && (e.bindFramebuffer(t, n), l[t] = n, t === e.DRAW_FRAMEBUFFER && (l[e.FRAMEBUFFER] = n), t === e.FRAMEBUFFER && (l[e.DRAW_FRAMEBUFFER] = n), !0) + }, + drawBuffers: function(t, n) { + let i = h, + r = !1; + if (t) { + i = c.get(n), void 0 === i && (i = [], c.set(n, i)); + const a = t.textures; + if (i.length !== a.length || i[0] !== e.COLOR_ATTACHMENT0) { + for (let t = 0, n = a.length; t < n; t++) i[t] = e.COLOR_ATTACHMENT0 + t; + i.length = a.length, r = !0 + } + } else i[0] !== e.BACK && (i[0] = e.BACK, r = !0); + r && e.drawBuffers(i) + }, + useProgram: function(t) { + return d !== t && (e.useProgram(t), d = t, !0) + }, + setBlending: le, + setMaterial: function(t, a) { + 2 === t.side ? ae(e.CULL_FACE) : re(e.CULL_FACE); + let s = 1 === t.side; + a && (s = !s), ce(s), 1 === t.blending && !1 === t.transparent ? le(0) : le(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.blendColor, t.blendAlpha, t.premultipliedAlpha), i.setFunc(t.depthFunc), i.setTest(t.depthTest), i.setMask(t.depthWrite), n.setMask(t.colorWrite); + const o = t.stencilWrite; + r.setTest(o), o && (r.setMask(t.stencilWriteMask), r.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), r.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), de(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits), !0 === t.alphaToCoverage ? re(e.SAMPLE_ALPHA_TO_COVERAGE) : ae(e.SAMPLE_ALPHA_TO_COVERAGE) + }, + setFlipSided: ce, + setCullFace: he, + setLineWidth: function(t) { + t !== S && (Y && e.lineWidth(t), S = t) + }, + setPolygonOffset: de, + setScissorTest: function(t) { + t ? re(e.SCISSOR_TEST) : ae(e.SCISSOR_TEST) + }, + activeTexture: function(t) { + void 0 === t && (t = e.TEXTURE0 + Q - 1), X !== t && (e.activeTexture(t), X = t) + }, + bindTexture: function(t, n, i) { + void 0 === i && (i = null === X ? e.TEXTURE0 + Q - 1 : X); + let r = Z[i]; + void 0 === r && (r = { + type: void 0, + texture: void 0 + }, Z[i] = r), r.type === t && r.texture === n || (X !== i && (e.activeTexture(i), X = i), e.bindTexture(t, n || ie[t]), r.type = t, r.texture = n) + }, + unbindTexture: function() { + const t = Z[X]; + void 0 !== t && void 0 !== t.type && (e.bindTexture(t.type, null), t.type = void 0, t.texture = void 0) + }, + compressedTexImage2D: function() { + try { + e.compressedTexImage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + compressedTexImage3D: function() { + try { + e.compressedTexImage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texImage2D: function() { + try { + e.texImage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texImage3D: function() { + try { + e.texImage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + updateUBOMapping: function(t, n) { + let i = s.get(n); + void 0 === i && (i = new WeakMap, s.set(n, i)); + let r = i.get(t); + void 0 === r && (r = e.getUniformBlockIndex(n, t.name), i.set(t, r)) + }, + uniformBlockBinding: function(t, n) { + const i = s.get(n).get(t); + a.get(n) !== i && (e.uniformBlockBinding(n, i, t.__bindingPointIndex), a.set(n, i)) + }, + texStorage2D: function() { + try { + e.texStorage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texStorage3D: function() { + try { + e.texStorage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texSubImage2D: function() { + try { + e.texSubImage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texSubImage3D: function() { + try { + e.texSubImage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + compressedTexSubImage2D: function() { + try { + e.compressedTexSubImage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + compressedTexSubImage3D: function() { + try { + e.compressedTexSubImage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + scissor: function(t) { + !1 === ee.equals(t) && (e.scissor(t.x, t.y, t.z, t.w), ee.copy(t)) + }, + viewport: function(t) { + !1 === te.equals(t) && (e.viewport(t.x, t.y, t.z, t.w), te.copy(t)) + }, + reset: function() { + e.disable(e.BLEND), e.disable(e.CULL_FACE), e.disable(e.DEPTH_TEST), e.disable(e.POLYGON_OFFSET_FILL), e.disable(e.SCISSOR_TEST), e.disable(e.STENCIL_TEST), e.disable(e.SAMPLE_ALPHA_TO_COVERAGE), e.blendEquation(e.FUNC_ADD), e.blendFunc(e.ONE, e.ZERO), e.blendFuncSeparate(e.ONE, e.ZERO, e.ONE, e.ZERO), e.blendColor(0, 0, 0, 0), e.colorMask(!0, !0, !0, !0), e.clearColor(0, 0, 0, 0), e.depthMask(!0), e.depthFunc(e.LESS), i.setReversed(!1), e.clearDepth(1), e.stencilMask(4294967295), e.stencilFunc(e.ALWAYS, 0, 4294967295), e.stencilOp(e.KEEP, e.KEEP, e.KEEP), e.clearStencil(0), e.cullFace(e.BACK), e.frontFace(e.CCW), e.polygonOffset(0, 0), e.activeTexture(e.TEXTURE0), e.bindFramebuffer(e.FRAMEBUFFER, null), e.bindFramebuffer(e.DRAW_FRAMEBUFFER, null), e.bindFramebuffer(e.READ_FRAMEBUFFER, null), e.useProgram(null), e.lineWidth(1), e.scissor(0, 0, e.canvas.width, e.canvas.height), e.viewport(0, 0, e.canvas.width, e.canvas.height), o = {}, X = null, Z = {}, l = {}, c = new WeakMap, h = [], d = null, u = !1, p = null, f = null, m = null, g = null, v = null, w = null, y = null, A = new Wi(0, 0, 0), b = 0, x = !1, k = null, E = null, S = null, G = null, j = null, ee.set(0, 0, e.canvas.width, e.canvas.height), te.set(0, 0, e.canvas.width, e.canvas.height), n.reset(), i.reset(), r.reset() + } + } + } + + function Vd(e, t, n, i, r, a, s) { + const o = t.has("WEBGL_multisampled_render_to_texture") ? t.get("WEBGL_multisampled_render_to_texture") : null, + l = "undefined" != typeof navigator && /OculusBrowser/g.test(navigator.userAgent), + c = new jt, + h = new WeakMap; + let d; + const u = new WeakMap; + let p = !1; + try { + p = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d") + } catch (e) {} + + function f(e, t) { + return p ? new OffscreenCanvas(e, t) : qt("canvas") + } + + function m(e, t, n) { + let i = 1; + const r = W(e); + if ((r.width > n || r.height > n) && (i = n / Math.max(r.width, r.height)), i < 1) { + if ("undefined" != typeof HTMLImageElement && e instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && e instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && e instanceof ImageBitmap || "undefined" != typeof VideoFrame && e instanceof VideoFrame) { + const n = Math.floor(i * r.width), + a = Math.floor(i * r.height); + void 0 === d && (d = f(n, a)); + const s = t ? f(n, a) : d; + s.width = n, s.height = a; + return s.getContext("2d").drawImage(e, 0, 0, n, a), console.warn("THREE.WebGLRenderer: Texture has been resized from (" + r.width + "x" + r.height + ") to (" + n + "x" + a + ")."), s + } + return "data" in e && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + r.width + "x" + r.height + ")."), e + } + return e + } + + function g(e) { + return e.generateMipmaps + } + + function v(t) { + e.generateMipmap(t) + } + + function w(t) { + return t.isWebGLCubeRenderTarget ? e.TEXTURE_CUBE_MAP : t.isWebGL3DRenderTarget ? e.TEXTURE_3D : t.isWebGLArrayRenderTarget || t.isCompressedArrayTexture ? e.TEXTURE_2D_ARRAY : e.TEXTURE_2D + } + + function y(n, i, r, a, s = !1) { + if (null !== n) { + if (void 0 !== e[n]) return e[n]; + console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'") + } + let o = i; + if (i === e.RED && (r === e.FLOAT && (o = e.R32F), r === e.HALF_FLOAT && (o = e.R16F), r === e.UNSIGNED_BYTE && (o = e.R8)), i === e.RED_INTEGER && (r === e.UNSIGNED_BYTE && (o = e.R8UI), r === e.UNSIGNED_SHORT && (o = e.R16UI), r === e.UNSIGNED_INT && (o = e.R32UI), r === e.BYTE && (o = e.R8I), r === e.SHORT && (o = e.R16I), r === e.INT && (o = e.R32I)), i === e.RG && (r === e.FLOAT && (o = e.RG32F), r === e.HALF_FLOAT && (o = e.RG16F), r === e.UNSIGNED_BYTE && (o = e.RG8)), i === e.RG_INTEGER && (r === e.UNSIGNED_BYTE && (o = e.RG8UI), r === e.UNSIGNED_SHORT && (o = e.RG16UI), r === e.UNSIGNED_INT && (o = e.RG32UI), r === e.BYTE && (o = e.RG8I), r === e.SHORT && (o = e.RG16I), r === e.INT && (o = e.RG32I)), i === e.RGB_INTEGER && (r === e.UNSIGNED_BYTE && (o = e.RGB8UI), r === e.UNSIGNED_SHORT && (o = e.RGB16UI), r === e.UNSIGNED_INT && (o = e.RGB32UI), r === e.BYTE && (o = e.RGB8I), r === e.SHORT && (o = e.RGB16I), r === e.INT && (o = e.RGB32I)), i === e.RGBA_INTEGER && (r === e.UNSIGNED_BYTE && (o = e.RGBA8UI), r === e.UNSIGNED_SHORT && (o = e.RGBA16UI), r === e.UNSIGNED_INT && (o = e.RGBA32UI), r === e.BYTE && (o = e.RGBA8I), r === e.SHORT && (o = e.RGBA16I), r === e.INT && (o = e.RGBA32I)), i === e.RGB && r === e.UNSIGNED_INT_5_9_9_9_REV && (o = e.RGB9_E5), i === e.RGBA) { + const t = s ? wt : nn.getTransfer(a); + r === e.FLOAT && (o = e.RGBA32F), r === e.HALF_FLOAT && (o = e.RGBA16F), r === e.UNSIGNED_BYTE && (o = t === yt ? e.SRGB8_ALPHA8 : e.RGBA8), r === e.UNSIGNED_SHORT_4_4_4_4 && (o = e.RGBA4), r === e.UNSIGNED_SHORT_5_5_5_1 && (o = e.RGB5_A1) + } + return o !== e.R16F && o !== e.R32F && o !== e.RG16F && o !== e.RG32F && o !== e.RGBA16F && o !== e.RGBA32F || t.get("EXT_color_buffer_float"), o + } + + function A(t, n) { + let i; + return t ? null === n || n === we || n === ke ? i = e.DEPTH24_STENCIL8 : n === ye ? i = e.DEPTH32F_STENCIL8 : n === ge && (i = e.DEPTH24_STENCIL8, console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")) : null === n || n === we || n === ke ? i = e.DEPTH_COMPONENT24 : n === ye ? i = e.DEPTH_COMPONENT32F : n === ge && (i = e.DEPTH_COMPONENT16), i + } + + function b(e, t) { + return !0 === g(e) || e.isFramebufferTexture && e.minFilter !== oe && e.minFilter !== he ? Math.log2(Math.max(t.width, t.height)) + 1 : void 0 !== e.mipmaps && e.mipmaps.length > 0 ? e.mipmaps.length : e.isCompressedTexture && Array.isArray(e.image) ? t.mipmaps.length : 1 + } + + function x(e) { + const t = e.target; + t.removeEventListener("dispose", x), + function(e) { + const t = i.get(e); + if (void 0 === t.__webglInit) return; + const n = e.source, + r = u.get(n); + if (r) { + const i = r[t.__cacheKey]; + i.usedTimes--, 0 === i.usedTimes && E(e), 0 === Object.keys(r).length && u.delete(n) + } + i.remove(e) + }(t), t.isVideoTexture && h.delete(t) + } + + function k(t) { + const n = t.target; + n.removeEventListener("dispose", k), + function(t) { + const n = i.get(t); + t.depthTexture && (t.depthTexture.dispose(), i.remove(t.depthTexture)); + if (t.isWebGLCubeRenderTarget) + for (let t = 0; t < 6; t++) { + if (Array.isArray(n.__webglFramebuffer[t])) + for (let i = 0; i < n.__webglFramebuffer[t].length; i++) e.deleteFramebuffer(n.__webglFramebuffer[t][i]); + else e.deleteFramebuffer(n.__webglFramebuffer[t]); + n.__webglDepthbuffer && e.deleteRenderbuffer(n.__webglDepthbuffer[t]) + } else { + if (Array.isArray(n.__webglFramebuffer)) + for (let t = 0; t < n.__webglFramebuffer.length; t++) e.deleteFramebuffer(n.__webglFramebuffer[t]); + else e.deleteFramebuffer(n.__webglFramebuffer); + if (n.__webglDepthbuffer && e.deleteRenderbuffer(n.__webglDepthbuffer), n.__webglMultisampledFramebuffer && e.deleteFramebuffer(n.__webglMultisampledFramebuffer), n.__webglColorRenderbuffer) + for (let t = 0; t < n.__webglColorRenderbuffer.length; t++) n.__webglColorRenderbuffer[t] && e.deleteRenderbuffer(n.__webglColorRenderbuffer[t]); + n.__webglDepthRenderbuffer && e.deleteRenderbuffer(n.__webglDepthRenderbuffer) + } + const r = t.textures; + for (let t = 0, n = r.length; t < n; t++) { + const n = i.get(r[t]); + n.__webglTexture && (e.deleteTexture(n.__webglTexture), s.memory.textures--), i.remove(r[t]) + } + i.remove(t) + }(n) + } + + function E(t) { + const n = i.get(t); + e.deleteTexture(n.__webglTexture); + const r = t.source; + delete u.get(r)[n.__cacheKey], s.memory.textures-- + } + let S = 0; + + function M(t, r) { + const a = i.get(t); + if (t.isVideoTexture && function(e) { + const t = s.render.frame; + h.get(e) !== t && (h.set(e, t), e.update()) + }(t), !1 === t.isRenderTargetTexture && t.version > 0 && a.__version !== t.version) { + const e = t.image; + if (null === e) console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found."); + else { + if (!1 !== e.complete) return void R(a, t, r); + console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") + } + } + n.bindTexture(e.TEXTURE_2D, a.__webglTexture, e.TEXTURE0 + r) + } + const T = { + [re]: e.REPEAT, + [ae]: e.CLAMP_TO_EDGE, + [se]: e.MIRRORED_REPEAT + }, + _ = { + [oe]: e.NEAREST, + [le]: e.NEAREST_MIPMAP_NEAREST, + [ce]: e.NEAREST_MIPMAP_LINEAR, + [he]: e.LINEAR, + [de]: e.LINEAR_MIPMAP_NEAREST, + [ue]: e.LINEAR_MIPMAP_LINEAR + }, + C = { + [bt]: e.NEVER, + [_t]: e.ALWAYS, + [xt]: e.LESS, + [Et]: e.LEQUAL, + [kt]: e.EQUAL, + [Tt]: e.GEQUAL, + [St]: e.GREATER, + [Mt]: e.NOTEQUAL + }; + + function P(n, a) { + if (a.type !== ye || !1 !== t.has("OES_texture_float_linear") || a.magFilter !== he && a.magFilter !== de && a.magFilter !== ce && a.magFilter !== ue && a.minFilter !== he && a.minFilter !== de && a.minFilter !== ce && a.minFilter !== ue || console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."), e.texParameteri(n, e.TEXTURE_WRAP_S, T[a.wrapS]), e.texParameteri(n, e.TEXTURE_WRAP_T, T[a.wrapT]), n !== e.TEXTURE_3D && n !== e.TEXTURE_2D_ARRAY || e.texParameteri(n, e.TEXTURE_WRAP_R, T[a.wrapR]), e.texParameteri(n, e.TEXTURE_MAG_FILTER, _[a.magFilter]), e.texParameteri(n, e.TEXTURE_MIN_FILTER, _[a.minFilter]), a.compareFunction && (e.texParameteri(n, e.TEXTURE_COMPARE_MODE, e.COMPARE_REF_TO_TEXTURE), e.texParameteri(n, e.TEXTURE_COMPARE_FUNC, C[a.compareFunction])), !0 === t.has("EXT_texture_filter_anisotropic")) { + if (a.magFilter === oe) return; + if (a.minFilter !== ce && a.minFilter !== ue) return; + if (a.type === ye && !1 === t.has("OES_texture_float_linear")) return; + if (a.anisotropy > 1 || i.get(a).__currentAnisotropy) { + const s = t.get("EXT_texture_filter_anisotropic"); + e.texParameterf(n, s.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(a.anisotropy, r.getMaxAnisotropy())), i.get(a).__currentAnisotropy = a.anisotropy + } + } + } + + function I(t, n) { + let i = !1; + void 0 === t.__webglInit && (t.__webglInit = !0, n.addEventListener("dispose", x)); + const r = n.source; + let a = u.get(r); + void 0 === a && (a = {}, u.set(r, a)); + const o = function(e) { + const t = []; + return t.push(e.wrapS), t.push(e.wrapT), t.push(e.wrapR || 0), t.push(e.magFilter), t.push(e.minFilter), t.push(e.anisotropy), t.push(e.internalFormat), t.push(e.format), t.push(e.type), t.push(e.generateMipmaps), t.push(e.premultiplyAlpha), t.push(e.flipY), t.push(e.unpackAlignment), t.push(e.colorSpace), t.join() + }(n); + if (o !== t.__cacheKey) { + void 0 === a[o] && (a[o] = { + texture: e.createTexture(), + usedTimes: 0 + }, s.memory.textures++, i = !0), a[o].usedTimes++; + const r = a[t.__cacheKey]; + void 0 !== r && (a[t.__cacheKey].usedTimes--, 0 === r.usedTimes && E(n)), t.__cacheKey = o, t.__webglTexture = a[o].texture + } + return i + } + + function R(t, s, o) { + let l = e.TEXTURE_2D; + (s.isDataArrayTexture || s.isCompressedArrayTexture) && (l = e.TEXTURE_2D_ARRAY), s.isData3DTexture && (l = e.TEXTURE_3D); + const c = I(t, s), + h = s.source; + n.bindTexture(l, t.__webglTexture, e.TEXTURE0 + o); + const d = i.get(h); + if (h.version !== d.__version || !0 === c) { + n.activeTexture(e.TEXTURE0 + o); + const t = nn.getPrimaries(nn.workingColorSpace), + i = s.colorSpace === mt ? null : nn.getPrimaries(s.colorSpace), + u = s.colorSpace === mt || t === i ? e.NONE : e.BROWSER_DEFAULT_WEBGL; + e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, s.flipY), e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL, s.premultiplyAlpha), e.pixelStorei(e.UNPACK_ALIGNMENT, s.unpackAlignment), e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL, u); + let p = m(s.image, !1, r.maxTextureSize); + p = F(s, p); + const f = a.convert(s.format, s.colorSpace), + w = a.convert(s.type); + let x, k = y(s.internalFormat, f, w, s.colorSpace, s.isVideoTexture); + P(l, s); + const E = s.mipmaps, + S = !0 !== s.isVideoTexture, + M = void 0 === d.__version || !0 === c, + T = h.dataReady, + _ = b(s, p); + if (s.isDepthTexture) k = A(s.format === Te, s.type), M && (S ? n.texStorage2D(e.TEXTURE_2D, 1, k, p.width, p.height) : n.texImage2D(e.TEXTURE_2D, 0, k, p.width, p.height, 0, f, w, null)); + else if (s.isDataTexture) + if (E.length > 0) { + S && M && n.texStorage2D(e.TEXTURE_2D, _, k, E[0].width, E[0].height); + for (let t = 0, i = E.length; t < i; t++) x = E[t], S ? T && n.texSubImage2D(e.TEXTURE_2D, t, 0, 0, x.width, x.height, f, w, x.data) : n.texImage2D(e.TEXTURE_2D, t, k, x.width, x.height, 0, f, w, x.data); + s.generateMipmaps = !1 + } else S ? (M && n.texStorage2D(e.TEXTURE_2D, _, k, p.width, p.height), T && n.texSubImage2D(e.TEXTURE_2D, 0, 0, 0, p.width, p.height, f, w, p.data)) : n.texImage2D(e.TEXTURE_2D, 0, k, p.width, p.height, 0, f, w, p.data); + else if (s.isCompressedTexture) + if (s.isCompressedArrayTexture) { + S && M && n.texStorage3D(e.TEXTURE_2D_ARRAY, _, k, E[0].width, E[0].height, p.depth); + for (let t = 0, i = E.length; t < i; t++) + if (x = E[t], s.format !== Se) + if (null !== f) + if (S) { + if (T) + if (s.layerUpdates.size > 0) { + const i = Zo(x.width, x.height, s.format, s.type); + for (const r of s.layerUpdates) { + const a = x.data.subarray(r * i / x.data.BYTES_PER_ELEMENT, (r + 1) * i / x.data.BYTES_PER_ELEMENT); + n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY, t, 0, 0, r, x.width, x.height, 1, f, a) + } + s.clearLayerUpdates() + } else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY, t, 0, 0, 0, x.width, x.height, p.depth, f, x.data) + } else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY, t, k, x.width, x.height, p.depth, 0, x.data, 0, 0); + else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"); + else S ? T && n.texSubImage3D(e.TEXTURE_2D_ARRAY, t, 0, 0, 0, x.width, x.height, p.depth, f, w, x.data) : n.texImage3D(e.TEXTURE_2D_ARRAY, t, k, x.width, x.height, p.depth, 0, f, w, x.data) + } else { + S && M && n.texStorage2D(e.TEXTURE_2D, _, k, E[0].width, E[0].height); + for (let t = 0, i = E.length; t < i; t++) x = E[t], s.format !== Se ? null !== f ? S ? T && n.compressedTexSubImage2D(e.TEXTURE_2D, t, 0, 0, x.width, x.height, f, x.data) : n.compressedTexImage2D(e.TEXTURE_2D, t, k, x.width, x.height, 0, x.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : S ? T && n.texSubImage2D(e.TEXTURE_2D, t, 0, 0, x.width, x.height, f, w, x.data) : n.texImage2D(e.TEXTURE_2D, t, k, x.width, x.height, 0, f, w, x.data) + } + else if (s.isDataArrayTexture) + if (S) { + if (M && n.texStorage3D(e.TEXTURE_2D_ARRAY, _, k, p.width, p.height, p.depth), T) + if (s.layerUpdates.size > 0) { + const t = Zo(p.width, p.height, s.format, s.type); + for (const i of s.layerUpdates) { + const r = p.data.subarray(i * t / p.data.BYTES_PER_ELEMENT, (i + 1) * t / p.data.BYTES_PER_ELEMENT); + n.texSubImage3D(e.TEXTURE_2D_ARRAY, 0, 0, 0, i, p.width, p.height, 1, f, w, r) + } + s.clearLayerUpdates() + } else n.texSubImage3D(e.TEXTURE_2D_ARRAY, 0, 0, 0, 0, p.width, p.height, p.depth, f, w, p.data) + } else n.texImage3D(e.TEXTURE_2D_ARRAY, 0, k, p.width, p.height, p.depth, 0, f, w, p.data); + else if (s.isData3DTexture) S ? (M && n.texStorage3D(e.TEXTURE_3D, _, k, p.width, p.height, p.depth), T && n.texSubImage3D(e.TEXTURE_3D, 0, 0, 0, 0, p.width, p.height, p.depth, f, w, p.data)) : n.texImage3D(e.TEXTURE_3D, 0, k, p.width, p.height, p.depth, 0, f, w, p.data); + else if (s.isFramebufferTexture) { + if (M) + if (S) n.texStorage2D(e.TEXTURE_2D, _, k, p.width, p.height); + else { + let t = p.width, + i = p.height; + for (let r = 0; r < _; r++) n.texImage2D(e.TEXTURE_2D, r, k, t, i, 0, f, w, null), t >>= 1, i >>= 1 + } + } else if (E.length > 0) { + if (S && M) { + const t = W(E[0]); + n.texStorage2D(e.TEXTURE_2D, _, k, t.width, t.height) + } + for (let t = 0, i = E.length; t < i; t++) x = E[t], S ? T && n.texSubImage2D(e.TEXTURE_2D, t, 0, 0, f, w, x) : n.texImage2D(e.TEXTURE_2D, t, k, f, w, x); + s.generateMipmaps = !1 + } else if (S) { + if (M) { + const t = W(p); + n.texStorage2D(e.TEXTURE_2D, _, k, t.width, t.height) + } + T && n.texSubImage2D(e.TEXTURE_2D, 0, 0, 0, f, w, p) + } else n.texImage2D(e.TEXTURE_2D, 0, k, f, w, p); + g(s) && v(l), d.__version = h.version, s.onUpdate && s.onUpdate(s) + } + t.__version = s.version + } + + function L(t, r, s, l, c, h) { + const d = a.convert(s.format, s.colorSpace), + u = a.convert(s.type), + p = y(s.internalFormat, d, u, s.colorSpace), + f = i.get(r), + m = i.get(s); + if (m.__renderTarget = r, !f.__hasExternalTextures) { + const t = Math.max(1, r.width >> h), + i = Math.max(1, r.height >> h); + c === e.TEXTURE_3D || c === e.TEXTURE_2D_ARRAY ? n.texImage3D(c, h, p, t, i, r.depth, 0, d, u, null) : n.texImage2D(c, h, p, t, i, 0, d, u, null) + } + n.bindFramebuffer(e.FRAMEBUFFER, t), O(r) ? o.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER, l, c, m.__webglTexture, 0, z(r)) : (c === e.TEXTURE_2D || c >= e.TEXTURE_CUBE_MAP_POSITIVE_X && c <= e.TEXTURE_CUBE_MAP_NEGATIVE_Z) && e.framebufferTexture2D(e.FRAMEBUFFER, l, c, m.__webglTexture, h), n.bindFramebuffer(e.FRAMEBUFFER, null) + } + + function D(t, n, i) { + if (e.bindRenderbuffer(e.RENDERBUFFER, t), n.depthBuffer) { + const r = n.depthTexture, + a = r && r.isDepthTexture ? r.type : null, + s = A(n.stencilBuffer, a), + l = n.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT, + c = z(n); + O(n) ? o.renderbufferStorageMultisampleEXT(e.RENDERBUFFER, c, s, n.width, n.height) : i ? e.renderbufferStorageMultisample(e.RENDERBUFFER, c, s, n.width, n.height) : e.renderbufferStorage(e.RENDERBUFFER, s, n.width, n.height), e.framebufferRenderbuffer(e.FRAMEBUFFER, l, e.RENDERBUFFER, t) + } else { + const t = n.textures; + for (let r = 0; r < t.length; r++) { + const s = t[r], + l = a.convert(s.format, s.colorSpace), + c = a.convert(s.type), + h = y(s.internalFormat, l, c, s.colorSpace), + d = z(n); + i && !1 === O(n) ? e.renderbufferStorageMultisample(e.RENDERBUFFER, d, h, n.width, n.height) : O(n) ? o.renderbufferStorageMultisampleEXT(e.RENDERBUFFER, d, h, n.width, n.height) : e.renderbufferStorage(e.RENDERBUFFER, h, n.width, n.height) + } + } + e.bindRenderbuffer(e.RENDERBUFFER, null) + } + + function N(t) { + const r = i.get(t), + a = !0 === t.isWebGLCubeRenderTarget; + if (r.__boundDepthTexture !== t.depthTexture) { + const e = t.depthTexture; + if (r.__depthDisposeCallback && r.__depthDisposeCallback(), e) { + const t = () => { + delete r.__boundDepthTexture, delete r.__depthDisposeCallback, e.removeEventListener("dispose", t) + }; + e.addEventListener("dispose", t), r.__depthDisposeCallback = t + } + r.__boundDepthTexture = e + } + if (t.depthTexture && !r.__autoAllocateDepthBuffer) { + if (a) throw new Error("target.depthTexture not supported in Cube render targets"); + ! function(t, r) { + if (r && r.isWebGLCubeRenderTarget) throw new Error("Depth Texture with cube render targets is not supported"); + if (n.bindFramebuffer(e.FRAMEBUFFER, t), !r.depthTexture || !r.depthTexture.isDepthTexture) throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + const a = i.get(r.depthTexture); + a.__renderTarget = r, a.__webglTexture && r.depthTexture.image.width === r.width && r.depthTexture.image.height === r.height || (r.depthTexture.image.width = r.width, r.depthTexture.image.height = r.height, r.depthTexture.needsUpdate = !0), M(r.depthTexture, 0); + const s = a.__webglTexture, + l = z(r); + if (r.depthTexture.format === Me) O(r) ? o.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER, e.DEPTH_ATTACHMENT, e.TEXTURE_2D, s, 0, l) : e.framebufferTexture2D(e.FRAMEBUFFER, e.DEPTH_ATTACHMENT, e.TEXTURE_2D, s, 0); + else { + if (r.depthTexture.format !== Te) throw new Error("Unknown depthTexture format"); + O(r) ? o.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER, e.DEPTH_STENCIL_ATTACHMENT, e.TEXTURE_2D, s, 0, l) : e.framebufferTexture2D(e.FRAMEBUFFER, e.DEPTH_STENCIL_ATTACHMENT, e.TEXTURE_2D, s, 0) + } + }(r.__webglFramebuffer, t) + } else if (a) { + r.__webglDepthbuffer = []; + for (let i = 0; i < 6; i++) + if (n.bindFramebuffer(e.FRAMEBUFFER, r.__webglFramebuffer[i]), void 0 === r.__webglDepthbuffer[i]) r.__webglDepthbuffer[i] = e.createRenderbuffer(), D(r.__webglDepthbuffer[i], t, !1); + else { + const n = t.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT, + a = r.__webglDepthbuffer[i]; + e.bindRenderbuffer(e.RENDERBUFFER, a), e.framebufferRenderbuffer(e.FRAMEBUFFER, n, e.RENDERBUFFER, a) + } + } else if (n.bindFramebuffer(e.FRAMEBUFFER, r.__webglFramebuffer), void 0 === r.__webglDepthbuffer) r.__webglDepthbuffer = e.createRenderbuffer(), D(r.__webglDepthbuffer, t, !1); + else { + const n = t.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT, + i = r.__webglDepthbuffer; + e.bindRenderbuffer(e.RENDERBUFFER, i), e.framebufferRenderbuffer(e.FRAMEBUFFER, n, e.RENDERBUFFER, i) + } + n.bindFramebuffer(e.FRAMEBUFFER, null) + } + const B = [], + U = []; + + function z(e) { + return Math.min(r.maxSamples, e.samples) + } + + function O(e) { + const n = i.get(e); + return e.samples > 0 && !0 === t.has("WEBGL_multisampled_render_to_texture") && !1 !== n.__useRenderToTexture + } + + function F(e, t) { + const n = e.colorSpace, + i = e.format, + r = e.type; + return !0 === e.isCompressedTexture || !0 === e.isVideoTexture || n !== vt && n !== mt && (nn.getTransfer(n) === yt ? i === Se && r === pe || console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.") : console.error("THREE.WebGLTextures: Unsupported texture color space:", n)), t + } + + function W(e) { + return "undefined" != typeof HTMLImageElement && e instanceof HTMLImageElement ? (c.width = e.naturalWidth || e.width, c.height = e.naturalHeight || e.height) : "undefined" != typeof VideoFrame && e instanceof VideoFrame ? (c.width = e.displayWidth, c.height = e.displayHeight) : (c.width = e.width, c.height = e.height), c + } + this.allocateTextureUnit = function() { + const e = S; + return e >= r.maxTextures && console.warn("THREE.WebGLTextures: Trying to use " + e + " texture units while this GPU supports only " + r.maxTextures), S += 1, e + }, this.resetTextureUnits = function() { + S = 0 + }, this.setTexture2D = M, this.setTexture2DArray = function(t, r) { + const a = i.get(t); + t.version > 0 && a.__version !== t.version ? R(a, t, r) : n.bindTexture(e.TEXTURE_2D_ARRAY, a.__webglTexture, e.TEXTURE0 + r) + }, this.setTexture3D = function(t, r) { + const a = i.get(t); + t.version > 0 && a.__version !== t.version ? R(a, t, r) : n.bindTexture(e.TEXTURE_3D, a.__webglTexture, e.TEXTURE0 + r) + }, this.setTextureCube = function(t, s) { + const o = i.get(t); + t.version > 0 && o.__version !== t.version ? function(t, s, o) { + if (6 !== s.image.length) return; + const l = I(t, s), + c = s.source; + n.bindTexture(e.TEXTURE_CUBE_MAP, t.__webglTexture, e.TEXTURE0 + o); + const h = i.get(c); + if (c.version !== h.__version || !0 === l) { + n.activeTexture(e.TEXTURE0 + o); + const t = nn.getPrimaries(nn.workingColorSpace), + i = s.colorSpace === mt ? null : nn.getPrimaries(s.colorSpace), + d = s.colorSpace === mt || t === i ? e.NONE : e.BROWSER_DEFAULT_WEBGL; + e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, s.flipY), e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL, s.premultiplyAlpha), e.pixelStorei(e.UNPACK_ALIGNMENT, s.unpackAlignment), e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL, d); + const u = s.isCompressedTexture || s.image[0].isCompressedTexture, + p = s.image[0] && s.image[0].isDataTexture, + f = []; + for (let e = 0; e < 6; e++) f[e] = u || p ? p ? s.image[e].image : s.image[e] : m(s.image[e], !0, r.maxCubemapSize), f[e] = F(s, f[e]); + const w = f[0], + A = a.convert(s.format, s.colorSpace), + x = a.convert(s.type), + k = y(s.internalFormat, A, x, s.colorSpace), + E = !0 !== s.isVideoTexture, + S = void 0 === h.__version || !0 === l, + M = c.dataReady; + let T, _ = b(s, w); + if (P(e.TEXTURE_CUBE_MAP, s), u) { + E && S && n.texStorage2D(e.TEXTURE_CUBE_MAP, _, k, w.width, w.height); + for (let t = 0; t < 6; t++) { + T = f[t].mipmaps; + for (let i = 0; i < T.length; i++) { + const r = T[i]; + s.format !== Se ? null !== A ? E ? M && n.compressedTexSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i, 0, 0, r.width, r.height, A, r.data) : n.compressedTexImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i, k, r.width, r.height, 0, r.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i, 0, 0, r.width, r.height, A, x, r.data) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i, k, r.width, r.height, 0, A, x, r.data) + } + } + } else { + if (T = s.mipmaps, E && S) { + T.length > 0 && _++; + const t = W(f[0]); + n.texStorage2D(e.TEXTURE_CUBE_MAP, _, k, t.width, t.height) + } + for (let t = 0; t < 6; t++) + if (p) { + E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, 0, 0, 0, f[t].width, f[t].height, A, x, f[t].data) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, 0, k, f[t].width, f[t].height, 0, A, x, f[t].data); + for (let i = 0; i < T.length; i++) { + const r = T[i].image[t].image; + E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i + 1, 0, 0, r.width, r.height, A, x, r.data) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i + 1, k, r.width, r.height, 0, A, x, r.data) + } + } else { + E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, 0, 0, 0, A, x, f[t]) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, 0, k, A, x, f[t]); + for (let i = 0; i < T.length; i++) { + const r = T[i]; + E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i + 1, 0, 0, A, x, r.image[t]) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i + 1, k, A, x, r.image[t]) + } + } + } + g(s) && v(e.TEXTURE_CUBE_MAP), h.__version = c.version, s.onUpdate && s.onUpdate(s) + } + t.__version = s.version + }(o, t, s) : n.bindTexture(e.TEXTURE_CUBE_MAP, o.__webglTexture, e.TEXTURE0 + s) + }, this.rebindTextures = function(t, n, r) { + const a = i.get(t); + void 0 !== n && L(a.__webglFramebuffer, t, t.texture, e.COLOR_ATTACHMENT0, e.TEXTURE_2D, 0), void 0 !== r && N(t) + }, this.setupRenderTarget = function(t) { + const r = t.texture, + o = i.get(t), + l = i.get(r); + t.addEventListener("dispose", k); + const c = t.textures, + h = !0 === t.isWebGLCubeRenderTarget, + d = c.length > 1; + if (d || (void 0 === l.__webglTexture && (l.__webglTexture = e.createTexture()), l.__version = r.version, s.memory.textures++), h) { + o.__webglFramebuffer = []; + for (let t = 0; t < 6; t++) + if (r.mipmaps && r.mipmaps.length > 0) { + o.__webglFramebuffer[t] = []; + for (let n = 0; n < r.mipmaps.length; n++) o.__webglFramebuffer[t][n] = e.createFramebuffer() + } else o.__webglFramebuffer[t] = e.createFramebuffer() + } else { + if (r.mipmaps && r.mipmaps.length > 0) { + o.__webglFramebuffer = []; + for (let t = 0; t < r.mipmaps.length; t++) o.__webglFramebuffer[t] = e.createFramebuffer() + } else o.__webglFramebuffer = e.createFramebuffer(); + if (d) + for (let t = 0, n = c.length; t < n; t++) { + const n = i.get(c[t]); + void 0 === n.__webglTexture && (n.__webglTexture = e.createTexture(), s.memory.textures++) + } + if (t.samples > 0 && !1 === O(t)) { + o.__webglMultisampledFramebuffer = e.createFramebuffer(), o.__webglColorRenderbuffer = [], n.bindFramebuffer(e.FRAMEBUFFER, o.__webglMultisampledFramebuffer); + for (let n = 0; n < c.length; n++) { + const i = c[n]; + o.__webglColorRenderbuffer[n] = e.createRenderbuffer(), e.bindRenderbuffer(e.RENDERBUFFER, o.__webglColorRenderbuffer[n]); + const r = a.convert(i.format, i.colorSpace), + s = a.convert(i.type), + l = y(i.internalFormat, r, s, i.colorSpace, !0 === t.isXRRenderTarget), + h = z(t); + e.renderbufferStorageMultisample(e.RENDERBUFFER, h, l, t.width, t.height), e.framebufferRenderbuffer(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0 + n, e.RENDERBUFFER, o.__webglColorRenderbuffer[n]) + } + e.bindRenderbuffer(e.RENDERBUFFER, null), t.depthBuffer && (o.__webglDepthRenderbuffer = e.createRenderbuffer(), D(o.__webglDepthRenderbuffer, t, !0)), n.bindFramebuffer(e.FRAMEBUFFER, null) + } + } + if (h) { + n.bindTexture(e.TEXTURE_CUBE_MAP, l.__webglTexture), P(e.TEXTURE_CUBE_MAP, r); + for (let n = 0; n < 6; n++) + if (r.mipmaps && r.mipmaps.length > 0) + for (let i = 0; i < r.mipmaps.length; i++) L(o.__webglFramebuffer[n][i], t, r, e.COLOR_ATTACHMENT0, e.TEXTURE_CUBE_MAP_POSITIVE_X + n, i); + else L(o.__webglFramebuffer[n], t, r, e.COLOR_ATTACHMENT0, e.TEXTURE_CUBE_MAP_POSITIVE_X + n, 0); + g(r) && v(e.TEXTURE_CUBE_MAP), n.unbindTexture() + } else if (d) { + for (let r = 0, a = c.length; r < a; r++) { + const a = c[r], + s = i.get(a); + n.bindTexture(e.TEXTURE_2D, s.__webglTexture), P(e.TEXTURE_2D, a), L(o.__webglFramebuffer, t, a, e.COLOR_ATTACHMENT0 + r, e.TEXTURE_2D, 0), g(a) && v(e.TEXTURE_2D) + } + n.unbindTexture() + } else { + let i = e.TEXTURE_2D; + if ((t.isWebGL3DRenderTarget || t.isWebGLArrayRenderTarget) && (i = t.isWebGL3DRenderTarget ? e.TEXTURE_3D : e.TEXTURE_2D_ARRAY), n.bindTexture(i, l.__webglTexture), P(i, r), r.mipmaps && r.mipmaps.length > 0) + for (let n = 0; n < r.mipmaps.length; n++) L(o.__webglFramebuffer[n], t, r, e.COLOR_ATTACHMENT0, i, n); + else L(o.__webglFramebuffer, t, r, e.COLOR_ATTACHMENT0, i, 0); + g(r) && v(i), n.unbindTexture() + } + t.depthBuffer && N(t) + }, this.updateRenderTargetMipmap = function(e) { + const t = e.textures; + for (let r = 0, a = t.length; r < a; r++) { + const a = t[r]; + if (g(a)) { + const t = w(e), + r = i.get(a).__webglTexture; + n.bindTexture(t, r), v(t), n.unbindTexture() + } + } + }, this.updateMultisampleRenderTarget = function(t) { + if (t.samples > 0) + if (!1 === O(t)) { + const r = t.textures, + a = t.width, + s = t.height; + let o = e.COLOR_BUFFER_BIT; + const c = t.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT, + h = i.get(t), + d = r.length > 1; + if (d) + for (let t = 0; t < r.length; t++) n.bindFramebuffer(e.FRAMEBUFFER, h.__webglMultisampledFramebuffer), e.framebufferRenderbuffer(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0 + t, e.RENDERBUFFER, null), n.bindFramebuffer(e.FRAMEBUFFER, h.__webglFramebuffer), e.framebufferTexture2D(e.DRAW_FRAMEBUFFER, e.COLOR_ATTACHMENT0 + t, e.TEXTURE_2D, null, 0); + n.bindFramebuffer(e.READ_FRAMEBUFFER, h.__webglMultisampledFramebuffer), n.bindFramebuffer(e.DRAW_FRAMEBUFFER, h.__webglFramebuffer); + for (let n = 0; n < r.length; n++) { + if (t.resolveDepthBuffer && (t.depthBuffer && (o |= e.DEPTH_BUFFER_BIT), t.stencilBuffer && t.resolveStencilBuffer && (o |= e.STENCIL_BUFFER_BIT)), d) { + e.framebufferRenderbuffer(e.READ_FRAMEBUFFER, e.COLOR_ATTACHMENT0, e.RENDERBUFFER, h.__webglColorRenderbuffer[n]); + const t = i.get(r[n]).__webglTexture; + e.framebufferTexture2D(e.DRAW_FRAMEBUFFER, e.COLOR_ATTACHMENT0, e.TEXTURE_2D, t, 0) + } + e.blitFramebuffer(0, 0, a, s, 0, 0, a, s, o, e.NEAREST), !0 === l && (B.length = 0, U.length = 0, B.push(e.COLOR_ATTACHMENT0 + n), t.depthBuffer && !1 === t.resolveDepthBuffer && (B.push(c), U.push(c), e.invalidateFramebuffer(e.DRAW_FRAMEBUFFER, U)), e.invalidateFramebuffer(e.READ_FRAMEBUFFER, B)) + } + if (n.bindFramebuffer(e.READ_FRAMEBUFFER, null), n.bindFramebuffer(e.DRAW_FRAMEBUFFER, null), d) + for (let t = 0; t < r.length; t++) { + n.bindFramebuffer(e.FRAMEBUFFER, h.__webglMultisampledFramebuffer), e.framebufferRenderbuffer(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0 + t, e.RENDERBUFFER, h.__webglColorRenderbuffer[t]); + const a = i.get(r[t]).__webglTexture; + n.bindFramebuffer(e.FRAMEBUFFER, h.__webglFramebuffer), e.framebufferTexture2D(e.DRAW_FRAMEBUFFER, e.COLOR_ATTACHMENT0 + t, e.TEXTURE_2D, a, 0) + } + n.bindFramebuffer(e.DRAW_FRAMEBUFFER, h.__webglMultisampledFramebuffer) + } else if (t.depthBuffer && !1 === t.resolveDepthBuffer && l) { + const n = t.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT; + e.invalidateFramebuffer(e.DRAW_FRAMEBUFFER, [n]) + } + }, this.setupDepthRenderbuffer = N, this.setupFrameBufferTexture = L, this.useMultisampledRTT = O + } + + function Hd(e, t) { + return { + convert: function(n, i = "") { + let r; + const a = nn.getTransfer(i); + if (n === pe) return e.UNSIGNED_BYTE; + if (n === be) return e.UNSIGNED_SHORT_4_4_4_4; + if (n === xe) return e.UNSIGNED_SHORT_5_5_5_1; + if (n === Ee) return e.UNSIGNED_INT_5_9_9_9_REV; + if (n === fe) return e.BYTE; + if (n === me) return e.SHORT; + if (n === ge) return e.UNSIGNED_SHORT; + if (n === ve) return e.INT; + if (n === we) return e.UNSIGNED_INT; + if (n === ye) return e.FLOAT; + if (n === Ae) return e.HALF_FLOAT; + if (1021 === n) return e.ALPHA; + if (1022 === n) return e.RGB; + if (n === Se) return e.RGBA; + if (1024 === n) return e.LUMINANCE; + if (1025 === n) return e.LUMINANCE_ALPHA; + if (n === Me) return e.DEPTH_COMPONENT; + if (n === Te) return e.DEPTH_STENCIL; + if (n === _e) return e.RED; + if (n === Ce) return e.RED_INTEGER; + if (1030 === n) return e.RG; + if (n === Pe) return e.RG_INTEGER; + if (n === Ie) return e.RGBA_INTEGER; + if (n === Re || n === Le || n === De || n === Ne) + if (a === yt) { + if (r = t.get("WEBGL_compressed_texture_s3tc_srgb"), null === r) return null; + if (n === Re) return r.COMPRESSED_SRGB_S3TC_DXT1_EXT; + if (n === Le) return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; + if (n === De) return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; + if (n === Ne) return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT + } else { + if (r = t.get("WEBGL_compressed_texture_s3tc"), null === r) return null; + if (n === Re) return r.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (n === Le) return r.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (n === De) return r.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (n === Ne) return r.COMPRESSED_RGBA_S3TC_DXT5_EXT + } if (n === Be || n === Ue || n === ze || n === Oe) { + if (r = t.get("WEBGL_compressed_texture_pvrtc"), null === r) return null; + if (n === Be) return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (n === Ue) return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (n === ze) return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (n === Oe) return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG + } + if (n === Fe || n === We || n === Ve) { + if (r = t.get("WEBGL_compressed_texture_etc"), null === r) return null; + if (n === Fe || n === We) return a === yt ? r.COMPRESSED_SRGB8_ETC2 : r.COMPRESSED_RGB8_ETC2; + if (n === Ve) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : r.COMPRESSED_RGBA8_ETC2_EAC + } + if (n === He || n === Ge || n === je || n === Qe || n === Ye || n === Ke || n === qe || n === Xe || n === Ze || n === Je || n === $e || n === et || n === tt || n === nt) { + if (r = t.get("WEBGL_compressed_texture_astc"), null === r) return null; + if (n === He) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : r.COMPRESSED_RGBA_ASTC_4x4_KHR; + if (n === Ge) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : r.COMPRESSED_RGBA_ASTC_5x4_KHR; + if (n === je) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : r.COMPRESSED_RGBA_ASTC_5x5_KHR; + if (n === Qe) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : r.COMPRESSED_RGBA_ASTC_6x5_KHR; + if (n === Ye) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : r.COMPRESSED_RGBA_ASTC_6x6_KHR; + if (n === Ke) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : r.COMPRESSED_RGBA_ASTC_8x5_KHR; + if (n === qe) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : r.COMPRESSED_RGBA_ASTC_8x6_KHR; + if (n === Xe) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : r.COMPRESSED_RGBA_ASTC_8x8_KHR; + if (n === Ze) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : r.COMPRESSED_RGBA_ASTC_10x5_KHR; + if (n === Je) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : r.COMPRESSED_RGBA_ASTC_10x6_KHR; + if (n === $e) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : r.COMPRESSED_RGBA_ASTC_10x8_KHR; + if (n === et) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : r.COMPRESSED_RGBA_ASTC_10x10_KHR; + if (n === tt) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : r.COMPRESSED_RGBA_ASTC_12x10_KHR; + if (n === nt) return a === yt ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : r.COMPRESSED_RGBA_ASTC_12x12_KHR + } + if (n === it || n === rt || n === at) { + if (r = t.get("EXT_texture_compression_bptc"), null === r) return null; + if (n === it) return a === yt ? r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : r.COMPRESSED_RGBA_BPTC_UNORM_EXT; + if (n === rt) return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT; + if (n === at) return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT + } + if (36283 === n || n === st || n === ot || n === lt) { + if (r = t.get("EXT_texture_compression_rgtc"), null === r) return null; + if (n === it) return r.COMPRESSED_RED_RGTC1_EXT; + if (n === st) return r.COMPRESSED_SIGNED_RED_RGTC1_EXT; + if (n === ot) return r.COMPRESSED_RED_GREEN_RGTC2_EXT; + if (n === lt) return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT + } + return n === ke ? e.UNSIGNED_INT_24_8 : void 0 !== e[n] ? e[n] : null + } + } + } + class Gd { + constructor() { + this.texture = null, this.mesh = null, this.depthNear = 0, this.depthFar = 0 + } + init(e, t, n) { + if (null === this.texture) { + const i = new un; + e.properties.get(i).__webglTexture = t.texture, t.depthNear === n.depthNear && t.depthFar === n.depthFar || (this.depthNear = t.depthNear, this.depthFar = t.depthFar), this.texture = i + } + } + getMesh(e) { + if (null !== this.texture && null === this.mesh) { + const t = e.cameras[0].viewport, + n = new Sr({ + vertexShader: "\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}", + fragmentShader: "\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}", + uniforms: { + depthColor: { + value: this.texture + }, + depthWidth: { + value: t.z + }, + depthHeight: { + value: t.w + } + } + }); + this.mesh = new wr(new Ns(20, 20), n) + } + return this.mesh + } + reset() { + this.texture = null, this.mesh = null + } + getDepthTexture() { + return this.texture + } + } + class jd extends Lt { + constructor(e, t) { + super(); + const n = this; + let i = null, + r = 1, + a = null, + s = "local-floor", + o = 1, + l = null, + c = null, + h = null, + d = null, + u = null, + p = null; + const f = new Gd, + m = t.getContextAttributes(); + let g = null, + v = null; + const w = [], + y = [], + A = new jt; + let b = null; + const x = new Pr; + x.viewport = new pn; + const k = new Pr; + k.viewport = new pn; + const E = [x, k], + S = new Bo; + let M = null, + T = null; + + function _(e) { + const t = y.indexOf(e.inputSource); + if (-1 === t) return; + const n = w[t]; + void 0 !== n && (n.update(e.inputSource, e.frame, l || a), n.dispatchEvent({ + type: e.type, + data: e.inputSource + })) + } + + function C() { + i.removeEventListener("select", _), i.removeEventListener("selectstart", _), i.removeEventListener("selectend", _), i.removeEventListener("squeeze", _), i.removeEventListener("squeezestart", _), i.removeEventListener("squeezeend", _), i.removeEventListener("end", C), i.removeEventListener("inputsourceschange", P); + for (let e = 0; e < w.length; e++) { + const t = y[e]; + null !== t && (y[e] = null, w[e].disconnect(t)) + } + M = null, T = null, f.reset(), e.setRenderTarget(g), u = null, d = null, h = null, i = null, v = null, N.stop(), n.isPresenting = !1, e.setPixelRatio(b), e.setSize(A.width, A.height, !1), n.dispatchEvent({ + type: "sessionend" + }) + } + + function P(e) { + for (let t = 0; t < e.removed.length; t++) { + const n = e.removed[t], + i = y.indexOf(n); + i >= 0 && (y[i] = null, w[i].disconnect(n)) + } + for (let t = 0; t < e.added.length; t++) { + const n = e.added[t]; + let i = y.indexOf(n); + if (-1 === i) { + for (let e = 0; e < w.length; e++) { + if (e >= y.length) { + y.push(n), i = e; + break + } + if (null === y[e]) { + y[e] = n, i = e; + break + } + } + if (-1 === i) break + } + const r = w[i]; + r && r.connect(n) + } + } + this.cameraAutoUpdate = !0, this.enabled = !1, this.isPresenting = !1, this.getController = function(e) { + let t = w[e]; + return void 0 === t && (t = new Ur, w[e] = t), t.getTargetRaySpace() + }, this.getControllerGrip = function(e) { + let t = w[e]; + return void 0 === t && (t = new Ur, w[e] = t), t.getGripSpace() + }, this.getHand = function(e) { + let t = w[e]; + return void 0 === t && (t = new Ur, w[e] = t), t.getHandSpace() + }, this.setFramebufferScaleFactor = function(e) { + r = e, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.") + }, this.setReferenceSpaceType = function(e) { + s = e, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.") + }, this.getReferenceSpace = function() { + return l || a + }, this.setReferenceSpace = function(e) { + l = e + }, this.getBaseLayer = function() { + return null !== d ? d : u + }, this.getBinding = function() { + return h + }, this.getFrame = function() { + return p + }, this.getSession = function() { + return i + }, this.setSession = async function(c) { + if (i = c, null !== i) { + g = e.getRenderTarget(), i.addEventListener("select", _), i.addEventListener("selectstart", _), i.addEventListener("selectend", _), i.addEventListener("squeeze", _), i.addEventListener("squeezestart", _), i.addEventListener("squeezeend", _), i.addEventListener("end", C), i.addEventListener("inputsourceschange", P), !0 !== m.xrCompatible && await t.makeXRCompatible(), b = e.getPixelRatio(), e.getSize(A); + if ("undefined" != typeof XRWebGLBinding && "createProjectionLayer" in XRWebGLBinding.prototype) { + let n = null, + a = null, + s = null; + m.depth && (s = m.stencil ? t.DEPTH24_STENCIL8 : t.DEPTH_COMPONENT24, n = m.stencil ? Te : Me, a = m.stencil ? ke : we); + const o = { + colorFormat: t.RGBA8, + depthFormat: s, + scaleFactor: r + }; + h = new XRWebGLBinding(i, t), d = h.createProjectionLayer(o), i.updateRenderState({ + layers: [d] + }), e.setPixelRatio(1), e.setSize(d.textureWidth, d.textureHeight, !1), v = new mn(d.textureWidth, d.textureHeight, { + format: Se, + type: pe, + depthTexture: new Wa(d.textureWidth, d.textureHeight, a, void 0, void 0, void 0, void 0, void 0, void 0, n), + stencilBuffer: m.stencil, + colorSpace: e.outputColorSpace, + samples: m.antialias ? 4 : 0, + resolveDepthBuffer: !1 === d.ignoreDepthValues, + resolveStencilBuffer: !1 === d.ignoreDepthValues + }) + } else { + const n = { + antialias: m.antialias, + alpha: !0, + depth: m.depth, + stencil: m.stencil, + framebufferScaleFactor: r + }; + u = new XRWebGLLayer(i, t, n), i.updateRenderState({ + baseLayer: u + }), e.setPixelRatio(1), e.setSize(u.framebufferWidth, u.framebufferHeight, !1), v = new mn(u.framebufferWidth, u.framebufferHeight, { + format: Se, + type: pe, + colorSpace: e.outputColorSpace, + stencilBuffer: m.stencil, + resolveDepthBuffer: !1 === u.ignoreDepthValues, + resolveStencilBuffer: !1 === u.ignoreDepthValues + }) + } + v.isXRRenderTarget = !0, this.setFoveation(o), l = null, a = await i.requestReferenceSpace(s), N.setContext(i), N.start(), n.isPresenting = !0, n.dispatchEvent({ + type: "sessionstart" + }) + } + }, this.getEnvironmentBlendMode = function() { + if (null !== i) return i.environmentBlendMode + }, this.getDepthTexture = function() { + return f.getDepthTexture() + }; + const I = new yn, + R = new yn; + + function L(e, t) { + null === t ? e.matrixWorld.copy(e.matrix) : e.matrixWorld.multiplyMatrices(t.matrixWorld, e.matrix), e.matrixWorldInverse.copy(e.matrixWorld).invert() + } + this.updateCamera = function(e) { + if (null === i) return; + let t = e.near, + n = e.far; + null !== f.texture && (f.depthNear > 0 && (t = f.depthNear), f.depthFar > 0 && (n = f.depthFar)), S.near = k.near = x.near = t, S.far = k.far = x.far = n, M === S.near && T === S.far || (i.updateRenderState({ + depthNear: S.near, + depthFar: S.far + }), M = S.near, T = S.far), x.layers.mask = 2 | e.layers.mask, k.layers.mask = 4 | e.layers.mask, S.layers.mask = x.layers.mask | k.layers.mask; + const r = e.parent, + a = S.cameras; + L(S, r); + for (let e = 0; e < a.length; e++) L(a[e], r); + 2 === a.length ? function(e, t, n) { + I.setFromMatrixPosition(t.matrixWorld), R.setFromMatrixPosition(n.matrixWorld); + const i = I.distanceTo(R), + r = t.projectionMatrix.elements, + a = n.projectionMatrix.elements, + s = r[14] / (r[10] - 1), + o = r[14] / (r[10] + 1), + l = (r[9] + 1) / r[5], + c = (r[9] - 1) / r[5], + h = (r[8] - 1) / r[0], + d = (a[8] + 1) / a[0], + u = s * h, + p = s * d, + f = i / (-h + d), + m = f * -h; + if (t.matrixWorld.decompose(e.position, e.quaternion, e.scale), e.translateX(m), e.translateZ(f), e.matrixWorld.compose(e.position, e.quaternion, e.scale), e.matrixWorldInverse.copy(e.matrixWorld).invert(), -1 === r[10]) e.projectionMatrix.copy(t.projectionMatrix), e.projectionMatrixInverse.copy(t.projectionMatrixInverse); + else { + const t = s + f, + n = o + f, + r = u - m, + a = p + (i - m), + h = l * o / n * t, + d = c * o / n * t; + e.projectionMatrix.makePerspective(r, a, h, d, t, n), e.projectionMatrixInverse.copy(e.projectionMatrix).invert() + } + }(S, x, k) : S.projectionMatrix.copy(x.projectionMatrix), + function(e, t, n) { + null === n ? e.matrix.copy(t.matrixWorld) : (e.matrix.copy(n.matrixWorld), e.matrix.invert(), e.matrix.multiply(t.matrixWorld)); + e.matrix.decompose(e.position, e.quaternion, e.scale), e.updateMatrixWorld(!0), e.projectionMatrix.copy(t.projectionMatrix), e.projectionMatrixInverse.copy(t.projectionMatrixInverse), e.isPerspectiveCamera && (e.fov = 2 * Ut * Math.atan(1 / e.projectionMatrix.elements[5]), e.zoom = 1) + }(e, S, r) + }, this.getCamera = function() { + return S + }, this.getFoveation = function() { + if (null !== d || null !== u) return o + }, this.setFoveation = function(e) { + o = e, null !== d && (d.fixedFoveation = e), null !== u && void 0 !== u.fixedFoveation && (u.fixedFoveation = e) + }, this.hasDepthSensing = function() { + return null !== f.texture + }, this.getDepthSensingMesh = function() { + return f.getMesh(S) + }; + let D = null; + const N = new fc; + N.setAnimationLoop((function(t, r) { + if (c = r.getViewerPose(l || a), p = r, null !== c) { + const t = c.views; + null !== u && (e.setRenderTargetFramebuffer(v, u.framebuffer), e.setRenderTarget(v)); + let n = !1; + t.length !== S.cameras.length && (S.cameras.length = 0, n = !0); + for (let i = 0; i < t.length; i++) { + const r = t[i]; + let a = null; + if (null !== u) a = u.getViewport(r); + else { + const t = h.getViewSubImage(d, r); + a = t.viewport, 0 === i && (e.setRenderTargetTextures(v, t.colorTexture, d.ignoreDepthValues ? void 0 : t.depthStencilTexture), e.setRenderTarget(v)) + } + let s = E[i]; + void 0 === s && (s = new Pr, s.layers.enable(i), s.viewport = new pn, E[i] = s), s.matrix.fromArray(r.transform.matrix), s.matrix.decompose(s.position, s.quaternion, s.scale), s.projectionMatrix.fromArray(r.projectionMatrix), s.projectionMatrixInverse.copy(s.projectionMatrix).invert(), s.viewport.set(a.x, a.y, a.width, a.height), 0 === i && (S.matrix.copy(s.matrix), S.matrix.decompose(S.position, S.quaternion, S.scale)), !0 === n && S.cameras.push(s) + } + const r = i.enabledFeatures; + if (r && r.includes("depth-sensing") && "gpu-optimized" == i.depthUsage && h) { + const n = h.getDepthInformation(t[0]); + n && n.isValid && n.texture && f.init(e, n, i.renderState) + } + } + for (let e = 0; e < w.length; e++) { + const t = y[e], + n = w[e]; + null !== t && void 0 !== n && n.update(t, r, l || a) + } + D && D(t, r), r.detectedPlanes && n.dispatchEvent({ + type: "planesdetected", + data: r + }), p = null + })), this.setAnimationLoop = function(e) { + D = e + }, this.dispose = function() {} + } + } + const Qd = new ai, + Yd = new qn; + + function Kd(e, t) { + function n(e, t) { + !0 === e.matrixAutoUpdate && e.updateMatrix(), t.value.copy(e.matrix) + } + + function i(e, i) { + e.opacity.value = i.opacity, i.color && e.diffuse.value.copy(i.color), i.emissive && e.emissive.value.copy(i.emissive).multiplyScalar(i.emissiveIntensity), i.map && (e.map.value = i.map, n(i.map, e.mapTransform)), i.alphaMap && (e.alphaMap.value = i.alphaMap, n(i.alphaMap, e.alphaMapTransform)), i.bumpMap && (e.bumpMap.value = i.bumpMap, n(i.bumpMap, e.bumpMapTransform), e.bumpScale.value = i.bumpScale, 1 === i.side && (e.bumpScale.value *= -1)), i.normalMap && (e.normalMap.value = i.normalMap, n(i.normalMap, e.normalMapTransform), e.normalScale.value.copy(i.normalScale), 1 === i.side && e.normalScale.value.negate()), i.displacementMap && (e.displacementMap.value = i.displacementMap, n(i.displacementMap, e.displacementMapTransform), e.displacementScale.value = i.displacementScale, e.displacementBias.value = i.displacementBias), i.emissiveMap && (e.emissiveMap.value = i.emissiveMap, n(i.emissiveMap, e.emissiveMapTransform)), i.specularMap && (e.specularMap.value = i.specularMap, n(i.specularMap, e.specularMapTransform)), i.alphaTest > 0 && (e.alphaTest.value = i.alphaTest); + const r = t.get(i), + a = r.envMap, + s = r.envMapRotation; + a && (e.envMap.value = a, Qd.copy(s), Qd.x *= -1, Qd.y *= -1, Qd.z *= -1, a.isCubeTexture && !1 === a.isRenderTargetTexture && (Qd.y *= -1, Qd.z *= -1), e.envMapRotation.value.setFromMatrix4(Yd.makeRotationFromEuler(Qd)), e.flipEnvMap.value = a.isCubeTexture && !1 === a.isRenderTargetTexture ? -1 : 1, e.reflectivity.value = i.reflectivity, e.ior.value = i.ior, e.refractionRatio.value = i.refractionRatio), i.lightMap && (e.lightMap.value = i.lightMap, e.lightMapIntensity.value = i.lightMapIntensity, n(i.lightMap, e.lightMapTransform)), i.aoMap && (e.aoMap.value = i.aoMap, e.aoMapIntensity.value = i.aoMapIntensity, n(i.aoMap, e.aoMapTransform)) + } + return { + refreshFogUniforms: function(t, n) { + n.color.getRGB(t.fogColor.value, kr(e)), n.isFog ? (t.fogNear.value = n.near, t.fogFar.value = n.far) : n.isFogExp2 && (t.fogDensity.value = n.density) + }, + refreshMaterialUniforms: function(e, r, a, s, o) { + r.isMeshBasicMaterial || r.isMeshLambertMaterial ? i(e, r) : r.isMeshToonMaterial ? (i(e, r), function(e, t) { + t.gradientMap && (e.gradientMap.value = t.gradientMap) + }(e, r)) : r.isMeshPhongMaterial ? (i(e, r), function(e, t) { + e.specular.value.copy(t.specular), e.shininess.value = Math.max(t.shininess, 1e-4) + }(e, r)) : r.isMeshStandardMaterial ? (i(e, r), function(e, t) { + e.metalness.value = t.metalness, t.metalnessMap && (e.metalnessMap.value = t.metalnessMap, n(t.metalnessMap, e.metalnessMapTransform)); + e.roughness.value = t.roughness, t.roughnessMap && (e.roughnessMap.value = t.roughnessMap, n(t.roughnessMap, e.roughnessMapTransform)); + t.envMap && (e.envMapIntensity.value = t.envMapIntensity) + }(e, r), r.isMeshPhysicalMaterial && function(e, t, i) { + e.ior.value = t.ior, t.sheen > 0 && (e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen), e.sheenRoughness.value = t.sheenRoughness, t.sheenColorMap && (e.sheenColorMap.value = t.sheenColorMap, n(t.sheenColorMap, e.sheenColorMapTransform)), t.sheenRoughnessMap && (e.sheenRoughnessMap.value = t.sheenRoughnessMap, n(t.sheenRoughnessMap, e.sheenRoughnessMapTransform))); + t.clearcoat > 0 && (e.clearcoat.value = t.clearcoat, e.clearcoatRoughness.value = t.clearcoatRoughness, t.clearcoatMap && (e.clearcoatMap.value = t.clearcoatMap, n(t.clearcoatMap, e.clearcoatMapTransform)), t.clearcoatRoughnessMap && (e.clearcoatRoughnessMap.value = t.clearcoatRoughnessMap, n(t.clearcoatRoughnessMap, e.clearcoatRoughnessMapTransform)), t.clearcoatNormalMap && (e.clearcoatNormalMap.value = t.clearcoatNormalMap, n(t.clearcoatNormalMap, e.clearcoatNormalMapTransform), e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale), 1 === t.side && e.clearcoatNormalScale.value.negate())); + t.dispersion > 0 && (e.dispersion.value = t.dispersion); + t.iridescence > 0 && (e.iridescence.value = t.iridescence, e.iridescenceIOR.value = t.iridescenceIOR, e.iridescenceThicknessMinimum.value = t.iridescenceThicknessRange[0], e.iridescenceThicknessMaximum.value = t.iridescenceThicknessRange[1], t.iridescenceMap && (e.iridescenceMap.value = t.iridescenceMap, n(t.iridescenceMap, e.iridescenceMapTransform)), t.iridescenceThicknessMap && (e.iridescenceThicknessMap.value = t.iridescenceThicknessMap, n(t.iridescenceThicknessMap, e.iridescenceThicknessMapTransform))); + t.transmission > 0 && (e.transmission.value = t.transmission, e.transmissionSamplerMap.value = i.texture, e.transmissionSamplerSize.value.set(i.width, i.height), t.transmissionMap && (e.transmissionMap.value = t.transmissionMap, n(t.transmissionMap, e.transmissionMapTransform)), e.thickness.value = t.thickness, t.thicknessMap && (e.thicknessMap.value = t.thicknessMap, n(t.thicknessMap, e.thicknessMapTransform)), e.attenuationDistance.value = t.attenuationDistance, e.attenuationColor.value.copy(t.attenuationColor)); + t.anisotropy > 0 && (e.anisotropyVector.value.set(t.anisotropy * Math.cos(t.anisotropyRotation), t.anisotropy * Math.sin(t.anisotropyRotation)), t.anisotropyMap && (e.anisotropyMap.value = t.anisotropyMap, n(t.anisotropyMap, e.anisotropyMapTransform))); + e.specularIntensity.value = t.specularIntensity, e.specularColor.value.copy(t.specularColor), t.specularColorMap && (e.specularColorMap.value = t.specularColorMap, n(t.specularColorMap, e.specularColorMapTransform)); + t.specularIntensityMap && (e.specularIntensityMap.value = t.specularIntensityMap, n(t.specularIntensityMap, e.specularIntensityMapTransform)) + }(e, r, o)) : r.isMeshMatcapMaterial ? (i(e, r), function(e, t) { + t.matcap && (e.matcap.value = t.matcap) + }(e, r)) : r.isMeshDepthMaterial ? i(e, r) : r.isMeshDistanceMaterial ? (i(e, r), function(e, n) { + const i = t.get(n).light; + e.referencePosition.value.setFromMatrixPosition(i.matrixWorld), e.nearDistance.value = i.shadow.camera.near, e.farDistance.value = i.shadow.camera.far + }(e, r)) : r.isMeshNormalMaterial ? i(e, r) : r.isLineBasicMaterial ? (function(e, t) { + e.diffuse.value.copy(t.color), e.opacity.value = t.opacity, t.map && (e.map.value = t.map, n(t.map, e.mapTransform)) + }(e, r), r.isLineDashedMaterial && function(e, t) { + e.dashSize.value = t.dashSize, e.totalSize.value = t.dashSize + t.gapSize, e.scale.value = t.scale + }(e, r)) : r.isPointsMaterial ? function(e, t, i, r) { + e.diffuse.value.copy(t.color), e.opacity.value = t.opacity, e.size.value = t.size * i, e.scale.value = .5 * r, t.map && (e.map.value = t.map, n(t.map, e.uvTransform)); + t.alphaMap && (e.alphaMap.value = t.alphaMap, n(t.alphaMap, e.alphaMapTransform)); + t.alphaTest > 0 && (e.alphaTest.value = t.alphaTest) + }(e, r, a, s) : r.isSpriteMaterial ? function(e, t) { + e.diffuse.value.copy(t.color), e.opacity.value = t.opacity, e.rotation.value = t.rotation, t.map && (e.map.value = t.map, n(t.map, e.mapTransform)); + t.alphaMap && (e.alphaMap.value = t.alphaMap, n(t.alphaMap, e.alphaMapTransform)); + t.alphaTest > 0 && (e.alphaTest.value = t.alphaTest) + }(e, r) : r.isShadowMaterial ? (e.color.value.copy(r.color), e.opacity.value = r.opacity) : r.isShaderMaterial && (r.uniformsNeedUpdate = !1) + } + } + } + + function qd(e, t, n, i) { + let r = {}, + a = {}, + s = []; + const o = e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS); + + function l(e, t, n, i) { + const r = e.value, + a = t + "_" + n; + if (void 0 === i[a]) return i[a] = "number" == typeof r || "boolean" == typeof r ? r : r.clone(), !0; + { + const e = i[a]; + if ("number" == typeof r || "boolean" == typeof r) { + if (e !== r) return i[a] = r, !0 + } else if (!1 === e.equals(r)) return e.copy(r), !0 + } + return !1 + } + + function c(e) { + const t = { + boundary: 0, + storage: 0 + }; + return "number" == typeof e || "boolean" == typeof e ? (t.boundary = 4, t.storage = 4) : e.isVector2 ? (t.boundary = 8, t.storage = 8) : e.isVector3 || e.isColor ? (t.boundary = 16, t.storage = 12) : e.isVector4 ? (t.boundary = 16, t.storage = 16) : e.isMatrix3 ? (t.boundary = 48, t.storage = 48) : e.isMatrix4 ? (t.boundary = 64, t.storage = 64) : e.isTexture ? console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.") : console.warn("THREE.WebGLRenderer: Unsupported uniform value type.", e), t + } + + function h(t) { + const n = t.target; + n.removeEventListener("dispose", h); + const i = s.indexOf(n.__bindingPointIndex); + s.splice(i, 1), e.deleteBuffer(r[n.id]), delete r[n.id], delete a[n.id] + } + return { + bind: function(e, t) { + const n = t.program; + i.uniformBlockBinding(e, n) + }, + update: function(n, d) { + let u = r[n.id]; + void 0 === u && (! function(e) { + const t = e.uniforms; + let n = 0; + const i = 16; + for (let e = 0, r = t.length; e < r; e++) { + const r = Array.isArray(t[e]) ? t[e] : [t[e]]; + for (let e = 0, t = r.length; e < t; e++) { + const t = r[e], + a = Array.isArray(t.value) ? t.value : [t.value]; + for (let e = 0, r = a.length; e < r; e++) { + const r = c(a[e]), + s = n % i, + o = s % r.boundary, + l = s + o; + n += o, 0 !== l && i - l < r.storage && (n += i - l), t.__data = new Float32Array(r.storage / Float32Array.BYTES_PER_ELEMENT), t.__offset = n, n += r.storage + } + } + } + const r = n % i; + r > 0 && (n += i - r); + e.__size = n, e.__cache = {} + }(n), u = function(t) { + const n = function() { + for (let e = 0; e < o; e++) + if (-1 === s.indexOf(e)) return s.push(e), e; + return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."), 0 + }(); + t.__bindingPointIndex = n; + const i = e.createBuffer(), + r = t.__size, + a = t.usage; + return e.bindBuffer(e.UNIFORM_BUFFER, i), e.bufferData(e.UNIFORM_BUFFER, r, a), e.bindBuffer(e.UNIFORM_BUFFER, null), e.bindBufferBase(e.UNIFORM_BUFFER, n, i), i + }(n), r[n.id] = u, n.addEventListener("dispose", h)); + const p = d.program; + i.updateUBOMapping(n, p); + const f = t.render.frame; + a[n.id] !== f && (! function(t) { + const n = r[t.id], + i = t.uniforms, + a = t.__cache; + e.bindBuffer(e.UNIFORM_BUFFER, n); + for (let t = 0, n = i.length; t < n; t++) { + const n = Array.isArray(i[t]) ? i[t] : [i[t]]; + for (let i = 0, r = n.length; i < r; i++) { + const r = n[i]; + if (!0 === l(r, t, i, a)) { + const t = r.__offset, + n = Array.isArray(r.value) ? r.value : [r.value]; + let i = 0; + for (let a = 0; a < n.length; a++) { + const s = n[a], + o = c(s); + "number" == typeof s || "boolean" == typeof s ? (r.__data[0] = s, e.bufferSubData(e.UNIFORM_BUFFER, t + i, r.__data)) : s.isMatrix3 ? (r.__data[0] = s.elements[0], r.__data[1] = s.elements[1], r.__data[2] = s.elements[2], r.__data[3] = 0, r.__data[4] = s.elements[3], r.__data[5] = s.elements[4], r.__data[6] = s.elements[5], r.__data[7] = 0, r.__data[8] = s.elements[6], r.__data[9] = s.elements[7], r.__data[10] = s.elements[8], r.__data[11] = 0) : (s.toArray(r.__data, i), i += o.storage / Float32Array.BYTES_PER_ELEMENT) + } + e.bufferSubData(e.UNIFORM_BUFFER, t, r.__data) + } + } + } + e.bindBuffer(e.UNIFORM_BUFFER, null) + }(n), a[n.id] = f) + }, + dispose: function() { + for (const t in r) e.deleteBuffer(r[t]); + s = [], r = {}, a = {} + } + } + } + class Xd { + constructor(e = {}) { + const { + canvas: t = Xt(), + context: n = null, + depth: i = !0, + stencil: r = !1, + alpha: a = !1, + antialias: s = !1, + premultipliedAlpha: o = !0, + preserveDrawingBuffer: l = !1, + powerPreference: c = "default", + failIfMajorPerformanceCaveat: h = !1, + reverseDepthBuffer: d = !1 + } = e; + let u; + if (this.isWebGLRenderer = !0, null !== n) { + if ("undefined" != typeof WebGLRenderingContext && n instanceof WebGLRenderingContext) throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163."); + u = n.getContextAttributes().alpha + } else u = a; + const p = new Uint32Array(4), + f = new Int32Array(4); + let g = null, + v = null; + const w = [], + y = []; + this.domElement = t, this.debug = { + checkShaderErrors: !0, + onShaderError: null + }, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.clippingPlanes = [], this.localClippingEnabled = !1, this._outputColorSpace = gt, this.toneMapping = 0, this.toneMappingExposure = 1; + const A = this; + let b = !1, + x = 0, + k = 0, + E = null, + S = -1, + M = null; + const T = new pn, + _ = new pn; + let C = null; + const P = new Wi(0); + let I = 0, + R = t.width, + L = t.height, + D = 1, + N = null, + B = null; + const U = new pn(0, 0, R, L), + z = new pn(0, 0, R, L); + let O = !1; + const F = new ya; + let W = !1, + V = !1; + this.transmissionResolutionScale = 1; + const H = new qn, + G = new qn, + j = new yn, + Q = new pn, + Y = { + background: null, + fog: null, + environment: null, + overrideMaterial: null, + isScene: !0 + }; + let K = !1; + + function q() { + return null === E ? D : 1 + } + let X, Z, J, $, ee, te, ne, ie, re, ae, se, oe, le, ce, he, de, fe, me, ve, ye, Ee, Se, Me, Te, _e = n; + + function Re(e, n) { + return t.getContext(e, n) + } + try { + const e = { + alpha: !0, + depth: i, + stencil: r, + antialias: s, + premultipliedAlpha: o, + preserveDrawingBuffer: l, + powerPreference: c, + failIfMajorPerformanceCaveat: h + }; + if ("setAttribute" in t && t.setAttribute("data-engine", `three.js r${m}`), t.addEventListener("webglcontextlost", Ne, !1), t.addEventListener("webglcontextrestored", Be, !1), t.addEventListener("webglcontextcreationerror", Ue, !1), null === _e) { + const t = "webgl2"; + if (_e = Re(t, e), null === _e) throw Re(t) ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context.") + } + } catch (e) { + throw console.error("THREE.WebGLRenderer: " + e.message), e + } + + function Le() { + X = new Yc(_e), X.init(), Se = new Hd(_e, X), Z = new Sc(_e, X, e, Se), J = new Wd(_e, X), Z.reverseDepthBuffer && d && J.buffers.depth.setReversed(!0), $ = new Xc(_e), ee = new _d, te = new Vd(_e, X, J, ee, Z, Se, $), ne = new Tc(A), ie = new Qc(A), re = new mc(_e), Me = new kc(_e, re), ae = new Kc(_e, re, $, Me), se = new Jc(_e, ae, re, $), ve = new Zc(_e, Z, te), de = new Mc(ee), oe = new Td(A, ne, ie, X, Z, Me, de), le = new Kd(A, ee), ce = new Rd, he = new zd(X), me = new xc(A, ne, ie, J, se, u, o), fe = new Od(A, se, Z), Te = new qd(_e, $, Z, J), ye = new Ec(_e, X, $), Ee = new qc(_e, X, $), $.programs = oe.programs, A.capabilities = Z, A.extensions = X, A.properties = ee, A.renderLists = ce, A.shadowMap = fe, A.state = J, A.info = $ + } + Le(); + const De = new jd(A, _e); + + function Ne(e) { + e.preventDefault(), console.log("THREE.WebGLRenderer: Context Lost."), b = !0 + } + + function Be() { + console.log("THREE.WebGLRenderer: Context Restored."), b = !1; + const e = $.autoReset, + t = fe.enabled, + n = fe.autoUpdate, + i = fe.needsUpdate, + r = fe.type; + Le(), $.autoReset = e, fe.enabled = t, fe.autoUpdate = n, fe.needsUpdate = i, fe.type = r + } + + function Ue(e) { + console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ", e.statusMessage) + } + + function ze(e) { + const t = e.target; + t.removeEventListener("dispose", ze), + function(e) { + (function(e) { + const t = ee.get(e).programs; + void 0 !== t && (t.forEach((function(e) { + oe.releaseProgram(e) + })), e.isShaderMaterial && oe.releaseShaderCache(e)) + })(e), ee.remove(e) + }(t) + } + + function Oe(e, t, n) { + !0 === e.transparent && 2 === e.side && !1 === e.forceSinglePass ? (e.side = 1, e.needsUpdate = !0, qe(e, t, n), e.side = 0, e.needsUpdate = !0, qe(e, t, n), e.side = 2) : qe(e, t, n) + } + this.xr = De, this.getContext = function() { + return _e + }, this.getContextAttributes = function() { + return _e.getContextAttributes() + }, this.forceContextLoss = function() { + const e = X.get("WEBGL_lose_context"); + e && e.loseContext() + }, this.forceContextRestore = function() { + const e = X.get("WEBGL_lose_context"); + e && e.restoreContext() + }, this.getPixelRatio = function() { + return D + }, this.setPixelRatio = function(e) { + void 0 !== e && (D = e, this.setSize(R, L, !1)) + }, this.getSize = function(e) { + return e.set(R, L) + }, this.setSize = function(e, n, i = !0) { + De.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (R = e, L = n, t.width = Math.floor(e * D), t.height = Math.floor(n * D), !0 === i && (t.style.width = e + "px", t.style.height = n + "px"), this.setViewport(0, 0, e, n)) + }, this.getDrawingBufferSize = function(e) { + return e.set(R * D, L * D).floor() + }, this.setDrawingBufferSize = function(e, n, i) { + R = e, L = n, D = i, t.width = Math.floor(e * i), t.height = Math.floor(n * i), this.setViewport(0, 0, e, n) + }, this.getCurrentViewport = function(e) { + return e.copy(T) + }, this.getViewport = function(e) { + return e.copy(U) + }, this.setViewport = function(e, t, n, i) { + e.isVector4 ? U.set(e.x, e.y, e.z, e.w) : U.set(e, t, n, i), J.viewport(T.copy(U).multiplyScalar(D).round()) + }, this.getScissor = function(e) { + return e.copy(z) + }, this.setScissor = function(e, t, n, i) { + e.isVector4 ? z.set(e.x, e.y, e.z, e.w) : z.set(e, t, n, i), J.scissor(_.copy(z).multiplyScalar(D).round()) + }, this.getScissorTest = function() { + return O + }, this.setScissorTest = function(e) { + J.setScissorTest(O = e) + }, this.setOpaqueSort = function(e) { + N = e + }, this.setTransparentSort = function(e) { + B = e + }, this.getClearColor = function(e) { + return e.copy(me.getClearColor()) + }, this.setClearColor = function() { + me.setClearColor(...arguments) + }, this.getClearAlpha = function() { + return me.getClearAlpha() + }, this.setClearAlpha = function() { + me.setClearAlpha(...arguments) + }, this.clear = function(e = !0, t = !0, n = !0) { + let i = 0; + if (e) { + let e = !1; + if (null !== E) { + const t = E.texture.format; + e = t === Ie || t === Pe || t === Ce + } + if (e) { + const e = E.texture.type, + t = e === pe || e === we || e === ge || e === ke || e === be || e === xe, + n = me.getClearColor(), + i = me.getClearAlpha(), + r = n.r, + a = n.g, + s = n.b; + t ? (p[0] = r, p[1] = a, p[2] = s, p[3] = i, _e.clearBufferuiv(_e.COLOR, 0, p)) : (f[0] = r, f[1] = a, f[2] = s, f[3] = i, _e.clearBufferiv(_e.COLOR, 0, f)) + } else i |= _e.COLOR_BUFFER_BIT + } + t && (i |= _e.DEPTH_BUFFER_BIT), n && (i |= _e.STENCIL_BUFFER_BIT, this.state.buffers.stencil.setMask(4294967295)), _e.clear(i) + }, this.clearColor = function() { + this.clear(!0, !1, !1) + }, this.clearDepth = function() { + this.clear(!1, !0, !1) + }, this.clearStencil = function() { + this.clear(!1, !1, !0) + }, this.dispose = function() { + t.removeEventListener("webglcontextlost", Ne, !1), t.removeEventListener("webglcontextrestored", Be, !1), t.removeEventListener("webglcontextcreationerror", Ue, !1), me.dispose(), ce.dispose(), he.dispose(), ee.dispose(), ne.dispose(), ie.dispose(), se.dispose(), Me.dispose(), Te.dispose(), oe.dispose(), De.dispose(), De.removeEventListener("sessionstart", We), De.removeEventListener("sessionend", Ve), He.stop() + }, this.renderBufferDirect = function(e, t, n, i, r, a) { + null === t && (t = Y); + const s = r.isMesh && r.matrixWorld.determinant() < 0, + o = function(e, t, n, i, r) { + !0 !== t.isScene && (t = Y); + te.resetTextureUnits(); + const a = t.fog, + s = i.isMeshStandardMaterial ? t.environment : null, + o = null === E ? A.outputColorSpace : !0 === E.isXRRenderTarget ? E.texture.colorSpace : vt, + l = (i.isMeshStandardMaterial ? ie : ne).get(i.envMap || s), + c = !0 === i.vertexColors && !!n.attributes.color && 4 === n.attributes.color.itemSize, + h = !!n.attributes.tangent && (!!i.normalMap || i.anisotropy > 0), + d = !!n.morphAttributes.position, + u = !!n.morphAttributes.normal, + p = !!n.morphAttributes.color; + let f = 0; + i.toneMapped && (null !== E && !0 !== E.isXRRenderTarget || (f = A.toneMapping)); + const m = n.morphAttributes.position || n.morphAttributes.normal || n.morphAttributes.color, + g = void 0 !== m ? m.length : 0, + w = ee.get(i), + y = v.state.lights; + if (!0 === W && (!0 === V || e !== M)) { + const t = e === M && i.id === S; + de.setState(i, e, t) + } + let b = !1; + i.version === w.__version ? w.needsLights && w.lightsStateVersion !== y.state.version || w.outputColorSpace !== o || r.isBatchedMesh && !1 === w.batching ? b = !0 : r.isBatchedMesh || !0 !== w.batching ? r.isBatchedMesh && !0 === w.batchingColor && null === r.colorTexture || r.isBatchedMesh && !1 === w.batchingColor && null !== r.colorTexture || r.isInstancedMesh && !1 === w.instancing ? b = !0 : r.isInstancedMesh || !0 !== w.instancing ? r.isSkinnedMesh && !1 === w.skinning ? b = !0 : r.isSkinnedMesh || !0 !== w.skinning ? r.isInstancedMesh && !0 === w.instancingColor && null === r.instanceColor || r.isInstancedMesh && !1 === w.instancingColor && null !== r.instanceColor || r.isInstancedMesh && !0 === w.instancingMorph && null === r.morphTexture || r.isInstancedMesh && !1 === w.instancingMorph && null !== r.morphTexture || w.envMap !== l || !0 === i.fog && w.fog !== a ? b = !0 : void 0 === w.numClippingPlanes || w.numClippingPlanes === de.numPlanes && w.numIntersection === de.numIntersection ? (w.vertexAlphas !== c || w.vertexTangents !== h || w.morphTargets !== d || w.morphNormals !== u || w.morphColors !== p || w.toneMapping !== f || w.morphTargetsCount !== g) && (b = !0) : b = !0 : b = !0 : b = !0 : b = !0 : (b = !0, w.__version = i.version); + let x = w.currentProgram; + !0 === b && (x = qe(i, t, r)); + let k = !1, + T = !1, + _ = !1; + const C = x.getUniforms(), + P = w.uniforms; + J.useProgram(x.program) && (k = !0, T = !0, _ = !0); + i.id !== S && (S = i.id, T = !0); + if (k || M !== e) { + J.buffers.depth.getReversed() ? (H.copy(e.projectionMatrix), function(e) { + const t = e.elements; + t[2] = .5 * t[2] + .5 * t[3], t[6] = .5 * t[6] + .5 * t[7], t[10] = .5 * t[10] + .5 * t[11], t[14] = .5 * t[14] + .5 * t[15] + }(H), function(e) { + const t = e.elements; - 1 === t[11] ? (t[10] = -t[10] - 1, t[14] = -t[14]) : (t[10] = -t[10], t[14] = 1 - t[14]) + }(H), C.setValue(_e, "projectionMatrix", H)) : C.setValue(_e, "projectionMatrix", e.projectionMatrix), C.setValue(_e, "viewMatrix", e.matrixWorldInverse); + const t = C.map.cameraPosition; + void 0 !== t && t.setValue(_e, j.setFromMatrixPosition(e.matrixWorld)), Z.logarithmicDepthBuffer && C.setValue(_e, "logDepthBufFC", 2 / (Math.log(e.far + 1) / Math.LN2)), (i.isMeshPhongMaterial || i.isMeshToonMaterial || i.isMeshLambertMaterial || i.isMeshBasicMaterial || i.isMeshStandardMaterial || i.isShaderMaterial) && C.setValue(_e, "isOrthographic", !0 === e.isOrthographicCamera), M !== e && (M = e, T = !0, _ = !0) + } + if (r.isSkinnedMesh) { + C.setOptional(_e, r, "bindMatrix"), C.setOptional(_e, r, "bindMatrixInverse"); + const e = r.skeleton; + e && (null === e.boneTexture && e.computeBoneTexture(), C.setValue(_e, "boneTexture", e.boneTexture, te)) + } + r.isBatchedMesh && (C.setOptional(_e, r, "batchingTexture"), C.setValue(_e, "batchingTexture", r._matricesTexture, te), C.setOptional(_e, r, "batchingIdTexture"), C.setValue(_e, "batchingIdTexture", r._indirectTexture, te), C.setOptional(_e, r, "batchingColorTexture"), null !== r._colorsTexture && C.setValue(_e, "batchingColorTexture", r._colorsTexture, te)); + const I = n.morphAttributes; + void 0 === I.position && void 0 === I.normal && void 0 === I.color || ve.update(r, n, x); + (T || w.receiveShadow !== r.receiveShadow) && (w.receiveShadow = r.receiveShadow, C.setValue(_e, "receiveShadow", r.receiveShadow)); + i.isMeshGouraudMaterial && null !== i.envMap && (P.envMap.value = l, P.flipEnvMap.value = l.isCubeTexture && !1 === l.isRenderTargetTexture ? -1 : 1); + i.isMeshStandardMaterial && null === i.envMap && null !== t.environment && (P.envMapIntensity.value = t.environmentIntensity); + T && (C.setValue(_e, "toneMappingExposure", A.toneMappingExposure), w.needsLights && (N = _, (R = P).ambientLightColor.needsUpdate = N, R.lightProbe.needsUpdate = N, R.directionalLights.needsUpdate = N, R.directionalLightShadows.needsUpdate = N, R.pointLights.needsUpdate = N, R.pointLightShadows.needsUpdate = N, R.spotLights.needsUpdate = N, R.spotLightShadows.needsUpdate = N, R.rectAreaLights.needsUpdate = N, R.hemisphereLights.needsUpdate = N), a && !0 === i.fog && le.refreshFogUniforms(P, a), le.refreshMaterialUniforms(P, i, D, L, v.state.transmissionRenderTarget[e.id]), id.upload(_e, Xe(w), P, te)); + var R, N; + i.isShaderMaterial && !0 === i.uniformsNeedUpdate && (id.upload(_e, Xe(w), P, te), i.uniformsNeedUpdate = !1); + i.isSpriteMaterial && C.setValue(_e, "center", r.center); + if (C.setValue(_e, "modelViewMatrix", r.modelViewMatrix), C.setValue(_e, "normalMatrix", r.normalMatrix), C.setValue(_e, "modelMatrix", r.matrixWorld), i.isShaderMaterial || i.isRawShaderMaterial) { + const e = i.uniformsGroups; + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + Te.update(n, x), Te.bind(n, x) + } + } + return x + }(e, t, n, i, r); + J.setMaterial(i, s); + let l = n.index, + c = 1; + if (!0 === i.wireframe) { + if (l = ae.getWireframeAttribute(n), void 0 === l) return; + c = 2 + } + const h = n.drawRange, + d = n.attributes.position; + let u = h.start * c, + p = (h.start + h.count) * c; + null !== a && (u = Math.max(u, a.start * c), p = Math.min(p, (a.start + a.count) * c)), null !== l ? (u = Math.max(u, 0), p = Math.min(p, l.count)) : null != d && (u = Math.max(u, 0), p = Math.min(p, d.count)); + const f = p - u; + if (f < 0 || f === 1 / 0) return; + let m; + Me.setup(r, i, o, n, l); + let g = ye; + if (null !== l && (m = re.get(l), g = Ee, g.setIndex(m)), r.isMesh) !0 === i.wireframe ? (J.setLineWidth(i.wireframeLinewidth * q()), g.setMode(_e.LINES)) : g.setMode(_e.TRIANGLES); + else if (r.isLine) { + let e = i.linewidth; + void 0 === e && (e = 1), J.setLineWidth(e * q()), r.isLineSegments ? g.setMode(_e.LINES) : r.isLineLoop ? g.setMode(_e.LINE_LOOP) : g.setMode(_e.LINE_STRIP) + } else r.isPoints ? g.setMode(_e.POINTS) : r.isSprite && g.setMode(_e.TRIANGLES); + if (r.isBatchedMesh) + if (null !== r._multiDrawInstances) Jt("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."), g.renderMultiDrawInstances(r._multiDrawStarts, r._multiDrawCounts, r._multiDrawCount, r._multiDrawInstances); + else if (X.get("WEBGL_multi_draw")) g.renderMultiDraw(r._multiDrawStarts, r._multiDrawCounts, r._multiDrawCount); + else { + const e = r._multiDrawStarts, + t = r._multiDrawCounts, + n = r._multiDrawCount, + a = l ? re.get(l).bytesPerElement : 1, + s = ee.get(i).currentProgram.getUniforms(); + for (let i = 0; i < n; i++) s.setValue(_e, "_gl_DrawID", i), g.render(e[i] / a, t[i]) + } else if (r.isInstancedMesh) g.renderInstances(u, f, r.count); + else if (n.isInstancedBufferGeometry) { + const e = void 0 !== n._maxInstanceCount ? n._maxInstanceCount : 1 / 0, + t = Math.min(n.instanceCount, e); + g.renderInstances(u, f, t) + } else g.render(u, f) + }, this.compile = function(e, t, n = null) { + null === n && (n = e), v = he.get(n), v.init(t), y.push(v), n.traverseVisible((function(e) { + e.isLight && e.layers.test(t.layers) && (v.pushLight(e), e.castShadow && v.pushShadow(e)) + })), e !== n && e.traverseVisible((function(e) { + e.isLight && e.layers.test(t.layers) && (v.pushLight(e), e.castShadow && v.pushShadow(e)) + })), v.setupLights(); + const i = new Set; + return e.traverse((function(e) { + if (!(e.isMesh || e.isPoints || e.isLine || e.isSprite)) return; + const t = e.material; + if (t) + if (Array.isArray(t)) + for (let r = 0; r < t.length; r++) { + const a = t[r]; + Oe(a, n, e), i.add(a) + } else Oe(t, n, e), i.add(t) + })), v = y.pop(), i + }, this.compileAsync = function(e, t, n = null) { + const i = this.compile(e, t, n); + return new Promise((t => { + function n() { + i.forEach((function(e) { + ee.get(e).currentProgram.isReady() && i.delete(e) + })), 0 !== i.size ? setTimeout(n, 10) : t(e) + } + null !== X.get("KHR_parallel_shader_compile") ? n() : setTimeout(n, 10) + })) + }; + let Fe = null; + + function We() { + He.stop() + } + + function Ve() { + He.start() + } + const He = new fc; + + function Ge(e, t, n, i) { + if (!1 === e.visible) return; + if (e.layers.test(t.layers)) + if (e.isGroup) n = e.renderOrder; + else if (e.isLOD) !0 === e.autoUpdate && e.update(t); + else if (e.isLight) v.pushLight(e), e.castShadow && v.pushShadow(e); + else if (e.isSprite) { + if (!e.frustumCulled || F.intersectsSprite(e)) { + i && Q.setFromMatrixPosition(e.matrixWorld).applyMatrix4(G); + const t = se.update(e), + r = e.material; + r.visible && g.push(e, t, r, n, Q.z, null) + } + } else if ((e.isMesh || e.isLine || e.isPoints) && (!e.frustumCulled || F.intersectsObject(e))) { + const t = se.update(e), + r = e.material; + if (i && (void 0 !== e.boundingSphere ? (null === e.boundingSphere && e.computeBoundingSphere(), Q.copy(e.boundingSphere.center)) : (null === t.boundingSphere && t.computeBoundingSphere(), Q.copy(t.boundingSphere.center)), Q.applyMatrix4(e.matrixWorld).applyMatrix4(G)), Array.isArray(r)) { + const i = t.groups; + for (let a = 0, s = i.length; a < s; a++) { + const s = i[a], + o = r[s.materialIndex]; + o && o.visible && g.push(e, t, o, n, Q.z, s) + } + } else r.visible && g.push(e, t, r, n, Q.z, null) + } + const r = e.children; + for (let e = 0, a = r.length; e < a; e++) Ge(r[e], t, n, i) + } + + function je(e, t, n, i) { + const r = e.opaque, + a = e.transmissive, + s = e.transparent; + v.setupLightsView(n), !0 === W && de.setGlobalState(A.clippingPlanes, n), i && J.viewport(T.copy(i)), r.length > 0 && Ye(r, t, n), a.length > 0 && Ye(a, t, n), s.length > 0 && Ye(s, t, n), J.buffers.depth.setTest(!0), J.buffers.depth.setMask(!0), J.buffers.color.setMask(!0), J.setPolygonOffset(!1) + } + + function Qe(e, t, n, i) { + if (null !== (!0 === n.isScene ? n.overrideMaterial : null)) return; + void 0 === v.state.transmissionRenderTarget[i.id] && (v.state.transmissionRenderTarget[i.id] = new mn(1, 1, { + generateMipmaps: !0, + type: X.has("EXT_color_buffer_half_float") || X.has("EXT_color_buffer_float") ? Ae : pe, + minFilter: ue, + samples: 4, + stencilBuffer: r, + resolveDepthBuffer: !1, + resolveStencilBuffer: !1, + colorSpace: nn.workingColorSpace + })); + const a = v.state.transmissionRenderTarget[i.id], + s = i.viewport || T; + a.setSize(s.z * A.transmissionResolutionScale, s.w * A.transmissionResolutionScale); + const o = A.getRenderTarget(); + A.setRenderTarget(a), A.getClearColor(P), I = A.getClearAlpha(), I < 1 && A.setClearColor(16777215, .5), A.clear(), K && me.render(n); + const l = A.toneMapping; + A.toneMapping = 0; + const c = i.viewport; + if (void 0 !== i.viewport && (i.viewport = void 0), v.setupLightsView(i), !0 === W && de.setGlobalState(A.clippingPlanes, i), Ye(e, n, i), te.updateMultisampleRenderTarget(a), te.updateRenderTargetMipmap(a), !1 === X.has("WEBGL_multisampled_render_to_texture")) { + let e = !1; + for (let r = 0, a = t.length; r < a; r++) { + const a = t[r], + s = a.object, + o = a.geometry, + l = a.material, + c = a.group; + if (2 === l.side && s.layers.test(i.layers)) { + const t = l.side; + l.side = 1, l.needsUpdate = !0, Ke(s, n, i, o, l, c), l.side = t, l.needsUpdate = !0, e = !0 + } + }!0 === e && (te.updateMultisampleRenderTarget(a), te.updateRenderTargetMipmap(a)) + } + A.setRenderTarget(o), A.setClearColor(P, I), void 0 !== c && (i.viewport = c), A.toneMapping = l + } + + function Ye(e, t, n) { + const i = !0 === t.isScene ? t.overrideMaterial : null; + for (let r = 0, a = e.length; r < a; r++) { + const a = e[r], + s = a.object, + o = a.geometry, + l = null === i ? a.material : i, + c = a.group; + s.layers.test(n.layers) && Ke(s, t, n, o, l, c) + } + } + + function Ke(e, t, n, i, r, a) { + e.onBeforeRender(A, t, n, i, r, a), e.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, e.matrixWorld), e.normalMatrix.getNormalMatrix(e.modelViewMatrix), r.onBeforeRender(A, t, n, i, e, a), !0 === r.transparent && 2 === r.side && !1 === r.forceSinglePass ? (r.side = 1, r.needsUpdate = !0, A.renderBufferDirect(n, t, i, r, e, a), r.side = 0, r.needsUpdate = !0, A.renderBufferDirect(n, t, i, r, e, a), r.side = 2) : A.renderBufferDirect(n, t, i, r, e, a), e.onAfterRender(A, t, n, i, r, a) + } + + function qe(e, t, n) { + !0 !== t.isScene && (t = Y); + const i = ee.get(e), + r = v.state.lights, + a = v.state.shadowsArray, + s = r.state.version, + o = oe.getParameters(e, r.state, a, t, n), + l = oe.getProgramCacheKey(o); + let c = i.programs; + i.environment = e.isMeshStandardMaterial ? t.environment : null, i.fog = t.fog, i.envMap = (e.isMeshStandardMaterial ? ie : ne).get(e.envMap || i.environment), i.envMapRotation = null !== i.environment && null === e.envMap ? t.environmentRotation : e.envMapRotation, void 0 === c && (e.addEventListener("dispose", ze), c = new Map, i.programs = c); + let h = c.get(l); + if (void 0 !== h) { + if (i.currentProgram === h && i.lightsStateVersion === s) return Ze(e, o), h + } else o.uniforms = oe.getUniforms(e), e.onBeforeCompile(o, A), h = oe.acquireProgram(o, l), c.set(l, h), i.uniforms = o.uniforms; + const d = i.uniforms; + return (e.isShaderMaterial || e.isRawShaderMaterial) && !0 !== e.clipping || (d.clippingPlanes = de.uniform), Ze(e, o), i.needsLights = function(e) { + return e.isMeshLambertMaterial || e.isMeshToonMaterial || e.isMeshPhongMaterial || e.isMeshStandardMaterial || e.isShadowMaterial || e.isShaderMaterial && !0 === e.lights + }(e), i.lightsStateVersion = s, i.needsLights && (d.ambientLightColor.value = r.state.ambient, d.lightProbe.value = r.state.probe, d.directionalLights.value = r.state.directional, d.directionalLightShadows.value = r.state.directionalShadow, d.spotLights.value = r.state.spot, d.spotLightShadows.value = r.state.spotShadow, d.rectAreaLights.value = r.state.rectArea, d.ltc_1.value = r.state.rectAreaLTC1, d.ltc_2.value = r.state.rectAreaLTC2, d.pointLights.value = r.state.point, d.pointLightShadows.value = r.state.pointShadow, d.hemisphereLights.value = r.state.hemi, d.directionalShadowMap.value = r.state.directionalShadowMap, d.directionalShadowMatrix.value = r.state.directionalShadowMatrix, d.spotShadowMap.value = r.state.spotShadowMap, d.spotLightMatrix.value = r.state.spotLightMatrix, d.spotLightMap.value = r.state.spotLightMap, d.pointShadowMap.value = r.state.pointShadowMap, d.pointShadowMatrix.value = r.state.pointShadowMatrix), i.currentProgram = h, i.uniformsList = null, h + } + + function Xe(e) { + if (null === e.uniformsList) { + const t = e.currentProgram.getUniforms(); + e.uniformsList = id.seqWithValue(t.seq, e.uniforms) + } + return e.uniformsList + } + + function Ze(e, t) { + const n = ee.get(e); + n.outputColorSpace = t.outputColorSpace, n.batching = t.batching, n.batchingColor = t.batchingColor, n.instancing = t.instancing, n.instancingColor = t.instancingColor, n.instancingMorph = t.instancingMorph, n.skinning = t.skinning, n.morphTargets = t.morphTargets, n.morphNormals = t.morphNormals, n.morphColors = t.morphColors, n.morphTargetsCount = t.morphTargetsCount, n.numClippingPlanes = t.numClippingPlanes, n.numIntersection = t.numClipIntersection, n.vertexAlphas = t.vertexAlphas, n.vertexTangents = t.vertexTangents, n.toneMapping = t.toneMapping + } + He.setAnimationLoop((function(e) { + Fe && Fe(e) + })), "undefined" != typeof self && He.setContext(self), this.setAnimationLoop = function(e) { + Fe = e, De.setAnimationLoop(e), null === e ? He.stop() : He.start() + }, De.addEventListener("sessionstart", We), De.addEventListener("sessionend", Ve), this.render = function(e, t) { + if (void 0 !== t && !0 !== t.isCamera) return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); + if (!0 === b) return; + if (!0 === e.matrixWorldAutoUpdate && e.updateMatrixWorld(), null === t.parent && !0 === t.matrixWorldAutoUpdate && t.updateMatrixWorld(), !0 === De.enabled && !0 === De.isPresenting && (!0 === De.cameraAutoUpdate && De.updateCamera(t), t = De.getCamera()), !0 === e.isScene && e.onBeforeRender(A, e, t, E), v = he.get(e, y.length), v.init(t), y.push(v), G.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), F.setFromProjectionMatrix(G), V = this.localClippingEnabled, W = de.init(this.clippingPlanes, V), g = ce.get(e, w.length), g.init(), w.push(g), !0 === De.enabled && !0 === De.isPresenting) { + const e = A.xr.getDepthSensingMesh(); + null !== e && Ge(e, t, -1 / 0, A.sortObjects) + } + Ge(e, t, 0, A.sortObjects), g.finish(), !0 === A.sortObjects && g.sort(N, B), K = !1 === De.enabled || !1 === De.isPresenting || !1 === De.hasDepthSensing(), K && me.addToRenderList(g, e), this.info.render.frame++, !0 === W && de.beginShadows(); + const n = v.state.shadowsArray; + fe.render(n, e, t), !0 === W && de.endShadows(), !0 === this.info.autoReset && this.info.reset(); + const i = g.opaque, + r = g.transmissive; + if (v.setupLights(), t.isArrayCamera) { + const n = t.cameras; + if (r.length > 0) + for (let t = 0, a = n.length; t < a; t++) { + Qe(i, r, e, n[t]) + } + K && me.render(e); + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + je(g, e, i, i.viewport) + } + } else r.length > 0 && Qe(i, r, e, t), K && me.render(e), je(g, e, t); + null !== E && 0 === k && (te.updateMultisampleRenderTarget(E), te.updateRenderTargetMipmap(E)), !0 === e.isScene && e.onAfterRender(A, e, t), Me.resetDefaultState(), S = -1, M = null, y.pop(), y.length > 0 ? (v = y[y.length - 1], !0 === W && de.setGlobalState(A.clippingPlanes, v.state.camera)) : v = null, w.pop(), g = w.length > 0 ? w[w.length - 1] : null + }, this.getActiveCubeFace = function() { + return x + }, this.getActiveMipmapLevel = function() { + return k + }, this.getRenderTarget = function() { + return E + }, this.setRenderTargetTextures = function(e, t, n) { + ee.get(e.texture).__webglTexture = t, ee.get(e.depthTexture).__webglTexture = n; + const i = ee.get(e); + i.__hasExternalTextures = !0, i.__autoAllocateDepthBuffer = void 0 === n, i.__autoAllocateDepthBuffer || !0 === X.has("WEBGL_multisampled_render_to_texture") && (console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"), i.__useRenderToTexture = !1) + }, this.setRenderTargetFramebuffer = function(e, t) { + const n = ee.get(e); + n.__webglFramebuffer = t, n.__useDefaultFramebuffer = void 0 === t + }; + const Je = _e.createFramebuffer(); + this.setRenderTarget = function(e, t = 0, n = 0) { + E = e, x = t, k = n; + let i = !0, + r = null, + a = !1, + s = !1; + if (e) { + const o = ee.get(e); + if (void 0 !== o.__useDefaultFramebuffer) J.bindFramebuffer(_e.FRAMEBUFFER, null), i = !1; + else if (void 0 === o.__webglFramebuffer) te.setupRenderTarget(e); + else if (o.__hasExternalTextures) te.rebindTextures(e, ee.get(e.texture).__webglTexture, ee.get(e.depthTexture).__webglTexture); + else if (e.depthBuffer) { + const t = e.depthTexture; + if (o.__boundDepthTexture !== t) { + if (null !== t && ee.has(t) && (e.width !== t.image.width || e.height !== t.image.height)) throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size."); + te.setupDepthRenderbuffer(e) + } + } + const l = e.texture; + (l.isData3DTexture || l.isDataArrayTexture || l.isCompressedArrayTexture) && (s = !0); + const c = ee.get(e).__webglFramebuffer; + e.isWebGLCubeRenderTarget ? (r = Array.isArray(c[t]) ? c[t][n] : c[t], a = !0) : r = e.samples > 0 && !1 === te.useMultisampledRTT(e) ? ee.get(e).__webglMultisampledFramebuffer : Array.isArray(c) ? c[n] : c, T.copy(e.viewport), _.copy(e.scissor), C = e.scissorTest + } else T.copy(U).multiplyScalar(D).floor(), _.copy(z).multiplyScalar(D).floor(), C = O; + 0 !== n && (r = Je); + if (J.bindFramebuffer(_e.FRAMEBUFFER, r) && i && J.drawBuffers(e, r), J.viewport(T), J.scissor(_), J.setScissorTest(C), a) { + const i = ee.get(e.texture); + _e.framebufferTexture2D(_e.FRAMEBUFFER, _e.COLOR_ATTACHMENT0, _e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i.__webglTexture, n) + } else if (s) { + const i = ee.get(e.texture), + r = t; + _e.framebufferTextureLayer(_e.FRAMEBUFFER, _e.COLOR_ATTACHMENT0, i.__webglTexture, n, r) + } else if (null !== e && 0 !== n) { + const t = ee.get(e.texture); + _e.framebufferTexture2D(_e.FRAMEBUFFER, _e.COLOR_ATTACHMENT0, _e.TEXTURE_2D, t.__webglTexture, n) + } + S = -1 + }, this.readRenderTargetPixels = function(e, t, n, i, r, a, s) { + if (!e || !e.isWebGLRenderTarget) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + let o = ee.get(e).__webglFramebuffer; + if (e.isWebGLCubeRenderTarget && void 0 !== s && (o = o[s]), o) { + J.bindFramebuffer(_e.FRAMEBUFFER, o); + try { + const s = e.texture, + o = s.format, + l = s.type; + if (!Z.textureFormatReadable(o)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); + if (!Z.textureTypeReadable(l)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); + t >= 0 && t <= e.width - i && n >= 0 && n <= e.height - r && _e.readPixels(t, n, i, r, Se.convert(o), Se.convert(l), a) + } finally { + const e = null !== E ? ee.get(E).__webglFramebuffer : null; + J.bindFramebuffer(_e.FRAMEBUFFER, e) + } + } + }, this.readRenderTargetPixelsAsync = async function(e, t, n, i, r, a, s) { + if (!e || !e.isWebGLRenderTarget) throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + let o = ee.get(e).__webglFramebuffer; + if (e.isWebGLCubeRenderTarget && void 0 !== s && (o = o[s]), o) { + const s = e.texture, + l = s.format, + c = s.type; + if (!Z.textureFormatReadable(l)) throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format."); + if (!Z.textureTypeReadable(c)) throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type."); + if (t >= 0 && t <= e.width - i && n >= 0 && n <= e.height - r) { + J.bindFramebuffer(_e.FRAMEBUFFER, o); + const e = _e.createBuffer(); + _e.bindBuffer(_e.PIXEL_PACK_BUFFER, e), _e.bufferData(_e.PIXEL_PACK_BUFFER, a.byteLength, _e.STREAM_READ), _e.readPixels(t, n, i, r, Se.convert(l), Se.convert(c), 0); + const s = null !== E ? ee.get(E).__webglFramebuffer : null; + J.bindFramebuffer(_e.FRAMEBUFFER, s); + const h = _e.fenceSync(_e.SYNC_GPU_COMMANDS_COMPLETE, 0); + return _e.flush(), await + function(e, t, n) { + return new Promise((function(i, r) { + setTimeout((function a() { + switch (e.clientWaitSync(t, e.SYNC_FLUSH_COMMANDS_BIT, 0)) { + case e.WAIT_FAILED: + r(); + break; + case e.TIMEOUT_EXPIRED: + setTimeout(a, n); + break; + default: + i() + } + }), n) + })) + }(_e, h, 4), _e.bindBuffer(_e.PIXEL_PACK_BUFFER, e), _e.getBufferSubData(_e.PIXEL_PACK_BUFFER, 0, a), _e.deleteBuffer(e), _e.deleteSync(h), a + } + throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.") + } + }, this.copyFramebufferToTexture = function(e, t = null, n = 0) { + !0 !== e.isTexture && (Jt("WebGLRenderer: copyFramebufferToTexture function signature has changed."), t = arguments[0] || null, e = arguments[1]); + const i = Math.pow(2, -n), + r = Math.floor(e.image.width * i), + a = Math.floor(e.image.height * i), + s = null !== t ? t.x : 0, + o = null !== t ? t.y : 0; + te.setTexture2D(e, 0), _e.copyTexSubImage2D(_e.TEXTURE_2D, n, 0, 0, s, o, r, a), J.unbindTexture() + }; + const $e = _e.createFramebuffer(), + et = _e.createFramebuffer(); + this.copyTextureToTexture = function(e, t, n = null, i = null, r = 0, a = null) { + let s, o, l, c, h, d, u, p, f; + !0 !== e.isTexture && (Jt("WebGLRenderer: copyTextureToTexture function signature has changed."), i = arguments[0] || null, e = arguments[1], t = arguments[2], a = arguments[3] || 0, n = null), null === a && (0 !== r ? (Jt("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."), a = r, r = 0) : a = 0); + const m = e.isCompressedTexture ? e.mipmaps[a] : e.image; + if (null !== n) s = n.max.x - n.min.x, o = n.max.y - n.min.y, l = n.isBox3 ? n.max.z - n.min.z : 1, c = n.min.x, h = n.min.y, d = n.isBox3 ? n.min.z : 0; + else { + const t = Math.pow(2, -r); + s = Math.floor(m.width * t), o = Math.floor(m.height * t), l = e.isDataArrayTexture ? m.depth : e.isData3DTexture ? Math.floor(m.depth * t) : 1, c = 0, h = 0, d = 0 + } + null !== i ? (u = i.x, p = i.y, f = i.z) : (u = 0, p = 0, f = 0); + const g = Se.convert(t.format), + v = Se.convert(t.type); + let w; + t.isData3DTexture ? (te.setTexture3D(t, 0), w = _e.TEXTURE_3D) : t.isDataArrayTexture || t.isCompressedArrayTexture ? (te.setTexture2DArray(t, 0), w = _e.TEXTURE_2D_ARRAY) : (te.setTexture2D(t, 0), w = _e.TEXTURE_2D), _e.pixelStorei(_e.UNPACK_FLIP_Y_WEBGL, t.flipY), _e.pixelStorei(_e.UNPACK_PREMULTIPLY_ALPHA_WEBGL, t.premultiplyAlpha), _e.pixelStorei(_e.UNPACK_ALIGNMENT, t.unpackAlignment); + const y = _e.getParameter(_e.UNPACK_ROW_LENGTH), + A = _e.getParameter(_e.UNPACK_IMAGE_HEIGHT), + b = _e.getParameter(_e.UNPACK_SKIP_PIXELS), + x = _e.getParameter(_e.UNPACK_SKIP_ROWS), + k = _e.getParameter(_e.UNPACK_SKIP_IMAGES); + _e.pixelStorei(_e.UNPACK_ROW_LENGTH, m.width), _e.pixelStorei(_e.UNPACK_IMAGE_HEIGHT, m.height), _e.pixelStorei(_e.UNPACK_SKIP_PIXELS, c), _e.pixelStorei(_e.UNPACK_SKIP_ROWS, h), _e.pixelStorei(_e.UNPACK_SKIP_IMAGES, d); + const E = e.isDataArrayTexture || e.isData3DTexture, + S = t.isDataArrayTexture || t.isData3DTexture; + if (e.isDepthTexture) { + const n = ee.get(e), + i = ee.get(t), + m = ee.get(n.__renderTarget), + g = ee.get(i.__renderTarget); + J.bindFramebuffer(_e.READ_FRAMEBUFFER, m.__webglFramebuffer), J.bindFramebuffer(_e.DRAW_FRAMEBUFFER, g.__webglFramebuffer); + for (let n = 0; n < l; n++) E && (_e.framebufferTextureLayer(_e.READ_FRAMEBUFFER, _e.COLOR_ATTACHMENT0, ee.get(e).__webglTexture, r, d + n), _e.framebufferTextureLayer(_e.DRAW_FRAMEBUFFER, _e.COLOR_ATTACHMENT0, ee.get(t).__webglTexture, a, f + n)), _e.blitFramebuffer(c, h, s, o, u, p, s, o, _e.DEPTH_BUFFER_BIT, _e.NEAREST); + J.bindFramebuffer(_e.READ_FRAMEBUFFER, null), J.bindFramebuffer(_e.DRAW_FRAMEBUFFER, null) + } else if (0 !== r || e.isRenderTargetTexture || ee.has(e)) { + const n = ee.get(e), + i = ee.get(t); + J.bindFramebuffer(_e.READ_FRAMEBUFFER, $e), J.bindFramebuffer(_e.DRAW_FRAMEBUFFER, et); + for (let e = 0; e < l; e++) E ? _e.framebufferTextureLayer(_e.READ_FRAMEBUFFER, _e.COLOR_ATTACHMENT0, n.__webglTexture, r, d + e) : _e.framebufferTexture2D(_e.READ_FRAMEBUFFER, _e.COLOR_ATTACHMENT0, _e.TEXTURE_2D, n.__webglTexture, r), S ? _e.framebufferTextureLayer(_e.DRAW_FRAMEBUFFER, _e.COLOR_ATTACHMENT0, i.__webglTexture, a, f + e) : _e.framebufferTexture2D(_e.DRAW_FRAMEBUFFER, _e.COLOR_ATTACHMENT0, _e.TEXTURE_2D, i.__webglTexture, a), 0 !== r ? _e.blitFramebuffer(c, h, s, o, u, p, s, o, _e.COLOR_BUFFER_BIT, _e.NEAREST) : S ? _e.copyTexSubImage3D(w, a, u, p, f + e, c, h, s, o) : _e.copyTexSubImage2D(w, a, u, p, c, h, s, o); + J.bindFramebuffer(_e.READ_FRAMEBUFFER, null), J.bindFramebuffer(_e.DRAW_FRAMEBUFFER, null) + } else S ? e.isDataTexture || e.isData3DTexture ? _e.texSubImage3D(w, a, u, p, f, s, o, l, g, v, m.data) : t.isCompressedArrayTexture ? _e.compressedTexSubImage3D(w, a, u, p, f, s, o, l, g, m.data) : _e.texSubImage3D(w, a, u, p, f, s, o, l, g, v, m) : e.isDataTexture ? _e.texSubImage2D(_e.TEXTURE_2D, a, u, p, s, o, g, v, m.data) : e.isCompressedTexture ? _e.compressedTexSubImage2D(_e.TEXTURE_2D, a, u, p, m.width, m.height, g, m.data) : _e.texSubImage2D(_e.TEXTURE_2D, a, u, p, s, o, g, v, m); + _e.pixelStorei(_e.UNPACK_ROW_LENGTH, y), _e.pixelStorei(_e.UNPACK_IMAGE_HEIGHT, A), _e.pixelStorei(_e.UNPACK_SKIP_PIXELS, b), _e.pixelStorei(_e.UNPACK_SKIP_ROWS, x), _e.pixelStorei(_e.UNPACK_SKIP_IMAGES, k), 0 === a && t.generateMipmaps && _e.generateMipmap(w), J.unbindTexture() + }, this.copyTextureToTexture3D = function(e, t, n = null, i = null, r = 0) { + return !0 !== e.isTexture && (Jt("WebGLRenderer: copyTextureToTexture3D function signature has changed."), n = arguments[0] || null, i = arguments[1] || null, e = arguments[2], t = arguments[3], r = arguments[4] || 0), Jt('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'), this.copyTextureToTexture(e, t, n, i, r) + }, this.initRenderTarget = function(e) { + void 0 === ee.get(e).__webglFramebuffer && te.setupRenderTarget(e) + }, this.initTexture = function(e) { + e.isCubeTexture ? te.setTextureCube(e, 0) : e.isData3DTexture ? te.setTexture3D(e, 0) : e.isDataArrayTexture || e.isCompressedArrayTexture ? te.setTexture2DArray(e, 0) : te.setTexture2D(e, 0), J.unbindTexture() + }, this.resetState = function() { + x = 0, k = 0, E = null, J.reset(), Me.reset() + }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + get coordinateSystem() { + return It + } + get outputColorSpace() { + return this._outputColorSpace + } + set outputColorSpace(e) { + this._outputColorSpace = e; + const t = this.getContext(); + t.drawingBufferColorspace = nn._getDrawingBufferColorSpace(e), t.unpackColorSpace = nn._getUnpackColorSpace() + } + } + const Zd = JSON.parse('{"rE":"0.5.0","l$":{"r":5,"M":4}}'); + const Jd = "itch", + $d = !1, + eu = "https://vps.kodub.com:43273/", + tu = Zd.l$.r; + if (!Number.isSafeInteger(tu) || tu < 1) throw new Error("package.json beta version property must be a positive integer"); + let nu = ""; + const iu = Zd.rE + nu, + ru = Zd.l$.M; + if (!Number.isSafeInteger(ru) || ru < 1) throw new Error("package.json beta physicsVersion property must be a positive integer"); + var au, su, ou, lu, cu, hu, du, uu, pu, fu, mu, gu = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }, + vu = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + wu = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class yu { + constructor(e, t, n = !0, i = !1) { + var r; + au.add(this), su.set(this, void 0), ou.set(this, void 0), lu.set(this, void 0), cu.set(this, void 0), hu.set(this, new Pr), du.set(this, void 0), uu.set(this, new yn(8, 10, 10)), pu.set(this, []), vu(this, su, e, "f"), vu(this, ou, t, "f"), vu(this, lu, new Xd({ + antialias: null === (r = null == t ? void 0 : t.getSettingBoolean($o.Antialiasing)) || void 0 === r || r, + powerPreference: "high-performance", + canvas: e, + alpha: i + }), "f"), wu(this, lu, "f").outputColorSpace = vt, wu(this, lu, "f").shadowMap.enabled = !0, wu(this, lu, "f").debug.checkShaderErrors = $d, vu(this, cu, new Or, "f"), n && (wu(this, cu, "f").fog = new zr(10211839, 0, yu.maxViewDistance)), wu(this, cu, "f").add(new yo(3891597, 11714755, 4.7)), vu(this, du, new Lo(16777215, 4.7), "f"), wu(this, du, "f").position.copy(wu(this, uu, "f")), wu(this, du, "f").castShadow = !0, wu(this, du, "f").shadow.camera.top = 10, wu(this, du, "f").shadow.camera.right = 10, wu(this, du, "f").shadow.camera.bottom = -10, wu(this, du, "f").shadow.camera.left = -10, wu(this, du, "f").shadow.camera.near = 1, wu(this, du, "f").shadow.camera.far = 50, wu(this, du, "f").shadow.mapSize.width = 2048, wu(this, du, "f").shadow.mapSize.height = 2048, wu(this, cu, "f").add(wu(this, du, "f")), wu(this, cu, "f").add(wu(this, du, "f").target), document.addEventListener("fullscreenchange", (() => { + wu(this, au, "m", mu).call(this) + })), null != window.electron && window.electron.addFullscreenChangeListener((() => { + wu(this, au, "m", mu).call(this) + })) + } + clear() { + wu(this, lu, "f").clear() + } + update(e, t) { + var n, i, r; + const a = null !== (i = null === (n = wu(this, ou, "f")) || void 0 === n ? void 0 : n.getSettingInteger($o.CarShadowQuality)) && void 0 !== i ? i : 0; + if (!Number.isFinite(a) || a <= 0) wu(this, du, "f").castShadow = !1; + else { + wu(this, du, "f").castShadow = !0; + const e = Math.min(a, wu(this, lu, "f").capabilities.maxTextureSize); + wu(this, du, "f").shadow.mapSize.width == e && wu(this, du, "f").shadow.mapSize.height == e || (wu(this, du, "f").shadow.mapSize.setScalar(e), null === (r = wu(this, du, "f").shadow.map) || void 0 === r || r.dispose(), wu(this, du, "f").shadow.map = null) + } + wu(this, uu, "f").copy(t.getSunPosition()), wu(this, du, "f").position.addVectors(e, wu(this, uu, "f").multiplyScalar(12.5)), wu(this, du, "f").target.position.copy(e), wu(this, au, "m", fu).call(this), wu(this, lu, "f").render(wu(this, cu, "f"), wu(this, hu, "f")) + } + getShadowDirection() { + return (new yn).subVectors(wu(this, du, "f").position, wu(this, du, "f").target.position).normalize() + } + getLightTarget() { + return wu(this, du, "f").target.position + } + getMaxAnisotropy() { + return wu(this, lu, "f").capabilities.getMaxAnisotropy() + } + get isFullscreen() { + return null != window.electron ? window.electron.isFullscreen() : null != document.fullscreenElement + } + toggleFullscreen() { + return gu(this, void 0, void 0, (function*() { + this.isFullscreen ? null != window.electron ? window.electron.setFullscreen(!1) : yield document.exitFullscreen(): null != window.electron ? window.electron.setFullscreen(!0) : yield document.body.requestFullscreen() + })) + } + addFullscreenChangeListener(e) { + wu(this, pu, "f").push(e) + } + removeFullscreenChangeListener(e) { + const t = wu(this, pu, "f").indexOf(e); + t >= 0 && wu(this, pu, "f").splice(t, 1) + } + setCamera(e) { + vu(this, hu, e, "f") + } + get camera() { + return wu(this, hu, "f") + } + get canvas() { + return wu(this, su, "f") + } + setAnimationLoop(e) { + wu(this, lu, "f").setAnimationLoop(e) + } + get scene() { + return wu(this, cu, "f") + } + } + su = new WeakMap, ou = new WeakMap, lu = new WeakMap, cu = new WeakMap, hu = new WeakMap, du = new WeakMap, uu = new WeakMap, pu = new WeakMap, au = new WeakSet, fu = function() { + var e, t; + let n = null !== (t = null === (e = wu(this, ou, "f")) || void 0 === e ? void 0 : e.getSettingFloat($o.RenderScale)) && void 0 !== t ? t : 1; + n = Number.isFinite(n) ? Math.min(Math.max(n, .25), 2) : 1; + const i = window.devicePixelRatio * n; + if (wu(this, lu, "f").getPixelRatio() != i && wu(this, lu, "f").setPixelRatio(i), wu(this, hu, "f") instanceof Pr) { + const e = window.innerWidth / window.innerHeight, + t = new jt; + wu(this, lu, "f").getSize(t), t.width == window.innerWidth && t.height == window.innerHeight && wu(this, hu, "f").aspect == e || (wu(this, lu, "f").setSize(window.innerWidth, window.innerHeight), wu(this, hu, "f").aspect = e, wu(this, hu, "f").updateProjectionMatrix()) + } + }, mu = function() { + for (const e of wu(this, pu, "f")) e() + }, yu.maxViewDistance = 1e4; + const Au = yu; + var bu, xu, ku, Eu, Su, Mu = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Tu { + constructor() { + bu.add(this), Eu.set(this, new Pr(Mu(xu, xu, "f", ku), 1, .5, Au.maxViewDistance)) + } + reset(e, t, n) { + this.update(e, t, 0), Mu(this, Eu, "f").fov = Mu(this, bu, "m", Su).call(this, null != n ? n : 0), Mu(this, Eu, "f").updateProjectionMatrix() + } + update(e, t, n) { + Mu(this, Eu, "f").fov = Mu(this, bu, "m", Su).call(this, n), Mu(this, Eu, "f").updateProjectionMatrix(); + const i = new yn(0, 1.1, .4); + Mu(this, Eu, "f").position.addVectors(e, i.applyQuaternion(t)), Mu(this, Eu, "f").quaternion.copy(t), Mu(this, Eu, "f").quaternion.multiply((new wn).setFromEuler(new ai(0, Math.PI, 0))), Mu(this, Eu, "f").updateMatrix() + } + get camera() { + return Mu(this, Eu, "f") + } + } + xu = Tu, Eu = new WeakMap, bu = new WeakSet, Su = function(e) { + const t = Math.min(1, Math.abs(e) / 400); + return Mu(xu, xu, "f", ku) + (80 - Mu(xu, xu, "f", ku)) * Math.pow(t, 1) / (Math.pow(t, 1) + Math.pow(1 - t, 1)) + }, ku = { + value: 70 + }; + const _u = Tu; + class Cu { + constructor(e, t, n, i) { + this.primary = e, this.secondary = t, this.frame = n, this.rims = i + } + static random() { + const e = 360 * Math.random(), + t = 100 * (1 - Math.pow(Math.random(), 2)), + n = 100 * (.05 + .25 * (1 - Math.pow(Math.random(), 2))); + return new Cu(new Wi("hsl(" + e.toString() + "," + t.toString() + "%," + n.toString() + "%)"), new Wi("#ffffff"), new Wi("#131313"), new Wi("#666666")) + } + serialize() { + return this.primary.getHexString() + this.secondary.getHexString() + this.frame.getHexString() + this.rims.getHexString() + } + static deserialize(e) { + const t = []; + for (let n = 0; n < 4; n++) { + const i = e.substring(6 * n, 6 * (n + 1)); + /^[0-9a-f]{6}$/i.test(i) ? t.push(new Wi("#" + i)) : t.push(new Wi("#555")) + } + return new Cu(t[0], t[1], t[2], t[3]) + } + } + const Pu = Cu; + var Iu, Ru, Lu, Du, Nu, Bu, Uu, zu = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Ou = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Fu { + constructor() { + Iu.add(this), Du.set(this, new Pr(Ou(Ru, Ru, "f", Lu), 1, .5, 1e4)), Nu.set(this, new yn), Bu.set(this, new yn(0, 1, 0)) + } + reset(e, t, n) { + zu(this, Nu, new yn(1e-5, 0, -1), "f"), Ou(this, Nu, "f").applyQuaternion(t), Ou(this, Nu, "f").add(e), zu(this, Bu, new yn(0, 1, 0), "f"), Ou(this, Bu, "f").applyQuaternion(t), this.update(0, e, t, 0), Ou(this, Du, "f").fov = Ou(this, Iu, "m", Uu).call(this, null != n ? n : 0), Ou(this, Du, "f").updateProjectionMatrix() + } + update(e, t, n, i) { + Ou(this, Du, "f").fov = Ou(this, Iu, "m", Uu).call(this, i), Ou(this, Du, "f").updateProjectionMatrix(); + const r = new yn(0, 1, 0); + r.applyQuaternion(n); + const a = Math.min(1, 5 * e); + Ou(this, Bu, "f").set(a * r.x + (1 - a) * Ou(this, Bu, "f").x, a * r.y + (1 - a) * Ou(this, Bu, "f").y, a * r.z + (1 - a) * Ou(this, Bu, "f").z); + const s = (new yn).subVectors(t, Ou(this, Nu, "f")); + s.normalize(); + const o = 5.5; + Ou(this, Du, "f").position.x = t.x - s.x * o + 2 * Ou(this, Bu, "f").x, Ou(this, Du, "f").position.y = Math.max(.25, t.y - s.y * o + 2 * Ou(this, Bu, "f").y), Ou(this, Du, "f").position.z = t.z - s.z * o + 2 * Ou(this, Bu, "f").z, Ou(this, Du, "f").lookAt(t.x + 2 * Ou(this, Bu, "f").x * .9, t.y + 2 * Ou(this, Bu, "f").y * .9, t.z + 2 * Ou(this, Bu, "f").z * .9), Ou(this, Du, "f").updateMatrix(), Ou(this, Nu, "f").set(t.x - s.x * o, t.y - s.y * o, t.z - s.z * o) + } + get camera() { + return Ou(this, Du, "f") + } + } + Ru = Fu, Du = new WeakMap, Nu = new WeakMap, Bu = new WeakMap, Iu = new WeakSet, Uu = function(e) { + const t = Math.abs(e) / 400; + return Ou(Ru, Ru, "f", Lu) + (100 - Ou(Ru, Ru, "f", Lu)) * Math.pow(t, 1) / (Math.pow(t, 1) + Math.pow(1 - t, 1)) + }, Lu = { + value: 70 + }; + const Wu = Fu; + var Vu, Hu, Gu, ju, Qu, Yu, Ku, qu, Xu = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Zu = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Ju { + constructor(e) { + Hu.set(this, void 0), Gu.set(this, void 0), ju.set(this, []), Qu.set(this, 256), Yu.set(this, new yn(0, 1, 0)), Xu(this, Hu, e, "f"), Xu(this, Gu, new ua(Zu(Vu, Vu, "f", Ku), Zu(Vu, Vu, "f", qu), Zu(this, Qu, "f")), "f"), Zu(this, Gu, "f").frustumCulled = !1, e.scene.add(Zu(this, Gu, "f")), this.clear() + } + dispose() { + Zu(this, Gu, "f").dispose(), Zu(this, Hu, "f").scene.remove(Zu(this, Gu, "f")) + } + clear() { + Zu(this, ju, "f").length = 0, Zu(this, Gu, "f").count = 0, Zu(this, Gu, "f").instanceMatrix.needsUpdate = !0 + } + spawn(e, t, n) { + Zu(this, ju, "f").push({ + x: e + .25 * (Math.random() - .5), + y: t + .25 * (Math.random() - .5), + z: n + .25 * (Math.random() - .5), + vx: .5 * (Math.random() - .5), + vy: .5 * (Math.random() - .5), + vz: .5 * (Math.random() - .5), + rotation: Math.random() * Math.PI * 2, + lifetime: .5 + }) + } + update(e) { + for (let t = Zu(this, ju, "f").length - 1; t >= 0; --t) { + const n = Zu(this, ju, "f")[t]; + n.vy += 15 * e, n.x += n.vx * e, n.y += n.vy * e, n.z += n.vz * e, n.lifetime -= e, n.lifetime <= 0 && Zu(this, ju, "f").splice(t, 1) + } + let t = !1; + Zu(this, Gu, "f").count != Zu(this, ju, "f").length && (Zu(this, Gu, "f").count = Math.min(Zu(this, ju, "f").length, Zu(this, Qu, "f")), t = !0); + for (let e = 0; e < Zu(this, Gu, "f").count; ++e) { + const t = Zu(this, ju, "f")[Zu(this, ju, "f").length - 1 - e], + n = new qn; + n.lookAt(new yn(t.x, t.y, t.z), Zu(this, Hu, "f").camera.position, Zu(this, Yu, "f")), n.setPosition(t.x, t.y, t.z), n.multiply((new qn).makeRotationZ(t.rotation)); + const i = .5 + 2 * (.5 - t.lifetime); + n.scale(new yn(i, i, i)), Zu(this, Gu, "f").setMatrixAt(e, n) + }(t || Zu(this, ju, "f").length > 0) && (Zu(this, Gu, "f").instanceMatrix.needsUpdate = !0) + } + static initResources(e) { + e.addResource(); + const t = (new vo).load("images/smoke.png", (() => { + e.loadedResource() + })); + Zu(this, Vu, "f", qu).map = t + } + } + Vu = Ju, Hu = new WeakMap, Gu = new WeakMap, ju = new WeakMap, Qu = new WeakMap, Yu = new WeakMap, Ku = { + value: (() => { + const e = new Ns; + return e.rotateX(Math.PI), e + })() + }, qu = { + value: new ji({ + opacity: .3, + depthWrite: !1, + transparent: !0 + }) + }; + const $u = Ju; + var ep, tp, np, ip, rp, ap, sp, op, lp, cp, hp, dp, up, pp, fp = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + mp = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class gp { + constructor(e, t, n) { + ep.add(this), np.set(this, void 0), ip.set(this, void 0), rp.set(this, void 0), ap.set(this, void 0), sp.set(this, void 0), op.set(this, void 0), lp.set(this, 1e3), cp.set(this, 0), hp.set(this, null), dp.set(this, null), fp(this, np, e, "f"), fp(this, ip, t, "f"), fp(this, rp, n, "f"); + const i = new sr; + fp(this, sp, new Float32Array(6 * mp(this, lp, "f") * 3), "f"), fp(this, op, new qi(mp(this, sp, "f"), 3), "f"), i.setAttribute("position", mp(this, op, "f")), fp(this, ap, new wr(i, mp(tp, tp, "f", up)), "f"), mp(this, ap, "f").frustumCulled = !1, mp(this, np, "f").scene.add(mp(this, ap, "f")) + } + dispose() { + mp(this, ap, "f").geometry.dispose(), mp(this, np, "f").scene.remove(mp(this, ap, "f")) + } + clear() { + for (let e = 0; e < mp(this, sp, "f").length; ++e) mp(this, sp, "f")[e] = 0; + mp(this, op, "f").needsUpdate = !0, fp(this, cp, 0, "f"), this.break() + } + break () { + fp(this, hp, null, "f"), fp(this, dp, null, "f") + } + spawn(e, t, n, i) { + var r, a; + const s = mp(this, hp, "f"), + o = mp(this, dp, "f"); + let l = new yn(e, t, n).add(new yn(.172, -.3, 0).applyQuaternion(i)), + c = new yn(e, t, n).add(new yn(-.172, -.3, 0).applyQuaternion(i)); + const h = new yn(0, -1, 0).applyQuaternion(i), + d = mp(this, ep, "m", pp).call(this, l, h, 0, .05), + u = mp(this, ep, "m", pp).call(this, c, h, 0, .05); + if (null != d && null != u) { + if (l = d.point, c = u.point, null != s && null != o) { + const e = (fp(this, cp, (a = mp(this, cp, "f"), r = a++, a), "f"), r); + mp(this, sp, "f")[6 * e * 3 + 0] = l.x, mp(this, sp, "f")[6 * e * 3 + 1] = l.y, mp(this, sp, "f")[6 * e * 3 + 2] = l.z, mp(this, sp, "f")[6 * e * 3 + 3] = s.x, mp(this, sp, "f")[6 * e * 3 + 4] = s.y, mp(this, sp, "f")[6 * e * 3 + 5] = s.z, mp(this, sp, "f")[6 * e * 3 + 6] = c.x, mp(this, sp, "f")[6 * e * 3 + 7] = c.y, mp(this, sp, "f")[6 * e * 3 + 8] = c.z, mp(this, sp, "f")[6 * e * 3 + 9] = c.x, mp(this, sp, "f")[6 * e * 3 + 10] = c.y, mp(this, sp, "f")[6 * e * 3 + 11] = c.z, mp(this, sp, "f")[6 * e * 3 + 12] = s.x, mp(this, sp, "f")[6 * e * 3 + 13] = s.y, mp(this, sp, "f")[6 * e * 3 + 14] = s.z, mp(this, sp, "f")[6 * e * 3 + 15] = o.x, mp(this, sp, "f")[6 * e * 3 + 16] = o.y, mp(this, sp, "f")[6 * e * 3 + 17] = o.z, mp(this, op, "f").needsUpdate = !0, mp(this, cp, "f") >= mp(this, lp, "f") - 1 && fp(this, cp, 0, "f") + } + fp(this, hp, l, "f"), fp(this, dp, c, "f") + } else this.break() + } + } + tp = gp, np = new WeakMap, ip = new WeakMap, rp = new WeakMap, ap = new WeakMap, sp = new WeakMap, op = new WeakMap, lp = new WeakMap, cp = new WeakMap, hp = new WeakMap, dp = new WeakMap, ep = new WeakSet, pp = function(e, t, n, i) { + const r = new jo(e, t, n, i), + a = mp(this, rp, "f").shortRaycast(r); + if (null != a) return a; + const s = mp(this, ip, "f").raycast(r); + return null != s ? s : null + }, up = { + value: new ji({ + color: 1118481, + side: 2, + polygonOffset: !0, + polygonOffsetFactor: -1, + polygonOffsetUnits: 0 + }) + }; + const vp = gp; + var wp, yp = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Ap = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class bp { + constructor(e) { + if (wp.set(this, 0), null != e) { + if (!Number.isSafeInteger(e)) throw new Error("Frames is not a safe integer"); + yp(this, wp, e, "f") + } + } + get numberOfFrames() { + return Ap(this, wp, "f") + } + get time() { + return Ap(this, wp, "f") / 1e3 + } + increment() { + var e; + yp(this, wp, (e = Ap(this, wp, "f"), ++e), "f") + } + difference(e) { + return new bp(Ap(this, wp, "f") - Ap(e, wp, "f")) + } + lessThan(e) { + return Ap(this, wp, "f") < Ap(e, wp, "f") + } + greaterThan(e) { + return Ap(this, wp, "f") > Ap(e, wp, "f") + } + lessOrEqual(e) { + return Ap(this, wp, "f") <= Ap(e, wp, "f") + } + greaterOrEqual(e) { + return Ap(this, wp, "f") >= Ap(e, wp, "f") + } + equals(e) { + return Ap(this, wp, "f") == Ap(e, wp, "f") + } + isNegative() { + return Ap(this, wp, "f") < 0 + } + clone() { + const e = new bp; + return yp(e, wp, Ap(this, wp, "f"), "f"), e + } + } + wp = new WeakMap; + const xp = bp; + + function kp(e) { + let t = e.length; + for (; --t >= 0;) e[t] = 0 + } + const Ep = 256, + Sp = 286, + Mp = 30, + Tp = 15, + _p = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0]), + Cp = new Uint8Array([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]), + Pp = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7]), + Ip = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), + Rp = new Array(576); + kp(Rp); + const Lp = new Array(60); + kp(Lp); + const Dp = new Array(512); + kp(Dp); + const Np = new Array(256); + kp(Np); + const Bp = new Array(29); + kp(Bp); + const Up = new Array(Mp); + + function zp(e, t, n, i, r) { + this.static_tree = e, this.extra_bits = t, this.extra_base = n, this.elems = i, this.max_length = r, this.has_stree = e && e.length + } + let Op, Fp, Wp; + + function Vp(e, t) { + this.dyn_tree = e, this.max_code = 0, this.stat_desc = t + } + kp(Up); + const Hp = e => e < 256 ? Dp[e] : Dp[256 + (e >>> 7)], + Gp = (e, t) => { + e.pending_buf[e.pending++] = 255 & t, e.pending_buf[e.pending++] = t >>> 8 & 255 + }, + jp = (e, t, n) => { + e.bi_valid > 16 - n ? (e.bi_buf |= t << e.bi_valid & 65535, Gp(e, e.bi_buf), e.bi_buf = t >> 16 - e.bi_valid, e.bi_valid += n - 16) : (e.bi_buf |= t << e.bi_valid & 65535, e.bi_valid += n) + }, + Qp = (e, t, n) => { + jp(e, n[2 * t], n[2 * t + 1]) + }, + Yp = (e, t) => { + let n = 0; + do { + n |= 1 & e, e >>>= 1, n <<= 1 + } while (--t > 0); + return n >>> 1 + }, + Kp = (e, t, n) => { + const i = new Array(16); + let r, a, s = 0; + for (r = 1; r <= Tp; r++) s = s + n[r - 1] << 1, i[r] = s; + for (a = 0; a <= t; a++) { + let t = e[2 * a + 1]; + 0 !== t && (e[2 * a] = Yp(i[t]++, t)) + } + }, + qp = e => { + let t; + for (t = 0; t < Sp; t++) e.dyn_ltree[2 * t] = 0; + for (t = 0; t < Mp; t++) e.dyn_dtree[2 * t] = 0; + for (t = 0; t < 19; t++) e.bl_tree[2 * t] = 0; + e.dyn_ltree[512] = 1, e.opt_len = e.static_len = 0, e.sym_next = e.matches = 0 + }, + Xp = e => { + e.bi_valid > 8 ? Gp(e, e.bi_buf) : e.bi_valid > 0 && (e.pending_buf[e.pending++] = e.bi_buf), e.bi_buf = 0, e.bi_valid = 0 + }, + Zp = (e, t, n, i) => { + const r = 2 * t, + a = 2 * n; + return e[r] < e[a] || e[r] === e[a] && i[t] <= i[n] + }, + Jp = (e, t, n) => { + const i = e.heap[n]; + let r = n << 1; + for (; r <= e.heap_len && (r < e.heap_len && Zp(t, e.heap[r + 1], e.heap[r], e.depth) && r++, !Zp(t, i, e.heap[r], e.depth));) e.heap[n] = e.heap[r], n = r, r <<= 1; + e.heap[n] = i + }, + $p = (e, t, n) => { + let i, r, a, s, o = 0; + if (0 !== e.sym_next) + do { + i = 255 & e.pending_buf[e.sym_buf + o++], i += (255 & e.pending_buf[e.sym_buf + o++]) << 8, r = e.pending_buf[e.sym_buf + o++], 0 === i ? Qp(e, r, t) : (a = Np[r], Qp(e, a + Ep + 1, t), s = _p[a], 0 !== s && (r -= Bp[a], jp(e, r, s)), i--, a = Hp(i), Qp(e, a, n), s = Cp[a], 0 !== s && (i -= Up[a], jp(e, i, s))) + } while (o < e.sym_next); + Qp(e, 256, t) + }, + ef = (e, t) => { + const n = t.dyn_tree, + i = t.stat_desc.static_tree, + r = t.stat_desc.has_stree, + a = t.stat_desc.elems; + let s, o, l, c = -1; + for (e.heap_len = 0, e.heap_max = 573, s = 0; s < a; s++) 0 !== n[2 * s] ? (e.heap[++e.heap_len] = c = s, e.depth[s] = 0) : n[2 * s + 1] = 0; + for (; e.heap_len < 2;) l = e.heap[++e.heap_len] = c < 2 ? ++c : 0, n[2 * l] = 1, e.depth[l] = 0, e.opt_len--, r && (e.static_len -= i[2 * l + 1]); + for (t.max_code = c, s = e.heap_len >> 1; s >= 1; s--) Jp(e, n, s); + l = a; + do { + s = e.heap[1], e.heap[1] = e.heap[e.heap_len--], Jp(e, n, 1), o = e.heap[1], e.heap[--e.heap_max] = s, e.heap[--e.heap_max] = o, n[2 * l] = n[2 * s] + n[2 * o], e.depth[l] = (e.depth[s] >= e.depth[o] ? e.depth[s] : e.depth[o]) + 1, n[2 * s + 1] = n[2 * o + 1] = l, e.heap[1] = l++, Jp(e, n, 1) + } while (e.heap_len >= 2); + e.heap[--e.heap_max] = e.heap[1], ((e, t) => { + const n = t.dyn_tree, + i = t.max_code, + r = t.stat_desc.static_tree, + a = t.stat_desc.has_stree, + s = t.stat_desc.extra_bits, + o = t.stat_desc.extra_base, + l = t.stat_desc.max_length; + let c, h, d, u, p, f, m = 0; + for (u = 0; u <= Tp; u++) e.bl_count[u] = 0; + for (n[2 * e.heap[e.heap_max] + 1] = 0, c = e.heap_max + 1; c < 573; c++) h = e.heap[c], u = n[2 * n[2 * h + 1] + 1] + 1, u > l && (u = l, m++), n[2 * h + 1] = u, h > i || (e.bl_count[u]++, p = 0, h >= o && (p = s[h - o]), f = n[2 * h], e.opt_len += f * (u + p), a && (e.static_len += f * (r[2 * h + 1] + p))); + if (0 !== m) { + do { + for (u = l - 1; 0 === e.bl_count[u];) u--; + e.bl_count[u]--, e.bl_count[u + 1] += 2, e.bl_count[l]--, m -= 2 + } while (m > 0); + for (u = l; 0 !== u; u--) + for (h = e.bl_count[u]; 0 !== h;) d = e.heap[--c], d > i || (n[2 * d + 1] !== u && (e.opt_len += (u - n[2 * d + 1]) * n[2 * d], n[2 * d + 1] = u), h--) + } + })(e, t), Kp(n, c, e.bl_count) + }, + tf = (e, t, n) => { + let i, r, a = -1, + s = t[1], + o = 0, + l = 7, + c = 4; + for (0 === s && (l = 138, c = 3), t[2 * (n + 1) + 1] = 65535, i = 0; i <= n; i++) r = s, s = t[2 * (i + 1) + 1], ++o < l && r === s || (o < c ? e.bl_tree[2 * r] += o : 0 !== r ? (r !== a && e.bl_tree[2 * r]++, e.bl_tree[32]++) : o <= 10 ? e.bl_tree[34]++ : e.bl_tree[36]++, o = 0, a = r, 0 === s ? (l = 138, c = 3) : r === s ? (l = 6, c = 3) : (l = 7, c = 4)) + }, + nf = (e, t, n) => { + let i, r, a = -1, + s = t[1], + o = 0, + l = 7, + c = 4; + for (0 === s && (l = 138, c = 3), i = 0; i <= n; i++) + if (r = s, s = t[2 * (i + 1) + 1], !(++o < l && r === s)) { + if (o < c) + do { + Qp(e, r, e.bl_tree) + } while (0 != --o); + else 0 !== r ? (r !== a && (Qp(e, r, e.bl_tree), o--), Qp(e, 16, e.bl_tree), jp(e, o - 3, 2)) : o <= 10 ? (Qp(e, 17, e.bl_tree), jp(e, o - 3, 3)) : (Qp(e, 18, e.bl_tree), jp(e, o - 11, 7)); + o = 0, a = r, 0 === s ? (l = 138, c = 3) : r === s ? (l = 6, c = 3) : (l = 7, c = 4) + } + }; + let rf = !1; + const af = (e, t, n, i) => { + jp(e, 0 + (i ? 1 : 0), 3), Xp(e), Gp(e, n), Gp(e, ~n), n && e.pending_buf.set(e.window.subarray(t, t + n), e.pending), e.pending += n + }; + var sf = (e, t, n, i) => { + let r, a, s = 0; + e.level > 0 ? (2 === e.strm.data_type && (e.strm.data_type = (e => { + let t, n = 4093624447; + for (t = 0; t <= 31; t++, n >>>= 1) + if (1 & n && 0 !== e.dyn_ltree[2 * t]) return 0; + if (0 !== e.dyn_ltree[18] || 0 !== e.dyn_ltree[20] || 0 !== e.dyn_ltree[26]) return 1; + for (t = 32; t < Ep; t++) + if (0 !== e.dyn_ltree[2 * t]) return 1; + return 0 + })(e)), ef(e, e.l_desc), ef(e, e.d_desc), s = (e => { + let t; + for (tf(e, e.dyn_ltree, e.l_desc.max_code), tf(e, e.dyn_dtree, e.d_desc.max_code), ef(e, e.bl_desc), t = 18; t >= 3 && 0 === e.bl_tree[2 * Ip[t] + 1]; t--); + return e.opt_len += 3 * (t + 1) + 5 + 5 + 4, t + })(e), r = e.opt_len + 3 + 7 >>> 3, a = e.static_len + 3 + 7 >>> 3, a <= r && (r = a)) : r = a = n + 5, n + 4 <= r && -1 !== t ? af(e, t, n, i) : 4 === e.strategy || a === r ? (jp(e, 2 + (i ? 1 : 0), 3), $p(e, Rp, Lp)) : (jp(e, 4 + (i ? 1 : 0), 3), ((e, t, n, i) => { + let r; + for (jp(e, t - 257, 5), jp(e, n - 1, 5), jp(e, i - 4, 4), r = 0; r < i; r++) jp(e, e.bl_tree[2 * Ip[r] + 1], 3); + nf(e, e.dyn_ltree, t - 1), nf(e, e.dyn_dtree, n - 1) + })(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, s + 1), $p(e, e.dyn_ltree, e.dyn_dtree)), qp(e), i && Xp(e) + }, + of = { + _tr_init: e => { + rf || ((() => { + let e, t, n, i, r; + const a = new Array(16); + for (n = 0, i = 0; i < 28; i++) + for (Bp[i] = n, e = 0; e < 1 << _p[i]; e++) Np[n++] = i; + for (Np[n - 1] = i, r = 0, i = 0; i < 16; i++) + for (Up[i] = r, e = 0; e < 1 << Cp[i]; e++) Dp[r++] = i; + for (r >>= 7; i < Mp; i++) + for (Up[i] = r << 7, e = 0; e < 1 << Cp[i] - 7; e++) Dp[256 + r++] = i; + for (t = 0; t <= Tp; t++) a[t] = 0; + for (e = 0; e <= 143;) Rp[2 * e + 1] = 8, e++, a[8]++; + for (; e <= 255;) Rp[2 * e + 1] = 9, e++, a[9]++; + for (; e <= 279;) Rp[2 * e + 1] = 7, e++, a[7]++; + for (; e <= 287;) Rp[2 * e + 1] = 8, e++, a[8]++; + for (Kp(Rp, 287, a), e = 0; e < Mp; e++) Lp[2 * e + 1] = 5, Lp[2 * e] = Yp(e, 5); + Op = new zp(Rp, _p, 257, Sp, Tp), Fp = new zp(Lp, Cp, 0, Mp, Tp), Wp = new zp(new Array(0), Pp, 0, 19, 7) + })(), rf = !0), e.l_desc = new Vp(e.dyn_ltree, Op), e.d_desc = new Vp(e.dyn_dtree, Fp), e.bl_desc = new Vp(e.bl_tree, Wp), e.bi_buf = 0, e.bi_valid = 0, qp(e) + }, + _tr_stored_block: af, + _tr_flush_block: sf, + _tr_tally: (e, t, n) => (e.pending_buf[e.sym_buf + e.sym_next++] = t, e.pending_buf[e.sym_buf + e.sym_next++] = t >> 8, e.pending_buf[e.sym_buf + e.sym_next++] = n, 0 === t ? e.dyn_ltree[2 * n]++ : (e.matches++, t--, e.dyn_ltree[2 * (Np[n] + Ep + 1)]++, e.dyn_dtree[2 * Hp(t)]++), e.sym_next === e.sym_end), + _tr_align: e => { + jp(e, 2, 3), Qp(e, 256, Rp), (e => { + 16 === e.bi_valid ? (Gp(e, e.bi_buf), e.bi_buf = 0, e.bi_valid = 0) : e.bi_valid >= 8 && (e.pending_buf[e.pending++] = 255 & e.bi_buf, e.bi_buf >>= 8, e.bi_valid -= 8) + })(e) + } + }; + var lf = (e, t, n, i) => { + let r = 65535 & e, + a = e >>> 16 & 65535, + s = 0; + for (; 0 !== n;) { + s = n > 2e3 ? 2e3 : n, n -= s; + do { + r = r + t[i++] | 0, a = a + r | 0 + } while (--s); + r %= 65521, a %= 65521 + } + return r | a << 16 + }; + const cf = new Uint32Array((() => { + let e, t = []; + for (var n = 0; n < 256; n++) { + e = n; + for (var i = 0; i < 8; i++) e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[n] = e + } + return t + })()); + var hf = (e, t, n, i) => { + const r = cf, + a = i + n; + e ^= -1; + for (let n = i; n < a; n++) e = e >>> 8 ^ r[255 & (e ^ t[n])]; + return ~e + }, + df = { + 2: "need dictionary", + 1: "stream end", + 0: "", + "-1": "file error", + "-2": "stream error", + "-3": "data error", + "-4": "insufficient memory", + "-5": "buffer error", + "-6": "incompatible version" + }, + uf = { + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + Z_BINARY: 0, + Z_TEXT: 1, + Z_UNKNOWN: 2, + Z_DEFLATED: 8 + }; + const { + _tr_init: pf, + _tr_stored_block: ff, + _tr_flush_block: mf, + _tr_tally: gf, + _tr_align: vf + } = of, { + Z_NO_FLUSH: wf, + Z_PARTIAL_FLUSH: yf, + Z_FULL_FLUSH: Af, + Z_FINISH: bf, + Z_BLOCK: xf, + Z_OK: kf, + Z_STREAM_END: Ef, + Z_STREAM_ERROR: Sf, + Z_DATA_ERROR: Mf, + Z_BUF_ERROR: Tf, + Z_DEFAULT_COMPRESSION: _f, + Z_FILTERED: Cf, + Z_HUFFMAN_ONLY: Pf, + Z_RLE: If, + Z_FIXED: Rf, + Z_DEFAULT_STRATEGY: Lf, + Z_UNKNOWN: Df, + Z_DEFLATED: Nf + } = uf, Bf = 258, Uf = 262, zf = 42, Of = 113, Ff = 666, Wf = (e, t) => (e.msg = df[t], t), Vf = e => 2 * e - (e > 4 ? 9 : 0), Hf = e => { + let t = e.length; + for (; --t >= 0;) e[t] = 0 + }, Gf = e => { + let t, n, i, r = e.w_size; + t = e.hash_size, i = t; + do { + n = e.head[--i], e.head[i] = n >= r ? n - r : 0 + } while (--t); + t = r, i = t; + do { + n = e.prev[--i], e.prev[i] = n >= r ? n - r : 0 + } while (--t) + }; + let jf = (e, t, n) => (t << e.hash_shift ^ n) & e.hash_mask; + const Qf = e => { + const t = e.state; + let n = t.pending; + n > e.avail_out && (n = e.avail_out), 0 !== n && (e.output.set(t.pending_buf.subarray(t.pending_out, t.pending_out + n), e.next_out), e.next_out += n, t.pending_out += n, e.total_out += n, e.avail_out -= n, t.pending -= n, 0 === t.pending && (t.pending_out = 0)) + }, + Yf = (e, t) => { + mf(e, e.block_start >= 0 ? e.block_start : -1, e.strstart - e.block_start, t), e.block_start = e.strstart, Qf(e.strm) + }, + Kf = (e, t) => { + e.pending_buf[e.pending++] = t + }, + qf = (e, t) => { + e.pending_buf[e.pending++] = t >>> 8 & 255, e.pending_buf[e.pending++] = 255 & t + }, + Xf = (e, t, n, i) => { + let r = e.avail_in; + return r > i && (r = i), 0 === r ? 0 : (e.avail_in -= r, t.set(e.input.subarray(e.next_in, e.next_in + r), n), 1 === e.state.wrap ? e.adler = lf(e.adler, t, r, n) : 2 === e.state.wrap && (e.adler = hf(e.adler, t, r, n)), e.next_in += r, e.total_in += r, r) + }, + Zf = (e, t) => { + let n, i, r = e.max_chain_length, + a = e.strstart, + s = e.prev_length, + o = e.nice_match; + const l = e.strstart > e.w_size - Uf ? e.strstart - (e.w_size - Uf) : 0, + c = e.window, + h = e.w_mask, + d = e.prev, + u = e.strstart + Bf; + let p = c[a + s - 1], + f = c[a + s]; + e.prev_length >= e.good_match && (r >>= 2), o > e.lookahead && (o = e.lookahead); + do { + if (n = t, c[n + s] === f && c[n + s - 1] === p && c[n] === c[a] && c[++n] === c[a + 1]) { + a += 2, n++; + do {} while (c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && a < u); + if (i = Bf - (u - a), a = u - Bf, i > s) { + if (e.match_start = t, s = i, i >= o) break; + p = c[a + s - 1], f = c[a + s] + } + } + } while ((t = d[t & h]) > l && 0 != --r); + return s <= e.lookahead ? s : e.lookahead + }, + Jf = e => { + const t = e.w_size; + let n, i, r; + do { + if (i = e.window_size - e.lookahead - e.strstart, e.strstart >= t + (t - Uf) && (e.window.set(e.window.subarray(t, t + t - i), 0), e.match_start -= t, e.strstart -= t, e.block_start -= t, e.insert > e.strstart && (e.insert = e.strstart), Gf(e), i += t), 0 === e.strm.avail_in) break; + if (n = Xf(e.strm, e.window, e.strstart + e.lookahead, i), e.lookahead += n, e.lookahead + e.insert >= 3) + for (r = e.strstart - e.insert, e.ins_h = e.window[r], e.ins_h = jf(e, e.ins_h, e.window[r + 1]); e.insert && (e.ins_h = jf(e, e.ins_h, e.window[r + 3 - 1]), e.prev[r & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = r, r++, e.insert--, !(e.lookahead + e.insert < 3));); + } while (e.lookahead < Uf && 0 !== e.strm.avail_in) + }, + $f = (e, t) => { + let n, i, r, a = e.pending_buf_size - 5 > e.w_size ? e.w_size : e.pending_buf_size - 5, + s = 0, + o = e.strm.avail_in; + do { + if (n = 65535, r = e.bi_valid + 42 >> 3, e.strm.avail_out < r) break; + if (r = e.strm.avail_out - r, i = e.strstart - e.block_start, n > i + e.strm.avail_in && (n = i + e.strm.avail_in), n > r && (n = r), n < a && (0 === n && t !== bf || t === wf || n !== i + e.strm.avail_in)) break; + s = t === bf && n === i + e.strm.avail_in ? 1 : 0, ff(e, 0, 0, s), e.pending_buf[e.pending - 4] = n, e.pending_buf[e.pending - 3] = n >> 8, e.pending_buf[e.pending - 2] = ~n, e.pending_buf[e.pending - 1] = ~n >> 8, Qf(e.strm), i && (i > n && (i = n), e.strm.output.set(e.window.subarray(e.block_start, e.block_start + i), e.strm.next_out), e.strm.next_out += i, e.strm.avail_out -= i, e.strm.total_out += i, e.block_start += i, n -= i), n && (Xf(e.strm, e.strm.output, e.strm.next_out, n), e.strm.next_out += n, e.strm.avail_out -= n, e.strm.total_out += n) + } while (0 === s); + return o -= e.strm.avail_in, o && (o >= e.w_size ? (e.matches = 2, e.window.set(e.strm.input.subarray(e.strm.next_in - e.w_size, e.strm.next_in), 0), e.strstart = e.w_size, e.insert = e.strstart) : (e.window_size - e.strstart <= o && (e.strstart -= e.w_size, e.window.set(e.window.subarray(e.w_size, e.w_size + e.strstart), 0), e.matches < 2 && e.matches++, e.insert > e.strstart && (e.insert = e.strstart)), e.window.set(e.strm.input.subarray(e.strm.next_in - o, e.strm.next_in), e.strstart), e.strstart += o, e.insert += o > e.w_size - e.insert ? e.w_size - e.insert : o), e.block_start = e.strstart), e.high_water < e.strstart && (e.high_water = e.strstart), s ? 4 : t !== wf && t !== bf && 0 === e.strm.avail_in && e.strstart === e.block_start ? 2 : (r = e.window_size - e.strstart, e.strm.avail_in > r && e.block_start >= e.w_size && (e.block_start -= e.w_size, e.strstart -= e.w_size, e.window.set(e.window.subarray(e.w_size, e.w_size + e.strstart), 0), e.matches < 2 && e.matches++, r += e.w_size, e.insert > e.strstart && (e.insert = e.strstart)), r > e.strm.avail_in && (r = e.strm.avail_in), r && (Xf(e.strm, e.window, e.strstart, r), e.strstart += r, e.insert += r > e.w_size - e.insert ? e.w_size - e.insert : r), e.high_water < e.strstart && (e.high_water = e.strstart), r = e.bi_valid + 42 >> 3, r = e.pending_buf_size - r > 65535 ? 65535 : e.pending_buf_size - r, a = r > e.w_size ? e.w_size : r, i = e.strstart - e.block_start, (i >= a || (i || t === bf) && t !== wf && 0 === e.strm.avail_in && i <= r) && (n = i > r ? r : i, s = t === bf && 0 === e.strm.avail_in && n === i ? 1 : 0, ff(e, e.block_start, n, s), e.block_start += n, Qf(e.strm)), s ? 3 : 1) + }, + em = (e, t) => { + let n, i; + for (;;) { + if (e.lookahead < Uf) { + if (Jf(e), e.lookahead < Uf && t === wf) return 1; + if (0 === e.lookahead) break + } + if (n = 0, e.lookahead >= 3 && (e.ins_h = jf(e, e.ins_h, e.window[e.strstart + 3 - 1]), n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 !== n && e.strstart - n <= e.w_size - Uf && (e.match_length = Zf(e, n)), e.match_length >= 3) + if (i = gf(e, e.strstart - e.match_start, e.match_length - 3), e.lookahead -= e.match_length, e.match_length <= e.max_lazy_match && e.lookahead >= 3) { + e.match_length--; + do { + e.strstart++, e.ins_h = jf(e, e.ins_h, e.window[e.strstart + 3 - 1]), n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart + } while (0 != --e.match_length); + e.strstart++ + } else e.strstart += e.match_length, e.match_length = 0, e.ins_h = e.window[e.strstart], e.ins_h = jf(e, e.ins_h, e.window[e.strstart + 1]); + else i = gf(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++; + if (i && (Yf(e, !1), 0 === e.strm.avail_out)) return 1 + } + return e.insert = e.strstart < 2 ? e.strstart : 2, t === bf ? (Yf(e, !0), 0 === e.strm.avail_out ? 3 : 4) : e.sym_next && (Yf(e, !1), 0 === e.strm.avail_out) ? 1 : 2 + }, + tm = (e, t) => { + let n, i, r; + for (;;) { + if (e.lookahead < Uf) { + if (Jf(e), e.lookahead < Uf && t === wf) return 1; + if (0 === e.lookahead) break + } + if (n = 0, e.lookahead >= 3 && (e.ins_h = jf(e, e.ins_h, e.window[e.strstart + 3 - 1]), n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), e.prev_length = e.match_length, e.prev_match = e.match_start, e.match_length = 2, 0 !== n && e.prev_length < e.max_lazy_match && e.strstart - n <= e.w_size - Uf && (e.match_length = Zf(e, n), e.match_length <= 5 && (e.strategy === Cf || 3 === e.match_length && e.strstart - e.match_start > 4096) && (e.match_length = 2)), e.prev_length >= 3 && e.match_length <= e.prev_length) { + r = e.strstart + e.lookahead - 3, i = gf(e, e.strstart - 1 - e.prev_match, e.prev_length - 3), e.lookahead -= e.prev_length - 1, e.prev_length -= 2; + do { + ++e.strstart <= r && (e.ins_h = jf(e, e.ins_h, e.window[e.strstart + 3 - 1]), n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart) + } while (0 != --e.prev_length); + if (e.match_available = 0, e.match_length = 2, e.strstart++, i && (Yf(e, !1), 0 === e.strm.avail_out)) return 1 + } else if (e.match_available) { + if (i = gf(e, 0, e.window[e.strstart - 1]), i && Yf(e, !1), e.strstart++, e.lookahead--, 0 === e.strm.avail_out) return 1 + } else e.match_available = 1, e.strstart++, e.lookahead-- + } + return e.match_available && (i = gf(e, 0, e.window[e.strstart - 1]), e.match_available = 0), e.insert = e.strstart < 2 ? e.strstart : 2, t === bf ? (Yf(e, !0), 0 === e.strm.avail_out ? 3 : 4) : e.sym_next && (Yf(e, !1), 0 === e.strm.avail_out) ? 1 : 2 + }; + + function nm(e, t, n, i, r) { + this.good_length = e, this.max_lazy = t, this.nice_length = n, this.max_chain = i, this.func = r + } + const im = [new nm(0, 0, 0, 0, $f), new nm(4, 4, 8, 4, em), new nm(4, 5, 16, 8, em), new nm(4, 6, 32, 32, em), new nm(4, 4, 16, 16, tm), new nm(8, 16, 32, 32, tm), new nm(8, 16, 128, 128, tm), new nm(8, 32, 128, 256, tm), new nm(32, 128, 258, 1024, tm), new nm(32, 258, 258, 4096, tm)]; + + function rm() { + this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = Nf, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new Uint16Array(1146), this.dyn_dtree = new Uint16Array(122), this.bl_tree = new Uint16Array(78), Hf(this.dyn_ltree), Hf(this.dyn_dtree), Hf(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new Uint16Array(16), this.heap = new Uint16Array(573), Hf(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new Uint16Array(573), Hf(this.depth), this.sym_buf = 0, this.lit_bufsize = 0, this.sym_next = 0, this.sym_end = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0 + } + const am = e => { + if (!e) return 1; + const t = e.state; + return !t || t.strm !== e || t.status !== zf && 57 !== t.status && 69 !== t.status && 73 !== t.status && 91 !== t.status && 103 !== t.status && t.status !== Of && t.status !== Ff ? 1 : 0 + }, + sm = e => { + if (am(e)) return Wf(e, Sf); + e.total_in = e.total_out = 0, e.data_type = Df; + const t = e.state; + return t.pending = 0, t.pending_out = 0, t.wrap < 0 && (t.wrap = -t.wrap), t.status = 2 === t.wrap ? 57 : t.wrap ? zf : Of, e.adler = 2 === t.wrap ? 0 : 1, t.last_flush = -2, pf(t), kf + }, + om = e => { + const t = sm(e); + var n; + return t === kf && ((n = e.state).window_size = 2 * n.w_size, Hf(n.head), n.max_lazy_match = im[n.level].max_lazy, n.good_match = im[n.level].good_length, n.nice_match = im[n.level].nice_length, n.max_chain_length = im[n.level].max_chain, n.strstart = 0, n.block_start = 0, n.lookahead = 0, n.insert = 0, n.match_length = n.prev_length = 2, n.match_available = 0, n.ins_h = 0), t + }, + lm = (e, t, n, i, r, a) => { + if (!e) return Sf; + let s = 1; + if (t === _f && (t = 6), i < 0 ? (s = 0, i = -i) : i > 15 && (s = 2, i -= 16), r < 1 || r > 9 || n !== Nf || i < 8 || i > 15 || t < 0 || t > 9 || a < 0 || a > Rf || 8 === i && 1 !== s) return Wf(e, Sf); + 8 === i && (i = 9); + const o = new rm; + return e.state = o, o.strm = e, o.status = zf, o.wrap = s, o.gzhead = null, o.w_bits = i, o.w_size = 1 << o.w_bits, o.w_mask = o.w_size - 1, o.hash_bits = r + 7, o.hash_size = 1 << o.hash_bits, o.hash_mask = o.hash_size - 1, o.hash_shift = ~~((o.hash_bits + 3 - 1) / 3), o.window = new Uint8Array(2 * o.w_size), o.head = new Uint16Array(o.hash_size), o.prev = new Uint16Array(o.w_size), o.lit_bufsize = 1 << r + 6, o.pending_buf_size = 4 * o.lit_bufsize, o.pending_buf = new Uint8Array(o.pending_buf_size), o.sym_buf = o.lit_bufsize, o.sym_end = 3 * (o.lit_bufsize - 1), o.level = t, o.strategy = a, o.method = n, om(e) + }; + var cm = { + deflateInit: (e, t) => lm(e, t, Nf, 15, 8, Lf), + deflateInit2: lm, + deflateReset: om, + deflateResetKeep: sm, + deflateSetHeader: (e, t) => am(e) || 2 !== e.state.wrap ? Sf : (e.state.gzhead = t, kf), + deflate: (e, t) => { + if (am(e) || t > xf || t < 0) return e ? Wf(e, Sf) : Sf; + const n = e.state; + if (!e.output || 0 !== e.avail_in && !e.input || n.status === Ff && t !== bf) return Wf(e, 0 === e.avail_out ? Tf : Sf); + const i = n.last_flush; + if (n.last_flush = t, 0 !== n.pending) { + if (Qf(e), 0 === e.avail_out) return n.last_flush = -1, kf + } else if (0 === e.avail_in && Vf(t) <= Vf(i) && t !== bf) return Wf(e, Tf); + if (n.status === Ff && 0 !== e.avail_in) return Wf(e, Tf); + if (n.status === zf && 0 === n.wrap && (n.status = Of), n.status === zf) { + let t = Nf + (n.w_bits - 8 << 4) << 8, + i = -1; + if (i = n.strategy >= Pf || n.level < 2 ? 0 : n.level < 6 ? 1 : 6 === n.level ? 2 : 3, t |= i << 6, 0 !== n.strstart && (t |= 32), t += 31 - t % 31, qf(n, t), 0 !== n.strstart && (qf(n, e.adler >>> 16), qf(n, 65535 & e.adler)), e.adler = 1, n.status = Of, Qf(e), 0 !== n.pending) return n.last_flush = -1, kf + } + if (57 === n.status) + if (e.adler = 0, Kf(n, 31), Kf(n, 139), Kf(n, 8), n.gzhead) Kf(n, (n.gzhead.text ? 1 : 0) + (n.gzhead.hcrc ? 2 : 0) + (n.gzhead.extra ? 4 : 0) + (n.gzhead.name ? 8 : 0) + (n.gzhead.comment ? 16 : 0)), Kf(n, 255 & n.gzhead.time), Kf(n, n.gzhead.time >> 8 & 255), Kf(n, n.gzhead.time >> 16 & 255), Kf(n, n.gzhead.time >> 24 & 255), Kf(n, 9 === n.level ? 2 : n.strategy >= Pf || n.level < 2 ? 4 : 0), Kf(n, 255 & n.gzhead.os), n.gzhead.extra && n.gzhead.extra.length && (Kf(n, 255 & n.gzhead.extra.length), Kf(n, n.gzhead.extra.length >> 8 & 255)), n.gzhead.hcrc && (e.adler = hf(e.adler, n.pending_buf, n.pending, 0)), n.gzindex = 0, n.status = 69; + else if (Kf(n, 0), Kf(n, 0), Kf(n, 0), Kf(n, 0), Kf(n, 0), Kf(n, 9 === n.level ? 2 : n.strategy >= Pf || n.level < 2 ? 4 : 0), Kf(n, 3), n.status = Of, Qf(e), 0 !== n.pending) return n.last_flush = -1, kf; + if (69 === n.status) { + if (n.gzhead.extra) { + let t = n.pending, + i = (65535 & n.gzhead.extra.length) - n.gzindex; + for (; n.pending + i > n.pending_buf_size;) { + let r = n.pending_buf_size - n.pending; + if (n.pending_buf.set(n.gzhead.extra.subarray(n.gzindex, n.gzindex + r), n.pending), n.pending = n.pending_buf_size, n.gzhead.hcrc && n.pending > t && (e.adler = hf(e.adler, n.pending_buf, n.pending - t, t)), n.gzindex += r, Qf(e), 0 !== n.pending) return n.last_flush = -1, kf; + t = 0, i -= r + } + let r = new Uint8Array(n.gzhead.extra); + n.pending_buf.set(r.subarray(n.gzindex, n.gzindex + i), n.pending), n.pending += i, n.gzhead.hcrc && n.pending > t && (e.adler = hf(e.adler, n.pending_buf, n.pending - t, t)), n.gzindex = 0 + } + n.status = 73 + } + if (73 === n.status) { + if (n.gzhead.name) { + let t, i = n.pending; + do { + if (n.pending === n.pending_buf_size) { + if (n.gzhead.hcrc && n.pending > i && (e.adler = hf(e.adler, n.pending_buf, n.pending - i, i)), Qf(e), 0 !== n.pending) return n.last_flush = -1, kf; + i = 0 + } + t = n.gzindex < n.gzhead.name.length ? 255 & n.gzhead.name.charCodeAt(n.gzindex++) : 0, Kf(n, t) + } while (0 !== t); + n.gzhead.hcrc && n.pending > i && (e.adler = hf(e.adler, n.pending_buf, n.pending - i, i)), n.gzindex = 0 + } + n.status = 91 + } + if (91 === n.status) { + if (n.gzhead.comment) { + let t, i = n.pending; + do { + if (n.pending === n.pending_buf_size) { + if (n.gzhead.hcrc && n.pending > i && (e.adler = hf(e.adler, n.pending_buf, n.pending - i, i)), Qf(e), 0 !== n.pending) return n.last_flush = -1, kf; + i = 0 + } + t = n.gzindex < n.gzhead.comment.length ? 255 & n.gzhead.comment.charCodeAt(n.gzindex++) : 0, Kf(n, t) + } while (0 !== t); + n.gzhead.hcrc && n.pending > i && (e.adler = hf(e.adler, n.pending_buf, n.pending - i, i)) + } + n.status = 103 + } + if (103 === n.status) { + if (n.gzhead.hcrc) { + if (n.pending + 2 > n.pending_buf_size && (Qf(e), 0 !== n.pending)) return n.last_flush = -1, kf; + Kf(n, 255 & e.adler), Kf(n, e.adler >> 8 & 255), e.adler = 0 + } + if (n.status = Of, Qf(e), 0 !== n.pending) return n.last_flush = -1, kf + } + if (0 !== e.avail_in || 0 !== n.lookahead || t !== wf && n.status !== Ff) { + let i = 0 === n.level ? $f(n, t) : n.strategy === Pf ? ((e, t) => { + let n; + for (;;) { + if (0 === e.lookahead && (Jf(e), 0 === e.lookahead)) { + if (t === wf) return 1; + break + } + if (e.match_length = 0, n = gf(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++, n && (Yf(e, !1), 0 === e.strm.avail_out)) return 1 + } + return e.insert = 0, t === bf ? (Yf(e, !0), 0 === e.strm.avail_out ? 3 : 4) : e.sym_next && (Yf(e, !1), 0 === e.strm.avail_out) ? 1 : 2 + })(n, t) : n.strategy === If ? ((e, t) => { + let n, i, r, a; + const s = e.window; + for (;;) { + if (e.lookahead <= Bf) { + if (Jf(e), e.lookahead <= Bf && t === wf) return 1; + if (0 === e.lookahead) break + } + if (e.match_length = 0, e.lookahead >= 3 && e.strstart > 0 && (r = e.strstart - 1, i = s[r], i === s[++r] && i === s[++r] && i === s[++r])) { + a = e.strstart + Bf; + do {} while (i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && r < a); + e.match_length = Bf - (a - r), e.match_length > e.lookahead && (e.match_length = e.lookahead) + } + if (e.match_length >= 3 ? (n = gf(e, 1, e.match_length - 3), e.lookahead -= e.match_length, e.strstart += e.match_length, e.match_length = 0) : (n = gf(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++), n && (Yf(e, !1), 0 === e.strm.avail_out)) return 1 + } + return e.insert = 0, t === bf ? (Yf(e, !0), 0 === e.strm.avail_out ? 3 : 4) : e.sym_next && (Yf(e, !1), 0 === e.strm.avail_out) ? 1 : 2 + })(n, t) : im[n.level].func(n, t); + if (3 !== i && 4 !== i || (n.status = Ff), 1 === i || 3 === i) return 0 === e.avail_out && (n.last_flush = -1), kf; + if (2 === i && (t === yf ? vf(n) : t !== xf && (ff(n, 0, 0, !1), t === Af && (Hf(n.head), 0 === n.lookahead && (n.strstart = 0, n.block_start = 0, n.insert = 0))), Qf(e), 0 === e.avail_out)) return n.last_flush = -1, kf + } + return t !== bf ? kf : n.wrap <= 0 ? Ef : (2 === n.wrap ? (Kf(n, 255 & e.adler), Kf(n, e.adler >> 8 & 255), Kf(n, e.adler >> 16 & 255), Kf(n, e.adler >> 24 & 255), Kf(n, 255 & e.total_in), Kf(n, e.total_in >> 8 & 255), Kf(n, e.total_in >> 16 & 255), Kf(n, e.total_in >> 24 & 255)) : (qf(n, e.adler >>> 16), qf(n, 65535 & e.adler)), Qf(e), n.wrap > 0 && (n.wrap = -n.wrap), 0 !== n.pending ? kf : Ef) + }, + deflateEnd: e => { + if (am(e)) return Sf; + const t = e.state.status; + return e.state = null, t === Of ? Wf(e, Mf) : kf + }, + deflateSetDictionary: (e, t) => { + let n = t.length; + if (am(e)) return Sf; + const i = e.state, + r = i.wrap; + if (2 === r || 1 === r && i.status !== zf || i.lookahead) return Sf; + if (1 === r && (e.adler = lf(e.adler, t, n, 0)), i.wrap = 0, n >= i.w_size) { + 0 === r && (Hf(i.head), i.strstart = 0, i.block_start = 0, i.insert = 0); + let e = new Uint8Array(i.w_size); + e.set(t.subarray(n - i.w_size, n), 0), t = e, n = i.w_size + } + const a = e.avail_in, + s = e.next_in, + o = e.input; + for (e.avail_in = n, e.next_in = 0, e.input = t, Jf(i); i.lookahead >= 3;) { + let e = i.strstart, + t = i.lookahead - 2; + do { + i.ins_h = jf(i, i.ins_h, i.window[e + 3 - 1]), i.prev[e & i.w_mask] = i.head[i.ins_h], i.head[i.ins_h] = e, e++ + } while (--t); + i.strstart = e, i.lookahead = 2, Jf(i) + } + return i.strstart += i.lookahead, i.block_start = i.strstart, i.insert = i.lookahead, i.lookahead = 0, i.match_length = i.prev_length = 2, i.match_available = 0, e.next_in = s, e.input = o, e.avail_in = a, i.wrap = r, kf + }, + deflateInfo: "pako deflate (from Nodeca project)" + }; + const hm = (e, t) => Object.prototype.hasOwnProperty.call(e, t); + var dm = function(e) { + const t = Array.prototype.slice.call(arguments, 1); + for (; t.length;) { + const n = t.shift(); + if (n) { + if ("object" != typeof n) throw new TypeError(n + "must be non-object"); + for (const t in n) hm(n, t) && (e[t] = n[t]) + } + } + return e + }, + um = e => { + let t = 0; + for (let n = 0, i = e.length; n < i; n++) t += e[n].length; + const n = new Uint8Array(t); + for (let t = 0, i = 0, r = e.length; t < r; t++) { + let r = e[t]; + n.set(r, i), i += r.length + } + return n + }; + let pm = !0; + try { + String.fromCharCode.apply(null, new Uint8Array(1)) + } catch (e) { + pm = !1 + } + const fm = new Uint8Array(256); + for (let e = 0; e < 256; e++) fm[e] = e >= 252 ? 6 : e >= 248 ? 5 : e >= 240 ? 4 : e >= 224 ? 3 : e >= 192 ? 2 : 1; + fm[254] = fm[254] = 1; + var mm = e => { + if ("function" == typeof TextEncoder && TextEncoder.prototype.encode) return (new TextEncoder).encode(e); + let t, n, i, r, a, s = e.length, + o = 0; + for (r = 0; r < s; r++) n = e.charCodeAt(r), 55296 == (64512 & n) && r + 1 < s && (i = e.charCodeAt(r + 1), 56320 == (64512 & i) && (n = 65536 + (n - 55296 << 10) + (i - 56320), r++)), o += n < 128 ? 1 : n < 2048 ? 2 : n < 65536 ? 3 : 4; + for (t = new Uint8Array(o), a = 0, r = 0; a < o; r++) n = e.charCodeAt(r), 55296 == (64512 & n) && r + 1 < s && (i = e.charCodeAt(r + 1), 56320 == (64512 & i) && (n = 65536 + (n - 55296 << 10) + (i - 56320), r++)), n < 128 ? t[a++] = n : n < 2048 ? (t[a++] = 192 | n >>> 6, t[a++] = 128 | 63 & n) : n < 65536 ? (t[a++] = 224 | n >>> 12, t[a++] = 128 | n >>> 6 & 63, t[a++] = 128 | 63 & n) : (t[a++] = 240 | n >>> 18, t[a++] = 128 | n >>> 12 & 63, t[a++] = 128 | n >>> 6 & 63, t[a++] = 128 | 63 & n); + return t + }, + gm = (e, t) => { + const n = t || e.length; + if ("function" == typeof TextDecoder && TextDecoder.prototype.decode) return (new TextDecoder).decode(e.subarray(0, t)); + let i, r; + const a = new Array(2 * n); + for (r = 0, i = 0; i < n;) { + let t = e[i++]; + if (t < 128) { + a[r++] = t; + continue + } + let s = fm[t]; + if (s > 4) a[r++] = 65533, i += s - 1; + else { + for (t &= 2 === s ? 31 : 3 === s ? 15 : 7; s > 1 && i < n;) t = t << 6 | 63 & e[i++], s--; + s > 1 ? a[r++] = 65533 : t < 65536 ? a[r++] = t : (t -= 65536, a[r++] = 55296 | t >> 10 & 1023, a[r++] = 56320 | 1023 & t) + } + } + return ((e, t) => { + if (t < 65534 && e.subarray && pm) return String.fromCharCode.apply(null, e.length === t ? e : e.subarray(0, t)); + let n = ""; + for (let i = 0; i < t; i++) n += String.fromCharCode(e[i]); + return n + })(a, r) + }, + vm = (e, t) => { + (t = t || e.length) > e.length && (t = e.length); + let n = t - 1; + for (; n >= 0 && 128 == (192 & e[n]);) n--; + return n < 0 || 0 === n ? t : n + fm[e[n]] > t ? n : t + }; + var wm = function() { + this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0 + }; + const ym = Object.prototype.toString, + { + Z_NO_FLUSH: Am, + Z_SYNC_FLUSH: bm, + Z_FULL_FLUSH: xm, + Z_FINISH: km, + Z_OK: Em, + Z_STREAM_END: Sm, + Z_DEFAULT_COMPRESSION: Mm, + Z_DEFAULT_STRATEGY: Tm, + Z_DEFLATED: _m + } = uf; + + function Cm(e) { + this.options = dm({ + level: Mm, + method: _m, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Tm + }, e || {}); + let t = this.options; + t.raw && t.windowBits > 0 ? t.windowBits = -t.windowBits : t.gzip && t.windowBits > 0 && t.windowBits < 16 && (t.windowBits += 16), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new wm, this.strm.avail_out = 0; + let n = cm.deflateInit2(this.strm, t.level, t.method, t.windowBits, t.memLevel, t.strategy); + if (n !== Em) throw new Error(df[n]); + if (t.header && cm.deflateSetHeader(this.strm, t.header), t.dictionary) { + let e; + if (e = "string" == typeof t.dictionary ? mm(t.dictionary) : "[object ArrayBuffer]" === ym.call(t.dictionary) ? new Uint8Array(t.dictionary) : t.dictionary, n = cm.deflateSetDictionary(this.strm, e), n !== Em) throw new Error(df[n]); + this._dict_set = !0 + } + } + + function Pm(e, t) { + const n = new Cm(t); + if (n.push(e, !0), n.err) throw n.msg || df[n.err]; + return n.result + } + Cm.prototype.push = function(e, t) { + const n = this.strm, + i = this.options.chunkSize; + let r, a; + if (this.ended) return !1; + for (a = t === ~~t ? t : !0 === t ? km : Am, "string" == typeof e ? n.input = mm(e) : "[object ArrayBuffer]" === ym.call(e) ? n.input = new Uint8Array(e) : n.input = e, n.next_in = 0, n.avail_in = n.input.length;;) + if (0 === n.avail_out && (n.output = new Uint8Array(i), n.next_out = 0, n.avail_out = i), (a === bm || a === xm) && n.avail_out <= 6) this.onData(n.output.subarray(0, n.next_out)), n.avail_out = 0; + else { + if (r = cm.deflate(n, a), r === Sm) return n.next_out > 0 && this.onData(n.output.subarray(0, n.next_out)), r = cm.deflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === Em; + if (0 !== n.avail_out) { + if (a > 0 && n.next_out > 0) this.onData(n.output.subarray(0, n.next_out)), n.avail_out = 0; + else if (0 === n.avail_in) break + } else this.onData(n.output) + } return !0 + }, Cm.prototype.onData = function(e) { + this.chunks.push(e) + }, Cm.prototype.onEnd = function(e) { + e === Em && (this.result = um(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg + }; + var Im = function(e, t) { + return (t = t || {}).raw = !0, Pm(e, t) + }, + Rm = function(e, t) { + return (t = t || {}).gzip = !0, Pm(e, t) + }, + Lm = { + Deflate: Cm, + deflate: Pm, + deflateRaw: Im, + gzip: Rm, + constants: uf + }; + const Dm = 16209; + var Nm = function(e, t) { + let n, i, r, a, s, o, l, c, h, d, u, p, f, m, g, v, w, y, A, b, x, k, E, S; + const M = e.state; + n = e.next_in, E = e.input, i = n + (e.avail_in - 5), r = e.next_out, S = e.output, a = r - (t - e.avail_out), s = r + (e.avail_out - 257), o = M.dmax, l = M.wsize, c = M.whave, h = M.wnext, d = M.window, u = M.hold, p = M.bits, f = M.lencode, m = M.distcode, g = (1 << M.lenbits) - 1, v = (1 << M.distbits) - 1; + e: do { + p < 15 && (u += E[n++] << p, p += 8, u += E[n++] << p, p += 8), w = f[u & g]; + t: for (;;) { + if (y = w >>> 24, u >>>= y, p -= y, y = w >>> 16 & 255, 0 === y) S[r++] = 65535 & w; + else { + if (!(16 & y)) { + if (64 & y) { + if (32 & y) { + M.mode = 16191; + break e + } + e.msg = "invalid literal/length code", M.mode = Dm; + break e + } + w = f[(65535 & w) + (u & (1 << y) - 1)]; + continue t + } + for (A = 65535 & w, y &= 15, y && (p < y && (u += E[n++] << p, p += 8), A += u & (1 << y) - 1, u >>>= y, p -= y), p < 15 && (u += E[n++] << p, p += 8, u += E[n++] << p, p += 8), w = m[u & v];;) { + if (y = w >>> 24, u >>>= y, p -= y, y = w >>> 16 & 255, 16 & y) { + if (b = 65535 & w, y &= 15, p < y && (u += E[n++] << p, p += 8, p < y && (u += E[n++] << p, p += 8)), b += u & (1 << y) - 1, b > o) { + e.msg = "invalid distance too far back", M.mode = Dm; + break e + } + if (u >>>= y, p -= y, y = r - a, b > y) { + if (y = b - y, y > c && M.sane) { + e.msg = "invalid distance too far back", M.mode = Dm; + break e + } + if (x = 0, k = d, 0 === h) { + if (x += l - y, y < A) { + A -= y; + do { + S[r++] = d[x++] + } while (--y); + x = r - b, k = S + } + } else if (h < y) { + if (x += l + h - y, y -= h, y < A) { + A -= y; + do { + S[r++] = d[x++] + } while (--y); + if (x = 0, h < A) { + y = h, A -= y; + do { + S[r++] = d[x++] + } while (--y); + x = r - b, k = S + } + } + } else if (x += h - y, y < A) { + A -= y; + do { + S[r++] = d[x++] + } while (--y); + x = r - b, k = S + } + for (; A > 2;) S[r++] = k[x++], S[r++] = k[x++], S[r++] = k[x++], A -= 3; + A && (S[r++] = k[x++], A > 1 && (S[r++] = k[x++])) + } else { + x = r - b; + do { + S[r++] = S[x++], S[r++] = S[x++], S[r++] = S[x++], A -= 3 + } while (A > 2); + A && (S[r++] = S[x++], A > 1 && (S[r++] = S[x++])) + } + break + } + if (64 & y) { + e.msg = "invalid distance code", M.mode = Dm; + break e + } + w = m[(65535 & w) + (u & (1 << y) - 1)] + } + } + break + } + } while (n < i && r < s); + A = p >> 3, n -= A, p -= A << 3, u &= (1 << p) - 1, e.next_in = n, e.next_out = r, e.avail_in = n < i ? i - n + 5 : 5 - (n - i), e.avail_out = r < s ? s - r + 257 : 257 - (r - s), M.hold = u, M.bits = p + }; + const Bm = 15, + Um = new Uint16Array([3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0]), + zm = new Uint8Array([16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78]), + Om = new Uint16Array([1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0]), + Fm = new Uint8Array([16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]); + var Wm = (e, t, n, i, r, a, s, o) => { + const l = o.bits; + let c, h, d, u, p, f, m = 0, + g = 0, + v = 0, + w = 0, + y = 0, + A = 0, + b = 0, + x = 0, + k = 0, + E = 0, + S = null; + const M = new Uint16Array(16), + T = new Uint16Array(16); + let _, C, P, I = null; + for (m = 0; m <= Bm; m++) M[m] = 0; + for (g = 0; g < i; g++) M[t[n + g]]++; + for (y = l, w = Bm; w >= 1 && 0 === M[w]; w--); + if (y > w && (y = w), 0 === w) return r[a++] = 20971520, r[a++] = 20971520, o.bits = 1, 0; + for (v = 1; v < w && 0 === M[v]; v++); + for (y < v && (y = v), x = 1, m = 1; m <= Bm; m++) + if (x <<= 1, x -= M[m], x < 0) return -1; + if (x > 0 && (0 === e || 1 !== w)) return -1; + for (T[1] = 0, m = 1; m < Bm; m++) T[m + 1] = T[m] + M[m]; + for (g = 0; g < i; g++) 0 !== t[n + g] && (s[T[t[n + g]]++] = g); + if (0 === e ? (S = I = s, f = 20) : 1 === e ? (S = Um, I = zm, f = 257) : (S = Om, I = Fm, f = 0), E = 0, g = 0, m = v, p = a, A = y, b = 0, d = -1, k = 1 << y, u = k - 1, 1 === e && k > 852 || 2 === e && k > 592) return 1; + for (;;) { + _ = m - b, s[g] + 1 < f ? (C = 0, P = s[g]) : s[g] >= f ? (C = I[s[g] - f], P = S[s[g] - f]) : (C = 96, P = 0), c = 1 << m - b, h = 1 << A, v = h; + do { + h -= c, r[p + (E >> b) + h] = _ << 24 | C << 16 | P + } while (0 !== h); + for (c = 1 << m - 1; E & c;) c >>= 1; + if (0 !== c ? (E &= c - 1, E += c) : E = 0, g++, 0 == --M[m]) { + if (m === w) break; + m = t[n + s[g]] + } + if (m > y && (E & u) !== d) { + for (0 === b && (b = y), p += v, A = m - b, x = 1 << A; A + b < w && (x -= M[A + b], !(x <= 0));) A++, x <<= 1; + if (k += 1 << A, 1 === e && k > 852 || 2 === e && k > 592) return 1; + d = E & u, r[d] = y << 24 | A << 16 | p - a + } + } + return 0 !== E && (r[p + E] = m - b << 24 | 64 << 16), o.bits = y, 0 + }; + const { + Z_FINISH: Vm, + Z_BLOCK: Hm, + Z_TREES: Gm, + Z_OK: jm, + Z_STREAM_END: Qm, + Z_NEED_DICT: Ym, + Z_STREAM_ERROR: Km, + Z_DATA_ERROR: qm, + Z_MEM_ERROR: Xm, + Z_BUF_ERROR: Zm, + Z_DEFLATED: Jm + } = uf, $m = 16180, eg = 16190, tg = 16191, ng = 16192, ig = 16194, rg = 16199, ag = 16200, sg = 16206, og = 16209, lg = e => (e >>> 24 & 255) + (e >>> 8 & 65280) + ((65280 & e) << 8) + ((255 & e) << 24); + + function cg() { + this.strm = null, this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new Uint16Array(320), this.work = new Uint16Array(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0 + } + const hg = e => { + if (!e) return 1; + const t = e.state; + return !t || t.strm !== e || t.mode < $m || t.mode > 16211 ? 1 : 0 + }, + dg = e => { + if (hg(e)) return Km; + const t = e.state; + return e.total_in = e.total_out = t.total = 0, e.msg = "", t.wrap && (e.adler = 1 & t.wrap), t.mode = $m, t.last = 0, t.havedict = 0, t.flags = -1, t.dmax = 32768, t.head = null, t.hold = 0, t.bits = 0, t.lencode = t.lendyn = new Int32Array(852), t.distcode = t.distdyn = new Int32Array(592), t.sane = 1, t.back = -1, jm + }, + ug = e => { + if (hg(e)) return Km; + const t = e.state; + return t.wsize = 0, t.whave = 0, t.wnext = 0, dg(e) + }, + pg = (e, t) => { + let n; + if (hg(e)) return Km; + const i = e.state; + return t < 0 ? (n = 0, t = -t) : (n = 5 + (t >> 4), t < 48 && (t &= 15)), t && (t < 8 || t > 15) ? Km : (null !== i.window && i.wbits !== t && (i.window = null), i.wrap = n, i.wbits = t, ug(e)) + }, + fg = (e, t) => { + if (!e) return Km; + const n = new cg; + e.state = n, n.strm = e, n.window = null, n.mode = $m; + const i = pg(e, t); + return i !== jm && (e.state = null), i + }; + let mg, gg, vg = !0; + const wg = e => { + if (vg) { + mg = new Int32Array(512), gg = new Int32Array(32); + let t = 0; + for (; t < 144;) e.lens[t++] = 8; + for (; t < 256;) e.lens[t++] = 9; + for (; t < 280;) e.lens[t++] = 7; + for (; t < 288;) e.lens[t++] = 8; + for (Wm(1, e.lens, 0, 288, mg, 0, e.work, { + bits: 9 + }), t = 0; t < 32;) e.lens[t++] = 5; + Wm(2, e.lens, 0, 32, gg, 0, e.work, { + bits: 5 + }), vg = !1 + } + e.lencode = mg, e.lenbits = 9, e.distcode = gg, e.distbits = 5 + }, + yg = (e, t, n, i) => { + let r; + const a = e.state; + return null === a.window && (a.wsize = 1 << a.wbits, a.wnext = 0, a.whave = 0, a.window = new Uint8Array(a.wsize)), i >= a.wsize ? (a.window.set(t.subarray(n - a.wsize, n), 0), a.wnext = 0, a.whave = a.wsize) : (r = a.wsize - a.wnext, r > i && (r = i), a.window.set(t.subarray(n - i, n - i + r), a.wnext), (i -= r) ? (a.window.set(t.subarray(n - i, n), 0), a.wnext = i, a.whave = a.wsize) : (a.wnext += r, a.wnext === a.wsize && (a.wnext = 0), a.whave < a.wsize && (a.whave += r))), 0 + }; + var Ag = (e, t) => { + let n, i, r, a, s, o, l, c, h, d, u, p, f, m, g, v, w, y, A, b, x, k, E = 0; + const S = new Uint8Array(4); + let M, T; + const _ = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); + if (hg(e) || !e.output || !e.input && 0 !== e.avail_in) return Km; + n = e.state, n.mode === tg && (n.mode = ng), s = e.next_out, r = e.output, l = e.avail_out, a = e.next_in, i = e.input, o = e.avail_in, c = n.hold, h = n.bits, d = o, u = l, k = jm; + e: for (;;) switch (n.mode) { + case $m: + if (0 === n.wrap) { + n.mode = ng; + break + } + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (2 & n.wrap && 35615 === c) { + 0 === n.wbits && (n.wbits = 15), n.check = 0, S[0] = 255 & c, S[1] = c >>> 8 & 255, n.check = hf(n.check, S, 2, 0), c = 0, h = 0, n.mode = 16181; + break + } + if (n.head && (n.head.done = !1), !(1 & n.wrap) || (((255 & c) << 8) + (c >> 8)) % 31) { + e.msg = "incorrect header check", n.mode = og; + break + } + if ((15 & c) !== Jm) { + e.msg = "unknown compression method", n.mode = og; + break + } + if (c >>>= 4, h -= 4, x = 8 + (15 & c), 0 === n.wbits && (n.wbits = x), x > 15 || x > n.wbits) { + e.msg = "invalid window size", n.mode = og; + break + } + n.dmax = 1 << n.wbits, n.flags = 0, e.adler = n.check = 1, n.mode = 512 & c ? 16189 : tg, c = 0, h = 0; + break; + case 16181: + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (n.flags = c, (255 & n.flags) !== Jm) { + e.msg = "unknown compression method", n.mode = og; + break + } + if (57344 & n.flags) { + e.msg = "unknown header flags set", n.mode = og; + break + } + n.head && (n.head.text = c >> 8 & 1), 512 & n.flags && 4 & n.wrap && (S[0] = 255 & c, S[1] = c >>> 8 & 255, n.check = hf(n.check, S, 2, 0)), c = 0, h = 0, n.mode = 16182; + case 16182: + for (; h < 32;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.head && (n.head.time = c), 512 & n.flags && 4 & n.wrap && (S[0] = 255 & c, S[1] = c >>> 8 & 255, S[2] = c >>> 16 & 255, S[3] = c >>> 24 & 255, n.check = hf(n.check, S, 4, 0)), c = 0, h = 0, n.mode = 16183; + case 16183: + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.head && (n.head.xflags = 255 & c, n.head.os = c >> 8), 512 & n.flags && 4 & n.wrap && (S[0] = 255 & c, S[1] = c >>> 8 & 255, n.check = hf(n.check, S, 2, 0)), c = 0, h = 0, n.mode = 16184; + case 16184: + if (1024 & n.flags) { + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.length = c, n.head && (n.head.extra_len = c), 512 & n.flags && 4 & n.wrap && (S[0] = 255 & c, S[1] = c >>> 8 & 255, n.check = hf(n.check, S, 2, 0)), c = 0, h = 0 + } else n.head && (n.head.extra = null); + n.mode = 16185; + case 16185: + if (1024 & n.flags && (p = n.length, p > o && (p = o), p && (n.head && (x = n.head.extra_len - n.length, n.head.extra || (n.head.extra = new Uint8Array(n.head.extra_len)), n.head.extra.set(i.subarray(a, a + p), x)), 512 & n.flags && 4 & n.wrap && (n.check = hf(n.check, i, p, a)), o -= p, a += p, n.length -= p), n.length)) break e; + n.length = 0, n.mode = 16186; + case 16186: + if (2048 & n.flags) { + if (0 === o) break e; + p = 0; + do { + x = i[a + p++], n.head && x && n.length < 65536 && (n.head.name += String.fromCharCode(x)) + } while (x && p < o); + if (512 & n.flags && 4 & n.wrap && (n.check = hf(n.check, i, p, a)), o -= p, a += p, x) break e + } else n.head && (n.head.name = null); + n.length = 0, n.mode = 16187; + case 16187: + if (4096 & n.flags) { + if (0 === o) break e; + p = 0; + do { + x = i[a + p++], n.head && x && n.length < 65536 && (n.head.comment += String.fromCharCode(x)) + } while (x && p < o); + if (512 & n.flags && 4 & n.wrap && (n.check = hf(n.check, i, p, a)), o -= p, a += p, x) break e + } else n.head && (n.head.comment = null); + n.mode = 16188; + case 16188: + if (512 & n.flags) { + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (4 & n.wrap && c !== (65535 & n.check)) { + e.msg = "header crc mismatch", n.mode = og; + break + } + c = 0, h = 0 + } + n.head && (n.head.hcrc = n.flags >> 9 & 1, n.head.done = !0), e.adler = n.check = 0, n.mode = tg; + break; + case 16189: + for (; h < 32;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + e.adler = n.check = lg(c), c = 0, h = 0, n.mode = eg; + case eg: + if (0 === n.havedict) return e.next_out = s, e.avail_out = l, e.next_in = a, e.avail_in = o, n.hold = c, n.bits = h, Ym; + e.adler = n.check = 1, n.mode = tg; + case tg: + if (t === Hm || t === Gm) break e; + case ng: + if (n.last) { + c >>>= 7 & h, h -= 7 & h, n.mode = sg; + break + } + for (; h < 3;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + switch (n.last = 1 & c, c >>>= 1, h -= 1, 3 & c) { + case 0: + n.mode = 16193; + break; + case 1: + if (wg(n), n.mode = rg, t === Gm) { + c >>>= 2, h -= 2; + break e + } + break; + case 2: + n.mode = 16196; + break; + case 3: + e.msg = "invalid block type", n.mode = og + } + c >>>= 2, h -= 2; + break; + case 16193: + for (c >>>= 7 & h, h -= 7 & h; h < 32;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if ((65535 & c) != (c >>> 16 ^ 65535)) { + e.msg = "invalid stored block lengths", n.mode = og; + break + } + if (n.length = 65535 & c, c = 0, h = 0, n.mode = ig, t === Gm) break e; + case ig: + n.mode = 16195; + case 16195: + if (p = n.length, p) { + if (p > o && (p = o), p > l && (p = l), 0 === p) break e; + r.set(i.subarray(a, a + p), s), o -= p, a += p, l -= p, s += p, n.length -= p; + break + } + n.mode = tg; + break; + case 16196: + for (; h < 14;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (n.nlen = 257 + (31 & c), c >>>= 5, h -= 5, n.ndist = 1 + (31 & c), c >>>= 5, h -= 5, n.ncode = 4 + (15 & c), c >>>= 4, h -= 4, n.nlen > 286 || n.ndist > 30) { + e.msg = "too many length or distance symbols", n.mode = og; + break + } + n.have = 0, n.mode = 16197; + case 16197: + for (; n.have < n.ncode;) { + for (; h < 3;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.lens[_[n.have++]] = 7 & c, c >>>= 3, h -= 3 + } + for (; n.have < 19;) n.lens[_[n.have++]] = 0; + if (n.lencode = n.lendyn, n.lenbits = 7, M = { + bits: n.lenbits + }, k = Wm(0, n.lens, 0, 19, n.lencode, 0, n.work, M), n.lenbits = M.bits, k) { + e.msg = "invalid code lengths set", n.mode = og; + break + } + n.have = 0, n.mode = 16198; + case 16198: + for (; n.have < n.nlen + n.ndist;) { + for (; E = n.lencode[c & (1 << n.lenbits) - 1], g = E >>> 24, v = E >>> 16 & 255, w = 65535 & E, !(g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (w < 16) c >>>= g, h -= g, n.lens[n.have++] = w; + else { + if (16 === w) { + for (T = g + 2; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (c >>>= g, h -= g, 0 === n.have) { + e.msg = "invalid bit length repeat", n.mode = og; + break + } + x = n.lens[n.have - 1], p = 3 + (3 & c), c >>>= 2, h -= 2 + } else if (17 === w) { + for (T = g + 3; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + c >>>= g, h -= g, x = 0, p = 3 + (7 & c), c >>>= 3, h -= 3 + } else { + for (T = g + 7; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + c >>>= g, h -= g, x = 0, p = 11 + (127 & c), c >>>= 7, h -= 7 + } + if (n.have + p > n.nlen + n.ndist) { + e.msg = "invalid bit length repeat", n.mode = og; + break + } + for (; p--;) n.lens[n.have++] = x + } + } + if (n.mode === og) break; + if (0 === n.lens[256]) { + e.msg = "invalid code -- missing end-of-block", n.mode = og; + break + } + if (n.lenbits = 9, M = { + bits: n.lenbits + }, k = Wm(1, n.lens, 0, n.nlen, n.lencode, 0, n.work, M), n.lenbits = M.bits, k) { + e.msg = "invalid literal/lengths set", n.mode = og; + break + } + if (n.distbits = 6, n.distcode = n.distdyn, M = { + bits: n.distbits + }, k = Wm(2, n.lens, n.nlen, n.ndist, n.distcode, 0, n.work, M), n.distbits = M.bits, k) { + e.msg = "invalid distances set", n.mode = og; + break + } + if (n.mode = rg, t === Gm) break e; + case rg: + n.mode = ag; + case ag: + if (o >= 6 && l >= 258) { + e.next_out = s, e.avail_out = l, e.next_in = a, e.avail_in = o, n.hold = c, n.bits = h, Nm(e, u), s = e.next_out, r = e.output, l = e.avail_out, a = e.next_in, i = e.input, o = e.avail_in, c = n.hold, h = n.bits, n.mode === tg && (n.back = -1); + break + } + for (n.back = 0; E = n.lencode[c & (1 << n.lenbits) - 1], g = E >>> 24, v = E >>> 16 & 255, w = 65535 & E, !(g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (v && !(240 & v)) { + for (y = g, A = v, b = w; E = n.lencode[b + ((c & (1 << y + A) - 1) >> y)], g = E >>> 24, v = E >>> 16 & 255, w = 65535 & E, !(y + g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + c >>>= y, h -= y, n.back += y + } + if (c >>>= g, h -= g, n.back += g, n.length = w, 0 === v) { + n.mode = 16205; + break + } + if (32 & v) { + n.back = -1, n.mode = tg; + break + } + if (64 & v) { + e.msg = "invalid literal/length code", n.mode = og; + break + } + n.extra = 15 & v, n.mode = 16201; + case 16201: + if (n.extra) { + for (T = n.extra; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.length += c & (1 << n.extra) - 1, c >>>= n.extra, h -= n.extra, n.back += n.extra + } + n.was = n.length, n.mode = 16202; + case 16202: + for (; E = n.distcode[c & (1 << n.distbits) - 1], g = E >>> 24, v = E >>> 16 & 255, w = 65535 & E, !(g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (!(240 & v)) { + for (y = g, A = v, b = w; E = n.distcode[b + ((c & (1 << y + A) - 1) >> y)], g = E >>> 24, v = E >>> 16 & 255, w = 65535 & E, !(y + g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + c >>>= y, h -= y, n.back += y + } + if (c >>>= g, h -= g, n.back += g, 64 & v) { + e.msg = "invalid distance code", n.mode = og; + break + } + n.offset = w, n.extra = 15 & v, n.mode = 16203; + case 16203: + if (n.extra) { + for (T = n.extra; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.offset += c & (1 << n.extra) - 1, c >>>= n.extra, h -= n.extra, n.back += n.extra + } + if (n.offset > n.dmax) { + e.msg = "invalid distance too far back", n.mode = og; + break + } + n.mode = 16204; + case 16204: + if (0 === l) break e; + if (p = u - l, n.offset > p) { + if (p = n.offset - p, p > n.whave && n.sane) { + e.msg = "invalid distance too far back", n.mode = og; + break + } + p > n.wnext ? (p -= n.wnext, f = n.wsize - p) : f = n.wnext - p, p > n.length && (p = n.length), m = n.window + } else m = r, f = s - n.offset, p = n.length; + p > l && (p = l), l -= p, n.length -= p; + do { + r[s++] = m[f++] + } while (--p); + 0 === n.length && (n.mode = ag); + break; + case 16205: + if (0 === l) break e; + r[s++] = n.length, l--, n.mode = ag; + break; + case sg: + if (n.wrap) { + for (; h < 32;) { + if (0 === o) break e; + o--, c |= i[a++] << h, h += 8 + } + if (u -= l, e.total_out += u, n.total += u, 4 & n.wrap && u && (e.adler = n.check = n.flags ? hf(n.check, r, u, s - u) : lf(n.check, r, u, s - u)), u = l, 4 & n.wrap && (n.flags ? c : lg(c)) !== n.check) { + e.msg = "incorrect data check", n.mode = og; + break + } + c = 0, h = 0 + } + n.mode = 16207; + case 16207: + if (n.wrap && n.flags) { + for (; h < 32;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (4 & n.wrap && c !== (4294967295 & n.total)) { + e.msg = "incorrect length check", n.mode = og; + break + } + c = 0, h = 0 + } + n.mode = 16208; + case 16208: + k = Qm; + break e; + case og: + k = qm; + break e; + case 16210: + return Xm; + default: + return Km + } + return e.next_out = s, e.avail_out = l, e.next_in = a, e.avail_in = o, n.hold = c, n.bits = h, (n.wsize || u !== e.avail_out && n.mode < og && (n.mode < sg || t !== Vm)) && yg(e, e.output, e.next_out, u - e.avail_out), d -= e.avail_in, u -= e.avail_out, e.total_in += d, e.total_out += u, n.total += u, 4 & n.wrap && u && (e.adler = n.check = n.flags ? hf(n.check, r, u, e.next_out - u) : lf(n.check, r, u, e.next_out - u)), e.data_type = n.bits + (n.last ? 64 : 0) + (n.mode === tg ? 128 : 0) + (n.mode === rg || n.mode === ig ? 256 : 0), (0 === d && 0 === u || t === Vm) && k === jm && (k = Zm), k + }, + bg = e => { + if (hg(e)) return Km; + let t = e.state; + return t.window && (t.window = null), e.state = null, jm + }, + xg = (e, t) => { + if (hg(e)) return Km; + const n = e.state; + return 2 & n.wrap ? (n.head = t, t.done = !1, jm) : Km + }, + kg = (e, t) => { + const n = t.length; + let i, r, a; + return hg(e) ? Km : (i = e.state, 0 !== i.wrap && i.mode !== eg ? Km : i.mode === eg && (r = 1, r = lf(r, t, n, 0), r !== i.check) ? qm : (a = yg(e, t, n, n), a ? (i.mode = 16210, Xm) : (i.havedict = 1, jm))) + }, + Eg = { + inflateReset: ug, + inflateReset2: pg, + inflateResetKeep: dg, + inflateInit: e => fg(e, 15), + inflateInit2: fg, + inflate: Ag, + inflateEnd: bg, + inflateGetHeader: xg, + inflateSetDictionary: kg, + inflateInfo: "pako inflate (from Nodeca project)" + }; + var Sg = function() { + this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = !1 + }; + const Mg = Object.prototype.toString, + { + Z_NO_FLUSH: Tg, + Z_FINISH: _g, + Z_OK: Cg, + Z_STREAM_END: Pg, + Z_NEED_DICT: Ig, + Z_STREAM_ERROR: Rg, + Z_DATA_ERROR: Lg, + Z_MEM_ERROR: Dg + } = uf; + + function Ng(e) { + this.options = dm({ + chunkSize: 65536, + windowBits: 15, + to: "" + }, e || {}); + const t = this.options; + t.raw && t.windowBits >= 0 && t.windowBits < 16 && (t.windowBits = -t.windowBits, 0 === t.windowBits && (t.windowBits = -15)), !(t.windowBits >= 0 && t.windowBits < 16) || e && e.windowBits || (t.windowBits += 32), t.windowBits > 15 && t.windowBits < 48 && (15 & t.windowBits || (t.windowBits |= 15)), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new wm, this.strm.avail_out = 0; + let n = Eg.inflateInit2(this.strm, t.windowBits); + if (n !== Cg) throw new Error(df[n]); + if (this.header = new Sg, Eg.inflateGetHeader(this.strm, this.header), t.dictionary && ("string" == typeof t.dictionary ? t.dictionary = mm(t.dictionary) : "[object ArrayBuffer]" === Mg.call(t.dictionary) && (t.dictionary = new Uint8Array(t.dictionary)), t.raw && (n = Eg.inflateSetDictionary(this.strm, t.dictionary), n !== Cg))) throw new Error(df[n]) + } + + function Bg(e, t) { + const n = new Ng(t); + if (n.push(e), n.err) throw n.msg || df[n.err]; + return n.result + } + Ng.prototype.push = function(e, t) { + const n = this.strm, + i = this.options.chunkSize, + r = this.options.dictionary; + let a, s, o; + if (this.ended) return !1; + for (s = t === ~~t ? t : !0 === t ? _g : Tg, "[object ArrayBuffer]" === Mg.call(e) ? n.input = new Uint8Array(e) : n.input = e, n.next_in = 0, n.avail_in = n.input.length;;) { + for (0 === n.avail_out && (n.output = new Uint8Array(i), n.next_out = 0, n.avail_out = i), a = Eg.inflate(n, s), a === Ig && r && (a = Eg.inflateSetDictionary(n, r), a === Cg ? a = Eg.inflate(n, s) : a === Lg && (a = Ig)); n.avail_in > 0 && a === Pg && n.state.wrap > 0 && 0 !== e[n.next_in];) Eg.inflateReset(n), a = Eg.inflate(n, s); + switch (a) { + case Rg: + case Lg: + case Ig: + case Dg: + return this.onEnd(a), this.ended = !0, !1 + } + if (o = n.avail_out, n.next_out && (0 === n.avail_out || a === Pg)) + if ("string" === this.options.to) { + let e = vm(n.output, n.next_out), + t = n.next_out - e, + r = gm(n.output, e); + n.next_out = t, n.avail_out = i - t, t && n.output.set(n.output.subarray(e, e + t), 0), this.onData(r) + } else this.onData(n.output.length === n.next_out ? n.output : n.output.subarray(0, n.next_out)); + if (a !== Cg || 0 !== o) { + if (a === Pg) return a = Eg.inflateEnd(this.strm), this.onEnd(a), this.ended = !0, !0; + if (0 === n.avail_in) break + } + } + return !0 + }, Ng.prototype.onData = function(e) { + this.chunks.push(e) + }, Ng.prototype.onEnd = function(e) { + e === Cg && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = um(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg + }; + var Ug = function(e, t) { + return (t = t || {}).raw = !0, Bg(e, t) + }, + zg = { + Inflate: Ng, + inflate: Bg, + inflateRaw: Ug, + ungzip: Bg, + constants: uf + }; + const { + Deflate: Og, + deflate: Fg, + deflateRaw: Wg, + gzip: Vg + } = Lm, { + Inflate: Hg, + inflate: Gg, + inflateRaw: jg, + ungzip: Qg + } = zg; + var Yg = { + Deflate: Og, + deflate: Fg, + deflateRaw: Wg, + gzip: Vg, + Inflate: Hg, + inflate: Gg, + inflateRaw: jg, + ungzip: Qg, + constants: uf + }; + + function Kg(e) { + let t; + e = (e = e.replace(/-/g, "+")).replace(/_/g, "/"); + try { + t = atob(e) + } catch (e) { + return null + } + const n = new Uint8Array(t.length); + for (let e = 0; e < t.length; ++e) { + const i = t.charCodeAt(e); + if (i > 255) return null; + n[e] = i + } + return n + } + var qg, Xg, Zg, Jg, $g, ev, tv, nv, iv, rv, av, sv = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + ov = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class lv { + constructor(e) { + qg.add(this), Zg.set(this, []), Jg.set(this, []), $g.set(this, []), ev.set(this, []), tv.set(this, []), nv.set(this, null), null != e && (sv(this, Zg, e.up, "f"), sv(this, Jg, e.right, "f"), sv(this, $g, e.down, "f"), sv(this, ev, e.left, "f"), sv(this, tv, e.reset, "f")) + } + recordFrame(e, t) { + if (e > Xg.maxFrames) throw new Error("Frame number exceeds maximum frame count."); + if (null != ov(this, nv, "f") && e <= ov(this, nv, "f")) throw new Error("Frame number must be greater than the previous recorded frame."); + sv(this, nv, e, "f"); + const n = ov(this, Zg, "f").length % 2 != 0, + i = ov(this, Jg, "f").length % 2 != 0, + r = ov(this, $g, "f").length % 2 != 0, + a = ov(this, ev, "f").length % 2 != 0, + s = ov(this, tv, "f").length % 2 != 0; + t.up != n && ov(this, Zg, "f").push(e), t.right != i && ov(this, Jg, "f").push(e), t.down != r && ov(this, $g, "f").push(e), t.left != a && ov(this, ev, "f").push(e), t.reset != s && ov(this, tv, "f").push(e) + } + getFrame(e) { + return { + up: (ov(this, qg, "m", iv).call(this, e, ov(this, Zg, "f")) + 1) % 2 != 0, + right: (ov(this, qg, "m", iv).call(this, e, ov(this, Jg, "f")) + 1) % 2 != 0, + down: (ov(this, qg, "m", iv).call(this, e, ov(this, $g, "f")) + 1) % 2 != 0, + left: (ov(this, qg, "m", iv).call(this, e, ov(this, ev, "f")) + 1) % 2 != 0, + reset: (ov(this, qg, "m", iv).call(this, e, ov(this, tv, "f")) + 1) % 2 != 0 + } + } + serialize() { + const e = new Uint8Array(3 + 3 * ov(this, Zg, "f").length + 3 + 3 * ov(this, Jg, "f").length + 3 + 3 * ov(this, $g, "f").length + 3 + 3 * ov(this, ev, "f").length + 3 + 3 * ov(this, tv, "f").length); + ov(this, qg, "m", rv).call(this, ov(this, Zg, "f"), e.subarray(0, 3 + 3 * ov(this, Zg, "f").length)), ov(this, qg, "m", rv).call(this, ov(this, Jg, "f"), e.subarray(3 + 3 * ov(this, Zg, "f").length, 3 + 3 * ov(this, Zg, "f").length + 3 + 3 * ov(this, Jg, "f").length)), ov(this, qg, "m", rv).call(this, ov(this, $g, "f"), e.subarray(3 + 3 * ov(this, Zg, "f").length + 3 + 3 * ov(this, Jg, "f").length, 3 + 3 * ov(this, Zg, "f").length + 3 + 3 * ov(this, Jg, "f").length + 3 + 3 * ov(this, $g, "f").length)), ov(this, qg, "m", rv).call(this, ov(this, ev, "f"), e.subarray(3 + 3 * ov(this, Zg, "f").length + 3 + 3 * ov(this, Jg, "f").length + 3 + 3 * ov(this, $g, "f").length, 3 + 3 * ov(this, Zg, "f").length + 3 + 3 * ov(this, Jg, "f").length + 3 + 3 * ov(this, $g, "f").length + 3 + 3 * ov(this, ev, "f").length)), ov(this, qg, "m", rv).call(this, ov(this, tv, "f"), e.subarray(3 + 3 * ov(this, Zg, "f").length + 3 + 3 * ov(this, Jg, "f").length + 3 + 3 * ov(this, $g, "f").length + 3 + 3 * ov(this, ev, "f").length, 3 + 3 * ov(this, Zg, "f").length + 3 + 3 * ov(this, Jg, "f").length + 3 + 3 * ov(this, $g, "f").length + 3 + 3 * ov(this, ev, "f").length + 3 + 3 * ov(this, tv, "f").length)); + const t = new Yg.Deflate({ + level: 9 + }); + return t.push(new Uint8Array(e), !0), + function(e) { + let t = ""; + for (const n of e) t += String.fromCharCode(n); + let n = btoa(t); + return n = n.replace(/\+/g, "-"), n = n.replace(/\//g, "_"), n = n.replace(/=/g, ""), n + }(t.result) + } + static deserialize(e) { + const t = Kg(e); + if (null == t) return null; + const n = new Yg.Inflate; + if (n.push(t, !0), n.err) return null; + const i = n.result; + if (!(i instanceof Uint8Array)) return null; + const r = ov(Xg, Xg, "m", av).call(Xg, i); + if (null == r) return null; + const a = ov(Xg, Xg, "m", av).call(Xg, i.subarray(3 + 3 * r.length)); + if (null == a) return null; + const s = ov(Xg, Xg, "m", av).call(Xg, i.subarray(3 + 3 * r.length + 3 + 3 * a.length)); + if (null == s) return null; + const o = ov(Xg, Xg, "m", av).call(Xg, i.subarray(3 + 3 * r.length + 3 + 3 * a.length + 3 + 3 * s.length)); + if (null == o) return null; + const l = ov(Xg, Xg, "m", av).call(Xg, i.subarray(3 + 3 * r.length + 3 + 3 * a.length + 3 + 3 * s.length + 3 + 3 * o.length)); + return null == l ? null : new Xg({ + up: r, + right: a, + down: s, + left: o, + reset: l + }) + } + } + Xg = lv, Zg = new WeakMap, Jg = new WeakMap, $g = new WeakMap, ev = new WeakMap, tv = new WeakMap, nv = new WeakMap, qg = new WeakSet, iv = function(e, t) { + let n = -1; + for (let i = 0; i < t.length; ++i) { + const r = t[i]; + if (r == e) { + n = i; + break + } + if (r > e) break; + n = i + } + return n + }, rv = function(e, t) { + t[0] = 255 & e.length, t[1] = e.length >>> 8 & 255, t[2] = e.length >>> 16 & 255; + for (let n = 0; n < e.length; ++n) { + let i; + i = 0 == n ? e[n] : e[n] - e[n - 1], t[3 + 3 * n] = 255 & i, t[3 + 3 * n + 1] = i >>> 8 & 255, t[3 + 3 * n + 2] = i >>> 16 & 255 + } + }, av = function(e) { + if (e.length < 3) return null; + const t = e[0] | e[1] << 8 | e[2] << 16; + if (e.length < 3 + 3 * t) return null; + const n = []; + for (let i = 0; i < t; ++i) { + const t = e[3 + 3 * i] | e[3 + 3 * i + 1] << 8 | e[3 + 3 * i + 2] << 16; + 0 == i ? n.push(t) : n.push(n[i - 1] + t) + } + return n + }, lv.maxFrames = 5999999; + const cv = lv; + var hv, dv, uv, pv, fv, mv, gv, vv, wv, yv, Av, bv, xv, kv, Ev, Sv, Mv, Tv, _v, Cv, Pv, Iv, Rv, Lv, Dv, Nv, Bv, Uv, zv, Ov, Fv, Wv, Vv, Hv, Gv, jv, Qv, Yv, Kv, qv, Xv, Zv, Jv, $v, ew, tw, nw, iw, rw, aw, sw, ow, lw, cw, hw, dw, uw, pw, fw, mw, gw = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }, + vw = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + ww = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class yw { + constructor(e, t, n, i, r, a, s, o, l) { + var c; + if (hv.add(this), uv.set(this, void 0), pv.set(this, null), fv.set(this, 1), mv.set(this, null), gv.set(this, []), vv.set(this, null), wv.set(this, null), yv.set(this, null), Av.set(this, []), this.notificationAudioEnabled = !1, bv.set(this, void 0), xv.set(this, void 0), kv.set(this, void 0), Ev.set(this, !1), Sv.set(this, void 0), Mv.set(this, void 0), Tv.set(this, void 0), _v.set(this, void 0), Cv.set(this, []), Pv.set(this, []), Iv.set(this, []), Rv.set(this, [0, 0, 0, 0]), Lv.set(this, [0, 0, 0, 0]), Dv.set(this, [0, 0, 0, 0]), Nv.set(this, void 0), Bv.set(this, void 0), Uv.set(this, null), zv.set(this, null), Ov.set(this, []), Fv.set(this, null), Wv.set(this, void 0), Vv.set(this, void 0), Hv.set(this, void 0), Gv.set(this, void 0), jv.set(this, void 0), Qv.set(this, void 0), Yv.set(this, void 0), Kv.set(this, []), qv.set(this, null), Xv.set(this, [.075, .075, .075, .075]), Zv.set(this, void 0), Jv.set(this, null), $v.set(this, !1), vw(this, uv, a, "f"), vw(this, Nv, r, "f"), vw(this, jv, s, "f"), vw(this, Qv, o, "f"), vw(this, Yv, l, "f"), vw(this, kv, e, "f"), (null == l ? void 0 : l.getSettingBoolean($o.ParticlesEnabled)) ? vw(this, Zv, new $u(r), "f") : vw(this, Zv, null, "f"), null != ww(this, jv, "f") && null != ww(this, Qv, "f") && vw(this, Kv, [new vp(ww(this, Nv, "f"), ww(this, jv, "f"), ww(this, Qv, "f")), new vp(ww(this, Nv, "f"), ww(this, jv, "f"), ww(this, Qv, "f")), new vp(ww(this, Nv, "f"), ww(this, jv, "f"), ww(this, Qv, "f")), new vp(ww(this, Nv, "f"), ww(this, jv, "f"), ww(this, Qv, "f"))], "f"), vw(this, bv, new Wu, "f"), ww(this, bv, "f").reset(t.position, t.quaternion), r.scene.add(ww(this, bv, "f").camera), vw(this, xv, new _u, "f"), ww(this, xv, "f").reset(t.position, t.quaternion), r.scene.add(ww(this, xv, "f").camera), null == dv.models) throw new Error("Car model isn't loaded yet"); + if (null != ww(this, kv, "f") && null != ww(this, jv, "f") && null != ww(this, Qv, "f")) vw(this, Sv, ww(this, kv, "f").createCar(t, ww(this, jv, "f").getMountainVertices(), ww(this, jv, "f").getMountainOffset(), ww(this, Qv, "f").getTrackData(), n, (e => { + this.setCarState(e) + })), "f"); + else { + const e = [new yn(.627909, .27 - dv.suspensionResetLengthFront, 1.3478).applyQuaternion(t.quaternion).add(t.position), new yn(-.627909, .27 - dv.suspensionResetLengthFront, 1.3478).applyQuaternion(t.quaternion).add(t.position), new yn(.720832, .27 - dv.suspensionResetLengthRear, -1.52686).applyQuaternion(t.quaternion).add(t.position), new yn(-.720832, .27 - dv.suspensionResetLengthRear, -1.52686).applyQuaternion(t.quaternion).add(t.position)], + n = [(new wn).setFromEuler((new ai).set(0, Math.PI, 0)).multiply(t.quaternion), (new wn).setFromEuler((new ai).set(0, Math.PI, 0)).multiply(t.quaternion), (new wn).setFromEuler((new ai).set(0, Math.PI, 0)).multiply(t.quaternion), (new wn).setFromEuler((new ai).set(0, Math.PI, 0)).multiply(t.quaternion)]; + vw(this, Sv, { + id: 0, + frames: 0, + speedKmh: 0, + hasStarted: !1, + finishFrames: null, + nextCheckpointIndex: 0, + hasCheckpointToRespawnAt: !1, + position: { + x: t.position.x, + y: t.position.y, + z: t.position.z + }, + quaternion: { + x: t.quaternion.x, + y: t.quaternion.y, + z: t.quaternion.z, + w: t.quaternion.w + }, + collisionImpulses: [], + wheelInContact: [!1, !1, !1, !1], + wheelSuspensionLength: [dv.suspensionResetLengthFront, dv.suspensionResetLengthFront, dv.suspensionResetLengthRear, dv.suspensionResetLengthRear], + wheelSuspensionVelocity: [0, 0, 0, 0], + wheelRotation: [0, 0, 0, 0], + wheelDeltaRotation: [0, 0, 0, 0], + wheelSkidInfo: [0, 0, 0, 0], + wheelPosition: e, + wheelQuaternion: n, + brakeLightEnabled: !1, + controls: { + up: !1, + right: !1, + down: !1, + left: !1, + reset: !1 + } + }, "f") + } + if (vw(this, Mv, i, "f"), null == n) vw(this, Tv, null != ww(this, Mv, "f"), "f"), vw(this, _v, new cv, "f"); + else { + if (null != ww(this, Mv, "f")) throw new Error("Can't control car when recording is set"); + vw(this, Tv, !1, "f"), vw(this, _v, n, "f") + } + vw(this, Bv, new Nr, "f"), ww(this, Bv, "f").add(dv.models.chassis.clone()), ww(this, Bv, "f").add(dv.models.suspension.clone()), ww(this, Bv, "f").add(dv.models.wheelFL.clone()), ww(this, Bv, "f").add(dv.models.wheelFR.clone()), ww(this, Bv, "f").add(dv.models.wheelBL.clone()), ww(this, Bv, "f").add(dv.models.wheelBR.clone()); + for (const e of ww(this, Bv, "f").children) { + const t = e; + Array.isArray(t.material) ? t.material = t.material.map((e => e.clone())) : t.material = t.material.clone(), t.castShadow = !0, t.receiveShadow = !0, t.frustumCulled = !1 + } + ww(this, Nv, "f").scene.add(ww(this, Bv, "f")), vw(this, Uv, ww(this, Bv, "f").getObjectByName("Body"), "f"), vw(this, zv, ww(this, Bv, "f").getObjectByName("Suspension"), "f"); + { + const e = document.createElement("canvas"); + e.width = 2048, e.height = 2048; + const t = e.getContext("2d"); + if (null == t) throw new Error("Failed to get context for car texture"); + const n = new un(e); + let i; + n.flipY = !1, n.anisotropy = ww(this, Nv, "f").getMaxAnisotropy(), n.needsUpdate = !0, vw(this, Wv, t, "f"), vw(this, Vv, n, "f"), vw(this, Gv, Pu.random(), "f"), ww(this, hv, "m", tw).call(this), vw(this, Hv, { + value: new yn(0, 0, 0) + }, "f"), i = Array.isArray(ww(this, Uv, "f").material) ? ww(this, Uv, "f").material : [ww(this, Uv, "f").material]; + for (const e of i) "Main" == e.name ? e.onBeforeCompile = e => { + e.fragmentShader = "uniform sampler2D carColorPattern;\nuniform vec3 carColorSecondary;\n" + e.fragmentShader, e.fragmentShader = e.fragmentShader.replace("vec4 diffuseColor = vec4( diffuse, opacity );", "float colorSource = texture(carColorPattern, vUv).a;\nvec4 diffuseColor = vec4( carColorSecondary * colorSource + diffuse * (1.0 - colorSource), opacity );"), e.uniforms.carColorPattern = { + value: n + }, e.uniforms.carColorSecondary = ww(this, Hv, "f"), null == e.defines && (e.defines = {}), e.defines.USE_UV = !0 + } : "Metal" == e.name ? e.needsUpdate = !0 : "BrakeLight" == e.name && vw(this, Fv, e, "f") + } + ww(this, zv, "f").geometry.morphAttributes.position = []; + const h = ww(this, zv, "f"), + d = dv.models.suspensionFL, + u = dv.models.suspensionFR, + p = dv.models.suspensionBL, + f = dv.models.suspensionBR; + for (const e of ww(this, Bv, "f").children) + if (e != ww(this, Uv, "f") && e != ww(this, zv, "f")) { + const t = e; + if (!(d.geometry.attributes.position instanceof qi && u.geometry.attributes.position instanceof qi && p.geometry.attributes.position instanceof qi && f.geometry.attributes.position instanceof qi)) throw new Error("Vertices must use BufferAttribute"); + const n = d.geometry.attributes.position.array, + i = u.geometry.attributes.position.array, + r = p.geometry.attributes.position.array, + a = f.geometry.attributes.position.array, + s = h.geometry.morphAttributes.position; + if ("WheelFL" == t.name) s.push(new qi(n, 3)); + else if ("WheelFR" == t.name) s.push(new qi(i, 3)); + else if ("WheelBL" == t.name) s.push(new qi(r, 3)); + else { + if ("WheelBR" != t.name) throw new Error("Unidentified wheel"); + s.push(new qi(a, 3)) + } + ww(this, Ov, "f").push(t) + } ww(this, zv, "f").updateMorphTargets(), null != ww(this, Mv, "f") && (null === (c = ww(this, kv, "f")) || void 0 === c || c.controlCar(ww(this, Sv, "f").id, ww(this, Mv, "f").up, ww(this, Mv, "f").right, ww(this, Mv, "f").down, ww(this, Mv, "f").left, ww(this, Mv, "f").reset), ww(this, Mv, "f").addChangeCallback(vw(this, Jv, (e => { + var t; + null === (t = ww(this, kv, "f")) || void 0 === t || t.controlCar(ww(this, Sv, "f").id, e.up, e.right, e.down, e.left, e.reset) + }), "f"))) + } + dispose() { + var e, t, n; + vw(this, $v, !0, "f"), ww(this, hv, "m", ew).call(this), ww(this, Nv, "f").scene.remove(ww(this, bv, "f").camera), ww(this, Nv, "f").scene.remove(ww(this, xv, "f").camera), null === (e = ww(this, Zv, "f")) || void 0 === e || e.dispose(); + for (const e of ww(this, Kv, "f")) e.dispose(); + ww(this, Kv, "f").length = 0, ww(this, Nv, "f").scene.remove(ww(this, Bv, "f")), ww(this, Vv, "f").dispose(), null === (t = ww(this, kv, "f")) || void 0 === t || t.deleteCar(ww(this, Sv, "f").id), null != ww(this, Jv, "f") && (null === (n = ww(this, Mv, "f")) || void 0 === n || n.removeChangeCallback(ww(this, Jv, "f"))) + } + addResetCallback(e) { + ww(this, Cv, "f").push(e) + } + addCheckpointCallback(e) { + ww(this, Pv, "f").push(e) + } + addFinishCallback(e) { + ww(this, Iv, "f").push(e) + } + getChassisMatrix() { + return null != ww(this, Uv, "f") ? ww(this, Uv, "f").matrix : null + } + getSpeedKmh() { + return ww(this, Sv, "f").speedKmh + } + start() { + var e; + null === (e = ww(this, kv, "f")) || void 0 === e || e.startCar(ww(this, Sv, "f").id, null) + } + hasStarted() { + return ww(this, Sv, "f").hasStarted + } + hasFinished() { + return null != ww(this, Sv, "f").finishFrames + } + getFinishTime() { + return null == ww(this, Sv, "f").finishFrames ? null : new xp(ww(this, Sv, "f").finishFrames) + } + getRecording() { + return ww(this, _v, "f") + } + getTime() { + return new xp(ww(this, Sv, "f").frames) + } + getNextCheckpointIndex() { + return ww(this, Sv, "f").nextCheckpointIndex + } + hasCheckpointToRespawnAt() { + return ww(this, Sv, "f").hasCheckpointToRespawnAt + } + getPosition() { + return new yn(ww(this, Sv, "f").position.x, ww(this, Sv, "f").position.y, ww(this, Sv, "f").position.z) + } + getQuaternion() { + return new wn(ww(this, Sv, "f").quaternion.x, ww(this, Sv, "f").quaternion.y, ww(this, Sv, "f").quaternion.z, ww(this, Sv, "f").quaternion.w) + } + getMatrix4() { + const e = this.getPosition(), + t = this.getQuaternion(), + n = (new qn).makeRotationFromQuaternion(t); + return n.setPosition(e), n + } + get isPaused() { + return ww(this, Ev, "f") + } + set isPaused(e) { + var t; + ww(this, Ev, "f") != e && (null === (t = ww(this, kv, "f")) || void 0 === t || t.pauseCar(ww(this, Sv, "f").id, e), vw(this, Ev, e, "f")) + } + getControls() { + return null != ww(this, Mv, "f") ? ww(this, Mv, "f").getControls() : ww(this, Sv, "f").controls + } + getColors() { + return ww(this, Gv, "f") + } + setColors(e) { + if (ww(this, Hv, "f").value = (new yn).setFromColor(e.secondary), null != ww(this, Uv, "f") && Array.isArray(ww(this, Uv, "f").material)) + for (const t of ww(this, Uv, "f").material) "Main" == t.name ? t.color.set(e.primary) : "Metal" == t.name && t.color.set(e.frame); + if (null != ww(this, zv, "f") && !Array.isArray(ww(this, zv, "f").material)) { + const t = ww(this, zv, "f").material; + "Metal" == t.name && t.color.set(e.frame) + } + for (const t of ww(this, Ov, "f")) + if (Array.isArray(t.material)) + for (const n of t.material) "Metal" == n.name ? n.color.set(e.frame) : "Rim" == n.name && n.color.set(e.rims); + vw(this, Gv, e, "f") + } + setOpacity(e) { + for (const t of ww(this, Bv, "f").children) { + const n = t; + let i; + i = Array.isArray(n.material) ? n.material : [n.material]; + for (const t of i) { + t.opacity = e; + const n = e < 1; + t.needsUpdate = n != t.transparent, t.transparent = n + } + } + } + setVisible(e) { + ww(this, Bv, "f").visible = e + } + setCarState(e) { + var t; + if (ww(this, $v, "f")) return; + const n = ww(this, Sv, "f"); + vw(this, Sv, e, "f"); + const i = ww(this, Sv, "f").frames != n.frames && ww(this, Sv, "f").frames != n.frames + 1; + if (ww(this, Sv, "f").nextCheckpointIndex > n.nextCheckpointIndex) { + this.notificationAudioEnabled && ww(this, hv, "m", iw).call(this); + for (const e of ww(this, Pv, "f")) e(n.nextCheckpointIndex) + } + if (null != ww(this, Sv, "f").finishFrames && null == n.finishFrames) { + this.notificationAudioEnabled && ww(this, hv, "m", rw).call(this); + for (const e of ww(this, Iv, "f")) e(this) + } + const r = .001; + if (i) { + null === (t = ww(this, Zv, "f")) || void 0 === t || t.clear(); + for (const e of ww(this, Kv, "f")) e.clear() + } + if (this.getTime().numberOfFrames % 10 == 0 && ww(this, hv, "m", aw).call(this, .01), i || !n.controls.reset && ww(this, Sv, "f").controls.reset) { + ww(this, bv, "f").reset(this.getPosition(), this.getQuaternion(), this.getSpeedKmh()), ww(this, xv, "f").reset(this.getPosition(), this.getQuaternion(), this.getSpeedKmh()); + for (const e of ww(this, Cv, "f")) e() + } + ww(this, hv, "m", lw).call(this, r), ww(this, hv, "m", hw).call(this, r), ww(this, Tv, "f") && ww(this, Sv, "f").hasStarted && null == n.finishFrames && ww(this, _v, "f").recordFrame(n.frames, ww(this, Sv, "f").controls) + } + update(e) { + var t, n; + if (null != ww(this, Uv, "f") && null != ww(this, zv, "f")) { + ww(this, hv, "m", sw).call(this), null === (t = ww(this, Zv, "f")) || void 0 === t || t.update(e); + const i = this.getMatrix4(), + r = this.getQuaternion(); + ww(this, Uv, "f").matrixAutoUpdate = !1, ww(this, Uv, "f").matrix.copy(i), ww(this, Uv, "f").matrix.multiply((new qn).makeTranslation(0, dv.massOffset, 0)), ww(this, zv, "f").matrixAutoUpdate = !1, ww(this, zv, "f").matrix.copy(ww(this, Uv, "f").matrix); + const a = 4; + for (let t = 0; t < a; t++) { + const i = ww(this, Sv, "f").wheelInContact[t], + a = ww(this, Sv, "f").wheelDeltaRotation[t]; + if (this.hasStarted()) { + if (i) ww(this, Rv, "f")[t] = 1e3 * a, ww(this, Lv, "f")[t] = 1e3 * a; + else { + const { + up: n, + down: i + } = this.getControls(), r = 2 == t || 3 == t; + i ? ww(this, Sv, "f").brakeLightEnabled ? ww(this, Lv, "f")[t] > 0 ? ww(this, Lv, "f")[t] = Math.max(0, ww(this, Lv, "f")[t] - 50 * e) : ww(this, Lv, "f")[t] < 0 && (ww(this, Lv, "f")[t] = Math.min(0, ww(this, Lv, "f")[t] + 50 * e)) : r && (ww(this, Rv, "f")[t] -= 25 * e, ww(this, Lv, "f")[t] -= 25 * e) : n && r && (ww(this, Rv, "f")[t] += 25 * e, ww(this, Lv, "f")[t] += 50 * e), ww(this, Rv, "f")[t] *= Math.max(0, 1 - e), ww(this, Lv, "f")[t] *= Math.max(0, 1 - e) + } + ww(this, Dv, "f")[t] += ww(this, Lv, "f")[t] * e + } + const s = ww(this, Sv, "f").wheelPosition[t], + o = new wn(ww(this, Sv, "f").wheelQuaternion[t].x, ww(this, Sv, "f").wheelQuaternion[t].y, ww(this, Sv, "f").wheelQuaternion[t].z, ww(this, Sv, "f").wheelQuaternion[t].w), + l = ww(this, Sv, "f").wheelRotation[t]; + o.multiply((new wn).setFromAxisAngle(new yn(-1, 0, 0), ww(this, Dv, "f")[t] - l)), ww(this, Ov, "f")[t].position.set(s.x, s.y, s.z), ww(this, Ov, "f")[t].quaternion.set(o.x, o.y, o.z, o.w); + const c = ww(this, Sv, "f").wheelSuspensionLength[t], + h = ww(this, Sv, "f").wheelSkidInfo[t]; + ww(this, zv, "f").morphTargetInfluences || (ww(this, zv, "f").morphTargetInfluences = []), ww(this, zv, "f").morphTargetInfluences[t] = 2 * c + .06, e > 0 && (null === (n = ww(this, Yv, "f")) || void 0 === n ? void 0 : n.getSettingBoolean($o.SkidmarksEnabled)) && t < ww(this, Kv, "f").length && i && a > .06 && h < .5 && 0 == ww(this, Xv, "f")[t] && ww(this, Kv, "f")[t].spawn(s.x, s.y, s.z, r) + } + ww(this, hv, "m", pw).call(this, ww(this, Sv, "f").brakeLightEnabled) + } + } + updateCameras(e) { + if (null == ww(this, Sv, "f").finishFrames) { + const t = this.getPosition(), + n = this.getQuaternion(), + i = this.getSpeedKmh(); + ww(this, bv, "f").update(e, t, n, i), ww(this, xv, "f").update(t, n, i) + } + } + get cameraOrbit() { + return ww(this, bv, "f").camera + } + get cameraCockpit() { + return ww(this, xv, "f").camera + } + set audioVolume(e) { + vw(this, fv, e, "f"), null != ww(this, pv, "f") && ww(this, pv, "f").gain.setTargetAtTime(ww(this, fv, "f"), 0, .01) + } + static initResources() { + return gw(this, void 0, void 0, (function*() { + const e = yield new Promise(((e, t) => { + (new vl).load("models/car.glb", (n => { + function i(e) { + const t = n.scene.getObjectByName(e); + if (null == t) throw new Error('Mesh "' + e + '" does not exist'); + if (0 == t.children.length) { + const e = t; + return e.updateMatrixWorld(!0), e.geometry.applyMatrix4(e.matrix.clone()), e.matrix.identity(), e + } + const i = pl(t.children.map((e => e.geometry)), !0); + t.updateMatrixWorld(!0), i.applyMatrix4(t.matrix.clone()); + const r = t.children.map((e => e.material)), + a = new wr(i, r); + return a.name = e, a + } + + function r(e) { + let t; + t = Array.isArray(e.material) ? e.material : [e.material]; + for (const e of t) e.side = 0; + return e + } + dv.models = { + chassis: r(i("Body")), + suspension: r(i("Suspension")), + suspensionFL: r(i("SuspensionFL")), + suspensionFR: r(i("SuspensionFR")), + suspensionBL: r(i("SuspensionBL")), + suspensionBR: r(i("SuspensionBR")), + wheelFL: r(i("WheelFL")), + wheelFR: r(i("WheelFR")), + wheelBL: r(i("WheelBL")), + wheelBR: r(i("WheelBR")), + collisionShapeVertices: ww(dv, dv, "m", fw).call(dv, i("Collision")) + }, dv.models.wheelFL.geometry.translate(-.627909, .218824, -1.3478), dv.models.wheelFR.geometry.translate(.627909, .218824, -1.3478), dv.models.wheelBL.geometry.translate(-.720832, .218824, 1.52686), dv.models.wheelBR.geometry.translate(.720832, .218824, 1.52686), dv.models.wheelFL.geometry.rotateZ(Math.PI), dv.models.wheelFR.geometry.rotateZ(Math.PI), dv.models.wheelBL.geometry.rotateZ(Math.PI), dv.models.wheelBR.geometry.rotateZ(Math.PI), ww(dv, dv, "m", mw).call(dv).then((t => { + e(t) + })).catch(t) + }), void 0, t) + })); + return yield new Promise(((e, t) => { + const n = new Image; + n.addEventListener("load", (() => { + e() + })), n.addEventListener("error", (() => { + t(new Error("Failed to load image")) + })), n.src = "images/car_stripe.svg", dv.images = { + stripe: n + } + })), e + })) + } + } + dv = yw, uv = new WeakMap, pv = new WeakMap, fv = new WeakMap, mv = new WeakMap, gv = new WeakMap, vv = new WeakMap, wv = new WeakMap, yv = new WeakMap, Av = new WeakMap, bv = new WeakMap, xv = new WeakMap, kv = new WeakMap, Ev = new WeakMap, Sv = new WeakMap, Mv = new WeakMap, Tv = new WeakMap, _v = new WeakMap, Cv = new WeakMap, Pv = new WeakMap, Iv = new WeakMap, Rv = new WeakMap, Lv = new WeakMap, Dv = new WeakMap, Nv = new WeakMap, Bv = new WeakMap, Uv = new WeakMap, zv = new WeakMap, Ov = new WeakMap, Fv = new WeakMap, Wv = new WeakMap, Vv = new WeakMap, Hv = new WeakMap, Gv = new WeakMap, jv = new WeakMap, Qv = new WeakMap, Yv = new WeakMap, Kv = new WeakMap, qv = new WeakMap, Xv = new WeakMap, Zv = new WeakMap, Jv = new WeakMap, $v = new WeakMap, hv = new WeakSet, ew = function() { + ww(this, hv, "m", nw).call(this), setTimeout((() => { + if (null != ww(this, mv, "f") && (ww(this, mv, "f").source.stop(), vw(this, mv, null, "f")), null != ww(this, vv, "f")) { + for (const { + source: e + } + of ww(this, vv, "f")) e.stop(); + vw(this, vv, null, "f") + } + }), 200) + }, tw = function() { + if (null == dv.images) throw new Error("Car images are not loaded yet"); + ww(this, Wv, "f").clearRect(0, 0, ww(this, Wv, "f").canvas.width, ww(this, Wv, "f").canvas.height), ww(this, Wv, "f").drawImage(dv.images.stripe, 0, 0, ww(this, Wv, "f").canvas.width, ww(this, Wv, "f").canvas.height), ww(this, Vv, "f").needsUpdate = !0 + }, nw = function() { + if (null != ww(this, mv, "f") && (ww(this, mv, "f").source.playbackRate.setTargetAtTime(.7, 0, .15), ww(this, mv, "f").gain.gain.setTargetAtTime(0, 0, .15)), null != ww(this, vv, "f")) + for (const e of ww(this, vv, "f")) e.source.playbackRate.setTargetAtTime(.3, 0, .15), e.gain.gain.setTargetAtTime(0, 0, .15); + if (null != ww(this, qv, "f")) { + for (const { + source: e + } + of ww(this, qv, "f")) e.stop(); + vw(this, qv, null, "f") + } + }, iw = function() { + var e, t; + const n = null !== (t = null === (e = ww(this, Yv, "f")) || void 0 === e ? void 0 : e.getSettingFloat($o.CheckpointVolume)) && void 0 !== t ? t : 0; + let i = Math.min(Math.max(ww(this, fv, "f") * n, 0), 1); + if (Number.isNaN(i) && (i = 0), i > 0 && null != ww(this, uv, "f")) { + const e = ww(this, uv, "f").getBuffer("checkpoint"); + if (null != e && null != ww(this, uv, "f").context && null != ww(this, uv, "f").destinationMaster) { + const t = ww(this, uv, "f").context.createBufferSource(); + t.buffer = e, t.playbackRate.value = 1.25; + const n = ww(this, uv, "f").context.createGain(); + n.gain.value = .03 * i, t.connect(n), n.connect(ww(this, uv, "f").destinationMaster), t.start(0) + } + } + }, rw = function() { + var e, t; + const n = null !== (t = null === (e = ww(this, Yv, "f")) || void 0 === e ? void 0 : e.getSettingFloat($o.CheckpointVolume)) && void 0 !== t ? t : 0; + let i = Math.min(Math.max(ww(this, fv, "f") * n, 0), 1); + if (Number.isNaN(i) && (i = 0), i > 0 && null != ww(this, uv, "f")) { + const e = ww(this, uv, "f").getBuffer("finish"); + if (null != e && null != ww(this, uv, "f").context && null != ww(this, uv, "f").destinationMaster) { + const t = ww(this, uv, "f").context.createBufferSource(); + t.buffer = e, t.playbackRate.value = 1.25; + const n = ww(this, uv, "f").context.createGain(); + n.gain.value = .03, t.connect(n), n.connect(ww(this, uv, "f").destinationMaster), t.start(0) + } + } + }, aw = function(e) { + var t; + for (let n = 0; n < 4; n++) { + const i = ww(this, Sv, "f").wheelPosition[n], + r = ww(this, Sv, "f").wheelInContact[n], + a = ww(this, Sv, "f").wheelDeltaRotation[n], + s = ww(this, Sv, "f").wheelSkidInfo[n]; + r && a > .06 && s < .5 ? (n < ww(this, Kv, "f").length && (ww(this, Xv, "f")[n] = Math.max(0, ww(this, Xv, "f")[n] - e)), 0 == ww(this, Xv, "f")[n] && null != ww(this, Zv, "f") && ww(this, Zv, "f").spawn(i.x, i.y, i.z)) : (n < ww(this, Kv, "f").length && (null === (t = ww(this, Yv, "f")) || void 0 === t ? void 0 : t.getSettingBoolean($o.SkidmarksEnabled)) && ww(this, Kv, "f")[n].break(), ww(this, Xv, "f")[n] = .075) + } + }, sw = function() { + if (null != ww(this, uv, "f") && null != ww(this, uv, "f").context && null != ww(this, uv, "f").destinationSfx) { + null == ww(this, pv, "f") && (vw(this, pv, ww(this, uv, "f").context.createGain(), "f"), ww(this, pv, "f").gain.value = ww(this, fv, "f"), ww(this, pv, "f").connect(ww(this, uv, "f").destinationSfx)), null == ww(this, yv, "f") && (vw(this, yv, ww(this, uv, "f").context.createPanner(), "f"), ww(this, yv, "f").refDistance = 5, ww(this, yv, "f").connect(ww(this, pv, "f"))); + const e = this.getPosition(); + ww(this, yv, "f").positionX.value = e.x, ww(this, yv, "f").positionY.value = e.y, ww(this, yv, "f").positionZ.value = e.z; + const t = 4; + if (ww(this, Av, "f").length < t) { + ww(this, Av, "f").length = 0; + for (let e = 0; e < t; ++e) { + const e = ww(this, uv, "f").context.createPanner(); + e.refDistance = 5, e.connect(ww(this, pv, "f")), ww(this, Av, "f").push(e) + } + } + for (let e = 0; e < t; ++e) { + const t = ww(this, Av, "f")[e], + n = ww(this, Sv, "f").wheelPosition[e]; + t.positionX.value = n.x, t.positionY.value = n.y, t.positionZ.value = n.z + } + ww(this, Nv, "f").camera != ww(this, bv, "f").camera && ww(this, Nv, "f").camera != ww(this, xv, "f").camera || ww(this, uv, "f").refreshListener(ww(this, Nv, "f")), ww(this, hv, "m", ow).call(this), ww(this, hv, "m", cw).call(this), ww(this, hv, "m", uw).call(this) + } + }, ow = function() { + if (null == ww(this, mv, "f") && null != ww(this, yv, "f") && null != ww(this, uv, "f")) { + const e = ww(this, uv, "f").getBuffer("engine"); + if (null != e && null != ww(this, uv, "f").context) { + const t = ww(this, uv, "f").context.createBufferSource(); + t.buffer = e, t.loop = !0, t.playbackRate.value = .7; + const n = ww(this, uv, "f").context.createGain(); + n.gain.value = 0, t.connect(n), n.connect(ww(this, yv, "f")), t.start(0, 2 * Math.random()), vw(this, mv, { + source: t, + gain: n + }, "f") + } + } + if (null != ww(this, mv, "f")) { + const e = (ww(this, Rv, "f")[0] + ww(this, Rv, "f")[1] + ww(this, Rv, "f")[2] + ww(this, Rv, "f")[3]) / 4, + t = .7 + Math.pow(Math.abs(e), 1 / 3) / 3, + n = ww(this, Sv, "f").wheelInContact[0] || ww(this, Sv, "f").wheelInContact[1] || ww(this, Sv, "f").wheelInContact[2] || ww(this, Sv, "f").wheelInContact[3], + { + up: i, + down: r + } = this.getControls(), + a = this.hasStarted() && !this.hasFinished() && (i && !(r && ww(this, Sv, "f").brakeLightEnabled) || r && !ww(this, Sv, "f").brakeLightEnabled); + let s; + s = n ? a ? t : Math.max(.7, t / 2) : a ? Math.max(.7, 1.15 * t) : Math.max(.7, t / 2), ww(this, mv, "f").source.playbackRate.setTargetAtTime(s, 0, .05), ww(this, mv, "f").gain.gain.setTargetAtTime(Math.min(.285, s / 14), 0, .05) + } + }, lw = function(e) { + if (ww(this, gv, "f").length < 4) { + ww(this, gv, "f").length = 0; + for (let e = 0; e < 4; ++e) ww(this, gv, "f").push(0) + } + for (let t = 0; t < 4 && t < ww(this, Av, "f").length; t++) + if (ww(this, gv, "f")[t] -= e, ww(this, gv, "f")[t] <= 0) { + const e = Math.abs(ww(this, Sv, "f").wheelSuspensionVelocity[t]); + if (e > 4 && null != ww(this, uv, "f")) { + const n = ww(this, uv, "f").getBuffer("suspension"); + if (null != n && null != ww(this, uv, "f").context) { + const i = ww(this, uv, "f").context.createBufferSource(); + i.buffer = n, i.playbackRate.value = .7 + .1 * Math.random(); + const r = ww(this, uv, "f").context.createGain(); + r.gain.value = Math.min(.285, e / 140), i.connect(r), r.connect(ww(this, Av, "f")[t]), i.start(ww(this, uv, "f").context.currentTime + .02 * Math.random()), ww(this, gv, "f")[t] = .1 + } + } + } + }, cw = function() { + if (null == ww(this, vv, "f") && null != ww(this, uv, "f")) { + const e = ww(this, uv, "f").getBuffer("tires"); + if (null != e && null != ww(this, uv, "f").context) { + vw(this, vv, [], "f"); + const t = 4; + for (let n = 0; n < t; n++) { + const i = ww(this, uv, "f").context.createBufferSource(); + i.buffer = e, i.loop = !0, i.playbackRate.value = .3; + const r = ww(this, uv, "f").context.createGain(); + r.gain.value = 0, i.connect(r), r.connect(ww(this, Av, "f")[n]), i.start(0, n / t * 3.5 + .25 * Math.random()), ww(this, vv, "f").push({ + source: i, + gain: r + }) + } + } + } + if (null != ww(this, vv, "f")) + for (let e = 0; e < ww(this, vv, "f").length; ++e) { + const t = ww(this, vv, "f")[e]; + if (ww(this, Sv, "f").wheelInContact[e]) { + const e = Math.min(3, Math.abs(this.getSpeedKmh()) / 110); + t.gain.gain.setTargetAtTime(e / 10.5, 0, .15) + } else t.gain.gain.setTargetAtTime(0, 0, .15); + const n = .3 + Math.min(.4, Math.abs(this.getSpeedKmh()) / 800); + t.source.playbackRate.setTargetAtTime(n, 0, .15) + } + }, hw = function(e) { + null != ww(this, wv, "f") && (ww(this, wv, "f").timeout -= e, ww(this, wv, "f").timeout <= 0 && vw(this, wv, null, "f")); + const t = ww(this, Sv, "f").collisionImpulses; + for (const e of t) ww(this, hv, "m", dw).call(this, e) + }, dw = function(e) { + if (e > 25 && null != ww(this, yv, "f") && null != ww(this, uv, "f") && (null == ww(this, wv, "f") || ww(this, wv, "f").impulse + 100 < e)) { + vw(this, wv, { + timeout: .2, + impulse: e + }, "f"); + const t = ww(this, uv, "f").getBuffer("collision"); + if (null != t && null != ww(this, uv, "f").context) { + const n = ww(this, uv, "f").context.createBufferSource(); + n.buffer = t, n.playbackRate.value = .1 + .15 * Math.min(e / 4e3, 1); + const i = ww(this, uv, "f").context.createGain(); + i.gain.value = Math.max(.3, Math.min(e / 4e3, 1)) / 2.5, n.connect(i), i.connect(ww(this, yv, "f")), n.start(0) + } + } + }, uw = function() { + if (null == ww(this, qv, "f") && null != ww(this, uv, "f")) { + const e = ww(this, uv, "f").getBuffer("skidding"); + if (null != e && null != ww(this, uv, "f").context) { + vw(this, qv, [], "f"); + const t = 4; + for (let n = 0; n < t; ++n) { + const i = ww(this, uv, "f").context.createBufferSource(); + i.buffer = e, i.loop = !0, i.playbackRate.value = .5; + const r = ww(this, uv, "f").context.createGain(); + r.gain.value = 0, i.connect(r), r.connect(ww(this, Av, "f")[n]), i.start(0, n / t * 3.5 + .25 * Math.random()), ww(this, qv, "f").push({ + source: i, + gain: r + }) + } + } + } + if (null != ww(this, qv, "f")) + for (let e = 0; e < ww(this, qv, "f").length; ++e) { + const t = ww(this, qv, "f")[e]; + 0 == ww(this, Xv, "f")[e] ? t.gain.gain.setTargetAtTime(.75 / 3.5, 0, .1) : t.gain.gain.setTargetAtTime(0, 0, .1) + } + }, pw = function(e) { + null != ww(this, Fv, "f") && (e ? ww(this, Fv, "f").emissive.setRGB(1, .4, .3) : ww(this, Fv, "f").emissive.setRGB(0, 0, 0)) + }, fw = function(e) { + const t = e.geometry.toNonIndexed(); + if (!(t.attributes.position instanceof qi)) throw new Error("Vertices must use BufferAttribute"); + return Array.from(t.attributes.position.array) + }, mw = function() { + return gw(this, void 0, void 0, (function*() { + if (null == dv.models) throw new Error("Car models are not loaded yet"); + const e = new Float32Array(dv.models.collisionShapeVertices), + t = yield window.crypto.subtle.digest("SHA-256", e.buffer), n = Array.from(new Uint8Array(t)).map((e => e.toString(16).padStart(2, "0"))).join(""), i = "dd663fb6330ed93725bf865d5eac2cd29ba19f74dbb3f67ae7f695ea1f68aed0"; + return n == i || console.error("Car collision model checksum mismatch: " + n + " != " + i), n == i + })) + }, yw.massOffset = .6, yw.detectorBoxCenter = new yn(0, .48, -.15), yw.detectorBoxSize = new yn(.89, .22, 1.8), yw.suspensionResetLengthFront = .07809501004219055, yw.suspensionResetLengthRear = .0781289680480957, yw.models = null, yw.images = null; + const Aw = yw; + var bw = n(5959), + xw = {}; + xw.styleTagTransform = u(), xw.setAttributes = l(), xw.insert = s().bind(null, "head"), xw.domAPI = r(), xw.insertStyleElement = h(); + t()(bw.A, xw); + bw.A && bw.A.locals && bw.A.locals; + const kw = { + type: "change" + }, + Ew = { + type: "start" + }, + Sw = { + type: "end" + }, + Mw = new Kn, + Tw = new ga, + _w = Math.cos(70 * Gt.DEG2RAD), + Cw = new yn, + Pw = 2 * Math.PI, + Iw = -1, + Rw = 0, + Lw = 1, + Dw = 2, + Nw = 3, + Bw = 4, + Uw = 5, + zw = 6, + Ow = 1e-6; + class Fw extends Xo { + constructor(e, t = null) { + super(e, t), this.state = Iw, this.enabled = !0, this.target = new yn, this.cursor = new yn, this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = .05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { + LEFT: "ArrowLeft", + UP: "ArrowUp", + RIGHT: "ArrowRight", + BOTTOM: "ArrowDown" + }, this.mouseButtons = { + LEFT: g, + MIDDLE: v, + RIGHT: w + }, this.touches = { + ONE: y, + TWO: b + }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new yn, this._lastQuaternion = new wn, this._lastTargetPosition = new yn, this._quat = (new wn).setFromUnitVectors(e.up, new yn(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new Ko, this._sphericalDelta = new Ko, this._scale = 1, this._panOffset = new yn, this._rotateStart = new jt, this._rotateEnd = new jt, this._rotateDelta = new jt, this._panStart = new jt, this._panEnd = new jt, this._panDelta = new jt, this._dollyStart = new jt, this._dollyEnd = new jt, this._dollyDelta = new jt, this._dollyDirection = new yn, this._mouse = new jt, this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = Vw.bind(this), this._onPointerDown = Ww.bind(this), this._onPointerUp = Hw.bind(this), this._onContextMenu = Xw.bind(this), this._onMouseWheel = Qw.bind(this), this._onKeyDown = Yw.bind(this), this._onTouchStart = Kw.bind(this), this._onTouchMove = qw.bind(this), this._onMouseDown = Gw.bind(this), this._onMouseMove = jw.bind(this), this._interceptControlDown = Zw.bind(this), this._interceptControlUp = Jw.bind(this), null !== this.domElement && this.connect(), this.update() + } + connect() { + this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointercancel", this._onPointerUp), this.domElement.addEventListener("contextmenu", this._onContextMenu), this.domElement.addEventListener("wheel", this._onMouseWheel, { + passive: !1 + }); + this.domElement.getRootNode().addEventListener("keydown", this._interceptControlDown, { + passive: !0, + capture: !0 + }), this.domElement.style.touchAction = "none" + } + disconnect() { + this.domElement.removeEventListener("pointerdown", this._onPointerDown), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.domElement.removeEventListener("pointercancel", this._onPointerUp), this.domElement.removeEventListener("wheel", this._onMouseWheel), this.domElement.removeEventListener("contextmenu", this._onContextMenu), this.stopListenToKeyEvents(); + this.domElement.getRootNode().removeEventListener("keydown", this._interceptControlDown, { + capture: !0 + }), this.domElement.style.touchAction = "auto" + } + dispose() { + this.disconnect() + } + getPolarAngle() { + return this._spherical.phi + } + getAzimuthalAngle() { + return this._spherical.theta + } + getDistance() { + return this.object.position.distanceTo(this.target) + } + listenToKeyEvents(e) { + e.addEventListener("keydown", this._onKeyDown), this._domElementKeyEvents = e + } + stopListenToKeyEvents() { + null !== this._domElementKeyEvents && (this._domElementKeyEvents.removeEventListener("keydown", this._onKeyDown), this._domElementKeyEvents = null) + } + saveState() { + this.target0.copy(this.target), this.position0.copy(this.object.position), this.zoom0 = this.object.zoom + } + reset() { + this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(kw), this.update(), this.state = Iw + } + update(e = null) { + const t = this.object.position; + Cw.copy(t).sub(this.target), Cw.applyQuaternion(this._quat), this._spherical.setFromVector3(Cw), this.autoRotate && this.state === Iw && this._rotateLeft(this._getAutoRotationAngle(e)), this.enableDamping ? (this._spherical.theta += this._sphericalDelta.theta * this.dampingFactor, this._spherical.phi += this._sphericalDelta.phi * this.dampingFactor) : (this._spherical.theta += this._sphericalDelta.theta, this._spherical.phi += this._sphericalDelta.phi); + let n = this.minAzimuthAngle, + i = this.maxAzimuthAngle; + isFinite(n) && isFinite(i) && (n < -Math.PI ? n += Pw : n > Math.PI && (n -= Pw), i < -Math.PI ? i += Pw : i > Math.PI && (i -= Pw), this._spherical.theta = n <= i ? Math.max(n, Math.min(i, this._spherical.theta)) : this._spherical.theta > (n + i) / 2 ? Math.max(n, this._spherical.theta) : Math.min(i, this._spherical.theta)), this._spherical.phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, this._spherical.phi)), this._spherical.makeSafe(), !0 === this.enableDamping ? this.target.addScaledVector(this._panOffset, this.dampingFactor) : this.target.add(this._panOffset), this.target.sub(this.cursor), this.target.clampLength(this.minTargetRadius, this.maxTargetRadius), this.target.add(this.cursor); + let r = !1; + if (this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera) this._spherical.radius = this._clampDistance(this._spherical.radius); + else { + const e = this._spherical.radius; + this._spherical.radius = this._clampDistance(this._spherical.radius * this._scale), r = e != this._spherical.radius + } + if (Cw.setFromSpherical(this._spherical), Cw.applyQuaternion(this._quatInverse), t.copy(this.target).add(Cw), this.object.lookAt(this.target), !0 === this.enableDamping ? (this._sphericalDelta.theta *= 1 - this.dampingFactor, this._sphericalDelta.phi *= 1 - this.dampingFactor, this._panOffset.multiplyScalar(1 - this.dampingFactor)) : (this._sphericalDelta.set(0, 0, 0), this._panOffset.set(0, 0, 0)), this.zoomToCursor && this._performCursorZoom) { + let e = null; + if (this.object.isPerspectiveCamera) { + const t = Cw.length(); + e = this._clampDistance(t * this._scale); + const n = t - e; + this.object.position.addScaledVector(this._dollyDirection, n), this.object.updateMatrixWorld(), r = !!n + } else if (this.object.isOrthographicCamera) { + const t = new yn(this._mouse.x, this._mouse.y, 0); + t.unproject(this.object); + const n = this.object.zoom; + this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), this.object.updateProjectionMatrix(), r = n !== this.object.zoom; + const i = new yn(this._mouse.x, this._mouse.y, 0); + i.unproject(this.object), this.object.position.sub(i).add(t), this.object.updateMatrixWorld(), e = Cw.length() + } else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."), this.zoomToCursor = !1; + null !== e && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(e).add(this.object.position) : (Mw.origin.copy(this.object.position), Mw.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(Mw.direction)) < _w ? this.object.lookAt(this.target) : (Tw.setFromNormalAndCoplanarPoint(this.object.up, this.target), Mw.intersectPlane(Tw, this.target)))) + } else if (this.object.isOrthographicCamera) { + const e = this.object.zoom; + this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), e !== this.object.zoom && (this.object.updateProjectionMatrix(), r = !0) + } + return this._scale = 1, this._performCursorZoom = !1, !!(r || this._lastPosition.distanceToSquared(this.object.position) > Ow || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > Ow || this._lastTargetPosition.distanceToSquared(this.target) > Ow) && (this.dispatchEvent(kw), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) + } + _getAutoRotationAngle(e) { + return null !== e ? Pw / 60 * this.autoRotateSpeed * e : Pw / 60 / 60 * this.autoRotateSpeed + } + _getZoomScale(e) { + const t = Math.abs(.01 * e); + return Math.pow(.95, this.zoomSpeed * t) + } + _rotateLeft(e) { + this._sphericalDelta.theta -= e + } + _rotateUp(e) { + this._sphericalDelta.phi -= e + } + _panLeft(e, t) { + Cw.setFromMatrixColumn(t, 0), Cw.multiplyScalar(-e), this._panOffset.add(Cw) + } + _panUp(e, t) { + !0 === this.screenSpacePanning ? Cw.setFromMatrixColumn(t, 1) : (Cw.setFromMatrixColumn(t, 0), Cw.crossVectors(this.object.up, Cw)), Cw.multiplyScalar(e), this._panOffset.add(Cw) + } + _pan(e, t) { + const n = this.domElement; + if (this.object.isPerspectiveCamera) { + const i = this.object.position; + Cw.copy(i).sub(this.target); + let r = Cw.length(); + r *= Math.tan(this.object.fov / 2 * Math.PI / 180), this._panLeft(2 * e * r / n.clientHeight, this.object.matrix), this._panUp(2 * t * r / n.clientHeight, this.object.matrix) + } else this.object.isOrthographicCamera ? (this._panLeft(e * (this.object.right - this.object.left) / this.object.zoom / n.clientWidth, this.object.matrix), this._panUp(t * (this.object.top - this.object.bottom) / this.object.zoom / n.clientHeight, this.object.matrix)) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."), this.enablePan = !1) + } + _dollyOut(e) { + this.object.isPerspectiveCamera || this.object.isOrthographicCamera ? this._scale /= e : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), this.enableZoom = !1) + } + _dollyIn(e) { + this.object.isPerspectiveCamera || this.object.isOrthographicCamera ? this._scale *= e : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), this.enableZoom = !1) + } + _updateZoomParameters(e, t) { + if (!this.zoomToCursor) return; + this._performCursorZoom = !0; + const n = this.domElement.getBoundingClientRect(), + i = e - n.left, + r = t - n.top, + a = n.width, + s = n.height; + this._mouse.x = i / a * 2 - 1, this._mouse.y = -r / s * 2 + 1, this._dollyDirection.set(this._mouse.x, this._mouse.y, 1).unproject(this.object).sub(this.object.position).normalize() + } + _clampDistance(e) { + return Math.max(this.minDistance, Math.min(this.maxDistance, e)) + } + _handleMouseDownRotate(e) { + this._rotateStart.set(e.clientX, e.clientY) + } + _handleMouseDownDolly(e) { + this._updateZoomParameters(e.clientX, e.clientX), this._dollyStart.set(e.clientX, e.clientY) + } + _handleMouseDownPan(e) { + this._panStart.set(e.clientX, e.clientY) + } + _handleMouseMoveRotate(e) { + this._rotateEnd.set(e.clientX, e.clientY), this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart).multiplyScalar(this.rotateSpeed); + const t = this.domElement; + this._rotateLeft(Pw * this._rotateDelta.x / t.clientHeight), this._rotateUp(Pw * this._rotateDelta.y / t.clientHeight), this._rotateStart.copy(this._rotateEnd), this.update() + } + _handleMouseMoveDolly(e) { + this._dollyEnd.set(e.clientX, e.clientY), this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), this._dollyDelta.y > 0 ? this._dollyOut(this._getZoomScale(this._dollyDelta.y)) : this._dollyDelta.y < 0 && this._dollyIn(this._getZoomScale(this._dollyDelta.y)), this._dollyStart.copy(this._dollyEnd), this.update() + } + _handleMouseMovePan(e) { + this._panEnd.set(e.clientX, e.clientY), this._panDelta.subVectors(this._panEnd, this._panStart).multiplyScalar(this.panSpeed), this._pan(this._panDelta.x, this._panDelta.y), this._panStart.copy(this._panEnd), this.update() + } + _handleMouseWheel(e) { + this._updateZoomParameters(e.clientX, e.clientY), e.deltaY < 0 ? this._dollyIn(this._getZoomScale(e.deltaY)) : e.deltaY > 0 && this._dollyOut(this._getZoomScale(e.deltaY)), this.update() + } + _handleKeyDown(e) { + let t = !1; + switch (e.code) { + case this.keys.UP: + e.ctrlKey || e.metaKey || e.shiftKey ? this.enableRotate && this._rotateUp(Pw * this.keyRotateSpeed / this.domElement.clientHeight) : this.enablePan && this._pan(0, this.keyPanSpeed), t = !0; + break; + case this.keys.BOTTOM: + e.ctrlKey || e.metaKey || e.shiftKey ? this.enableRotate && this._rotateUp(-Pw * this.keyRotateSpeed / this.domElement.clientHeight) : this.enablePan && this._pan(0, -this.keyPanSpeed), t = !0; + break; + case this.keys.LEFT: + e.ctrlKey || e.metaKey || e.shiftKey ? this.enableRotate && this._rotateLeft(Pw * this.keyRotateSpeed / this.domElement.clientHeight) : this.enablePan && this._pan(this.keyPanSpeed, 0), t = !0; + break; + case this.keys.RIGHT: + e.ctrlKey || e.metaKey || e.shiftKey ? this.enableRotate && this._rotateLeft(-Pw * this.keyRotateSpeed / this.domElement.clientHeight) : this.enablePan && this._pan(-this.keyPanSpeed, 0), t = !0 + } + t && (e.preventDefault(), this.update()) + } + _handleTouchStartRotate(e) { + if (1 === this._pointers.length) this._rotateStart.set(e.pageX, e.pageY); + else { + const t = this._getSecondPointerPosition(e), + n = .5 * (e.pageX + t.x), + i = .5 * (e.pageY + t.y); + this._rotateStart.set(n, i) + } + } + _handleTouchStartPan(e) { + if (1 === this._pointers.length) this._panStart.set(e.pageX, e.pageY); + else { + const t = this._getSecondPointerPosition(e), + n = .5 * (e.pageX + t.x), + i = .5 * (e.pageY + t.y); + this._panStart.set(n, i) + } + } + _handleTouchStartDolly(e) { + const t = this._getSecondPointerPosition(e), + n = e.pageX - t.x, + i = e.pageY - t.y, + r = Math.sqrt(n * n + i * i); + this._dollyStart.set(0, r) + } + _handleTouchStartDollyPan(e) { + this.enableZoom && this._handleTouchStartDolly(e), this.enablePan && this._handleTouchStartPan(e) + } + _handleTouchStartDollyRotate(e) { + this.enableZoom && this._handleTouchStartDolly(e), this.enableRotate && this._handleTouchStartRotate(e) + } + _handleTouchMoveRotate(e) { + if (1 == this._pointers.length) this._rotateEnd.set(e.pageX, e.pageY); + else { + const t = this._getSecondPointerPosition(e), + n = .5 * (e.pageX + t.x), + i = .5 * (e.pageY + t.y); + this._rotateEnd.set(n, i) + } + this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart).multiplyScalar(this.rotateSpeed); + const t = this.domElement; + this._rotateLeft(Pw * this._rotateDelta.x / t.clientHeight), this._rotateUp(Pw * this._rotateDelta.y / t.clientHeight), this._rotateStart.copy(this._rotateEnd) + } + _handleTouchMovePan(e) { + if (1 === this._pointers.length) this._panEnd.set(e.pageX, e.pageY); + else { + const t = this._getSecondPointerPosition(e), + n = .5 * (e.pageX + t.x), + i = .5 * (e.pageY + t.y); + this._panEnd.set(n, i) + } + this._panDelta.subVectors(this._panEnd, this._panStart).multiplyScalar(this.panSpeed), this._pan(this._panDelta.x, this._panDelta.y), this._panStart.copy(this._panEnd) + } + _handleTouchMoveDolly(e) { + const t = this._getSecondPointerPosition(e), + n = e.pageX - t.x, + i = e.pageY - t.y, + r = Math.sqrt(n * n + i * i); + this._dollyEnd.set(0, r), this._dollyDelta.set(0, Math.pow(this._dollyEnd.y / this._dollyStart.y, this.zoomSpeed)), this._dollyOut(this._dollyDelta.y), this._dollyStart.copy(this._dollyEnd); + const a = .5 * (e.pageX + t.x), + s = .5 * (e.pageY + t.y); + this._updateZoomParameters(a, s) + } + _handleTouchMoveDollyPan(e) { + this.enableZoom && this._handleTouchMoveDolly(e), this.enablePan && this._handleTouchMovePan(e) + } + _handleTouchMoveDollyRotate(e) { + this.enableZoom && this._handleTouchMoveDolly(e), this.enableRotate && this._handleTouchMoveRotate(e) + } + _addPointer(e) { + this._pointers.push(e.pointerId) + } + _removePointer(e) { + delete this._pointerPositions[e.pointerId]; + for (let t = 0; t < this._pointers.length; t++) + if (this._pointers[t] == e.pointerId) return void this._pointers.splice(t, 1) + } + _isTrackingPointer(e) { + for (let t = 0; t < this._pointers.length; t++) + if (this._pointers[t] == e.pointerId) return !0; + return !1 + } + _trackPointer(e) { + let t = this._pointerPositions[e.pointerId]; + void 0 === t && (t = new jt, this._pointerPositions[e.pointerId] = t), t.set(e.pageX, e.pageY) + } + _getSecondPointerPosition(e) { + const t = e.pointerId === this._pointers[0] ? this._pointers[1] : this._pointers[0]; + return this._pointerPositions[t] + } + _customWheelEvent(e) { + const t = e.deltaMode, + n = { + clientX: e.clientX, + clientY: e.clientY, + deltaY: e.deltaY + }; + switch (t) { + case 1: + n.deltaY *= 16; + break; + case 2: + n.deltaY *= 100 + } + return e.ctrlKey && !this._controlActive && (n.deltaY *= 10), n + } + } + + function Ww(e) { + !1 !== this.enabled && (0 === this._pointers.length && (this.domElement.setPointerCapture(e.pointerId), this.domElement.addEventListener("pointermove", this._onPointerMove), this.domElement.addEventListener("pointerup", this._onPointerUp)), this._isTrackingPointer(e) || (this._addPointer(e), "touch" === e.pointerType ? this._onTouchStart(e) : this._onMouseDown(e))) + } + + function Vw(e) { + !1 !== this.enabled && ("touch" === e.pointerType ? this._onTouchMove(e) : this._onMouseMove(e)) + } + + function Hw(e) { + switch (this._removePointer(e), this._pointers.length) { + case 0: + this.domElement.releasePointerCapture(e.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(Sw), this.state = Iw; + break; + case 1: + const t = this._pointers[0], + n = this._pointerPositions[t]; + this._onTouchStart({ + pointerId: t, + pageX: n.x, + pageY: n.y + }) + } + } + + function Gw(e) { + let t; + switch (e.button) { + case 0: + t = this.mouseButtons.LEFT; + break; + case 1: + t = this.mouseButtons.MIDDLE; + break; + case 2: + t = this.mouseButtons.RIGHT; + break; + default: + t = -1 + } + switch (t) { + case v: + if (!1 === this.enableZoom) return; + this._handleMouseDownDolly(e), this.state = Lw; + break; + case g: + if (e.ctrlKey || e.metaKey || e.shiftKey) { + if (!1 === this.enablePan) return; + this._handleMouseDownPan(e), this.state = Dw + } else { + if (!1 === this.enableRotate) return; + this._handleMouseDownRotate(e), this.state = Rw + } + break; + case w: + if (e.ctrlKey || e.metaKey || e.shiftKey) { + if (!1 === this.enableRotate) return; + this._handleMouseDownRotate(e), this.state = Rw + } else { + if (!1 === this.enablePan) return; + this._handleMouseDownPan(e), this.state = Dw + } + break; + default: + this.state = Iw + } + this.state !== Iw && this.dispatchEvent(Ew) + } + + function jw(e) { + switch (this.state) { + case Rw: + if (!1 === this.enableRotate) return; + this._handleMouseMoveRotate(e); + break; + case Lw: + if (!1 === this.enableZoom) return; + this._handleMouseMoveDolly(e); + break; + case Dw: + if (!1 === this.enablePan) return; + this._handleMouseMovePan(e) + } + } + + function Qw(e) { + !1 !== this.enabled && !1 !== this.enableZoom && this.state === Iw && (e.preventDefault(), this.dispatchEvent(Ew), this._handleMouseWheel(this._customWheelEvent(e)), this.dispatchEvent(Sw)) + } + + function Yw(e) { + !1 !== this.enabled && this._handleKeyDown(e) + } + + function Kw(e) { + switch (this._trackPointer(e), this._pointers.length) { + case 1: + switch (this.touches.ONE) { + case y: + if (!1 === this.enableRotate) return; + this._handleTouchStartRotate(e), this.state = Nw; + break; + case A: + if (!1 === this.enablePan) return; + this._handleTouchStartPan(e), this.state = Bw; + break; + default: + this.state = Iw + } + break; + case 2: + switch (this.touches.TWO) { + case b: + if (!1 === this.enableZoom && !1 === this.enablePan) return; + this._handleTouchStartDollyPan(e), this.state = Uw; + break; + case x: + if (!1 === this.enableZoom && !1 === this.enableRotate) return; + this._handleTouchStartDollyRotate(e), this.state = zw; + break; + default: + this.state = Iw + } + break; + default: + this.state = Iw + } + this.state !== Iw && this.dispatchEvent(Ew) + } + + function qw(e) { + switch (this._trackPointer(e), this.state) { + case Nw: + if (!1 === this.enableRotate) return; + this._handleTouchMoveRotate(e), this.update(); + break; + case Bw: + if (!1 === this.enablePan) return; + this._handleTouchMovePan(e), this.update(); + break; + case Uw: + if (!1 === this.enableZoom && !1 === this.enablePan) return; + this._handleTouchMoveDollyPan(e), this.update(); + break; + case zw: + if (!1 === this.enableZoom && !1 === this.enableRotate) return; + this._handleTouchMoveDollyRotate(e), this.update(); + break; + default: + this.state = Iw + } + } + + function Xw(e) { + !1 !== this.enabled && e.preventDefault() + } + + function Zw(e) { + if ("Control" === e.key) { + this._controlActive = !0; + this.domElement.getRootNode().addEventListener("keyup", this._interceptControlUp, { + passive: !0, + capture: !0 + }) + } + } + + function Jw(e) { + if ("Control" === e.key) { + this._controlActive = !1; + this.domElement.getRootNode().removeEventListener("keyup", this._interceptControlUp, { + passive: !0, + capture: !0 + }) + } + } + var $w = n(5848), + ey = {}; + ey.styleTagTransform = u(), ey.setAttributes = l(), ey.insert = s().bind(null, "head"), ey.domAPI = r(), ey.insertStyleElement = h(); + t()($w.A, ey); + $w.A && $w.A.locals && $w.A.locals; + var ty, ny, iy, ry, ay, sy, oy, ly, cy, hy, dy, uy, py, fy, my, gy, vy, wy, yy, Ay = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + by = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + ny = new WeakMap, iy = new WeakMap, ry = new WeakMap, ay = new WeakMap, sy = new WeakMap, oy = new WeakMap, ly = new WeakMap, cy = new WeakMap, hy = new WeakMap, dy = new WeakMap, uy = new WeakMap, py = new WeakMap, fy = new WeakMap, my = new WeakMap, gy = new WeakMap, vy = new WeakMap, ty = new WeakSet, wy = function() { + by(this, cy, "f").style.left = "calc(" + (100 * by(this, py, "f") / 360).toString() + "% - 1px)", by(this, ay, "f").style.backgroundImage = "linear-gradient(transparent, #000), linear-gradient(to right, transparent, hsla(" + by(this, py, "f").toString() + ", 100%, 50%, 1))" + }, yy = function() { + by(this, sy, "f").style.left = "calc(" + by(this, uy, "f").toString() + "% - 6px)", by(this, sy, "f").style.top = "calc(" + (100 - by(this, dy, "f")).toString() + "% - 6px)" + }; + const xy = class { + constructor(e, t) { + ty.add(this), ny.set(this, void 0), iy.set(this, void 0), ry.set(this, void 0), ay.set(this, void 0), sy.set(this, void 0), oy.set(this, !1), ly.set(this, void 0), cy.set(this, void 0), hy.set(this, !1), dy.set(this, 0), uy.set(this, 0), py.set(this, 0), fy.set(this, void 0), my.set(this, void 0), gy.set(this, void 0), vy.set(this, void 0), Ay(this, ny, e, "f"), Ay(this, iy, t, "f"), Ay(this, ry, document.createElement("div"), "f"), by(this, ry, "f").className = "color-picker", Ay(this, ay, document.createElement("div"), "f"), by(this, ay, "f").className = "value-saturation-picker", by(this, ry, "f").appendChild(by(this, ay, "f")), Ay(this, sy, document.createElement("div"), "f"), by(this, sy, "f").className = "marker", by(this, ay, "f").appendChild(by(this, sy, "f")), Ay(this, ly, document.createElement("div"), "f"), by(this, ly, "f").className = "hue-picker", by(this, ry, "f").appendChild(by(this, ly, "f")), Ay(this, cy, document.createElement("div"), "f"), by(this, cy, "f").className = "marker", by(this, ly, "f").appendChild(by(this, cy, "f")), by(this, ny, "f").appendChild(by(this, ry, "f")); + Ay(this, fy, (e => { + let n = null; + if (e instanceof MouseEvent ? by(this, oy, "f") && (n = e) : e instanceof TouchEvent && e.targetTouches.length > 0 && (n = e.targetTouches[e.targetTouches.length - 1]), null != n) { + const e = by(this, ay, "f").getBoundingClientRect(), + i = Math.max(0, Math.min(1, (n.clientX - e.left) / e.width)), + r = Math.max(0, Math.min(1, (n.clientY - e.top) / e.height)); + Ay(this, uy, 100 * i, "f"), Ay(this, dy, 100 * (1 - r), "f"), by(this, ty, "m", yy).call(this), t(this.color) + } + }), "f"), Ay(this, my, (e => { + 0 == e.button && Ay(this, oy, !1, "f") + }), "f"), by(this, ay, "f").addEventListener("mousedown", (e => { + 0 == e.button && Ay(this, oy, !0, "f"), by(this, fy, "f").call(this, e) + })), window.addEventListener("mouseup", by(this, my, "f")), window.addEventListener("mousemove", by(this, fy, "f")), by(this, ay, "f").addEventListener("touchstart", by(this, fy, "f")), by(this, ay, "f").addEventListener("touchmove", by(this, fy, "f")), Ay(this, gy, (e => { + let n = null; + if (e instanceof MouseEvent ? by(this, hy, "f") && (n = e) : e instanceof TouchEvent && e.targetTouches.length > 0 && (n = e.targetTouches[e.targetTouches.length - 1]), null != n) { + const e = by(this, ly, "f").getBoundingClientRect(), + i = Math.max(0, Math.min(1, (n.clientX - e.left) / e.width)); + Ay(this, py, 360 * i, "f"), by(this, ty, "m", wy).call(this), t(this.color) + } + }), "f"), Ay(this, vy, (e => { + 0 == e.button && Ay(this, hy, !1, "f") + }), "f"), by(this, ly, "f").addEventListener("mousedown", (e => { + 0 == e.button && Ay(this, hy, !0, "f"), by(this, gy, "f").call(this, e) + })), window.addEventListener("mouseup", by(this, vy, "f")), window.addEventListener("mousemove", by(this, gy, "f")), by(this, ly, "f").addEventListener("touchstart", by(this, gy, "f")), by(this, ly, "f").addEventListener("touchmove", by(this, gy, "f")), by(this, ty, "m", wy).call(this), by(this, ty, "m", yy).call(this) + } + dispose() { + window.removeEventListener("mouseup", by(this, my, "f")), window.removeEventListener("mousemove", by(this, fy, "f")), window.removeEventListener("mouseup", by(this, vy, "f")), window.removeEventListener("mousemove", by(this, gy, "f")) + } + get color() { + const e = by(this, uy, "f") / 100, + t = by(this, dy, "f") / 100, + n = t - t * e / 2, + i = Math.min(n, 1 - n), + r = 0 != i ? (t - n) / i : 0; + return new Wi("hsl(" + by(this, py, "f").toString() + "," + (100 * r).toString() + "%," + (100 * n).toString() + "%)") + } + set color(e) { + const { + h: t, + s: n, + l: i + } = e.getHSL({ + h: 0, + s: 0, + l: 0 + }, gt), r = i + n * Math.min(i, 1 - i), a = 0 == r ? 0 : 2 * (1 - i / r); + Ay(this, py, 360 * t, "f"), Ay(this, uy, 100 * a, "f"), Ay(this, dy, 100 * r, "f"), by(this, ty, "m", wy).call(this), by(this, ty, "m", yy).call(this), by(this, iy, "f").call(this, this.color) + } + }; + var ky, Ey, Sy, My, Ty, _y, Cy, Py, Iy, Ry, Ly, Dy, Ny, By, Uy, zy, Oy, Fy, Wy, Vy, Hy, Gy, jy, Qy, Yy, Ky = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + qy = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + Ey = new WeakMap, Sy = new WeakMap, My = new WeakMap, Ty = new WeakMap, _y = new WeakMap, Cy = new WeakMap, Py = new WeakMap, Iy = new WeakMap, Ry = new WeakMap, Ly = new WeakMap, Dy = new WeakMap, Ny = new WeakMap, By = new WeakMap, Uy = new WeakMap, zy = new WeakMap, Oy = new WeakMap, Fy = new WeakMap, ky = new WeakSet, Wy = function(e) { + const t = document.createElement("div"); + t.className = "color", qy(this, Uy, "f").appendChild(t); + const n = document.createElement("h2"); + n.textContent = e, t.appendChild(n); + const i = document.createElement("input"); + i.type = "text", i.addEventListener("input", (() => { + let e = i.value; + /^[0-9A-F]{6}$/i.test(e) && (e = "#" + e), r.color = new Wi(e), qy(this, Ey, "f").setColors(qy(this, ky, "m", Hy).call(this)), Ky(this, Oy, !0, "f") + })), i.addEventListener("blur", (() => { + i.value = "#" + r.color.getHexString() + })), t.appendChild(i); + const r = new xy(t, (e => { + document.activeElement != i && (i.value = "#" + e.getHexString()), qy(this, Ey, "f").setColors(qy(this, ky, "m", Hy).call(this)), Ky(this, Oy, !0, "f") + })); + i.value = "#" + r.color.getHexString(), qy(this, zy, "f").push(r) + }, Vy = function() { + const e = Pu.random(); + qy(this, zy, "f")[0].color = e.primary.clone(), qy(this, zy, "f")[1].color = e.secondary.clone(), qy(this, zy, "f")[2].color = e.frame.clone(), qy(this, zy, "f")[3].color = e.rims.clone() + }, Hy = function() { + return new Pu(qy(this, zy, "f")[0].color.clone(), qy(this, zy, "f")[1].color.clone(), qy(this, zy, "f")[2].color.clone(), qy(this, zy, "f")[3].color.clone()) + }, Gy = function(e) { + qy(this, zy, "f")[0].color = e.primary.clone(), qy(this, zy, "f")[1].color = e.secondary.clone(), qy(this, zy, "f")[2].color = e.frame.clone(), qy(this, zy, "f")[3].color = e.rims.clone() + }, jy = function(e) { + qy(this, Oy, "f") ? qy(this, Cy, "f").showConfirm(qy(this, Sy, "f").get("Are you sure you want to exit without saving?") + "\n\n" + qy(this, Sy, "f").get("All changes will be lost!"), qy(this, Sy, "f").get("Cancel"), qy(this, Sy, "f").get("Confirm"), null, (() => { + e() + })) : e() + }, Qy = function() { + if (qy(this, Oy, "f")) { + const e = qy(this, ky, "m", Hy).call(this); + qy(this, _y, "f").setCarColors(e), Ky(this, Oy, !1, "f"), Ky(this, Fy, !0, "f") + } + qy(this, ky, "m", Yy).call(this) + }, Yy = function() { + null != qy(this, By, "f") && (clearTimeout(qy(this, By, "f")), Ky(this, By, null, "f")), qy(this, Ny, "f").classList.remove("show"), qy(this, Ny, "f").classList.remove("hide"), Ky(this, By, window.setTimeout((() => { + qy(this, Ny, "f").textContent = qy(this, Sy, "f").get("Car saved!"), qy(this, Ny, "f").classList.add("show"), Ky(this, By, window.setTimeout((() => { + qy(this, Ny, "f").classList.remove("show"), qy(this, Ny, "f").classList.add("hide") + }), 3e3), "f") + }), 0), "f") + }; + const Xy = class { + constructor(e, t, n, i, r, a, s, o) { + ky.add(this), Ey.set(this, void 0), Sy.set(this, void 0), My.set(this, void 0), Ty.set(this, void 0), _y.set(this, void 0), Cy.set(this, void 0), Py.set(this, void 0), Iy.set(this, void 0), Ry.set(this, void 0), Ly.set(this, void 0), Dy.set(this, void 0), Ny.set(this, void 0), By.set(this, null), Uy.set(this, void 0), zy.set(this, []), Oy.set(this, !1), Fy.set(this, !1), Ky(this, Ey, e, "f"), Ky(this, My, n, "f"), Ky(this, Ty, r, "f"), Ky(this, _y, a, "f"), Ky(this, Cy, s, "f"), Ky(this, Sy, t, "f"), Ky(this, Ry, new Pr(70, 1, .1, Au.maxViewDistance), "f"), qy(this, Ry, "f").position.set(4, 3, 4), n.scene.add(qy(this, Ry, "f")), Ky(this, Ly, new Fw(qy(this, Ry, "f"), n.canvas), "f"), qy(this, Ly, "f").target.set(0, .7, 1.2), qy(this, Ly, "f").update(), qy(this, Ly, "f").mouseButtons = { + LEFT: g, + MIDDLE: g, + RIGHT: g + }, qy(this, Ly, "f").enablePan = !1, qy(this, Ly, "f").minDistance = 2.5, qy(this, Ly, "f").maxDistance = 5.8, qy(this, Ly, "f").maxPolarAngle = Math.PI / 2 + .06; + const l = document.getElementById("ui"); + if (null == l) throw new Error("UI element not found"); + Ky(this, Py, l, "f"), Ky(this, Dy, document.createElement("div"), "f"), qy(this, Dy, "f").className = "customization"; + const c = document.createElement("div"); + c.className = "top", qy(this, Dy, "f").appendChild(c); + const h = document.createElement("button"); + h.className = "button", h.innerHTML = ' ', h.append(document.createTextNode(t.get("Exit"))), h.addEventListener("click", (() => { + i.playUIClick(), qy(this, ky, "m", jy).call(this, o) + })), c.appendChild(h), window.addEventListener("keydown", Ky(this, Iy, (e => { + "Escape" == e.code && (qy(this, ky, "m", jy).call(this, o), e.preventDefault()) + }), "f")); + const d = document.createElement("button"); + d.className = "button", d.innerHTML = ' ', d.append(document.createTextNode(t.get("Save"))), d.addEventListener("click", (() => { + i.playUIClick(), qy(this, ky, "m", Qy).call(this) + })), c.appendChild(d); + const u = document.createElement("button"); + u.className = "button", u.innerHTML = ' ', u.append(document.createTextNode(t.get("Random"))), u.addEventListener("click", (() => { + i.playUIClick(), qy(this, ky, "m", Vy).call(this) + })), c.appendChild(u), Ky(this, Ny, document.createElement("div"), "f"), qy(this, Ny, "f").className = "save-message", qy(this, Dy, "f").appendChild(qy(this, Ny, "f")), Ky(this, Uy, document.createElement("div"), "f"), qy(this, Uy, "f").className = "colors", qy(this, Dy, "f").appendChild(qy(this, Uy, "f")), qy(this, ky, "m", Wy).call(this, t.get("Primary")), qy(this, ky, "m", Wy).call(this, t.get("Secondary")), qy(this, ky, "m", Wy).call(this, t.get("Frame")), qy(this, ky, "m", Wy).call(this, t.get("Rims")), qy(this, Py, "f").appendChild(qy(this, Dy, "f")); + const p = qy(this, _y, "f").getCurrentUserProfile().carColors; + qy(this, ky, "m", Gy).call(this, p), qy(this, Ey, "f").setColors(p), Ky(this, Oy, !1, "f") + } + dispose() { + for (const e of qy(this, zy, "f")) e.dispose(); + if (qy(this, Fy, "f")) { + const { + token: e, + nickname: t, + carColors: n + } = qy(this, _y, "f").getCurrentUserProfile(); + qy(this, Ty, "f").submitUserProfile(e, t, n).catch((e => { + console.warn(e) + })) + } + qy(this, My, "f").scene.remove(qy(this, Ry, "f")), window.removeEventListener("keydown", qy(this, Iy, "f")), qy(this, Py, "f").removeChild(qy(this, Dy, "f")), qy(this, Ly, "f").dispose(), qy(this, My, "f").canvas.style.touchAction = "" + } + get camera() { + return qy(this, Ry, "f") + } + }; + var Zy; + ! function(e) { + e[e.Default = 0] = "Default", e[e.Summer = 1] = "Summer", e[e.Winter = 2] = "Winter", e[e.Desert = 3] = "Desert", e[e.Custom0 = 32] = "Custom0", e[e.Custom1 = 33] = "Custom1", e[e.Custom2 = 34] = "Custom2", e[e.Custom3 = 35] = "Custom3", e[e.Custom4 = 36] = "Custom4", e[e.Custom5 = 37] = "Custom5", e[e.Custom6 = 38] = "Custom6", e[e.Custom7 = 39] = "Custom7", e[e.Custom8 = 40] = "Custom8" + }(Zy || (Zy = {})); + const Jy = Zy; + var $y; + ! function(e) { + e[e.Straight = 0] = "Straight", e[e.TurnSharp = 1] = "TurnSharp", e[e.SlopeUp = 2] = "SlopeUp", e[e.SlopeDown = 3] = "SlopeDown", e[e.Slope = 4] = "Slope", e[e.Start = 5] = "Start", e[e.Finish = 6] = "Finish", e[e.ToWideMiddle = 7] = "ToWideMiddle", e[e.ToWideLeft = 8] = "ToWideLeft", e[e.ToWideRight = 9] = "ToWideRight", e[e.StraightWide = 10] = "StraightWide", e[e.InnerCornerWide = 11] = "InnerCornerWide", e[e.OuterCornerWide = 12] = "OuterCornerWide", e[e.SlopeUpLeftWide = 13] = "SlopeUpLeftWide", e[e.SlopeUpRightWide = 14] = "SlopeUpRightWide", e[e.SlopeDownLeftWide = 15] = "SlopeDownLeftWide", e[e.SlopeDownRightWide = 16] = "SlopeDownRightWide", e[e.SlopeLeftWide = 17] = "SlopeLeftWide", e[e.SlopeRightWide = 18] = "SlopeRightWide", e[e.PillarTop = 19] = "PillarTop", e[e.PillarMiddle = 20] = "PillarMiddle", e[e.PillarBottom = 21] = "PillarBottom", e[e.PillarShort = 22] = "PillarShort", e[e.PlanePillarBottom = 23] = "PlanePillarBottom", e[e.PlanePillarShort = 24] = "PlanePillarShort", e[e.Plane = 25] = "Plane", e[e.PlaneWall = 26] = "PlaneWall", e[e.PlaneWallCorner = 27] = "PlaneWallCorner", e[e.PlaneWallInnerCorner = 28] = "PlaneWallInnerCorner", e[e.Block = 29] = "Block", e[e.WallTrackTop = 30] = "WallTrackTop", e[e.WallTrackMiddle = 31] = "WallTrackMiddle", e[e.WallTrackBottom = 32] = "WallTrackBottom", e[e.PlaneSlopeUp = 33] = "PlaneSlopeUp", e[e.PlaneSlopeDown = 34] = "PlaneSlopeDown", e[e.PlaneSlope = 35] = "PlaneSlope", e[e.TurnShort = 36] = "TurnShort", e[e.TurnLong = 37] = "TurnLong", e[e.SlopeUpLong = 38] = "SlopeUpLong", e[e.SlopeDownLong = 39] = "SlopeDownLong", e[e.SlopePillar = 40] = "SlopePillar", e[e.TurnSLeft = 41] = "TurnSLeft", e[e.TurnSRight = 42] = "TurnSRight", e[e.IntersectionT = 43] = "IntersectionT", e[e.IntersectionCross = 44] = "IntersectionCross", e[e.PillarBranch1 = 45] = "PillarBranch1", e[e.PillarBranch2 = 46] = "PillarBranch2", e[e.PillarBranch3 = 47] = "PillarBranch3", e[e.PillarBranch4 = 48] = "PillarBranch4", e[e.WallTrackBottomCorner = 49] = "WallTrackBottomCorner", e[e.WallTrackMiddleCorner = 50] = "WallTrackMiddleCorner", e[e.WallTrackTopCorner = 51] = "WallTrackTopCorner", e[e.Checkpoint = 52] = "Checkpoint", e[e.HalfBlock = 53] = "HalfBlock", e[e.QuarterBlock = 54] = "QuarterBlock", e[e.HalfPlane = 55] = "HalfPlane", e[e.QuarterPlane = 56] = "QuarterPlane", e[e.PlaneBridge = 57] = "PlaneBridge", e[e.SignArrowLeft = 58] = "SignArrowLeft", e[e.SignArrowRight = 59] = "SignArrowRight", e[e.SignArrowUp = 61] = "SignArrowUp", e[e.SignArrowDown = 62] = "SignArrowDown", e[e.SignWarning = 63] = "SignWarning", e[e.SignWrongWay = 64] = "SignWrongWay", e[e.CheckpointWide = 65] = "CheckpointWide", e[e.WallTrackCeiling = 66] = "WallTrackCeiling", e[e.WallTrackFloor = 67] = "WallTrackFloor", e[e.BlockSlopedDown = 68] = "BlockSlopedDown", e[e.BlockSlopedDownInnerCorner = 69] = "BlockSlopedDownInnerCorner", e[e.BlockSlopedDownOuterCorner = 70] = "BlockSlopedDownOuterCorner", e[e.BlockSlopedUp = 71] = "BlockSlopedUp", e[e.BlockSlopedUpInnerCorner = 72] = "BlockSlopedUpInnerCorner", e[e.BlockSlopedUpOuterCorner = 73] = "BlockSlopedUpOuterCorner", e[e.FinishWide = 74] = "FinishWide", e[e.PlaneCheckpoint = 75] = "PlaneCheckpoint", e[e.PlaneFinish = 76] = "PlaneFinish", e[e.PlaneCheckpointWide = 77] = "PlaneCheckpointWide", e[e.PlaneFinishWide = 78] = "PlaneFinishWide", e[e.WallTrackBottomInnerCorner = 79] = "WallTrackBottomInnerCorner", e[e.WallTrackInnerCorner = 80] = "WallTrackInnerCorner", e[e.WallTrackTopInnerCorner = 81] = "WallTrackTopInnerCorner", e[e.TurnLong2 = 82] = "TurnLong2", e[e.TurnLong3 = 83] = "TurnLong3", e[e.SlopePillarShort = 84] = "SlopePillarShort", e[e.BlockSlopeUp = 85] = "BlockSlopeUp", e[e.BlockSlopeDown = 86] = "BlockSlopeDown", e[e.BlockSlopeVerticalTop = 87] = "BlockSlopeVerticalTop", e[e.BlockSlopeVerticalBottom = 88] = "BlockSlopeVerticalBottom", e[e.PlaneSlopeVerticalBottom = 90] = "PlaneSlopeVerticalBottom", e[e.StartWide = 91] = "StartWide", e[e.PlaneStart = 92] = "PlaneStart", e[e.PlaneStartWide = 93] = "PlaneStartWide", e[e.TurnShortLeftWide = 94] = "TurnShortLeftWide", e[e.TurnShortRightWide = 95] = "TurnShortRightWide", e[e.TurnLongLeftWide = 96] = "TurnLongLeftWide", e[e.TurnLongRightWide = 97] = "TurnLongRightWide", e[e.SlopeUpVertical = 98] = "SlopeUpVertical", e[e.PlaneSlopePillar = 99] = "PlaneSlopePillar", e[e.PlaneSlopePillarShort = 100] = "PlaneSlopePillarShort", e[e.PillarBranch1Top = 101] = "PillarBranch1Top", e[e.PillarBranch1Bottom = 102] = "PillarBranch1Bottom", e[e.PillarBranch1Middle = 103] = "PillarBranch1Middle", e[e.PillarBranch2Top = 104] = "PillarBranch2Top", e[e.PillarBranch2Middle = 105] = "PillarBranch2Middle", e[e.PillarBranch2Bottom = 106] = "PillarBranch2Bottom", e[e.PillarBranch3Top = 107] = "PillarBranch3Top", e[e.PillarBranch3Middle = 108] = "PillarBranch3Middle", e[e.PillarBranch3Bottom = 109] = "PillarBranch3Bottom", e[e.PillarBranch4Top = 110] = "PillarBranch4Top", e[e.PillarBranch4Middle = 111] = "PillarBranch4Middle", e[e.PillarBranch4Bottom = 112] = "PillarBranch4Bottom", e[e.PillarBranch5 = 113] = "PillarBranch5", e[e.PillarBranch5Top = 114] = "PillarBranch5Top", e[e.PillarBranch5Middle = 115] = "PillarBranch5Middle", e[e.PillarBranch5Bottom = 116] = "PillarBranch5Bottom", e[e.ToWideDouble = 117] = "ToWideDouble", e[e.ToWideDiagonal = 118] = "ToWideDiagonal", e[e.StraightPillarBottom = 119] = "StraightPillarBottom", e[e.StraightPillarShort = 120] = "StraightPillarShort", e[e.TurnSharpPillarBottom = 121] = "TurnSharpPillarBottom", e[e.TurnSharpPillarShort = 122] = "TurnSharpPillarShort", e[e.IntersectionTPillarBottom = 123] = "IntersectionTPillarBottom", e[e.IntersectionTPillarShort = 124] = "IntersectionTPillarShort", e[e.IntersectionCrossPillarBottom = 125] = "IntersectionCrossPillarBottom", e[e.IntersectionCrossPillarShort = 126] = "IntersectionCrossPillarShort", e[e.PlaneBridgeCorner = 127] = "PlaneBridgeCorner", e[e.PlaneBridgeIntersectionT = 128] = "PlaneBridgeIntersectionT", e[e.PlaneBridgeIntersectionCross = 129] = "PlaneBridgeIntersectionCross", e[e.BlockBridge = 130] = "BlockBridge", e[e.BlockBridgeCorner = 131] = "BlockBridgeCorner", e[e.BlockBridgeIntersectionT = 132] = "BlockBridgeIntersectionT", e[e.BlockBridgeIntersectionCross = 133] = "BlockBridgeIntersectionCross", e[e.WallTrackCeilingCorner = 134] = "WallTrackCeilingCorner", e[e.WallTrackCeilingPlaneCorner = 135] = "WallTrackCeilingPlaneCorner", e[e.WallTrackFloorCorner = 136] = "WallTrackFloorCorner", e[e.WallTrackFloorPlaneCorner = 137] = "WallTrackFloorPlaneCorner", e[e.SlopeUpVerticalLeftWide = 138] = "SlopeUpVerticalLeftWide", e[e.SlopeUpVerticalRightWide = 139] = "SlopeUpVerticalRightWide", e[e.BlockSlopeVerticalCornerTop = 140] = "BlockSlopeVerticalCornerTop", e[e.BlockSlopeVerticalCornerBottom = 141] = "BlockSlopeVerticalCornerBottom", e[e.WallTrackSlopeToVertical = 142] = "WallTrackSlopeToVertical", e[e.PlaneSlopeToVertical = 143] = "PlaneSlopeToVertical", e[e.BlockSlopeToVertical = 144] = "BlockSlopeToVertical", e[e.PlaneSlopeUpLong = 145] = "PlaneSlopeUpLong", e[e.PlaneSlopeDownLong = 146] = "PlaneSlopeDownLong", e[e.SlopeUpLongLeftWide = 147] = "SlopeUpLongLeftWide", e[e.SlopeUpLongRightWide = 148] = "SlopeUpLongRightWide", e[e.SlopeDownLongLeftWide = 149] = "SlopeDownLongLeftWide", e[e.SlopeDownLongRightWide = 150] = "SlopeDownLongRightWide", e[e.BlockSlopeUpLong = 151] = "BlockSlopeUpLong", e[e.BlockSlopeDownLong = 152] = "BlockSlopeDownLong", e[e.BlockSlopeVerticalInnerCornerBottom = 153] = "BlockSlopeVerticalInnerCornerBottom", e[e.BlockSlopeVerticalInnerCornerTop = 154] = "BlockSlopeVerticalInnerCornerTop", e[e.BlockInnerCorner = 155] = "BlockInnerCorner" + }($y || ($y = {})); + const eA = $y; + var tA; + ! function(e) { + e[e.YPositive = 0] = "YPositive", e[e.YNegative = 1] = "YNegative", e[e.XPositive = 2] = "XPositive", e[e.XNegative = 3] = "XNegative", e[e.ZPositive = 4] = "ZPositive", e[e.ZNegative = 5] = "ZNegative" + }(tA || (tA = {})); + const nA = tA; + var iA, rA, aA, sA, oA, lA, cA, hA, dA = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + uA = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + iA = new WeakMap, rA = new WeakMap, aA = new WeakMap, sA = new WeakMap, oA = new WeakMap, lA = new WeakMap, cA = new WeakMap, hA = new WeakMap; + const pA = class { + constructor(e, t, n, i, r, a, s, o, l, c, h) { + iA.set(this, void 0), rA.set(this, void 0), aA.set(this, void 0), sA.set(this, void 0), oA.set(this, void 0), lA.set(this, void 0), cA.set(this, void 0), hA.set(this, void 0), dA(this, iA, a, "f"), dA(this, rA, t, "f"), dA(this, aA, n, "f"), dA(this, sA, i, "f"), dA(this, oA, r, "f"), dA(this, lA, o, "f"); + for (let e = -100; e < 100; ++e) 0 == e ? t.setPart(0, 0, 4 * e, eA.Start, 2, nA.YPositive, Jy.Default, null, 0) : t.setPart(0, 0, 4 * e, eA.Straight, 0, nA.YPositive, Jy.Default, null, null); + t.generateMeshes(), n.generateMountains(t.getBounds()); + const d = t.getStartTransform(); + if (null == d) throw new Error("Start transform is null"); + dA(this, hA, new Aw(null, d, null, null, r, a, n, t, o), "f"), uA(this, hA, "f").audioVolume = 0, uA(this, hA, "f").update(0), dA(this, cA, new Xy(uA(this, hA, "f"), e, r, a, l, s, c, h), "f"), r.setCamera(uA(this, cA, "f").camera) + } + dispose() { + uA(this, rA, "f").clear(), uA(this, aA, "f").clearMountains(), uA(this, cA, "f").dispose(), uA(this, hA, "f").dispose() + } + update(e) { + uA(this, aA, "f").update(uA(this, rA, "f")), uA(this, sA, "f").update(e, uA(this, oA, "f").camera, uA(this, rA, "f").sunDirection), uA(this, iA, "f").update(e, !0, uA(this, oA, "f"), uA(this, lA, "f")), uA(this, oA, "f").update(uA(this, hA, "f").getPosition(), uA(this, rA, "f").sunDirection) + } + }; + var fA = n(4344), + mA = {}; + mA.styleTagTransform = u(), mA.setAttributes = l(), mA.insert = s().bind(null, "head"), mA.domAPI = r(), mA.insertStyleElement = h(); + t()(fA.A, mA); + fA.A && fA.A.locals && fA.A.locals; + var gA, vA, wA, yA, AA, bA, xA, kA = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + EA = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + vA = new WeakMap, wA = new WeakMap, yA = new WeakMap, AA = new WeakMap, bA = new WeakMap, gA = new WeakSet, xA = function() { + if (null != EA(this, wA, "f")) { + const e = "FPS: " + EA(this, bA, "f").toString(); + EA(this, wA, "f").textContent != e && (EA(this, wA, "f").textContent = e) + } + }; + const SA = class { + constructor() { + gA.add(this), vA.set(this, void 0), wA.set(this, null), yA.set(this, 0), AA.set(this, 0), bA.set(this, 0); + const e = document.getElementById("ui"); + if (null == e) throw new Error("UI element not found"); + kA(this, vA, e, "f") + } + show() { + kA(this, wA, document.createElement("div"), "f"), EA(this, wA, "f").className = "debug", EA(this, vA, "f").appendChild(EA(this, wA, "f")), EA(this, gA, "m", xA).call(this) + } + hide() { + null != EA(this, wA, "f") && (EA(this, vA, "f").removeChild(EA(this, wA, "f")), kA(this, wA, null, "f")) + } + toggle() { + null != EA(this, wA, "f") ? this.hide() : this.show() + } + update(e) { + kA(this, yA, EA(this, yA, "f") + e, "f"), kA(this, AA, EA(this, AA, "f") + 1, "f"), EA(this, yA, "f") >= 1 && (kA(this, bA, EA(this, AA, "f"), "f"), kA(this, yA, EA(this, yA, "f") - Math.trunc(EA(this, yA, "f")), "f"), kA(this, AA, 0, "f"), EA(this, gA, "m", xA).call(this)) + } + }; + var MA = n(6057), + TA = {}; + TA.styleTagTransform = u(), TA.setAttributes = l(), TA.insert = s().bind(null, "head"), TA.domAPI = r(), TA.insertStyleElement = h(); + t()(MA.A, TA); + MA.A && MA.A.locals && MA.A.locals; + class _A extends Fw { + constructor(e, t) { + super(e, t), this.screenSpacePanning = !1, this.mouseButtons = { + LEFT: w, + MIDDLE: v, + RIGHT: g + }, this.touches = { + ONE: A, + TWO: x + } + } + } + class CA extends uo { + constructor(e) { + super(e) + } + load(e, t, n, i) { + const r = this, + a = new mo(this.manager); + a.setPath(this.path), a.setRequestHeader(this.requestHeader), a.setWithCredentials(this.withCredentials), a.load(e, (function(e) { + const n = r.parse(JSON.parse(e)); + t && t(n) + }), n, i) + } + parse(e) { + return new PA(e) + } + } + class PA { + constructor(e) { + this.isFont = !0, this.type = "Font", this.data = e + } + generateShapes(e, t = 100) { + const n = [], + i = function(e, t, n) { + const i = Array.from(e), + r = t / n.resolution, + a = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * r, + s = []; + let o = 0, + l = 0; + for (let e = 0; e < i.length; e++) { + const t = i[e]; + if ("\n" === t) o = 0, l -= a; + else { + const e = IA(t, r, o, l, n); + o += e.offsetX, s.push(e.path) + } + } + return s + }(e, t, this.data); + for (let e = 0, t = i.length; e < t; e++) n.push(...i[e].toShapes()); + return n + } + } + + function IA(e, t, n, i, r) { + const a = r.glyphs[e] || r.glyphs["?"]; + if (!a) return void console.error('THREE.Font: character "' + e + '" does not exists in font family ' + r.familyName + "."); + const s = new qo; + let o, l, c, h, d, u, p, f; + if (a.o) { + const e = a._cachedOutline || (a._cachedOutline = a.o.split(" ")); + for (let r = 0, a = e.length; r < a;) { + switch (e[r++]) { + case "m": + o = e[r++] * t + n, l = e[r++] * t + i, s.moveTo(o, l); + break; + case "l": + o = e[r++] * t + n, l = e[r++] * t + i, s.lineTo(o, l); + break; + case "q": + c = e[r++] * t + n, h = e[r++] * t + i, d = e[r++] * t + n, u = e[r++] * t + i, s.quadraticCurveTo(d, u, c, h); + break; + case "b": + c = e[r++] * t + n, h = e[r++] * t + i, d = e[r++] * t + n, u = e[r++] * t + i, p = e[r++] * t + n, f = e[r++] * t + i, s.bezierCurveTo(d, u, p, f, c, h) + } + } + } + return { + offsetX: a.ha * t, + path: s + } + } + class RA extends ua { + constructor(e, t) { + const n = new ji({ + color: t, + depthWrite: !1 + }); + super(e.geometry, n, e.count); + for (let t = 0; t < e.count; ++t) { + const n = new qn; + e.getMatrixAt(t, n), this.setMatrixAt(t, n) + } + this.meshMatrix = e.matrixWorld, this.frustumCulled = !1, this.matrixAutoUpdate = !1, this.renderOrder = -1 + } + update(e, t) { + var n = new qn, + i = e.normal.x * t.x + e.normal.y * t.y + e.normal.z * t.z + -e.constant * t.w, + r = n.elements; + r[0] = i - t.x * e.normal.x, r[4] = -t.x * e.normal.y, r[8] = -t.x * e.normal.z, r[12] = -t.x * -e.constant, r[1] = -t.y * e.normal.x, r[5] = i - t.y * e.normal.y, r[9] = -t.y * e.normal.z, r[13] = -t.y * -e.constant, r[2] = -t.z * e.normal.x, r[6] = -t.z * e.normal.y, r[10] = i - t.z * e.normal.z, r[14] = -t.z * -e.constant, r[3] = -t.w * e.normal.x, r[7] = -t.w * e.normal.y, r[11] = -t.w * e.normal.z, r[15] = i - t.w * -e.constant, this.matrix.multiplyMatrices(n, this.meshMatrix) + } + } + var LA = n(1312); + const DA = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + NA = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]; + + function BA(e) { + let t = 0, + n = ""; + for (; t < 8 * e.length;) { + const i = zA(e, t); + let r; + 30 & ~i ? (r = i, t += 6) : (r = 31 & i, t += 5), n += DA[r] + } + return n + } + + function UA(e) { + let t = 0; + const n = [], + i = e.length; + for (let r = 0; r < i; r++) { + const a = e.charCodeAt(r); + if (a >= NA.length) return null; + const s = NA[a]; + if (-1 == s) return null; + 30 & ~s ? (OA(n, t, 6, s, r == i - 1), t += 6) : (OA(n, t, 5, s, r == i - 1), t += 5) + } + return new Uint8Array(n) + } + + function zA(e, t) { + if (t >= 8 * e.length) throw new Error("Out of range"); + const n = Math.floor(t / 8), + i = e[n], + r = t - 8 * n; + if (r <= 2 || n >= e.length - 1) return (i & 63 << r) >>> r; + return (i & 63 << r) >>> r | (e[n + 1] & 63 >>> 8 - r) << 8 - r + } + + function OA(e, t, n, i, r) { + const a = Math.floor(t / 8); + for (; a >= e.length;) e.push(0); + const s = t - 8 * a; + if (e[a] |= i << s & 255, s > 8 - n && !r) { + const t = a + 1; + t >= e.length && e.push(0), e[t] |= i >> 8 - s + } + } + var FA, WA = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + VA = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class HA { + constructor(e = 28) { + if (FA.set(this, void 0), !(Number.isSafeInteger(e) && e >= 0 && e < 180)) throw new Error("Representation is not a safe integer or is out of range"); + WA(this, FA, e, "f") + } + clone() { + return new HA(VA(this, FA, "f")) + } + toDegrees() { + return 2 * VA(this, FA, "f") + } + static fromDegrees(e) { + const t = Math.round(e / 2 % 180); + return new HA(t) + } + getSunPosition() { + const e = 2 * VA(this, FA, "f") * (Math.PI / 180), + t = Math.cos(e), + n = Math.sin(e); + return new yn(t, .78, n).normalize() + } + get representation() { + return VA(this, FA, "f") + } + } + FA = new WeakMap; + const GA = HA; + var jA; + ! function(e) { + e[e.Summer = 0] = "Summer", e[e.Winter = 1] = "Winter", e[e.Desert = 2] = "Desert" + }(jA || (jA = {})); + const QA = jA; + var YA; + ! function(e) { + e[e.Special = 0] = "Special", e[e.Road = 1] = "Road", e[e.RoadTurns = 2] = "RoadTurns", e[e.RoadWide = 3] = "RoadWide", e[e.Plane = 4] = "Plane", e[e.Block = 5] = "Block", e[e.WallTrack = 6] = "WallTrack", e[e.Pillar = 7] = "Pillar", e[e.Sign = 8] = "Sign" + }(YA || (YA = {})); + const KA = YA; + var qA; + ! function(e) { + e[e.Checkpoint = 0] = "Checkpoint", e[e.Finish = 1] = "Finish" + }(qA || (qA = {})); + const XA = qA; + var ZA, JA = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + $A = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class eb { + constructor(e) { + ZA.set(this, void 0); + const t = []; + for (const [n, i, r] of e) t.push([n, i, r]); + JA(this, ZA, t, "f") + } + rotated(e, t) { + const n = t == nA.YNegative || t == nA.XNegative || t == nA.ZNegative; + return new eb($A(this, ZA, "f").map((([i, r, a]) => { + if (n) switch (e) { + case 0: + break; + case 1: + [i, a] = [-a - 1, i]; + break; + case 2: + [i, a] = [-i - 1, -a - 1]; + break; + case 3: + [i, a] = [a, -i - 1]; + break; + default: + throw new Error("Invalid rotation") + } else switch (e) { + case 0: + break; + case 1: + [i, a] = [a, -i - 1]; + break; + case 2: + [i, a] = [-i - 1, -a - 1]; + break; + case 3: + [i, a] = [-a - 1, i]; + break; + default: + throw new Error("Invalid rotation") + } + return t == nA.YPositive || (t == nA.YNegative ? [i, r] = [-i - 1, -r - 1] : t == nA.XPositive ? [i, r] = [r, -i - 1] : t == nA.XNegative ? [i, r] = [-r - 1, i] : t == nA.ZPositive ? [r, a] = [-a - 1, r] : [r, a] = [a, -r - 1]), [i, r, a] + }))) + } + forEach(e) { + for (let t = 0; t < $A(this, ZA, "f").length; t++) { + const [n, i, r] = $A(this, ZA, "f")[t]; + e(n, i, r, t) + } + } + get length() { + return $A(this, ZA, "f").length + } + } + ZA = new WeakMap; + const tb = eb, + nb = [{ + id: Jy.Summer, + colors: {} + }, { + id: Jy.Winter, + colors: { + Road: "#5077b2", + RoadBarrier: "#898989", + RoadEdgeWhite: "#ffffff", + RoadEdgeRed: "#1f3d6b", + BlockSurface: "#878787", + Pillar: "#2b4d7f", + PillarEdge: "#071428", + WallTrack: "#5077b2", + WallTrackBottom: "#878787", + WallTrackSides: "#ffffff", + PlaneWall: "#1f3d6b", + PlaneWallDetail: "#878787", + SignYellow: "#1b2a89", + SignRed: "#841901", + SignBlack: "#5077b2" + } + }, { + id: Jy.Desert, + colors: { + Road: "#997240", + RoadBarrier: "#211001", + RoadEdgeRed: "#5b2424", + RoadEdgeWhite: "#510808", + BlockSurface: "#b78f5b", + Pillar: "#99713d", + PillarEdge: "#1c1105", + WallTrack: "#260b0b", + WallTrackBottom: "#160606", + WallTrackSides: "#75562e", + PlaneWall: "#633030", + PlaneWallDetail: "#aa8a53", + SignYellow: "#997240", + SignRed: "#d80202", + SignBlack: "#601d1d" + } + }], + ib = nb.concat([{ + id: Jy.Custom0, + colors: { + BlockSurface: "#131313" + } + }, { + id: Jy.Custom1, + colors: { + BlockSurface: "#501b1b" + } + }, { + id: Jy.Custom2, + colors: { + BlockSurface: "#7f4d2b" + } + }, { + id: Jy.Custom3, + colors: { + BlockSurface: "#93862d" + } + }, { + id: Jy.Custom4, + colors: { + BlockSurface: "#2a5e30" + } + }, { + id: Jy.Custom5, + colors: { + BlockSurface: "#236363" + } + }, { + id: Jy.Custom6, + colors: { + BlockSurface: "#20244b" + } + }, { + id: Jy.Custom7, + colors: { + BlockSurface: "#592759" + } + }, { + id: Jy.Custom8, + colors: { + BlockSurface: "#302318" + } + }]); + class rb { + constructor(e, t, n, i, r, a, s = null, o = null) { + const l = []; + for (const [e, t] of a) + for (let n = e[0]; n <= t[0]; n++) + for (let i = e[1]; i <= t[1]; i++) + for (let r = e[2]; r <= t[2]; r++) { + if (null != l.find((([e, t, a]) => e == n && t == i && a == r))) throw new Error("Duplicate tile in track part"); + l.push([n, i, r]) + } + this.checksum = e, this.category = t, this.id = n, this.models = i, this.colors = r, this.tiles = new tb(l), this.detector = s, this.startOffset = o, Object.freeze(this) + } + } + const ab = [new rb("6d94d798abd14dc3bce4e99c180309d993ad43adb5f2c90eef8e350eedafe7cf", KA.Special, eA.Start, [ + ["Road", "Start"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], null, new yn(0, .35, 1.35)), new rb("f29e34b2e05e0a4751109ae564b03fe8878a79cc6b26288f1117ed296d09c5bb", KA.Special, eA.StartWide, [ + ["RoadWide", "StartWide"] + ], nb, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], null, new yn(-10, .35, 1.35)), new rb("3c304054f415fbede4f73a43517db04302f38b16fa2cd4e587082b37b75e20e5", KA.Special, eA.PlaneStart, [ + ["Planes", "PlaneStart"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], null, new yn(0, .35, 1.35)), new rb("f08710416bdaa3d91d0d43f014e45d421fdb4587a334993bad0056f3dbbcb6bb", KA.Special, eA.PlaneStartWide, [ + ["Planes", "PlaneStartWide"] + ], nb, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], null, new yn(-10, .35, 1.35)), new rb("223fc87c72bb64b58677062ffa08ab7eafd78071bced7c53233606763cd5316b", KA.Special, eA.Checkpoint, [ + ["Road", "Checkpoint"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], { + type: XA.Checkpoint, + center: [0, 2.2, 0], + size: [10.5, 3.8, 1] + }), new rb("82d9a9879cee92c04c8d4ba2e16fc31bb1917a31f5802a3bb5177ca9a5cfee01", KA.Special, eA.CheckpointWide, [ + ["RoadWide", "CheckpointWide"] + ], nb, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], { + type: XA.Checkpoint, + center: [10, 2.2, 0], + size: [30.6, 3.8, 1] + }), new rb("fe8946d7f09724b5e11f493eb5c2a5b5e3d502b15beaad003f8134ac63558948", KA.Special, eA.PlaneCheckpoint, [ + ["Planes", "PlaneCheckpoint"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], { + type: XA.Checkpoint, + center: [0, 2.2, 0], + size: [18.25, 3.8, 1] + }), new rb("d486d9b851db35dd44c15f9e0bb3bf582118daf7be514598a19307f61cf46678", KA.Special, eA.PlaneCheckpointWide, [ + ["Planes", "PlaneCheckpointWide"] + ], nb, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], { + type: XA.Checkpoint, + center: [10, 2.2, 0], + size: [38.25, 3.8, 1] + }), new rb("c01200d573a3594a6a4cb73ebb600964d653e4a89267d3297f3969220742aa79", KA.Special, eA.Finish, [ + ["Road", "Finish"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], { + type: XA.Finish, + center: [0, 2.2, 0], + size: [10.5, 3.8, 2] + }), new rb("a9cefdff816e94a643210c58582c2809de0e3e0e0478b8d5baabd7fe81f13e73", KA.Special, eA.FinishWide, [ + ["RoadWide", "FinishWide"] + ], nb, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], { + type: XA.Finish, + center: [10, 2.2, 0], + size: [30.6, 3.8, 2] + }), new rb("75e5f09fe8a18ecafaf1fb80929173ef0a7dc0b785596bbe0ccd85a934d79578", KA.Special, eA.PlaneFinish, [ + ["Planes", "PlaneFinish"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], { + type: XA.Finish, + center: [0, 2.2, 0], + size: [18.25, 3.8, 2] + }), new rb("5801b3268c75809728c63450d06000c5f6fcfd5d72691902f99d7d19d25e1d78", KA.Special, eA.PlaneFinishWide, [ + ["Planes", "PlaneFinishWide"] + ], nb, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], { + type: XA.Finish, + center: [10, 2.2, 0], + size: [38.25, 3.8, 2] + }), new rb("3421096c1986d008da88b5fac64cd4c475603138c9bf8a98ab6d581dda6befa7", KA.Road, eA.Straight, [ + ["Road", "Straight"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("bdc3bcdafec9bc26835dc76159f7223da7da5babb3a5770129fa11046c748b69", KA.Road, eA.StraightPillarBottom, [ + ["Road", "Straight"], + ["Pillar", "SurfacePillarBottom"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("2758e984d87b3170f6618c9c689554ef169fd5f80ea7f0df292ffd69792d414e", KA.Road, eA.StraightPillarShort, [ + ["Road", "Straight"], + ["Pillar", "SurfacePillarShort"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("fb5a81784022cfc2d3d0007a032976c8dfd066e72a3bc92f671c98c5cca36aaa", KA.Road, eA.TurnSharp, [ + ["Road", "TurnSharp"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("3da2e9a93da06b1376c33486f30a5f02d8c2f125f5b7d8b41166049ecd95f269", KA.Road, eA.TurnSharpPillarBottom, [ + ["Road", "TurnSharp"], + ["Pillar", "SurfacePillarBottom"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("c642122276547382e37dcb857b130088f4dc0d208dc7fdb6055b2a93080a3ffe", KA.Road, eA.TurnSharpPillarShort, [ + ["Road", "TurnSharp"], + ["Pillar", "SurfacePillarShort"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("110efb0facc096e1c875e545b075b0effaa1b78d50b97f906aec44796501544b", KA.RoadTurns, eA.TurnShort, [ + ["Road", "TurnShort"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 0, -1], + [2, 0, -1] + ], + [ + [-1, 0, -2], + [3, 0, -2] + ], + [ + [-1, 0, -3], + [5, 0, -3] + ], + [ + [0, 0, -4], + [5, 0, -4] + ], + [ + [1, 0, -5], + [5, 0, -5] + ], + [ + [3, 0, -6], + [5, 0, -6] + ] + ]), new rb("20a164840b0e83f3eac96ba9e3650a30e3b3dec4bb635946e3e9e9a1b74820d2", KA.RoadTurns, eA.TurnLong, [ + ["Road", "TurnLong"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, -2], + [2, 0, -2] + ], + [ + [-1, 0, -3], + [2, 0, -3] + ], + [ + [-1, 0, -4], + [3, 0, -4] + ], + [ + [0, 0, -5], + [4, 0, -5] + ], + [ + [1, 0, -6], + [6, 0, -6] + ], + [ + [2, 0, -7], + [9, 0, -7] + ], + [ + [3, 0, -8], + [9, 0, -8] + ], + [ + [4, 0, -9], + [9, 0, -9] + ], + [ + [7, 0, -10], + [9, 0, -10] + ] + ]), new rb("c36dddde35a740c6f01227522bf35e1a450cddbfdd8bde1617873bef0d47c95c", KA.RoadTurns, eA.TurnLong2, [ + ["Road", "TurnLong2"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-1, 0, -4], + [2, 0, -3] + ], + [ + [-1, 0, -5], + [3, 0, -5] + ], + [ + [0, 0, -6], + [4, 0, -6] + ], + [ + [0, 0, -7], + [5, 0, -7] + ], + [ + [1, 0, -8], + [6, 0, -8] + ], + [ + [2, 0, -9], + [7, 0, -9] + ], + [ + [3, 0, -10], + [9, 0, -10] + ], + [ + [4, 0, -11], + [13, 0, -11] + ], + [ + [5, 0, -12], + [13, 0, -12] + ], + [ + [7, 0, -13], + [13, 0, -13] + ], + [ + [10, 0, -14], + [13, 0, -14] + ] + ]), new rb("0ed20c04a941708c23fe6ced4af3f357c0e435f09278e06f3de2806786d44059", KA.RoadTurns, eA.TurnLong3, [ + ["Road", "TurnLong3"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-1, 0, -4], + [2, 0, -3] + ], + [ + [-1, 0, -5], + [2, 0, -5] + ], + [ + [0, 0, -6], + [3, 0, -6] + ], + [ + [0, 0, -7], + [3, 0, -7] + ], + [ + [0, 0, -8], + [4, 0, -8] + ], + [ + [1, 0, -9], + [5, 0, -9] + ], + [ + [2, 0, -10], + [6, 0, -10] + ], + [ + [2, 0, -11], + [7, 0, -11] + ], + [ + [3, 0, -12], + [8, 0, -12] + ], + [ + [4, 0, -13], + [10, 0, -13] + ], + [ + [5, 0, -14], + [13, 0, -14] + ], + [ + [7, 0, -15], + [17, 0, -15] + ], + [ + [8, 0, -16], + [17, 0, -16] + ], + [ + [11, 0, -17], + [17, 0, -17] + ], + [ + [14, 0, -18], + [17, 0, -18] + ] + ]), new rb("034ef287319877f2fcc32fbd6f32415539a4c287dfcd620360386a781adad22a", KA.RoadTurns, eA.TurnSLeft, [ + ["Road", "TurnS", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-3, 0, -3], + [0, 0, -2] + ], + [ + [-4, 0, -4], + [0, 0, -4] + ], + [ + [-5, 0, -5], + [-1, 0, -5] + ], + [ + [-5, 0, -7], + [-2, 0, -6] + ], + [ + [-6, 0, -10], + [-3, 0, -8] + ] + ]), new rb("0d49e9feb603d0899927c7e5184f4f4fdd4363d2e1fd296f0b7b3cf4dbbf0e8d", KA.RoadTurns, eA.TurnSRight, [ + ["Road", "TurnS"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, -3], + [2, 0, -2] + ], + [ + [-1, 0, -4], + [3, 0, -4] + ], + [ + [0, 0, -5], + [4, 0, -5] + ], + [ + [1, 0, -7], + [4, 0, -6] + ], + [ + [2, 0, -10], + [5, 0, -8] + ] + ]), new rb("26bca19e63867bc0b755ff6fcca65de296c9d1f109f87540103565eb88a0e03d", KA.RoadTurns, eA.TurnShortLeftWide, [ + ["RoadWide", "TurnShortLeftWide"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, -2], + [1, 0, -2] + ], + [ + [-1, 0, -4], + [5, 0, -3] + ], + [ + [0, 0, -5], + [5, 0, -5] + ], + [ + [1, 0, -6], + [5, 0, -6] + ], + [ + [2, 0, -7], + [9, 0, -7] + ], + [ + [3, 0, -8], + [9, 0, -8] + ], + [ + [4, 0, -9], + [9, 0, -9] + ], + [ + [7, 0, -10], + [9, 0, -10] + ] + ]), new rb("e3845854f85dafd8cec193bcbecdac6cb79f625066de29524d5c10c5580611c5", KA.RoadTurns, eA.TurnShortRightWide, [ + ["RoadWide", "TurnShortRightWide"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 0, -1], + [2, 0, -1] + ], + [ + [-2, 0, -2], + [3, 0, -2] + ], + [ + [2, 0, -6], + [5, 0, -3] + ] + ]), new rb("dc6088960a65a55c74353a1e7c8a1ca8ec99e683f6273bf666d6909b288bb84b", KA.RoadTurns, eA.TurnLongLeftWide, [ + ["RoadWide", "TurnLongLeftWide"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-1, 0, -5], + [1, 0, -3] + ], + [ + [0, 0, -6], + [1, 0, -6] + ], + [ + [0, 0, -7], + [5, 0, -7] + ], + [ + [1, 0, -8], + [5, 0, -8] + ], + [ + [2, 0, -9], + [5, 0, -9] + ], + [ + [3, 0, -10], + [5, 0, -10] + ], + [ + [4, 0, -11], + [13, 0, -11] + ], + [ + [5, 0, -12], + [13, 0, -12] + ], + [ + [7, 0, -13], + [13, 0, -13] + ], + [ + [10, 0, -14], + [13, 0, -14] + ] + ]), new rb("0bbb8d6c1e4a325e10643cf45546da725c1ea18e92a3a95f753339629a06ef6c", KA.RoadTurns, eA.TurnLongRightWide, [ + ["RoadWide", "TurnLongRightWide"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 0, -3], + [2, 0, -2] + ], + [ + [-2, 0, -4], + [3, 0, -4] + ], + [ + [-2, 0, -5], + [4, 0, -5] + ], + [ + [-2, 0, -6], + [6, 0, -6] + ], + [ + [2, 0, -10], + [9, 0, -7] + ] + ]), new rb("7d8d1eed719515ba7e48b5ef4a53b6b4bb2bef42496b6b40d2551230435ecb66", KA.Road, eA.SlopeUp, [ + ["Road", "SlopeUp"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -2] + ] + ]), new rb("d6d54dbf283f7209032541fc6b924dc879d914f253e391cf8b34dde8354661be", KA.Road, eA.SlopeUpLong, [ + ["Road", "SlopeUpLong"] + ], nb, [ + [ + [-2, 0, -4], + [1, 0, 1] + ], + [ + [-2, 1, -5], + [1, 1, -4] + ], + [ + [-2, 1, -6], + [1, 2, -6] + ] + ]), new rb("435e8cf33d28e52f75890cba1cb6529991148afd701f9b40e9ab876c11b2c448", KA.Road, eA.SlopeDown, [ + ["Road", "SlopeDown"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, 0], + [1, 1, 1] + ] + ]), new rb("01990158f65e5d499030d8c6d0ce80d34c136189ae1a9430d4260ea7a85e91a9", KA.Road, eA.SlopeDownLong, [ + ["Road", "SlopeDownLong"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -1], + [1, 1, 5] + ], + [ + [-2, 2, 3], + [1, 2, 5] + ] + ]), new rb("4afecc8b9bd7a3b074112008831fef6b11f9a55ab8c1e570e3e73c1e92b43c6d", KA.Road, eA.Slope, [ + ["Road", "Slope"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ] + ]), new rb("27f9b25126b1006514941bd148c8f19dc2d82022b0c1aa2358f36cb711d4b59c", KA.Road, eA.SlopePillar, [ + ["Road", "Slope"], + ["Pillar", "PillarTopSlope"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ], + [ + [-1, 0, -1], + [0, 0, -1] + ] + ]), new rb("eb236f0ac4bd895c170db53cb518c8df5167a9db5af4bb4f33f73c02deec5265", KA.Road, eA.SlopePillarShort, [ + ["Road", "Slope"], + ["Pillar", "PillarShortSlope"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ], + [ + [-1, 0, -1], + [0, 0, -1] + ] + ]), new rb("99cb9068cb3f97e7cbfdbb3f1edc1085ea37514f3d5dd8936bc32089cc066a5c", KA.Road, eA.SlopeUpVertical, [ + ["Road", "SlopeUpVertical"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new rb("63628b23e104a3eb3c2ba8189cd408a10fbb6ebcd6fa4359d981e3c3804c13d8", KA.Road, eA.IntersectionT, [ + ["Road", "IntersectionT"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("400dc4643653001d283bb13f740593fc2300c547bb4d2a962054ba6aabf3721c", KA.Road, eA.IntersectionTPillarBottom, [ + ["Road", "IntersectionT"], + ["Pillar", "SurfacePillarBottom"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("60355388650d35fcbddaaac29e0d03bc2ae46db1a05cd23ddd3f2722ec2d409e", KA.Road, eA.IntersectionTPillarShort, [ + ["Road", "IntersectionT"], + ["Pillar", "SurfacePillarShort"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("74197b3731c2befd03498bf5172859f0b3652f1972c19e43a99bb938769573df", KA.Road, eA.IntersectionCross, [ + ["Road", "IntersectionCross"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("464e69b5c4f2667c246ade9ed33fd3e50b49438ed0ab787a086dfe74c217ff6c", KA.Road, eA.IntersectionCrossPillarBottom, [ + ["Road", "IntersectionCross"], + ["Pillar", "SurfacePillarBottom"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("90004caf354627289265314966f11b5656e6879ca7de10507e6c50cd95254b75", KA.Road, eA.IntersectionCrossPillarShort, [ + ["Road", "IntersectionCross"], + ["Pillar", "SurfacePillarShort"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("2af8aa6050028dd6ee69b7150e83a6d8819e1848a7b1c782848d3f6448c5091a", KA.RoadWide, eA.ToWideMiddle, [ + ["RoadWide", "ToWideMiddle"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("26341cfe6bec34f46b10ffcd9a7706a8156b9ac41ed2cdfd166f9f8d3e9bc8f3", KA.RoadWide, eA.ToWideLeft, [ + ["RoadWide", "ToWideSide", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("3f82ebd6c72110b532a20673f8b54c7b25ae5988a51d3793bf383fea8ffcffc3", KA.RoadWide, eA.ToWideRight, [ + ["RoadWide", "ToWideSide"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("f5cecce9870f41f8cba7a9fbe631c315370a7a82824d04977ec857dbb1dfed29", KA.RoadWide, eA.ToWideDouble, [ + ["RoadWide", "ToWideDouble"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("99dc726611397f81b47459d32c7bfb8232322d1ca976ba9a3e71cc15451d8cfb", KA.RoadWide, eA.ToWideDiagonal, [ + ["RoadWide", "ToWideDiagonal"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("47d7e3fb334681911e122babef127881a36a763fb22176854114495802d5ce84", KA.RoadWide, eA.StraightWide, [ + ["RoadWide", "StraightWide"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("521adc95ed5a4809eeff7eec872c3d6449e4d6a7e4941d672f1e06a50a6615de", KA.RoadWide, eA.InnerCornerWide, [ + ["RoadWide", "InnerCornerWide"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("d82274b362794e3c1772510002d5015dde345f1e72dd675c8bac41cf2331398b", KA.RoadWide, eA.OuterCornerWide, [ + ["RoadWide", "OuterCornerWide"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("9b1df4dd4687404adb5789f3b90af39ea6fa65ef741a07b116dc436dc14a2aa1", KA.RoadWide, eA.SlopeUpLeftWide, [ + ["RoadWide", "SlopeUpWide", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -2] + ] + ]), new rb("651d4e988913b84359ad10e0c4745965b6a388eaa8c9bfbba4b6a50ae6d4f592", KA.RoadWide, eA.SlopeUpRightWide, [ + ["RoadWide", "SlopeUpWide"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -2] + ] + ]), new rb("848d9930c58e66152090d7853af87c8bb7971e1771d3c337ac1a50aaa4975a78", KA.RoadWide, eA.SlopeUpLongLeftWide, [ + ["RoadWide", "SlopeUpLongWide", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, -4], + [1, 0, 1] + ], + [ + [-2, 1, -5], + [1, 1, -4] + ], + [ + [-2, 1, -6], + [1, 2, -6] + ] + ]), new rb("e4d54c6c3b6011a1acfb6766b6b3e7ea0de6f9c6569a5ec88c47968ad4105b2a", KA.RoadWide, eA.SlopeUpLongRightWide, [ + ["RoadWide", "SlopeUpLongWide"] + ], nb, [ + [ + [-2, 0, -4], + [1, 0, 1] + ], + [ + [-2, 1, -5], + [1, 1, -4] + ], + [ + [-2, 1, -6], + [1, 2, -6] + ] + ]), new rb("106ad1d4c5aded30cc3ef4cd1bdc40babab84464ce7dbce3b81cc20d55fd615f", KA.RoadWide, eA.SlopeDownLeftWide, [ + ["RoadWide", "SlopeDownWide", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, 0], + [1, 1, 1] + ] + ]), new rb("23a693633b8453c7a531de9723e6ca14d0676b1d7a4df7f78278914467b90a27", KA.RoadWide, eA.SlopeDownRightWide, [ + ["RoadWide", "SlopeDownWide"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, 0], + [1, 1, 1] + ] + ]), new rb("0f2e33a8b68667e30e80ceaefdb890a77643799d63c7f20672ca3185bbc04270", KA.RoadWide, eA.SlopeDownLongLeftWide, [ + ["RoadWide", "SlopeDownLongWide", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -1], + [1, 1, 5] + ], + [ + [-2, 2, 3], + [1, 2, 5] + ] + ]), new rb("164903518c7efa4890a792017ea2b8125a2c3dae76bba4c6f1f56fb0f7e40ebc", KA.RoadWide, eA.SlopeDownLongRightWide, [ + ["RoadWide", "SlopeDownLongWide"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -1], + [1, 1, 5] + ], + [ + [-2, 2, 3], + [1, 2, 5] + ] + ]), new rb("c20560fd35288c5cc74af61834b9a56efaeacdde55eb793d400b7c5b97904993", KA.RoadWide, eA.SlopeLeftWide, [ + ["RoadWide", "SlopeWide", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ] + ]), new rb("b6a26eb3cefee53d4deef24544e5b5c1ecd25e8e8bd7c3070c7947ada55c57c2", KA.RoadWide, eA.SlopeRightWide, [ + ["RoadWide", "SlopeWide"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ] + ]), new rb("b598ff14bda99600434b24a619132fec4bffcc535483b9b57b0c8c09c1be1f1b", KA.RoadWide, eA.SlopeUpVerticalLeftWide, [ + ["RoadWide", "SlopeUpVerticalWide"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new rb("4e0275d3a01eaca6ec5118b8b816ed292cb7172710cf9b7801068424ab684b22", KA.RoadWide, eA.SlopeUpVerticalRightWide, [ + ["RoadWide", "SlopeUpVerticalWide", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new rb("896b47675cc2ff58494979168f6fd36c27c43da29aed6a52fdf80f054630166a", KA.Plane, eA.Plane, [ + ["Planes", "Plane"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("dc9afb98a8bb998d3b76c3563385e58c1749e56ff43fbc7577b1f57ba8360702", KA.Plane, eA.PlanePillarBottom, [ + ["Planes", "Plane"], + ["Pillar", "SurfacePillarBottom"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("f59ad95edd26814236ab30b73f6f4f68003885ef150201a4ace14b832abcf438", KA.Plane, eA.PlanePillarShort, [ + ["Planes", "Plane"], + ["Pillar", "SurfacePillarShort"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("48247a66b232461083fa2aa36644e7e8779f5b426d474efd375ee7d21d009c9a", KA.Plane, eA.HalfPlane, [ + ["Planes", "HalfPlane"] + ], nb, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [-2, 0, 0], + [0, 0, 0] + ], + [ + [-2, 0, -1], + [-1, 0, -1] + ], + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new rb("eac8530d1a025291674bf34b206f75700dc8626012d8d33ed398f7aed746dac8", KA.Plane, eA.QuarterPlane, [ + ["Planes", "QuarterPlane"] + ], nb, [ + [ + [-2, 0, 1], + [-2, 0, 1] + ], + [ + [-2, 0, -1], + [-1, 0, 0] + ], + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new rb("1da4dcad366aa90a5977e1b20c5d79297106ed3b4f664be04b6b3f6370c105b4", KA.Plane, eA.PlaneSlopeUp, [ + ["Planes", "PlaneSlopeUp"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -2] + ] + ]), new rb("3e203219ec0ea114da510b37a4c392b90417af796e2b089da6d996e628c0a323", KA.Plane, eA.PlaneSlopeUpLong, [ + ["Planes", "PlaneSlopeUpLong"] + ], nb, [ + [ + [-2, 0, -4], + [1, 0, 1] + ], + [ + [-2, 1, -5], + [1, 1, -4] + ], + [ + [-2, 1, -6], + [1, 2, -6] + ] + ]), new rb("053dbf6c03eea5102b67168ccb479d8364233b36c4210aff093928bbb83d859d", KA.Plane, eA.PlaneSlopeDown, [ + ["Planes", "PlaneSlopeDown"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, 0], + [1, 1, 1] + ] + ]), new rb("d68121a3cb0ee19cab45adb136e0df6145f43ca9ecbde8a417c02a6d4a75a757", KA.Plane, eA.PlaneSlopeDownLong, [ + ["Planes", "PlaneSlopeDownLong"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -1], + [1, 1, 5] + ], + [ + [-2, 2, 3], + [1, 2, 5] + ] + ]), new rb("67ec222e8fe770a8d728bb76ff571377c261d2f232134d4cb328c9ab772cf3ca", KA.Plane, eA.PlaneSlope, [ + ["Planes", "PlaneSlope"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ] + ]), new rb("a52c09d87d37088b68420db07626f274c74f792cb223764624d887a5ed145a2e", KA.Plane, eA.PlaneSlopePillar, [ + ["Planes", "PlaneSlope"], + ["Pillar", "PillarTopSlope"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ], + [ + [-1, 0, -1], + [0, 0, -1] + ] + ]), new rb("57df805433e706ec946d767d7ff0881f163c2e36bb1db00b0e3259954a787dec", KA.Plane, eA.PlaneSlopePillarShort, [ + ["Planes", "PlaneSlope"], + ["Pillar", "PillarShortSlope"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ], + [ + [-1, 0, -1], + [0, 0, -1] + ] + ]), new rb("ba0d6ec33647740bf4c60e542d1758095afa3ef451bdaec76c783dd32116e4cb", KA.Plane, eA.PlaneSlopeVerticalBottom, [ + ["Planes", "PlaneSlopeVertical"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new rb("78a372de15f3151f901cf7fa7a3983ee6513cf19fa8568f10946e195c5a62515", KA.Plane, eA.PlaneSlopeToVertical, [ + ["Planes", "PlaneSlopeToVertical"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 3, -2] + ] + ]), new rb("5f6d1ece085d450643f1399af53673dcc6bbbf413094d8dd5ee6816d80e1c8ae", KA.Plane, eA.PlaneBridge, [ + ["Planes", "PlaneBridge"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 1] + ] + ]), new rb("32b91fc4cdf95f5b7a490d81058522bae14741601dd44c73cc110121aa1dd6e6", KA.Plane, eA.PlaneBridgeCorner, [ + ["Planes", "PlaneBridgeCorner"] + ], nb, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new rb("2db870b1821fb655437bd0527569d5a6843718fa0775682701437432265a1a88", KA.Plane, eA.PlaneBridgeIntersectionT, [ + ["Planes", "PlaneBridgeIntersectionT"] + ], nb, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new rb("33aa0e7524b74dcdae4aed89856c09d25248c4cab8f70dcc31b347f0a00fcb52", KA.Plane, eA.PlaneBridgeIntersectionCross, [ + ["Planes", "PlaneBridgeIntersectionCross"] + ], nb, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, -2], + [0, 0, -2] + ] + ]), new rb("bd7cc4ab180fc0a6936fef828ae3a91566b3dd621b888fbcc57c9ac11dcb713b", KA.Plane, eA.PlaneWall, [ + ["Planes", "PlaneWall"] + ], nb, [ + [ + [-2, 0, 1], + [1, 0, 1] + ] + ]), new rb("d92568164028bb2e65799abd9dc6ba66cfe8a28515c09fbe5ac175f5966af66a", KA.Plane, eA.PlaneWallCorner, [ + ["Planes", "PlaneWallCorner"] + ], nb, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [1, 0, -2], + [1, 0, 0] + ] + ]), new rb("792ab5a6f0e2bf8e556575ef12731ec30755855d4394f98eb4ca7ec8b713933c", KA.Plane, eA.PlaneWallInnerCorner, [ + ["Planes", "PlaneWallInnerCorner"] + ], nb, [ + [ + [1, 0, 1], + [1, 0, 1] + ] + ]), new rb("de0d588c4b2fe6b32d72a7e0e2984285955f805ccb86d3c269f7155401cd6b20", KA.Block, eA.Block, [ + ["Blocks", "Block"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("1ce6b585c0e99d71877fefe015ff16336ae62eb0caebeca62dd09d836092d7b6", KA.Block, eA.HalfBlock, [ + ["Blocks", "HalfBlock"] + ], ib, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [-2, 0, 0], + [0, 0, 0] + ], + [ + [-2, 0, -1], + [-1, 0, -1] + ], + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new rb("0d5f0609c3c98f687d55d3a73313225c1642f6285ddaca3ed536db742c85958d", KA.Block, eA.QuarterBlock, [ + ["Blocks", "QuarterBlock"] + ], ib, [ + [ + [-2, 0, 1], + [-2, 0, 1] + ], + [ + [-2, 0, -1], + [-1, 0, 0] + ], + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new rb("18fc1c569c6fc04f95f10174143d19e7a9ea4e387302363f4ae60883c1acd3f0", KA.Block, eA.BlockSlopedDown, [ + ["Blocks", "BlockSlopedDown"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, -1] + ], + [ + [-2, 1, -2], + [1, 1, 1] + ] + ]), new rb("22dd5b2804c88994a4d283cb822f47de3c72f82376e4c9332d39feae85206c0f", KA.Block, eA.BlockSlopedDownInnerCorner, [ + ["Blocks", "BlockSlopedDownInnerCorner"] + ], ib, [ + [ + [-2, 0, -2], + [-1, 0, 1] + ], + [ + [0, 0, -2], + [1, 0, -1] + ], + [ + [-2, 1, -2], + [1, 1, 1] + ] + ]), new rb("81a71b4cc6ef8520f20fd738457abc31b04258c97f9862f70190fd2a0ba91382", KA.Block, eA.BlockSlopedDownOuterCorner, [ + ["Blocks", "BlockSlopedDownOuterCorner"] + ], ib, [ + [ + [-2, 0, -2], + [-1, 0, -1] + ], + [ + [-2, 1, -2], + [1, 1, 1] + ] + ]), new rb("f4e19d3bc49994a85fecd187b76c21d258e7f30f0506d90bc6f173336e11627d", KA.Block, eA.BlockSlopedUp, [ + ["Blocks", "BlockSlopedUp"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -1] + ] + ]), new rb("fd9309468e97131bbbd1404fac34a7137cb176327789b955c1aea30267e1cded", KA.Block, eA.BlockSlopedUpInnerCorner, [ + ["Blocks", "BlockSlopedUpInnerCorner"] + ], ib, [ + [ + [-2, 1, -2], + [-1, 1, 1] + ], + [ + [0, 1, -2], + [1, 1, -1] + ], + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("1321fb07ece1b80b99dc4671b52673ac028fbf43322e9e652ad633ff6afac21b", KA.Block, eA.BlockSlopedUpOuterCorner, [ + ["Blocks", "BlockSlopedUpOuterCorner"] + ], ib, [ + [ + [-2, 1, -2], + [-1, 1, -1] + ], + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("b97c17388fc38139f2f5a98a36d94831095f79db709dd97748ad2904bc54d689", KA.Block, eA.BlockSlopeDown, [ + ["Blocks", "BlockSlopeDown"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("50276826bbfb9fcb11a8519b8dae8a2b1cf82817d5431418d9a376664261be82", KA.Block, eA.BlockSlopeUp, [ + ["Blocks", "BlockSlopeUp"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("63fd3032796397f8e25669c1c1d3fc97b8ec0e5fc88bfcb5c00a2a2c2b517888", KA.Block, eA.BlockSlopeDownLong, [ + ["Blocks", "BlockSlopeDownLong"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, 5] + ], + [ + [-2, 1, 0], + [1, 1, 5] + ] + ]), new rb("2d29131222a8d891b4350e6a2f335b114e001cf22e4e2f170dc9b86c4b2fd325", KA.Block, eA.BlockSlopeUpLong, [ + ["Blocks", "BlockSlopeUpLong"] + ], ib, [ + [ + [-2, 0, -6], + [1, 0, 1] + ], + [ + [-2, 1, -6], + [1, 1, -4] + ] + ]), new rb("0bbcd96c91b69e6e8005bfae5b64455b0d6510cb1595f3fca7f77c86ddda4560", KA.Block, eA.BlockSlopeVerticalTop, [ + ["Blocks", "BlockSlopeVertical", { + flipY: !0 + }] + ], ib, [ + [ + [-2, 3, -2], + [1, 3, 1] + ], + [ + [-2, 2, -2], + [1, 2, -1] + ], + [ + [-2, 0, -2], + [1, 1, -2] + ] + ]), new rb("e81a123c0be3f8f168fb584d53e8aa038785569bbf2cd1c1cead2272889591e0", KA.Block, eA.BlockSlopeVerticalBottom, [ + ["Blocks", "BlockSlopeVertical"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -1] + ], + [ + [-2, 2, -2], + [1, 3, -2] + ] + ]), new rb("94e14468f31af7f39b9d7ba188a364089ae81da2bd6a9db2b8f5b1b8cedce741", KA.Block, eA.BlockSlopeToVertical, [ + ["Blocks", "BlockSlopeToVertical"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -1] + ], + [ + [-2, 2, -2], + [1, 3, -2] + ] + ]), new rb("3a2f05b1c2c2fd976997fa473f1adb3ba14495701dc5a998f8697798384c6946", KA.Block, eA.BlockSlopeVerticalCornerTop, [ + ["Blocks", "BlockSlopeVerticalCornerBottom", { + flipY: !0 + }] + ], ib, [ + [ + [-2, 3, -2], + [1, 3, 1] + ], + [ + [-2, 2, -2], + [0, 2, 0] + ], + [ + [1, 2, -2], + [1, 2, -1] + ], + [ + [-2, 2, 1], + [-1, 2, 1] + ], + [ + [-2, 1, -2], + [-1, 1, -1] + ], + [ + [-2, 1, 0], + [-1, 1, 0] + ], + [ + [0, 1, -2], + [0, 1, -1] + ], + [ + [1, 1, -2], + [1, 1, -2] + ], + [ + [-2, 1, 1], + [-2, 1, 1] + ], + [ + [-2, 0, -2], + [-1, 0, -1] + ], + [ + [-2, 0, 0], + [-2, 0, 1] + ], + [ + [0, 0, -2], + [1, 0, -2] + ] + ]), new rb("3e4fa43e69aa1dbee584e16451a95a16229bba8d638df2bf6f6c9ffb3a9629c9", KA.Block, eA.BlockInnerCorner, [ + ["Blocks", "BlockInnerCorner"] + ], ib, [ + [ + [-2, 0, 0], + [-2, 0, 1] + ], + [ + [-2, 0, -2], + [-1, 0, -1] + ], + [ + [0, 0, -2], + [1, 0, -2] + ] + ]), new rb("cc9c95eef56def4cf013e4ac85b8013a2b4f4b4346f1f5dd41fa017de763ef17", KA.Block, eA.BlockSlopeVerticalCornerBottom, [ + ["Blocks", "BlockSlopeVerticalCornerBottom"] + ], ib, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [0, 1, 0] + ], + [ + [1, 1, -2], + [1, 1, -1] + ], + [ + [-2, 1, 1], + [-1, 1, 1] + ], + [ + [-2, 2, -2], + [-1, 2, -1] + ], + [ + [-2, 2, 0], + [-1, 2, 0] + ], + [ + [0, 2, -2], + [0, 2, -1] + ], + [ + [1, 2, -2], + [1, 2, -2] + ], + [ + [-2, 2, 1], + [-2, 2, 1] + ], + [ + [-2, 3, -2], + [-1, 3, -1] + ], + [ + [-2, 3, 0], + [-2, 3, 1] + ], + [ + [0, 3, -2], + [1, 3, -2] + ] + ]), new rb("e4c82c8e512d52269cb6588fa34b06c179340ea40e71f74cbadadc7e8353f5a2", KA.Block, eA.BlockSlopeVerticalInnerCornerTop, [ + ["Blocks", "BlockSlopeVerticalInnerCorner", { + flipY: !0 + }] + ], ib, [ + [ + [-2, 3, -2], + [0, 3, 1] + ], + [ + [1, 3, -2], + [1, 3, 0] + ], + [ + [-2, 2, -2], + [-2, 2, -1] + ], + [ + [-1, 2, -2], + [-1, 2, -2] + ], + [ + [-2, 0, -2], + [-2, 1, -2] + ] + ]), new rb("926fdc6e82ecd709cc535faea6bb8778c6e2e91edb39eb6ae6308076dca2ed18", KA.Block, eA.BlockSlopeVerticalInnerCornerBottom, [ + ["Blocks", "BlockSlopeVerticalInnerCorner"] + ], ib, [ + [ + [-2, 0, -2], + [0, 0, 1] + ], + [ + [1, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -2], + [-2, 1, -1] + ], + [ + [-1, 1, -2], + [-1, 1, -2] + ], + [ + [-2, 2, -2], + [-2, 3, -2] + ] + ]), new rb("1086515ba3c1d8e5ec76b378f0bdbc77fc5a57fc8eba8972f0d5e611be945235", KA.Block, eA.BlockBridge, [ + ["Blocks", "BlockBridge"] + ], ib, [ + [ + [-1, 0, -2], + [0, 0, 1] + ] + ]), new rb("5426ad4ff64af3f1a0f0794ad30cfc20434dfffdf44d93010f5f98671c246ff3", KA.Block, eA.BlockBridgeCorner, [ + ["Blocks", "BlockBridgeCorner"] + ], ib, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new rb("784b9b4459e838e5b8f74f6250769ffa52ec5cc3608abc24c380a2e792c3d338", KA.Block, eA.BlockBridgeIntersectionT, [ + ["Blocks", "BlockBridgeIntersectionT"] + ], ib, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new rb("dfbcbc107a3c12217bfa3b224a5757d08e995705d1c122bb2c2665bbb8447b1c", KA.Block, eA.BlockBridgeIntersectionCross, [ + ["Blocks", "BlockBridgeIntersectionCross"] + ], ib, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, -2], + [0, 0, -2] + ] + ]), new rb("5fe53442e559418b7cc9483315b0ac45b8797f9630d5ecc4c7604dab4be25584", KA.WallTrack, eA.WallTrackTop, [ + ["WallTrack", "WallTrackBottom", { + flipY: !0 + }] + ], nb, [ + [ + [-2, 3, -1], + [1, 3, 1] + ], + [ + [-2, 2, -1], + [1, 2, -1] + ], + [ + [-2, 0, -2], + [1, 2, -2] + ] + ]), new rb("010d187fbfbd399bfe880bbea1b548678c239eba0be2913e5cb8a69fbd17adf7", KA.WallTrack, eA.WallTrackMiddle, [ + ["WallTrack", "WallTrackMiddle"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new rb("33216a4dcb734511a80c5bf70ca6f66de555800426686eae5a2519d4c837090e", KA.WallTrack, eA.WallTrackBottom, [ + ["WallTrack", "WallTrackBottom"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new rb("1e306d2a6347b68d6e275bf4ccc9c8942e0a633bf625a3bba95fa9f98ecd50ff", KA.WallTrack, eA.WallTrackSlopeToVertical, [ + ["WallTrack", "WallTrackSlopeToVertical"] + ], nb, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 3, -2] + ] + ]), new rb("3ed21ddbc756a6644e05f5e1ca78ff8df6d51affc472c2d86e7f23d85911e273", KA.WallTrack, eA.WallTrackTopCorner, [ + ["WallTrack", "WallTrackBottomCorner", { + flipY: !0 + }] + ], nb, [ + [ + [-2, 0, -1], + [-2, 0, 1] + ], + [ + [-1, 0, -1], + [-1, 0, -1] + ], + [ + [-1, 0, -2], + [1, 0, -2] + ], + [ + [-2, 1, -1], + [-2, 1, 1] + ], + [ + [-1, 1, -1], + [-1, 1, 0] + ], + [ + [0, 1, -1], + [0, 1, -1] + ], + [ + [-1, 1, -2], + [1, 1, -2] + ], + [ + [-2, 2, 0], + [-2, 2, 1] + ], + [ + [-1, 2, 1], + [-1, 2, 1] + ], + [ + [-1, 2, -1], + [0, 2, 0] + ], + [ + [1, 2, -1], + [1, 2, -1] + ], + [ + [0, 2, -2], + [1, 2, -2] + ], + [ + [0, 3, -1], + [1, 3, 1] + ], + [ + [-1, 3, 0], + [-1, 3, 1] + ] + ]), new rb("4027a2439cc3e42ceda50ff3d427a31e127b25a6457b55edc2d498b474a296a7", KA.WallTrack, eA.WallTrackMiddleCorner, [ + ["WallTrack", "WallTrackMiddleCorner"] + ], nb, [ + [ + [-2, 0, -1], + [-2, 0, 1] + ], + [ + [-1, 0, -1], + [-1, 0, -1] + ], + [ + [-1, 0, -2], + [1, 0, -2] + ] + ]), new rb("498286e062056a537a482ed3385fe0ac0343b399f29d470641df8f74c0532672", KA.WallTrack, eA.WallTrackBottomCorner, [ + ["WallTrack", "WallTrackBottomCorner"] + ], nb, [ + [ + [-2, 3, -1], + [-2, 3, 1] + ], + [ + [-1, 3, -1], + [-1, 3, -1] + ], + [ + [-1, 3, -2], + [1, 3, -2] + ], + [ + [-2, 2, -1], + [-2, 2, 1] + ], + [ + [-1, 2, -1], + [-1, 2, 0] + ], + [ + [0, 2, -1], + [0, 2, -1] + ], + [ + [-1, 2, -2], + [1, 2, -2] + ], + [ + [-2, 1, 0], + [-2, 1, 1] + ], + [ + [-1, 1, 1], + [-1, 1, 1] + ], + [ + [-1, 1, -1], + [0, 1, 0] + ], + [ + [1, 1, -1], + [1, 1, -1] + ], + [ + [0, 1, -2], + [1, 1, -2] + ], + [ + [0, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, 0], + [-1, 0, 1] + ] + ]), new rb("ac09cd62c83af376f23d37dd88273614a2a11cc04a04bff6075fd749bb1ff421", KA.WallTrack, eA.WallTrackTopInnerCorner, [ + ["WallTrack", "WallTrackBottomInnerCorner", { + flipY: !0 + }] + ], nb, [ + [ + [-2, 3, -1], + [1, 3, 1] + ], + [ + [-1, 3, -2], + [1, 3, -2] + ], + [ + [-2, 2, -2], + [-1, 2, -1] + ], + [ + [-2, 0, -2], + [-2, 1, -2] + ] + ]), new rb("16c9c8ece47c097f60cfc7f8a2daa2f0e7ad0befb0ebfd185402013fd1ec8e0f", KA.WallTrack, eA.WallTrackInnerCorner, [ + ["WallTrack", "WallTrackInnerCorner"] + ], nb, [ + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new rb("404e7506c2f7e9302acac39c31a659e7e09e7852786e5f0244f9827727a0bf1e", KA.WallTrack, eA.WallTrackBottomInnerCorner, [ + ["WallTrack", "WallTrackBottomInnerCorner"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, -2], + [1, 0, -2] + ], + [ + [-2, 1, -2], + [-1, 1, -1] + ], + [ + [-2, 2, -2], + [-2, 3, -2] + ] + ]), new rb("8b7023471502607ef19109760bee3b954ea3b3883c32f3960f75c6651c912ffd", KA.WallTrack, eA.WallTrackFloor, [ + ["WallTrack", "WallTrackFloor"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("59e7f31827236c71db8b16f3f1f259c4c82c87a37e4d57a5a097c0d527d128f3", KA.WallTrack, eA.WallTrackFloorCorner, [ + ["WallTrack", "WallTrackFloorCorner"] + ], nb, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [0, 0, 0], + [1, 0, 0] + ], + [ + [1, 0, -2], + [1, 0, -1] + ] + ]), new rb("d58e3805b550b70940c845a807086865b21a4c36da74ffddedcfe5ce2d08e093", KA.WallTrack, eA.WallTrackFloorPlaneCorner, [ + ["WallTrack", "WallTrackFloorPlaneCorner"] + ], nb, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [0, 0, 0], + [1, 0, 0] + ], + [ + [1, 0, -2], + [1, 0, -1] + ] + ]), new rb("a56b0c1cf964b213a38167cbbac6f33acd403978ad75746eb51bcfd8c6a36148", KA.WallTrack, eA.WallTrackCeiling, [ + ["WallTrack", "WallTrackCeiling"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new rb("f87b592d02120312e8e93d8a27c02dcda1095ac2f09879c6efafb2ca2b49d127", KA.WallTrack, eA.WallTrackCeilingCorner, [ + ["WallTrack", "WallTrackCeilingCorner"] + ], nb, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [0, 0, 0], + [1, 0, 0] + ], + [ + [1, 0, -2], + [1, 0, -1] + ] + ]), new rb("cfce1fe50f8cd26393eadd475783830e02f0b39bad4c0e00f7aa69614b22decc", KA.WallTrack, eA.WallTrackCeilingPlaneCorner, [ + ["WallTrack", "WallTrackCeilingPlaneCorner"] + ], nb, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [0, 0, 0], + [1, 0, 0] + ], + [ + [1, 0, -2], + [1, 0, -1] + ] + ]), new rb("19656d02145f1a4ba07dbf2f236f865d34c86f823741b247b5d444a36d61c316", KA.Pillar, eA.PillarTop, [ + ["Pillar", "PillarTop"] + ], nb, [ + [ + [-1, 0, -1], + [0, 0, 0] + ] + ]), new rb("dde596d55ffc00f0f00d361667239d9f71c414f03304fecb6a7d11f6f5e702f1", KA.Pillar, eA.PillarMiddle, [ + ["Pillar", "PillarMiddle"] + ], nb, [ + [ + [-1, 0, -1], + [0, 0, 0] + ] + ]), new rb("dced5202d9373f9dd81a39530a87a1a7036c93ae71604a4e26c3a191abf3c197", KA.Pillar, eA.PillarBottom, [ + ["Pillar", "PillarBottom"] + ], nb, [ + [ + [-1, 0, -1], + [0, 0, 0] + ] + ]), new rb("af83eebf50c302880377e4f8c1fb3b2ef96ae193e8d03c17e1fd77c73a847e63", KA.Pillar, eA.PillarShort, [ + ["Pillar", "PillarShort"] + ], nb, [ + [ + [-1, 0, -1], + [0, 0, 0] + ] + ]), new rb("25b41116fb04b1f3cdd3119f57e0000a6ea8cb12d435718ffd6bb765866c272f", KA.Pillar, eA.PillarBranch1, [ + ["Pillar", "PillarBranch1"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ] + ]), new rb("05ae39aea4f1ddd818fa57860e688c9cb875544f9b82eafe58a2eb9c19d8d91d", KA.Pillar, eA.PillarBranch1Top, [ + ["Pillar", "PillarBranch1Top"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ] + ]), new rb("06c29d92e42e0c32050af98d69eecc94ce15adf8ac81dbe53dfb577a83265f4e", KA.Pillar, eA.PillarBranch1Middle, [ + ["Pillar", "PillarBranch1Middle"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ] + ]), new rb("4a989027e0bd6db264f092bac729d9d450e012a710ea28d199f7ff52efd70fbd", KA.Pillar, eA.PillarBranch1Bottom, [ + ["Pillar", "PillarBranch1Bottom"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ] + ]), new rb("78b2ff83ad71e7f3d692abc35923fa20c2ae14c01e37d44ec430746ca1bac992", KA.Pillar, eA.PillarBranch2, [ + ["Pillar", "PillarBranch2"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new rb("b22c93bc73ec2da9dbff218da1676d7436527ed284e264f37294e48ef1307301", KA.Pillar, eA.PillarBranch2Top, [ + ["Pillar", "PillarBranch2Top"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new rb("79a456a8fa3da24bec6c033f6c736fa1c728745f9624ae78ca20b6a4a76afae8", KA.Pillar, eA.PillarBranch2Middle, [ + ["Pillar", "PillarBranch2Middle"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new rb("3b81b3f965cbc9fda4fe09e830ba25f1b96ce512d87b0146a1192a6cd0d07335", KA.Pillar, eA.PillarBranch2Bottom, [ + ["Pillar", "PillarBranch2Bottom"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new rb("27727678bbcac9d3b0172b165ca5c92b10f4b4584a3a18fef4c542f3e791f26f", KA.Pillar, eA.PillarBranch3, [ + ["Pillar", "PillarBranch3"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new rb("50c7ac511d30ab9e065c928b776652f038be7683d948082bbefc419ee049e505", KA.Pillar, eA.PillarBranch3Top, [ + ["Pillar", "PillarBranch3Top"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new rb("98b3bfe99e7132825f5aa93122e4e5fdec46eb2877c8eb91fa2648f709527b60", KA.Pillar, eA.PillarBranch3Middle, [ + ["Pillar", "PillarBranch3Middle"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new rb("7326bbb558f8bcc28d5875c43b1b8e3646caadb873a14fde3ab517f779aea345", KA.Pillar, eA.PillarBranch3Bottom, [ + ["Pillar", "PillarBranch3Bottom"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new rb("0e23c2615cfdb350bb3a700b6169589265a1d1079f61294fb497b8f80191d523", KA.Pillar, eA.PillarBranch4, [ + ["Pillar", "PillarBranch4"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, 1], + [0, 0, 1] + ] + ]), new rb("e62b55e111dbcb3faefed0a203eac5b55051a2b11911946660310e3df3588da3", KA.Pillar, eA.PillarBranch4Top, [ + ["Pillar", "PillarBranch4Top"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, 1], + [0, 0, 1] + ] + ]), new rb("4e2cfb89c1c591803a1440532a74c3ace37ec7fe78a526c1b57f6679c620df2e", KA.Pillar, eA.PillarBranch4Middle, [ + ["Pillar", "PillarBranch4Middle"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, 1], + [0, 0, 1] + ] + ]), new rb("e7807350788e4570c8bb74d4a635639ef731d83e52922fac5bc10f415f73f794", KA.Pillar, eA.PillarBranch4Bottom, [ + ["Pillar", "PillarBranch4Bottom"] + ], nb, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, 1], + [0, 0, 1] + ] + ]), new rb("836bfd12791bfebd99aba70531da4c9bd6e332d16c1e120a8888ea54f59456f9", KA.Pillar, eA.PillarBranch5, [ + ["Pillar", "PillarBranch5"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 0] + ] + ]), new rb("ab85228116faf9ae7b1e6cb4a03530cbec808df3d3c1d7883eb41eb7cfe231d7", KA.Pillar, eA.PillarBranch5Top, [ + ["Pillar", "PillarBranch5Top"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 0] + ] + ]), new rb("db93d5cea4e523fd67a56f8d928084ab6355331a8e5d1899115c1841866006bb", KA.Pillar, eA.PillarBranch5Middle, [ + ["Pillar", "PillarBranch5Middle"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 0] + ] + ]), new rb("dd793efa234159e3a0ff28b064ecb715e6c8bb76e06acfe4bd0d9a2f2b9bba88", KA.Pillar, eA.PillarBranch5Bottom, [ + ["Pillar", "PillarBranch5Bottom"] + ], nb, [ + [ + [-2, 0, -1], + [1, 0, 0] + ] + ]), new rb("350f7d3591ffd0b2cfb8204d1c6cd0022fd3bda81ea7e950fce3abea7ec89e1a", KA.Sign, eA.SignArrowLeft, [ + ["Signs", "SignArrowRight", { + flipX: !0 + }] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new rb("22e104e58bba0a609d379578e391ce50ca523c9eee1c3fddebb6d1bb2246a0b9", KA.Sign, eA.SignArrowRight, [ + ["Signs", "SignArrowRight"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new rb("acba0cfe380e625285b973e09344e61740e77d6f8cac8691ef3e0a0b0878040e", KA.Sign, eA.SignArrowUp, [ + ["Signs", "SignArrowUp"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new rb("8d0dbea0a26bdf3addd372f5d9a2fdecfd776a48f31218acdeb036129b248ca5", KA.Sign, eA.SignArrowDown, [ + ["Signs", "SignArrowUp", { + flipY: !0 + }] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new rb("e5e1b1ca69d7b230331171be07876c4b1bdebba557c19b18ab17d91eee2771d5", KA.Sign, eA.SignWarning, [ + ["Signs", "SignWarning"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new rb("64ed1fba4990a25bc774575ff8835117638d2c3e7c8f41bf0032d219e1083e4c", KA.Sign, eA.SignWrongWay, [ + ["Signs", "SignWrongWay"] + ], nb, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ])], + sb = new Map; + for (const e of ab) { + if (sb.has(e.id)) throw new Error("Duplicate track part id " + e.id.toString()); + sb.set(e.id, e) + } + + function ob(e) { + const t = sb.get(e); + if (null == t) throw new Error("Unknown track part id " + e.toString()); + return t + } + const lb = ab.filter((e => { + var t; + return (null === (t = e.detector) || void 0 === t ? void 0 : t.type) == XA.Checkpoint + })).map((e => e.id)), + cb = ab.filter((e => null != e.startOffset)).map((e => e.id)); + + function hb(e) { + const t = e.parts; + if ("object" != typeof t && null !== t && !Array.isArray(t)) return null; + const n = new Sb(QA.Summer, new GA), + i = Object.keys(t); + for (const e of i) { + const i = parseInt(e, 10); + if (!(i in eA)) return null; + { + const e = t[i]; + if (!Array.isArray(e)) return null; + if (e.length % 4 != 0) return null; + for (let t = 0; t < e.length; t += 4) { + const r = parseInt(e[t + 0], 10), + a = parseInt(e[t + 1], 10), + s = parseInt(e[t + 2], 10), + o = parseInt(e[t + 3], 10); + if (isNaN(r) || isNaN(a) || isNaN(s) || isNaN(o)) return null; + if (!(o >= 0 && o <= 3 && Math.abs(r) <= 1e9 && a >= 0 && a <= 1e9 && Math.abs(s) <= 1e9)) return null; + { + if (lb.includes(i)) return null; + let e = null; + cb.includes(i) && (e = 0), n.addPart(4 * r, a, 4 * s, i, o, nA.YPositive, Jy.Default, null, e) + } + } + } + } + return n + } + + function db(e) { + let t, n; + try { + t = JSON.parse(e) + } catch (e) { + return console.error(e), null + } + if ("string" != typeof t.name) return null; + if ("string" != typeof t.track) return null; + try { + n = JSON.parse(t.track) + } catch (e) { + return console.error(e), null + } + const i = hb(n); + return null == i ? null : { + trackMetadata: { + name: t.name, + author: null + }, + trackData: i + } + } + + function ub(e) { + const t = Kg(e); + if (null == t) return null; + const n = new Sb(QA.Summer, new GA); + let i = 0; + for (; i < t.length;) { + if (t.length - i < 2) return null; + const e = t[i + 0] | t[i + 1] << 8; + if (i += 2, !(e in eA)) return null; + if (t.length - i < 4) return null; + const r = t[i + 0] | t[i + 1] << 8 | t[i + 2] << 16 | t[i + 3] << 24; + i += 4; + for (let a = 0; a < r; ++a) { + if (t.length - i < 3) return null; + const r = (t[i + 0] | t[i + 1] << 8 | t[i + 2] << 16) - Math.pow(2, 23); + if (i += 3, t.length - i < 3) return null; + const a = t[i + 0] | t[i + 1] << 8 | t[i + 2] << 16; + if (i += 3, t.length - i < 3) return null; + const s = (t[i + 0] | t[i + 1] << 8 | t[i + 2] << 16) - Math.pow(2, 23); + if (i += 3, t.length - i < 1) return null; + const o = 3 & t[i + 0]; + if (i += 1, o < 0 || o > 3) return null; + if (lb.includes(e)) return null; + let l = null; + cb.includes(e) && (l = 0), n.addPart(4 * r, a, 4 * s, e, o, nA.YPositive, Jy.Default, null, l) + } + } + return n + } + + function pb(e) { + const t = UA(e); + if (null == t) return null; + const n = new Yg.Inflate; + if (n.push(t, !0), n.err) return null; + const i = n.result; + if (!(i instanceof Uint8Array)) return null; + const r = new Sb(QA.Summer, new GA); + let a = 0; + for (; a < i.length;) { + if (i.length - a < 2) return null; + const e = i[a + 0] | i[a + 1] << 8; + if (a += 2, !(e in eA)) return null; + if (i.length - a < 4) return null; + const t = i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16 | i[a + 3] << 24; + a += 4; + for (let n = 0; n < t; ++n) { + if (i.length - a < 3) return null; + const t = (i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16) - Math.pow(2, 23); + if (a += 3, i.length - a < 3) return null; + const n = i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16; + if (a += 3, i.length - a < 3) return null; + const s = (i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16) - Math.pow(2, 23); + if (a += 3, i.length - a < 1) return null; + const o = i[a + 0]; + if (a += 1, o < 0 || o > 3) return null; + let l = null; + if (lb.includes(e)) { + if (i.length - a < 2) return null; + l = i[a + 0] | i[a + 1] << 8, a += 2 + } + let c = null; + cb.includes(e) && (c = 0), r.addPart(4 * t, n, 4 * s, e, o, nA.YPositive, Jy.Default, l, c) + } + } + return r + } + + function fb(e) { + const t = UA(e); + if (null == t) return null; + const n = new Yg.Inflate; + if (n.push(t, !0), n.err) return null; + const i = n.result; + if (!(i instanceof Uint8Array)) return null; + const r = new Sb(QA.Summer, new GA); + let a = 0; + for (; a < i.length;) { + if (i.length - a < 2) return null; + let e = i[a + 0] | i[a + 1] << 8; + a += 2; + let t = Jy.Default; + if (e >= 134 && e <= 178) switch (e) { + case 134: + e = eA.Block, t = Jy.Custom1; + break; + case 135: + e = eA.HalfBlock, t = Jy.Custom1; + break; + case 136: + e = eA.QuarterBlock, t = Jy.Custom1; + break; + case 137: + e = eA.BlockSlopedDown, t = Jy.Custom1; + break; + case 138: + e = eA.BlockSlopedDownInnerCorner, t = Jy.Custom1; + break; + case 139: + e = eA.BlockSlopedDownOuterCorner, t = Jy.Custom1; + break; + case 140: + e = eA.BlockSlopedUp, t = Jy.Custom1; + break; + case 141: + e = eA.BlockSlopedUpInnerCorner, t = Jy.Custom1; + break; + case 142: + e = eA.BlockSlopedUpOuterCorner, t = Jy.Custom1; + break; + case 143: + e = eA.BlockSlopeDown, t = Jy.Custom1; + break; + case 144: + e = eA.BlockSlopeUp, t = Jy.Custom1; + break; + case 145: + e = eA.BlockBridge, t = Jy.Custom1; + break; + case 146: + e = eA.BlockBridgeCorner, t = Jy.Custom1; + break; + case 147: + e = eA.BlockBridgeIntersectionT, t = Jy.Custom1; + break; + case 148: + e = eA.BlockBridgeIntersectionCross, t = Jy.Custom1; + break; + case 149: + e = eA.Block, t = Jy.Custom6; + break; + case 150: + e = eA.HalfBlock, t = Jy.Custom6; + break; + case 151: + e = eA.QuarterBlock, t = Jy.Custom6; + break; + case 152: + e = eA.BlockSlopedDown, t = Jy.Custom6; + break; + case 153: + e = eA.BlockSlopedDownInnerCorner, t = Jy.Custom6; + break; + case 154: + e = eA.BlockSlopedDownOuterCorner, t = Jy.Custom6; + break; + case 155: + e = eA.BlockSlopedUp, t = Jy.Custom6; + break; + case 156: + e = eA.BlockSlopedUpInnerCorner, t = Jy.Custom6; + break; + case 157: + e = eA.BlockSlopedUpOuterCorner, t = Jy.Custom6; + break; + case 158: + e = eA.BlockSlopeDown, t = Jy.Custom6; + break; + case 159: + e = eA.BlockSlopeUp, t = Jy.Custom6; + break; + case 160: + e = eA.BlockBridge, t = Jy.Custom6; + break; + case 161: + e = eA.BlockBridgeCorner, t = Jy.Custom6; + break; + case 162: + e = eA.BlockBridgeIntersectionT, t = Jy.Custom6; + break; + case 163: + e = eA.BlockBridgeIntersectionCross, t = Jy.Custom6; + break; + case 164: + e = eA.Block, t = Jy.Custom0; + break; + case 165: + e = eA.HalfBlock, t = Jy.Custom0; + break; + case 166: + e = eA.QuarterBlock, t = Jy.Custom0; + break; + case 167: + e = eA.BlockSlopedDown, t = Jy.Custom0; + break; + case 168: + e = eA.BlockSlopedDownInnerCorner, t = Jy.Custom0; + break; + case 169: + e = eA.BlockSlopedDownOuterCorner, t = Jy.Custom0; + break; + case 170: + e = eA.BlockSlopedUp, t = Jy.Custom0; + break; + case 171: + e = eA.BlockSlopedUpInnerCorner, t = Jy.Custom0; + break; + case 172: + e = eA.BlockSlopedUpOuterCorner, t = Jy.Custom0; + break; + case 173: + e = eA.BlockSlopeDown, t = Jy.Custom0; + break; + case 174: + e = eA.BlockSlopeUp, t = Jy.Custom0; + break; + case 175: + e = eA.BlockBridge, t = Jy.Custom0; + break; + case 176: + e = eA.BlockBridgeCorner, t = Jy.Custom0; + break; + case 177: + e = eA.BlockBridgeIntersectionT, t = Jy.Custom0; + break; + case 178: + e = eA.BlockBridgeIntersectionCross, t = Jy.Custom0 + } + let n = null, + s = { + x: 0, + y: 0, + z: 0 + }; + if (79 == e) n = eA.WallTrackFloorPlaneCorner; + else if (81 == e) n = eA.WallTrackCeilingPlaneCorner, s = { + x: 0, + y: 3, + z: 0 + }; + else if (e >= 87 && e <= 98) switch (e) { + case 87: + e = eA.Slope, n = eA.BlockSlopedUp; + break; + case 88: + e = eA.SlopeUp, n = eA.BlockSlopeUp; + break; + case 89: + e = eA.SlopeDown, n = eA.BlockSlopeDown; + break; + case 90: + e = eA.SlopeUpLeftWide, n = eA.BlockSlopeUp; + break; + case 91: + e = eA.SlopeUpRightWide, n = eA.BlockSlopeUp; + break; + case 92: + e = eA.SlopeDownLeftWide, n = eA.BlockSlopeDown; + break; + case 93: + e = eA.SlopeDownRightWide, n = eA.BlockSlopeDown; + break; + case 94: + e = eA.SlopeLeftWide, n = eA.BlockSlopedUp; + break; + case 95: + e = eA.SlopeRightWide, n = eA.BlockSlopedUp; + break; + case 96: + e = eA.PlaneSlopeUp, n = eA.BlockSlopeUp; + break; + case 97: + e = eA.PlaneSlopeDown, n = eA.BlockSlopeDown; + break; + case 98: + e = eA.PlaneSlope, n = eA.BlockSlopedUp; + break; + default: + throw new Error("Invalid track part id") + } + if (!(e in eA)) return null; + if (i.length - a < 4) return null; + const o = i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16 | i[a + 3] << 24; + a += 4; + for (let l = 0; l < o; ++l) { + if (i.length - a < 3) return null; + const o = (i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16) - Math.pow(2, 23); + if (a += 3, i.length - a < 3) return null; + const l = i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16; + if (a += 3, i.length - a < 3) return null; + const c = (i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16) - Math.pow(2, 23); + if (a += 3, i.length - a < 1) return null; + const h = i[a + 0]; + if (a += 1, h < 0 || h > 3) return null; + let d = null; + if (lb.includes(e)) { + if (i.length - a < 2) return null; + d = i[a + 0] | i[a + 1] << 8, a += 2 + } + let u = null; + cb.includes(e) && (u = 0), null != n && r.addPart(4 * o + s.x, l + s.y, 4 * c + s.z, n, h, nA.YPositive, Jy.Default, null, u), r.addPart(4 * o, l, 4 * c, e, h, nA.YPositive, t, d, u) + } + } + return r + } + + function mb(e, t) { + let n = e; + if (t.length - n < 1) return null; + const i = t[n]; + if (n += 1, !(i in QA)) return null; + if (t.length - n < 1) return null; + const r = t[n]; + if (n += 1, !Number.isSafeInteger(r) || r < 0 || r >= 180) return null; + const a = new Sb(i, new GA(r)); + if (t.length - n < 9) return null; + const s = t[n] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24; + n += 4; + const o = t[n] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24; + n += 4; + const l = t[n] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24; + n += 4; + const c = 3 & t[n], + h = t[n] >> 2 & 3, + d = t[n] >> 4 & 3; + if (n += 1, c < 1 || c > 4 || h < 1 || h > 4 || d < 1 || d > 4) return null; + for (; n < t.length;) { + if (t.length - n < 1) return null; + const e = t[n + 0]; + if (n += 1, !(e in eA)) return null; + if (t.length - n < 4) return null; + const i = t[n + 0] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24; + n += 4; + for (let r = 0; r < i; ++r) { + if (t.length - n < c) return null; + let i = 0; + for (let e = 0; e < c; ++e) i |= t[n + e] << 8 * e; + if (i += s, n += c, t.length - n < h) return null; + let r = 0; + for (let e = 0; e < h; ++e) r |= t[n + e] << 8 * e; + if (r += o, n += h, t.length - n < d) return null; + let u = 0; + for (let e = 0; e < d; ++e) u |= t[n + e] << 8 * e; + if (u += l, n += d, t.length - n < 1) return null; + const p = t[n + 0]; + if (n += 1, p < 0 || p > 3) return null; + if (t.length - n < 1) return null; + const f = t[n + 0]; + if (n += 1, !(f in nA)) return null; + if (t.length - n < 1) return null; + const m = t[n + 0]; + if (n += 1, !(m in Jy)) return null; + let g = null; + if (lb.includes(e)) { + if (t.length - n < 2) return null; + g = t[n + 0] | t[n + 1] << 8, n += 2 + } + let v = null; + if (cb.includes(e)) { + if (t.length - n < 4) return null; + v = t[n + 0] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24, n += 4 + } + a.addPart(i, r, u, e, p, f, m, g, v) + } + } + return a + } + const gb = [ + [new wn(0, 0, 0, 1), new wn(0, .7071067811865475, 0, .7071067811865476), new wn(0, 1, 0, 0), new wn(0, .7071067811865476, 0, -.7071067811865475)], + [new wn(0, 0, 1, 0), new wn(.7071067811865475, 0, .7071067811865476, 0), new wn(1, 0, 0, 0), new wn(.7071067811865476, 0, -.7071067811865475, 0)], + [new wn(0, 0, -.7071067811865477, .7071067811865475), new wn(.5, .5, -.5, .5), new wn(.7071067811865475, .7071067811865477, 0, 0), new wn(.5, .5, .5, -.5)], + [new wn(0, 0, .7071067811865475, .7071067811865476), new wn(.5, -.5, .5, .5), new wn(.7071067811865476, -.7071067811865475, 0, 0), new wn(.5, -.5, -.5, -.5)], + [new wn(.7071067811865475, 0, 0, .7071067811865476), new wn(.5, .5, .5, .5), new wn(0, .7071067811865476, .7071067811865475, 0), new wn(-.5, .5, .5, -.5)], + [new wn(-.7071067811865477, 0, 0, .7071067811865475), new wn(-.5, -.5, .5, .5), new wn(0, -.7071067811865475, .7071067811865477, 0), new wn(.5, -.5, .5, -.5)] + ]; + + function vb(e, t) { + return gb[t][e].clone() + } + var wb, yb, Ab, bb, xb, kb = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Eb = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + yb = new WeakMap, Ab = new WeakMap, wb = new WeakSet, bb = function() { + let e = -1 / 0, + t = null; + for (const [n, i] of Eb(this, Ab, "f")) { + const r = ob(n).startOffset; + if (i.length > 0 && null != r) + for (const n of i) { + if (null == n.startOrder) throw new Error("Start part has no start order"); + n.startOrder >= e && (e = n.startOrder, t = { + part: n, + startOffset: r + }) + } + } + return null != t ? { + x: t.part.x, + y: t.part.y, + z: t.part.z, + rotation: t.part.rotation, + rotationAxis: t.part.rotationAxis, + startOffset: t.startOffset.clone() + } : null + }, xb = function() { + const e = []; + e.push(this.environment), e.push(Eb(this, yb, "f").representation); + let t = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + a = -1 / 0, + s = -1 / 0; + for (const [, e] of Eb(this, Ab, "f")) + for (const o of e) t = Math.min(o.x, t), n = Math.min(o.y, n), i = Math.min(o.z, i), r = Math.max(o.x, r), a = Math.max(o.y, a), s = Math.max(o.z, s); + Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(i) && Number.isFinite(r) && Number.isFinite(a) && Number.isFinite(s) || (t = 0, n = 0, i = 0, r = 0, a = 0, s = 0); + const o = r - t + 1, + l = a - n + 1, + c = s - i + 1, + h = Math.max(1, Math.min(4, Math.ceil(Math.log2(o + 1) / 8))), + d = Math.max(1, Math.min(4, Math.ceil(Math.log2(l + 1) / 8))), + u = Math.max(1, Math.min(4, Math.ceil(Math.log2(c + 1) / 8))); + e.push(255 & t, t >>> 8 & 255, t >>> 16 & 255, t >>> 24 & 255, 255 & n, n >>> 8 & 255, n >>> 16 & 255, n >>> 24 & 255, 255 & i, i >>> 8 & 255, i >>> 16 & 255, i >>> 24 & 255, 255 & (h | d << 2 | u << 4)); + for (const [r, a] of Eb(this, Ab, "f")) { + if (r < 0 || r > 255) throw new Error("Type id is out of range"); + const s = a.length; + e.push(255 & r, 255 & s, s >>> 8 & 255, s >>> 16 & 255, s >>> 24 & 255); + for (const s of a) { + const a = s.x - t, + o = s.y - n, + l = s.z - i; + if (1 == h ? e.push(255 & a) : 2 == h ? e.push(255 & a, a >>> 8 & 255) : 3 == h ? e.push(255 & a, a >>> 8 & 255, a >>> 16 & 255) : 4 == h && e.push(255 & a, a >>> 8 & 255, a >>> 16 & 255, a >>> 24 & 255), 1 == d ? e.push(255 & o) : 2 == d ? e.push(255 & o, o >>> 8 & 255) : 3 == d ? e.push(255 & o, o >>> 8 & 255, o >>> 16 & 255) : 4 == d && e.push(255 & o, o >>> 8 & 255, o >>> 16 & 255, o >>> 24 & 255), 1 == u ? e.push(255 & l) : 2 == u ? e.push(255 & l, l >>> 8 & 255) : 3 == u ? e.push(255 & l, l >>> 8 & 255, l >>> 16 & 255) : 4 == u && e.push(255 & l, l >>> 8 & 255, l >>> 16 & 255, l >>> 24 & 255), e.push(3 & s.rotation, 7 & s.rotationAxis, 255 & s.color), lb.includes(r)) { + if (null == s.checkpointOrder) throw new Error("Checkpoint has no checkpoint order"); + e.push(255 & s.checkpointOrder, s.checkpointOrder >>> 8 & 255) + } + if (cb.includes(r)) { + if (null == s.startOrder) throw new Error("Start has no start order"); + e.push(255 & s.startOrder, s.startOrder >>> 8 & 255, s.startOrder >>> 16 & 255, s.startOrder >>> 24 & 255) + } + } + } + return new Uint8Array(e) + }; + const Sb = class { + constructor(e, t) { + wb.add(this), yb.set(this, void 0), Ab.set(this, new Map), this.environment = e, kb(this, yb, t.clone(), "f") + } + get sunDirection() { + return Eb(this, yb, "f").clone() + } + set sunDirection(e) { + kb(this, yb, e.clone(), "f") + } + addPart(e, t, n, i, r, a, s, o, l) { + const c = { + x: e, + y: t, + z: n, + rotation: r, + rotationAxis: a, + color: s, + checkpointOrder: o, + startOrder: l + }, + h = Eb(this, Ab, "f").get(i); + null != h ? h.push(c) : Eb(this, Ab, "f").set(i, [c]) + } + forEachPart(e) { + for (const [t, n] of Eb(this, Ab, "f")) + for (const i of n) e(i.x, i.y, i.z, t, i.rotation, i.rotationAxis, i.color, i.checkpointOrder, i.startOrder) + } + getId() { + return (0, LA.sha256)(Eb(this, wb, "m", xb).call(this)) + } + getBounds() { + let e = 1 / 0, + t = 1 / 0, + n = -1 / 0, + i = -1 / 0; + return this.forEachPart(((r, a, s) => { + e = Math.min(r, e), t = Math.min(s, t), n = Math.max(r, n), i = Math.max(s, i) + })), Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(i) ? { + min: new jt(e, t), + max: new jt(n, i) + } : { + min: new jt, + max: new jt + } + } + hasStartingPoint() { + return null != Eb(this, wb, "m", bb).call(this) + } + getStartTransform() { + const e = Eb(this, wb, "m", bb).call(this); + if (null != e) { + const t = vb(e.rotation, e.rotationAxis).multiply((new wn).setFromEuler(new ai(0, Math.PI, 0))), + n = e.startOffset; + return n.applyQuaternion(t), { + position: new yn(e.x * jb.partSize + n.x, e.y * jb.partSize + n.y, e.z * jb.partSize + n.z), + quaternion: t + } + } + return null + } + toSaveString() { + const e = Eb(this, wb, "m", xb).call(this), + t = new Yg.Deflate({ + level: 9, + windowBits: 9, + memLevel: 9 + }); + t.push(e, !0); + const n = BA(t.result), + i = new Yg.Deflate({ + level: 9, + windowBits: 15, + memLevel: 9 + }); + return i.push(n, !0), BA(i.result) + } + toExportString(e) { + const t = (new TextEncoder).encode(e.name); + let n, i; + null != e.author ? (i = (new TextEncoder).encode(e.author), n = i.length) : (i = null, n = 0); + const r = new Uint8Array(1 + t.length + 1 + n); + r[0] = t.length, r.set(t, 1), r[1 + t.length] = n, null != i && r.set(i, 1 + t.length + 1); + const a = Eb(this, wb, "m", xb).call(this), + s = new Yg.Deflate({ + level: 9, + windowBits: 9, + memLevel: 9 + }); + s.push(r, !1), s.push(a, !0); + const o = BA(s.result), + l = new Yg.Deflate({ + level: 9, + windowBits: 15, + memLevel: 9 + }); + return l.push(o, !0), "PolyTrack1" + BA(l.result) + } + static fromSaveString(e) { + const t = function(e) { + const t = UA(e); + if (null == t) return null; + const n = new Yg.Inflate({ + to: "string" + }); + if (n.push(t, !0), n.err) return null; + const i = n.result; + if ("string" != typeof i) return null; + const r = UA(i); + if (null == r) return null; + const a = new Yg.Inflate; + if (a.push(r, !0), a.err) return null; + const s = a.result; + return s instanceof Uint8Array ? mb(0, s) : null + }(e); + if (null != t) return t; + const n = fb(e); + if (null != n) return n; + const i = pb(e); + if (null != i) return i; + const r = ub(e); + if (null != r) return r; + const a = hb(e); + return null != a ? a : null + } + static fromExportString(e) { + const t = e.replace(/\s+/g, ""), + n = function(e) { + const t = "PolyTrack1"; + if (!e.startsWith(t)) return null; + const n = UA(e.substring(10)); + if (null == n) return null; + const i = new Yg.Inflate({ + to: "string" + }); + if (i.push(n, !0), i.err) return null; + const r = i.result; + if ("string" != typeof r) return null; + const a = UA(r); + if (null == a) return null; + const s = new Yg.Inflate; + if (s.push(a, !0), s.err) return null; + const o = s.result; + if (!(o instanceof Uint8Array)) return null; + const l = o[0]; + if (o.length < 1 + l) return null; + const c = new TextDecoder("utf-8").decode(o.subarray(1, 1 + l)), + h = o[1 + l]; + if (o.length < 1 + l + 1 + h) return null; + let d; + d = h > 0 ? new TextDecoder("utf-8").decode(o.subarray(1 + l + 1, 1 + l + 1 + h)) : null; + const u = mb(1 + l + 1 + h, o); + return null == u ? null : { + trackMetadata: { + name: c, + author: d + }, + trackData: u + } + }(t); + if (null != n) return n; + const i = function(e) { + if (!e.startsWith("v3")) return null; + const t = UA(e.substring(2, 4)); + if (null == t) return null; + if (1 != t.length) return null; + const n = t[0], + i = UA(e.substring(4, 4 + n)); + if (null == i) return null; + let r; + try { + r = new TextDecoder("utf-8").decode(i) + } catch (e) { + return null + } + const a = fb(e.substring(4 + n)); + return null == a ? null : { + trackMetadata: { + name: r, + author: null + }, + trackData: a + } + }(t); + if (null != i) return i; + const r = function(e) { + if (!e.startsWith("v2")) return null; + const t = UA(e.substring(2, 4)); + if (null == t) return null; + if (1 != t.length) return null; + const n = t[0], + i = Math.ceil(n / 3 * 4), + r = UA(e.substring(4, 4 + i)); + if (null == r) return null; + let a; + try { + a = new TextDecoder("utf-8").decode(r) + } catch (e) { + return null + } + const s = pb(e.substring(4 + i)); + return null == s ? null : { + trackMetadata: { + name: a, + author: null + }, + trackData: s + } + }(t); + if (null != r) return r; + const a = function(e) { + if (!e.startsWith("v1n")) return null; + const t = Kg(e.substring(3, 5)); + if (null == t) return null; + if (1 != t.length) return null; + const n = t[0], + i = e.substring(5, 5 + n); + let r; + try { + r = decodeURIComponent(i) + } catch (e) { + return console.error(e), null + } + const a = ub(e.substring(5 + n)); + return null == a ? null : { + trackMetadata: { + name: r, + author: null + }, + trackData: a + } + }(t); + if (null != a) return a; + const s = db(e); + return null != s ? s : null + } + createThumbnail() { + let e = 1 / 0, + t = 1 / 0, + n = -1 / 0, + i = -1 / 0; + this.forEachPart(((r, a, s, o, l, c) => { + ob(o).tiles.rotated(l, c).forEach(((a, o, l) => { + e = Math.min(e, Math.floor((r + a - 2) / 4)), t = Math.min(t, Math.floor((s + l - 2) / 4)), n = Math.max(n, Math.floor((r + a - 2) / 4)), i = Math.max(i, Math.floor((s + l - 2) / 4)) + })) + })), Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(i) || (e = 0, t = 0, n = 0, i = 0); + const r = 10, + a = n - e + 1; + a <= r && (n += Math.ceil((r - a) / 2), e -= Math.ceil((r - a) / 2)); + const s = i - t + 1; + s <= r && (i += Math.ceil((r - s) / 2), t -= Math.ceil((r - s) / 2)); + const o = document.createElement("canvas"); + o.width = Math.min(1024, n - e + 1), o.height = Math.min(1024, i - t + 1); + const l = o.getContext("2d"); + if (null == l) throw new Error("Failed to get canvas context"); + const c = l.createImageData(o.width, o.height), + h = [], + d = [], + u = []; + let p, f, m; + switch (this.environment) { + case QA.Summer: + p = 255, f = 255, m = 255; + break; + case QA.Winter: + p = 190, f = 216, m = 247; + break; + case QA.Desert: + p = 237, f = 226, m = 175 + } + this.forEachPart(((n, i, r, a, s, l) => { + const g = ob(a); + g.tiles.rotated(s, l).forEach(((i, a, s) => { + const l = Math.floor((n + i - 2) / 4) - e, + v = Math.floor((r + s - 2) / 4) - t, + w = 4 * (l + v * o.width); + c.data[w + 0] = p, c.data[w + 1] = f, c.data[w + 2] = m, c.data[w + 3] = 255, null != g.startOffset ? d.push([l, v]) : null != g.detector && g.detector.type == XA.Checkpoint ? h.push([l, v]) : null != g.detector && g.detector.type == XA.Finish && u.push([l, v]) + })) + })); + for (const [e, t] of h) c.data[4 * (e + t * o.width) + 0] = 226, c.data[4 * (e + t * o.width) + 1] = 192, c.data[4 * (e + t * o.width) + 2] = 38, c.data[4 * (e + t * o.width) + 3] = 255; + for (const [e, t] of d) c.data[4 * (e + t * o.width) + 0] = 51, c.data[4 * (e + t * o.width) + 1] = 140, c.data[4 * (e + t * o.width) + 2] = 224, c.data[4 * (e + t * o.width) + 3] = 255; + for (const [e, t] of u) c.data[4 * (e + t * o.width) + 0] = 209, c.data[4 * (e + t * o.width) + 1] = 41, c.data[4 * (e + t * o.width) + 2] = 41, c.data[4 * (e + t * o.width) + 3] = 255; + return l.putImageData(c, 0, 0), o + } + }; + var Mb, Tb, _b, Cb, Pb, Ib, Rb, Lb, Db, Nb, Bb, Ub, zb, Ob, Fb, Wb = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Vb = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Hb { + constructor(e, t, n, i, r, a, s, o, l, c) { + if (this.checkpointOrder = null, this.startOrder = null, this.x = e, this.y = t, this.z = n, this.rotation = i, this.rotationAxis = r, this.color = a, this.type = s, this.matrix = o, this.checkpointOrder = l, this.startOrder = c, null != s.configuration.detector && s.configuration.detector.type == XA.Checkpoint) { + if (null == l) throw new Error("Checkpoint has no checkpoint order") + } else if (null != l) throw new Error("Non-checkpoint has checkpoint order"); + if (null != s.configuration.startOffset && null == c) throw new Error("Start part has no start order"); + if (null == s.configuration.startOffset && null != c) throw new Error("Non-start part has start order") + } + } + class Gb { + constructor(e, t, n) { + Mb.add(this), Tb.set(this, void 0), _b.set(this, void 0), Cb.set(this, void 0), this.environment = QA.Summer, Pb.set(this, new GA), Ib.set(this, []), Rb.set(this, new Map), Lb.set(this, new Map), Db.set(this, { + min: new jt(0, 0), + max: new jt(0, 0) + }), Nb.set(this, null), Bb.set(this, []), Wb(this, Tb, e, "f"), Wb(this, _b, t, "f"), Wb(this, Cb, n, "f") + } + get sunDirection() { + return Vb(this, Pb, "f") + } + set sunDirection(e) { + Wb(this, Pb, e.clone(), "f") + } + getID() { + return Vb(this, Nb, "f") + } + clear() { + Wb(this, Nb, null, "f"), Vb(this, Ib, "f").length = 0, Vb(this, Rb, "f").clear(), Vb(this, Lb, "f").clear(), Vb(this, Mb, "m", Ub).call(this) + } + getPartsAt(e, t, n) { + const i = Vb(this, Rb, "f").get(e.toString() + "|" + t.toString() + "|" + n.toString()); + return null == i ? [] : i.map((e => ({ + id: e.type.configuration.id, + x: e.x, + y: e.y, + z: e.z, + rotation: e.rotation, + rotationAxis: e.rotationAxis, + color: e.color + }))) + } + setPart(e, t, n, i, r, a, s, o, l) { + const c = Vb(this, Cb, "f").getPart(i); + if (s != Jy.Default && !c.colors.has(s)) throw new Error("Track part color does not exist"); + const h = vb(r, a), + d = new yn(e * Gb.partSize, t * Gb.partSize, n * Gb.partSize), + u = (new qn).compose(d, h, new yn(1, 1, 1)), + p = new Hb(e, t, n, r, a, s, c, u, o, l); + Vb(this, Ib, "f").push(p); + c.configuration.tiles.rotated(r, a).forEach(((i, r, a) => { + const s = (e + i).toString() + "|" + (t + r).toString() + "|" + (n + a).toString(); + if (t + r < 0) throw new Error("Track part below ground"); + { + const e = Vb(this, Rb, "f").get(s); + null == e ? Vb(this, Rb, "f").set(s, [p]) : e.push(p) + } + })); + const f = Vb(this, Lb, "f").get(i); + null == f ? Vb(this, Lb, "f").set(i, [p]) : f.push(p) + } + deletePartsAt(e, t, n) { + const i = Vb(this, Rb, "f").get(e.toString() + "|" + t.toString() + "|" + n.toString()); + if (null == i) return !1; + for (const e of i) Vb(this, Mb, "m", Ob).call(this, e); + return !0 + } + deleteSpecificPart(e, t, n, i, r, a) { + for (const s of Vb(this, Ib, "f")) + if (s.type.configuration.id == e && s.x == t && s.y == n && s.z == i && s.rotation == r && s.rotationAxis == a) return Vb(this, Mb, "m", Ob).call(this, s), !0; + return !1 + } + getBounds() { + return Vb(this, Db, "f") + } + shortRaycast(e) { + const t = new yn(Math.floor(e.ray.origin.x / Gb.partSize), Math.floor(e.ray.origin.y / Gb.partSize), Math.floor(e.ray.origin.z / Gb.partSize)), + n = new Set; + for (let e = -1; e <= 0; e++) + for (let i = -1; i <= 0; i++) + for (let r = -1; r <= 0; r++) { + const a = Vb(this, Mb, "m", zb).call(this, t.x + e, t.y + i, t.z + r); + for (const e of a) n.add(e) + } + let i = null; + for (const t of n) { + let n = t.color; + n == Jy.Default && (n = Jy.Summer); + const r = t.type.colors.get(n); + if (null == r) throw new Error("Track part is not loaded yet"); + if (null == i) { + r.matrixWorld.copy(t.matrix); + const n = e.intersectObject(r, !0); + n.length > 0 && (i = n[0]) + } + } + return i + } + generateMeshes() { + Vb(this, Mb, "m", Ub).call(this); + const e = Vb(this, Pb, "f").getSunPosition(), + t = new pn(e.x, e.y, e.z, 0); + let n, i = null; + if (Vb(this, _b, "f").getSettingBoolean($o.TrackShadowEnabled)) switch (this.environment) { + case QA.Summer: + i = new Wi(1192238); + break; + case QA.Winter: + i = new Wi(3825803); + break; + case QA.Desert: + i = new Wi(3883831) + } + switch (this.environment) { + case QA.Summer: + n = Jy.Summer; + break; + case QA.Winter: + n = Jy.Winter; + break; + case QA.Desert: + n = Jy.Desert + } + for (const e of Vb(this, Cb, "f").getAllParts()) + for (const [r, a] of e.colors) { + const s = []; + for (const t of Vb(this, Ib, "f")) { + let i = t.color; + i == Jy.Default && (i = n), t.type == e && i == r && s.push(t) + } + if (s.length > 0) { + if (null == a) throw new Error("Mesh is not loaded"); + const e = new ua(a.geometry, a.material, s.length); + e.frustumCulled = !1, e.receiveShadow = !0; + for (let t = 0; t < s.length; ++t) e.setMatrixAt(t, s[t].matrix); + if (Vb(this, Tb, "f").scene.add(e), Vb(this, Bb, "f").push(e), null != i) { + const n = new RA(e, i); + n.update(new ga(new yn(0, 1, 0), 0), t), Vb(this, Tb, "f").scene.add(n), Vb(this, Bb, "f").push(n) + } + } + } + Vb(this, Mb, "m", Fb).call(this) + } + getCheckpoints() { + let e = []; + const t = Vb(this, Cb, "f").getPartTypesWithDetector(XA.Checkpoint); + for (const n of t) { + const t = Vb(this, Lb, "f").get(n); + null != t && (e = e.concat(t)) + } + return e.map((e => { + if (null == e.checkpointOrder) throw new Error("Checkpoint has no checkpoint order"); + if (null == e.type.configuration.detector) throw new Error("Checkpoint has no detector"); + return { + x: e.x, + y: e.y, + z: e.z, + rotation: e.rotation, + rotationAxis: e.rotationAxis, + type: e.type.configuration.id, + checkpointOrder: e.checkpointOrder, + detector: e.type.configuration.detector + } + })) + } + getCheckpointOrders() { + let e = []; + const t = Vb(this, Cb, "f").getPartTypesWithDetector(XA.Checkpoint); + for (const n of t) { + const t = Vb(this, Lb, "f").get(n); + null != t && (e = e.concat(t)) + } + return e.map((e => { + if (null == e.checkpointOrder) throw new Error("Checkpoint has no checkpoint order"); + if (null == e.type.configuration.detector) throw new Error("Checkpoint has no detector"); + return e.checkpointOrder + })) + } + getTotalNumberOfCheckpointIndices() { + let e = []; + const t = Vb(this, Cb, "f").getPartTypesWithDetector(XA.Checkpoint); + for (const n of t) { + const t = Vb(this, Lb, "f").get(n); + null != t && (e = e.concat(t)) + } + return e.map((e => e.checkpointOrder)).filter(((e, t, n) => n.indexOf(e) == t)).length + } + getStart() { + let e = -1 / 0, + t = null; + for (const [n, i] of Vb(this, Lb, "f")) { + const r = Vb(this, Cb, "f").getPartStartOffset(n); + if (i.length > 0 && null != r) + for (const n of i) { + if (null == n.startOrder) throw new Error("Start part has no start order"); + n.startOrder >= e && (e = n.startOrder, t = { + part: n, + startOffset: r + }) + } + } + return null != t ? { + x: t.part.x, + y: t.part.y, + z: t.part.z, + rotation: t.part.rotation, + rotationAxis: t.part.rotationAxis, + startOffset: t.startOffset + } : null + } + getStartTransform() { + const e = this.getStart(); + if (null != e) { + const t = vb(e.rotation, e.rotationAxis).multiply((new wn).setFromEuler(new ai(0, Math.PI, 0))), + n = e.startOffset; + return n.applyQuaternion(t), { + position: new yn(e.x * Gb.partSize + n.x, e.y * Gb.partSize + n.y, e.z * Gb.partSize + n.z), + quaternion: t + } + } + return null + } + getNextStartOrder() { + let e = 0; + for (const [t, n] of Vb(this, Lb, "f")) { + const i = Vb(this, Cb, "f").getPartStartOffset(t); + if (n.length > 0 && null != i) + for (const t of n) { + if (null == t.startOrder) throw new Error("Start part has no start order"); + e = Math.max(e, t.startOrder + 1) + } + } + return e + } + getTrackData() { + const e = new Sb(this.environment, Vb(this, Pb, "f")); + for (const t of Vb(this, Ib, "f")) e.addPart(t.x, t.y, t.z, t.type.configuration.id, t.rotation, t.rotationAxis, t.color, t.checkpointOrder, t.startOrder); + return e + } + loadTrackData(e, t = !0) { + return this.clear(), Wb(this, Nb, t ? e.getId() : null, "f"), this.environment = e.environment, this.sunDirection = e.sunDirection.clone(), e.forEachPart(((e, t, n, i, r, a, s, o, l) => { + this.setPart(e, t, n, i, r, a, s, o, l) + })), !0 + } + } + Tb = new WeakMap, _b = new WeakMap, Cb = new WeakMap, Pb = new WeakMap, Ib = new WeakMap, Rb = new WeakMap, Lb = new WeakMap, Db = new WeakMap, Nb = new WeakMap, Bb = new WeakMap, Mb = new WeakSet, Ub = function() { + for (const e of Vb(this, Bb, "f")) Vb(this, Tb, "f").scene.remove(e); + Vb(this, Bb, "f").length = 0 + }, zb = function(e, t, n) { + var i; + return null !== (i = Vb(this, Rb, "f").get(e.toString() + "|" + t.toString() + "|" + n.toString())) && void 0 !== i ? i : [] + }, Ob = function(e) { + const t = Vb(this, Ib, "f").indexOf(e); + if (!(t >= 0)) throw new Error("Track part missing from parts list"); + Vb(this, Ib, "f").splice(t, 1); + e.type.configuration.tiles.rotated(e.rotation, e.rotationAxis).forEach(((t, n, i) => { + const r = (e.x + t).toString() + "|" + (e.y + n).toString() + "|" + (e.z + i).toString(), + a = Vb(this, Rb, "f").get(r); + if (null == a) throw new Error("Track part section missing"); + { + const t = a.indexOf(e); + if (!(t >= 0)) throw new Error("Track part missing from parts by position map"); + a.splice(t, 1), 0 == a.length && Vb(this, Rb, "f").delete(r) + } + })); + const n = Vb(this, Lb, "f").get(e.type.configuration.id); + if (null == n) throw new Error("Track part type is missing from parts by type map"); + for (let t = 0; t < n.length; ++t) { + if (n[t] == e) { + n.splice(t, 1); + break + } + if (t == n.length - 1) throw new Error("Track part is missing from parts by type map") + } + }, Fb = function() { + let e = 1 / 0, + t = 1 / 0, + n = -1 / 0, + i = -1 / 0; + for (const r of Vb(this, Ib, "f")) e = Math.min(r.x, e), t = Math.min(r.z, t), n = Math.max(r.x, n), i = Math.max(r.z, i); + Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(i) ? Wb(this, Db, { + min: new jt(e, t), + max: new jt(n, i) + }, "f") : Wb(this, Db, { + min: new jt, + max: new jt + }, "f") + }, Gb.partSize = 5; + const jb = Gb; + var Qb, Yb, Kb, qb, Xb, Zb = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Jb = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class $b { + constructor(e) { + Yb.set(this, void 0), Kb.set(this, []), qb.set(this, []), Zb(this, Yb, e, "f") + } + dispose() { + for (const e of Jb(this, Kb, "f")) { + if (Array.isArray(e.material)) + for (const t of e.material) t.dispose(); + else e.material.dispose(); + e.geometry.dispose(), Jb(this, Yb, "f").scene.remove(e) + } + Jb(this, Kb, "f").length = 0 + } + refresh(e) { + const t = e.getCheckpoints(); + let n = !1; + if (t.length == Jb(this, qb, "f").length) + for (let e = 0; e < t.length; e++) { + const i = t[e], + r = Jb(this, qb, "f")[e]; + if (i.x != r.x || i.y != r.y || i.z != r.z || i.rotation != r.rotation || i.rotationAxis != r.rotationAxis || i.type != r.type || i.checkpointOrder != r.checkpointOrder) { + n = !0; + break + } + } else n = !0; + if (n) { + this.dispose(), Zb(this, qb, t, "f"); + const e = new ji({ + color: 16777215 + }); + for (const n of t) { + if (null == Jb(Qb, Qb, "f", Xb)) throw new Error("Font is not loaded yet"); + const t = vb(n.rotation, n.rotationAxis), + i = new yn(...n.detector.center).add(new yn(0, -1.3, 0)).applyQuaternion(t); + i.add(new yn(n.x * jb.partSize, n.y * jb.partSize, n.z * jb.partSize)); + const r = Jb(Qb, Qb, "f", Xb).generateShapes((n.checkpointOrder + 1).toString(), 4), + a = new Bs(r); + a.computeBoundingBox(); + const s = a.boundingBox; + if (null == s) throw new Error("Bounding box is null"); + const o = -.5 * (s.max.x - s.min.x); + a.translate(o, 0, 0); + const l = new wr(a, e); + l.position.copy(i), l.quaternion.copy(t), Jb(this, Yb, "f").scene.add(l), Jb(this, Kb, "f").push(l); + const c = new wr(a, e); + c.position.copy(i), c.quaternion.copy(t).multiply((new wn).setFromEuler(new ai(0, Math.PI, 0))), Jb(this, Yb, "f").scene.add(c), Jb(this, Kb, "f").push(c) + } + } + } + static initResources(e) { + e.addResource(); + (new CA).load("forced_square.json", (t => { + Zb(this, Qb, t, "f", Xb), e.loadedResource() + })) + } + } + Qb = $b, Yb = new WeakMap, Kb = new WeakMap, qb = new WeakMap, Xb = { + value: null + }; + const ex = $b; + var tx = n(8909), + nx = {}; + nx.styleTagTransform = u(), nx.setAttributes = l(), nx.insert = s().bind(null, "head"), nx.domAPI = r(), nx.insertStyleElement = h(); + t()(tx.A, nx); + tx.A && tx.A.locals && tx.A.locals; + var ix, rx, ax, sx, ox, lx, cx, hx, dx, ux, px = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + fx = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + rx = new WeakMap, ax = new WeakMap, sx = new WeakMap, ox = new WeakMap, lx = new WeakMap, cx = new WeakMap, hx = new WeakMap, ix = new WeakSet, dx = function() { + fx(this, lx, "f").textContent = fx(this, ax, "f").get("Checkpoint order") + ": " + (this.checkpointOrder + 1).toString() + }, ux = function(e) { + const t = e.getCheckpointOrders(), + n = new Set; + for (const e of t) n.add(e); + for (let e = 0; e < 65535; e++) + if (!n.has(e)) return e; + return 65535 + }; + const mx = class { + constructor(e, t, n, i) { + ix.add(this), rx.set(this, void 0), ax.set(this, void 0), sx.set(this, void 0), ox.set(this, void 0), lx.set(this, void 0), cx.set(this, 0), hx.set(this, void 0), px(this, rx, e, "f"), px(this, ax, t, "f"), px(this, sx, i, "f"), px(this, ox, document.createElement("div"), "f"), fx(this, ox, "f").className = "hidden", e.appendChild(fx(this, ox, "f")), fx(this, sx, "f").addChangeListener(px(this, hx, (e => { + e ? fx(this, ox, "f").classList.add("touch") : fx(this, ox, "f").classList.remove("touch") + }), "f")); + const r = document.createElement("div"); + r.className = "buttons", fx(this, ox, "f").appendChild(r); + const a = document.createElement("button"); + a.addEventListener("click", (() => { + n.playUIClick(), this.checkpointOrder++ + })), r.appendChild(a); + const s = document.createElement("img"); + s.src = "images/arrow_up.svg", a.appendChild(s); + const o = document.createElement("button"); + o.addEventListener("click", (() => { + n.playUIClick(), this.checkpointOrder-- + })), r.appendChild(o); + const l = document.createElement("img"); + l.src = "images/arrow_down.svg", o.appendChild(l), px(this, lx, document.createElement("p"), "f"), fx(this, ox, "f").appendChild(fx(this, lx, "f")), fx(this, ix, "m", dx).call(this) + } + dispose() { + fx(this, rx, "f").removeChild(fx(this, ox, "f")), fx(this, sx, "f").removeChangeListener(fx(this, hx, "f")) + } + hide() { + fx(this, ox, "f").classList.add("hidden"), fx(this, ox, "f").classList.remove("editor-checkpoint-order") + } + show() { + fx(this, ox, "f").classList.remove("hidden"), fx(this, ox, "f").classList.add("editor-checkpoint-order") + } + reset() { + this.checkpointOrder = 0 + } + get checkpointOrder() { + return fx(this, cx, "f") + } + set checkpointOrder(e) { + px(this, cx, Math.max(0, Math.min(65535, e)), "f"), fx(this, ix, "m", dx).call(this) + } + setFromExistingCheckpoints(e) { + this.checkpointOrder = fx(this, ix, "m", ux).call(this, e) + } + }; + var gx = n(5007), + vx = {}; + vx.styleTagTransform = u(), vx.setAttributes = l(), vx.insert = s().bind(null, "head"), vx.domAPI = r(), vx.insertStyleElement = h(); + t()(gx.A, vx); + gx.A && gx.A.locals && gx.A.locals; + var wx, yx, Ax, bx, xx, kx, Ex, Sx, Mx, Tx = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + _x = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + wx = new WeakMap, yx = new WeakMap, Ax = new WeakMap, bx = new WeakMap, xx = new WeakMap, kx = new WeakMap, Ex = new WeakMap, Sx = new WeakMap, Mx = new WeakMap; + const Cx = class { + constructor(e, t, n, i, r) { + wx.set(this, void 0), yx.set(this, void 0), Ax.set(this, void 0), bx.set(this, void 0), xx.set(this, void 0), kx.set(this, void 0), Ex.set(this, !1), Sx.set(this, !1), Mx.set(this, void 0), Tx(this, wx, e, "f"), Tx(this, yx, t, "f"), Tx(this, Ax, n, "f"), Tx(this, bx, document.createElement("div"), "f"), _x(this, bx, "f").className = "editor-height-selector", e.appendChild(_x(this, bx, "f")), _x(this, Ax, "f").addChangeListener(Tx(this, kx, (e => { + e ? _x(this, bx, "f").classList.add("touch") : _x(this, bx, "f").classList.remove("touch") + }), "f")), Tx(this, xx, document.createElement("p"), "f"), _x(this, bx, "f").appendChild(_x(this, xx, "f")); + const a = document.createElement("div"); + a.className = "buttons", _x(this, bx, "f").appendChild(a); + const s = document.createElement("button"); + s.addEventListener("pointerdown", (() => { + if (i(), !_x(this, Ex, "f")) { + Tx(this, Ex, !0, "f"); + const e = () => { + _x(this, Ex, "f") && (i(), setTimeout(e, 50)) + }; + setTimeout(e, 500) + } + })), a.appendChild(s); + const o = document.createElement("img"); + o.src = "images/arrow_up.svg", s.appendChild(o); + const l = document.createElement("button"); + l.addEventListener("pointerdown", (() => { + if (r(), !_x(this, Sx, "f")) { + Tx(this, Sx, !0, "f"); + const e = () => { + _x(this, Sx, "f") && (r(), setTimeout(e, 50)) + }; + setTimeout(e, 500) + } + })), a.appendChild(l); + const c = document.createElement("img"); + c.src = "images/arrow_down.svg", l.appendChild(c), Tx(this, Mx, (() => { + Tx(this, Ex, !1, "f"), Tx(this, Sx, !1, "f") + }), "f"), window.addEventListener("pointerup", _x(this, Mx, "f")) + } + refresh(e) { + _x(this, xx, "f").textContent = _x(this, yx, "f").get("Height") + ": " + e.toString() + } + dispose() { + _x(this, wx, "f").removeChild(_x(this, bx, "f")), _x(this, Ax, "f").removeChangeListener(_x(this, kx, "f")), window.removeEventListener("pointerup", _x(this, Mx, "f")) + } + }; + var Px; + ! function(e) { + e[e.VehicleAccelerate = 0] = "VehicleAccelerate", e[e.VehicleTurnRight = 1] = "VehicleTurnRight", e[e.VehicleBrake = 2] = "VehicleBrake", e[e.VehicleTurnLeft = 3] = "VehicleTurnLeft", e[e.VehicleCheckpointReset = 4] = "VehicleCheckpointReset", e[e.VehicleStartReset = 5] = "VehicleStartReset", e[e.VehicleCockpitCamera = 6] = "VehicleCockpitCamera", e[e.ToggleUI = 7] = "ToggleUI", e[e.Pause = 8] = "Pause", e[e.EditorRotatePart = 9] = "EditorRotatePart", e[e.EditorHeightModifier = 10] = "EditorHeightModifier", e[e.EditorDelete = 11] = "EditorDelete", e[e.EditorMoveForwards = 12] = "EditorMoveForwards", e[e.EditorMoveRight = 13] = "EditorMoveRight", e[e.EditorMoveBackwards = 14] = "EditorMoveBackwards", e[e.EditorMoveLeft = 15] = "EditorMoveLeft", e[e.EditorRotateViewUp = 16] = "EditorRotateViewUp", e[e.EditorRotateViewDown = 17] = "EditorRotateViewDown", e[e.EditorRotateViewLeft = 18] = "EditorRotateViewLeft", e[e.EditorRotateViewRight = 19] = "EditorRotateViewRight", e[e.EditorMoveDown = 20] = "EditorMoveDown", e[e.EditorMoveUp = 21] = "EditorMoveUp", e[e.EditorTest = 22] = "EditorTest", e[e.EditorPick = 23] = "EditorPick", e[e.ToggleFpsCounter = 24] = "ToggleFpsCounter", e[e.ToggleSpectatorCamera = 25] = "ToggleSpectatorCamera", e[e.SpectatorMoveForwards = 26] = "SpectatorMoveForwards", e[e.SpectatorMoveRight = 27] = "SpectatorMoveRight", e[e.SpectatorMoveBackwards = 28] = "SpectatorMoveBackwards", e[e.SpectatorMoveLeft = 29] = "SpectatorMoveLeft", e[e.SpectatorSpeedModifier = 30] = "SpectatorSpeedModifier" + }(Px || (Px = {})); + const Ix = Px; + var Rx = n(7687), + Lx = {}; + Lx.styleTagTransform = u(), Lx.setAttributes = l(), Lx.insert = s().bind(null, "head"), Lx.domAPI = r(), Lx.insertStyleElement = h(); + t()(Rx.A, Lx); + Rx.A && Rx.A.locals && Rx.A.locals; + var Dx, Nx, Bx, Ux, zx, Ox, Fx, Wx = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Vx = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + Dx = new WeakMap, Nx = new WeakMap, Bx = new WeakMap, Ux = new WeakMap, zx = new WeakMap, Ox = new WeakMap, Fx = new WeakMap; + const Hx = class { + constructor(e, t, n, i, r, a, s, o) { + Dx.set(this, void 0), Nx.set(this, void 0), Bx.set(this, void 0), Ux.set(this, void 0), zx.set(this, void 0), Ox.set(this, void 0), Fx.set(this, void 0), Wx(this, Dx, r, "f"); + const l = document.getElementById("ui"); + if (null == l) throw new Error("UI element not found"); + Wx(this, Nx, l, "f"), Wx(this, Bx, document.createElement("div"), "f"), Vx(this, Bx, "f").className = "track-export", Vx(this, Nx, "f").appendChild(Vx(this, Bx, "f")); + const c = document.createElement("div"); + c.className = "background", Vx(this, Bx, "f").appendChild(c); + const h = document.createElement("div"); + h.className = "box", Vx(this, Bx, "f").appendChild(h); + const d = document.createElement("div"); + d.className = "bar", h.appendChild(d); + const u = document.createElement("button"); + u.className = "button", u.innerHTML = ' ', u.append(document.createTextNode(r.get("Back"))), u.addEventListener("click", (() => { + a.playUIClick(), t() + })), d.appendChild(u), Wx(this, zx, document.createElement("button"), "f"), Vx(this, zx, "f").className = "hidden", Vx(this, zx, "f").innerHTML = ' ', Vx(this, zx, "f").append(document.createTextNode(r.get("Copy"))), Vx(this, zx, "f").addEventListener("click", (() => { + a.playUIClick(); + try { + navigator.clipboard.writeText(Vx(this, Ux, "f").value).catch((e => { + console.error(e) + })) + } catch (e) { + console.error(e) + } + })), d.appendChild(Vx(this, zx, "f")), Wx(this, Ox, document.createElement("button"), "f"), Vx(this, Ox, "f").className = "hidden", Vx(this, Ox, "f").innerHTML = ' ', Vx(this, Ox, "f").append(document.createTextNode(r.get("Import"))), Vx(this, Ox, "f").addEventListener("click", (() => { + a.playUIClick(); + const e = () => { + const e = Vx(this, Bx, "f").className; + Vx(this, Bx, "f").className = "hidden", o.show(r.get("Failed to import track"), r.get("Ok"), (() => { + Vx(this, Bx, "f").className = e + })) + }, + i = Vx(this, Ux, "f").value, + l = Sb.fromExportString(i); + if (null == l) e(); + else { + const { + trackMetadata: i, + trackData: a + } = l, c = a.getId(), h = a.createThumbnail(); + if (s.checkCustomTrackNameExists(i.name)) { + const l = Vx(this, Bx, "f").className; + Vx(this, Bx, "f").className = "hidden", o.showConfirm(r.get('The track "{0}" already exists. Do you wish to overwrite it?', [i.name]), r.get("Cancel"), r.get("Overwrite"), (() => { + Vx(this, Bx, "f").className = l + }), (() => { + Vx(this, Bx, "f").className = l, s.saveCustomTrack(i, a) ? null != n ? n(i, a, c, h) : t() : e() + })) + } else s.saveCustomTrack(i, a) ? null != n ? n(i, a, c, h) : t() : e() + } + })), d.appendChild(Vx(this, Ox, "f")), Wx(this, Ux, document.createElement("textarea"), "f"), Vx(this, Ux, "f").spellcheck = !1, h.appendChild(Vx(this, Ux, "f")), i && (Vx(this, Ux, "f").placeholder = Vx(this, Dx, "f").get("Paste track data here...")), Vx(this, Ux, "f").value = e, Vx(this, Ux, "f").readOnly = !i, i ? (Vx(this, zx, "f").className = "hidden", Vx(this, Ox, "f").className = "button right") : (Vx(this, zx, "f").className = "button right", Vx(this, Ox, "f").className = "hidden"), window.addEventListener("keydown", Wx(this, Fx, (e => { + "Escape" == e.code && (t(), e.preventDefault()) + }), "f")) + } + dispose() { + Vx(this, Nx, "f").removeChild(Vx(this, Bx, "f")), window.removeEventListener("keydown", Vx(this, Fx, "f")) + } + }; + var Gx = n(8353), + jx = {}; + jx.styleTagTransform = u(), jx.setAttributes = l(), jx.insert = s().bind(null, "head"), jx.domAPI = r(), jx.insertStyleElement = h(); + t()(Gx.A, jx); + Gx.A && Gx.A.locals && Gx.A.locals; + var Qx = n(7479), + Yx = {}; + Yx.styleTagTransform = u(), Yx.setAttributes = l(), Yx.insert = s().bind(null, "head"), Yx.domAPI = r(), Yx.insertStyleElement = h(); + t()(Qx.A, Yx); + Qx.A && Qx.A.locals && Qx.A.locals; + var Kx, qx, Xx, Zx, Jx, $x, ek, tk, nk, ik, rk, ak, sk, ok, lk, ck, hk, dk = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + uk = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class pk { + constructor(e, t, n = !1) { + Kx.set(this, void 0), qx.set(this, void 0), Xx.set(this, void 0), Zx.set(this, void 0), Jx.set(this, null), $x.set(this, void 0), ek.set(this, null), tk.set(this, null), nk.set(this, void 0), ik.set(this, null), rk.set(this, []), ak.set(this, void 0), sk.set(this, void 0), ok.set(this, void 0), lk.set(this, null), ck.set(this, null), hk.set(this, null), this.record = null, dk(this, Kx, e, "f"), dk(this, qx, t, "f"); + const i = document.getElementById("ui"); + if (null == i) throw new Error("UI element not found"); + if (dk(this, Xx, i, "f"), dk(this, Zx, document.createElement("div"), "f"), "off" == t.getSetting($o.Timer) ? uk(this, Zx, "f").className = "timer hidden" : "top" == t.getSetting($o.Timer) ? uk(this, Zx, "f").className = "timer up" : uk(this, Zx, "f").className = "timer", n) dk(this, ak, null, "f"); + else { + const t = document.createElement("div"); + t.className = "left", uk(this, Zx, "f").appendChild(t); + const n = document.createElement("div"); + n.className = "title-container", t.appendChild(n), dk(this, Jx, document.createElement("h2"), "f"), uk(this, Jx, "f").className = "title", uk(this, Jx, "f").textContent = e.get("Record"), n.appendChild(uk(this, Jx, "f")), dk(this, tk, document.createElement("h2"), "f"), uk(this, tk, "f").className = "checkpoint-time", n.appendChild(uk(this, tk, "f")); + const i = document.createElement("div"); + i.className = "time", t.appendChild(i), dk(this, ak, document.createElement("p"), "f"), uk(this, ak, "f").className = "small", uk(this, ak, "f").textContent = "- - -", i.appendChild(uk(this, ak, "f")) + } + const r = document.createElement("div"); + r.className = "center", uk(this, Zx, "f").appendChild(r); + const a = document.createElement("div"); + a.className = "title-container", r.appendChild(a), dk(this, $x, document.createElement("h2"), "f"), uk(this, $x, "f").className = "title", uk(this, $x, "f").textContent = e.get("Current"), a.appendChild(uk(this, $x, "f")), dk(this, nk, document.createElement("h2"), "f"), uk(this, nk, "f").className = "checkpoint-time", a.appendChild(uk(this, nk, "f")); + const s = document.createElement("div"); + if (s.className = "time", r.appendChild(s), dk(this, sk, document.createElement("p"), "f"), uk(this, sk, "f").textContent = "- - -", s.appendChild(uk(this, sk, "f")), n) dk(this, ok, null, "f"); + else { + const t = document.createElement("div"); + t.className = "right", uk(this, Zx, "f").appendChild(t); + const n = document.createElement("div"); + n.className = "title-container", t.appendChild(n), dk(this, ek, document.createElement("h2"), "f"), uk(this, ek, "f").className = "title", uk(this, ek, "f").textContent = e.get("Difference"), n.appendChild(uk(this, ek, "f")), dk(this, ik, document.createElement("h2"), "f"), uk(this, ik, "f").className = "checkpoint-time", n.appendChild(uk(this, ik, "f")); + const i = document.createElement("div"); + i.className = "time", t.appendChild(i), dk(this, ok, document.createElement("p"), "f"), uk(this, ok, "f").className = "small", uk(this, ok, "f").textContent = "- - -", i.appendChild(uk(this, ok, "f")) + } + uk(this, Xx, "f").appendChild(uk(this, Zx, "f")) + } + dispose() { + uk(this, Xx, "f").removeChild(uk(this, Zx, "f")) + } + setOverridePosition(e) { + const t = uk(this, qx, "f").getSetting($o.Timer); + uk(this, Zx, "f").className = "off" == t ? "timer hidden" : (null != e ? e : "top" == t) ? "timer up" : "timer" + } + hideCheckpointTime() { + for (const e of uk(this, rk, "f")) e.cancel(); + uk(this, rk, "f").length = 0 + } + showCheckpointTime(e, t) { + if (this.hideCheckpointTime(), null != uk(this, tk, "f") && null != t && (uk(this, tk, "f").textContent = pk.formatTimeString(t, !1), uk(this, rk, "f").push(uk(this, tk, "f").animate([{ + opacity: 0, + transform: "translateX(20px)", + offset: 0, + easing: "ease-in-out" + }, { + opacity: 1, + transform: "translateX(0)", + offset: 1 / 28, + easing: "ease-in-out" + }, { + opacity: 1, + transform: "translateX(0)", + offset: 27 / 28, + easing: "ease-in-out" + }, { + opacity: 0, + transform: "translateX(-10px)", + offset: 1, + easing: "ease-in-out" + }], { + duration: 3500 + }))), uk(this, nk, "f").textContent = pk.formatTimeString(e, !1), uk(this, rk, "f").push(uk(this, nk, "f").animate([{ + opacity: 0, + transform: "translateX(20px)", + offset: 0, + easing: "ease-in-out" + }, { + opacity: 1, + transform: "translateX(0)", + offset: 1 / 28, + easing: "ease-in-out" + }, { + opacity: 1, + transform: "translateX(0)", + offset: 27 / 28, + easing: "ease-in-out" + }, { + opacity: 0, + transform: "translateX(-10px)", + offset: 1, + easing: "ease-in-out" + }], { + duration: 3500 + })), null != uk(this, ik, "f") && null != t) { + const n = e.difference(t); + uk(this, ik, "f").textContent = pk.formatTimeString(n, !0), n.isNegative() ? (uk(this, ik, "f").classList.remove("red"), uk(this, ik, "f").classList.add("green")) : (uk(this, ik, "f").classList.add("red"), uk(this, ik, "f").classList.remove("green")), uk(this, rk, "f").push(uk(this, ik, "f").animate([{ + opacity: 0, + transform: "translateX(20px)", + offset: 0, + easing: "ease-in-out" + }, { + opacity: 1, + transform: "translateX(0)", + offset: 1 / 28, + easing: "ease-in-out" + }, { + opacity: 1, + transform: "translateX(0)", + offset: 27 / 28, + easing: "ease-in-out" + }, { + opacity: 0, + transform: "translateX(-10px)", + offset: 1, + easing: "ease-in-out" + }], { + duration: 3500 + })) + } + null != uk(this, Jx, "f") && null != t && uk(this, rk, "f").push(uk(this, Jx, "f").animate([{ + opacity: 1, + offset: 0, + easing: "ease-in-out" + }, { + opacity: 0, + offset: 1 / 28, + easing: "ease-in-out" + }, { + opacity: 0, + offset: 27 / 28, + easing: "ease-in-out" + }, { + opacity: 1, + offset: 1, + easing: "ease-in-out" + }], { + duration: 3500 + })), uk(this, rk, "f").push(uk(this, $x, "f").animate([{ + opacity: 1, + offset: 0, + easing: "ease-in-out" + }, { + opacity: 0, + offset: 1 / 28, + easing: "ease-in-out" + }, { + opacity: 0, + offset: 27 / 28, + easing: "ease-in-out" + }, { + opacity: 1, + offset: 1, + easing: "ease-in-out" + }], { + duration: 3500 + })), null != uk(this, ek, "f") && null != t && uk(this, rk, "f").push(uk(this, ek, "f").animate([{ + opacity: 1, + offset: 0, + easing: "ease-in-out" + }, { + opacity: 0, + offset: 1 / 28, + easing: "ease-in-out" + }, { + opacity: 0, + offset: 27 / 28, + easing: "ease-in-out" + }, { + opacity: 1, + offset: 1, + easing: "ease-in-out" + }], { + duration: 3500 + })) + } + static formatTimeString(e, t = !1) { + if (null == e) return "---"; + { + const n = Math.abs(e.numberOfFrames), + i = Math.floor(n / 6e4), + r = Math.floor((n - 6e4 * i) / 1e3), + a = n - 6e4 * i - 1e3 * r; + let s; + return s = t ? e.isNegative() ? "-" : "+" : "", s + i.toString().padStart(2, "0") + ":" + r.toString().padStart(2, "0") + "." + a.toString().padStart(3, "0") + } + } + update(e) { + var t; + const n = null !== (t = e.getFinishTime()) && void 0 !== t ? t : e.getTime(); + let i; + if (i = null != this.record ? n.difference(this.record) : null, null != uk(this, ak, "f")) { + const e = pk.formatTimeString(this.record, !1); + if (e != uk(this, lk, "f")) { + uk(this, ak, "f").innerHTML = ""; + for (const t of e) { + const e = document.createElement("span"); + e.textContent = t, uk(this, ak, "f").appendChild(e) + } + dk(this, lk, e, "f") + } + null == this.record ? "small center" != uk(this, ak, "f").className && (uk(this, ak, "f").className = "small center") : "small" != uk(this, ak, "f").className && (uk(this, ak, "f").className = "small") + } + const r = pk.formatTimeString(n, !1); + if (r != uk(this, ck, "f")) { + uk(this, sk, "f").innerHTML = ""; + for (const e of r) { + const t = document.createElement("span"); + t.textContent = e, uk(this, sk, "f").appendChild(t) + } + dk(this, ck, r, "f") + } + if (null != uk(this, ok, "f")) { + const e = pk.formatTimeString(i, !0); + if (e != uk(this, hk, "f")) { + uk(this, ok, "f").innerHTML = ""; + for (let t = 0; t < e.length; ++t) { + const n = document.createElement("span"); + 0 == t && Number.isFinite(i) && (n.className = "sign"), n.textContent = e[t], uk(this, ok, "f").appendChild(n) + } + dk(this, hk, e, "f") + } + null == i ? "small center" != uk(this, ok, "f").className && (uk(this, ok, "f").className = "small center") : i.isNegative() ? "small green" != uk(this, ok, "f").className && (uk(this, ok, "f").className = "small green") : "small red" != uk(this, ok, "f").className && (uk(this, ok, "f").className = "small red") + } + } + set nickname(e) { + null != uk(this, Jx, "f") ? uk(this, Jx, "f").textContent = null != e ? '"' + e + '"' : uk(this, Kx, "f").get("Record") : uk(this, $x, "f").textContent = null != e ? '"' + e + '"' : uk(this, Kx, "f").get("Current") + } + } + Kx = new WeakMap, qx = new WeakMap, Xx = new WeakMap, Zx = new WeakMap, Jx = new WeakMap, $x = new WeakMap, ek = new WeakMap, tk = new WeakMap, nk = new WeakMap, ik = new WeakMap, rk = new WeakMap, ak = new WeakMap, sk = new WeakMap, ok = new WeakMap, lk = new WeakMap, ck = new WeakMap, hk = new WeakMap; + const fk = pk; + var mk, gk, vk, wk, yk, Ak, bk, xk, kk, Ek, Sk, Mk, Tk, _k, Ck, Pk, Ik, Rk, Lk, Dk, Nk, Bk, Uk, zk, Ok, Fk, Wk, Vk, Hk, Gk, jk, Qk, Yk = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Kk = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + let qk = null, + Xk = 0, + Zk = 0, + Jk = 0; + gk = new WeakMap, vk = new WeakMap, wk = new WeakMap, yk = new WeakMap, Ak = new WeakMap, bk = new WeakMap, xk = new WeakMap, kk = new WeakMap, Ek = new WeakMap, Sk = new WeakMap, Mk = new WeakMap, Tk = new WeakMap, _k = new WeakMap, Ck = new WeakMap, Pk = new WeakMap, Ik = new WeakMap, Rk = new WeakMap, Lk = new WeakMap, Dk = new WeakMap, Nk = new WeakMap, Bk = new WeakMap, Uk = new WeakMap, zk = new WeakMap, Ok = new WeakMap, Fk = new WeakMap, Wk = new WeakMap, Vk = new WeakMap, Hk = new WeakMap, mk = new WeakSet, Gk = function(e, t, n, i, r, a = null) { + const s = document.createElement("div"); + let o; + switch (s.className = "track", e) { + case "official": + o = Kk(this, Lk, "f"); + break; + case "community": + o = Kk(this, Dk, "f"); + break; + case "custom": + o = Kk(this, Nk, "f") + } + let l = o.get(n.environment); + if (null == l) { + let t, i, r, a; + switch (e) { + case "official": + t = Kk(this, Pk, "f"); + break; + case "community": + t = Kk(this, Ik, "f"); + break; + case "custom": + t = Kk(this, Rk, "f") + } + switch (l = document.createElement("div"), o.set(n.environment, l), n.environment) { + case QA.Summer: + t.prepend(l); + break; + case QA.Winter: { + const e = o.get(QA.Desert); + null != e ? t.insertBefore(l, e) : t.appendChild(l); + break + } + case QA.Desert: + t.appendChild(l) + } + switch (n.environment) { + case QA.Summer: + i = "summer", r = Kk(this, vk, "f").get("Summer"), a = "images/summer.svg"; + break; + case QA.Winter: + i = "winter", r = Kk(this, vk, "f").get("Winter"), a = "images/winter_colored.svg"; + break; + case QA.Desert: + i = "desert", r = Kk(this, vk, "f").get("Desert"), a = "images/desert_colored.svg" + } + const s = document.createElement("div"); + s.className = "environment-title " + i, s.textContent = r, l.appendChild(s); + const c = document.createElement("img"); + c.src = a, s.prepend(c) + } + l.appendChild(s); + const c = document.createElement("button"); + c.className = "button", c.addEventListener("click", (() => { + Kk(this, wk, "f").playUIClick(), Kk(this, Sk, "f").call(this, t, n, e, i, r) + })), s.appendChild(c); + const h = document.createElement("div"); + h.className = "track-title", c.appendChild(h); + const d = document.createElement("p"); + let u; + switch (d.textContent = t.name, h.appendChild(d), c.appendChild(r), n.environment) { + case QA.Summer: + u = "images/summer.svg"; + break; + case QA.Winter: + u = "images/winter.svg"; + break; + case QA.Desert: + u = "images/desert.svg" + } + const p = document.createElement("img"); + p.className = "environment", p.src = u, c.appendChild(p); + const f = Kk(this, yk, "f").getRecordTime(Kk(this, bk, "f").profileSlot, i), + m = document.createElement("div"); + if (m.className = "record", m.textContent = null != f ? fk.formatTimeString(f) : Kk(this, vk, "f").get("No record"), c.appendChild(m), null != a) { + const e = document.createElement("button"); + e.className = "delete-button", e.innerHTML = '', e.addEventListener("click", (() => { + Kk(this, wk, "f").playUIClick(), a() + })), s.appendChild(e) + } + Kk(this, Bk, "f").push({ + category: e, + trackData: n, + trackMetadata: t, + buttonContainer: s + }) + }, jk = function(e) { + qk = e, Kk(this, kk, "f").saveTrackSelectionTab(qk), "official" == e ? (Kk(this, Tk, "f").classList.add("selected"), Kk(this, _k, "f").classList.remove("selected"), Kk(this, Ck, "f").classList.remove("selected"), Kk(this, Pk, "f").classList.add("open"), Kk(this, Ik, "f").classList.remove("open"), Kk(this, Rk, "f").classList.remove("open")) : "community" == e ? (Kk(this, Tk, "f").classList.remove("selected"), Kk(this, _k, "f").classList.add("selected"), Kk(this, Ck, "f").classList.remove("selected"), Kk(this, Pk, "f").classList.remove("open"), Kk(this, Ik, "f").classList.add("open"), Kk(this, Rk, "f").classList.remove("open")) : (Kk(this, Tk, "f").classList.remove("selected"), Kk(this, _k, "f").classList.remove("selected"), Kk(this, Ck, "f").classList.add("selected"), Kk(this, Pk, "f").classList.remove("open"), Kk(this, Ik, "f").classList.remove("open"), Kk(this, Rk, "f").classList.add("open")) + }, Qk = function() { + const e = Kk(this, Uk, "f").value.trim().toLowerCase(); + for (const t of Kk(this, Bk, "f")) t.trackMetadata.name.toLowerCase().includes(e) ? t.buttonContainer.style.display = "" : t.buttonContainer.style.display = "none"; + for (const e of ["official", "community", "custom"]) { + let t; + switch (e) { + case "official": + t = Kk(this, Lk, "f"); + break; + case "community": + t = Kk(this, Dk, "f"); + break; + case "custom": + t = Kk(this, Nk, "f") + } + for (const [n, i] of t.entries()) Kk(this, Bk, "f").some((t => t.category == e && t.trackData.environment == n && "none" != t.buttonContainer.style.display)) ? i.style.display = "" : i.style.display = "none" + } + if (null == qk && (qk = Kk(this, kk, "f").loadTrackSelectionTab()), Kk(this, Bk, "f").filter((e => e.category == qk)).every((e => "none" == e.buttonContainer.style.display))) + for (const e of ["official", "community", "custom"]) + if (Kk(this, Bk, "f").some((t => t.category == e && "none" != t.buttonContainer.style.display))) { + Kk(this, mk, "m", jk).call(this, e); + break + } + }; + const $k = class { + constructor(e, t, n, i, r, a, s, o, l, c, h) { + mk.add(this), gk.set(this, void 0), vk.set(this, void 0), wk.set(this, void 0), yk.set(this, void 0), Ak.set(this, void 0), bk.set(this, void 0), xk.set(this, void 0), kk.set(this, void 0), Ek.set(this, void 0), Sk.set(this, void 0), Mk.set(this, void 0), Tk.set(this, void 0), _k.set(this, void 0), Ck.set(this, void 0), Pk.set(this, void 0), Ik.set(this, void 0), Rk.set(this, void 0), Lk.set(this, new Map), Dk.set(this, new Map), Nk.set(this, new Map), Bk.set(this, []), Uk.set(this, void 0), zk.set(this, null), Ok.set(this, !1), Fk.set(this, !1), Wk.set(this, void 0), Vk.set(this, void 0), Hk.set(this, void 0), Yk(this, gk, e, "f"), Yk(this, vk, t, "f"), Yk(this, wk, n, "f"), Yk(this, yk, i, "f"), Yk(this, Ak, r, "f"), Yk(this, bk, a, "f"), Yk(this, xk, s, "f"), Yk(this, kk, o, "f"), Yk(this, Ek, l, "f"), Yk(this, Sk, h, "f"), Yk(this, Mk, document.createElement("div"), "f"), Kk(this, Mk, "f").className = "hidden", e.appendChild(Kk(this, Mk, "f")); + const d = document.createElement("div"); + d.className = "bar", Kk(this, Mk, "f").appendChild(d); + const u = document.createElement("div"); + u.className = "category-container", Kk(this, Mk, "f").appendChild(u), Yk(this, Tk, document.createElement("button"), "f"), Kk(this, Tk, "f").className = "button official selected", Kk(this, Tk, "f").append(document.createTextNode(Kk(this, vk, "f").get("Official tracks"))), Kk(this, Tk, "f").addEventListener("click", (() => { + Kk(this, wk, "f").playUIClick(), Kk(this, mk, "m", jk).call(this, "official") + })), u.appendChild(Kk(this, Tk, "f")); + const p = document.createElement("div"); + p.className = "cover", Kk(this, Tk, "f").prepend(p), Yk(this, _k, document.createElement("button"), "f"), Kk(this, _k, "f").className = "button community", Kk(this, _k, "f").append(document.createTextNode(Kk(this, vk, "f").get("Community tracks"))), Kk(this, _k, "f").addEventListener("click", (() => { + Kk(this, wk, "f").playUIClick(), Kk(this, mk, "m", jk).call(this, "community") + })), u.appendChild(Kk(this, _k, "f")); + const f = document.createElement("div"); + f.className = "cover", Kk(this, _k, "f").prepend(f), Yk(this, Ck, document.createElement("button"), "f"), Kk(this, Ck, "f").className = "button custom", Kk(this, Ck, "f").append(document.createTextNode(Kk(this, vk, "f").get("Custom tracks"))), Kk(this, Ck, "f").addEventListener("click", (() => { + Kk(this, wk, "f").playUIClick(), Kk(this, mk, "m", jk).call(this, "custom") + })), u.appendChild(Kk(this, Ck, "f")); + const m = document.createElement("div"); + m.className = "cover", Kk(this, Ck, "f").prepend(m), Yk(this, Pk, document.createElement("div"), "f"), Kk(this, Pk, "f").className = "tracks-container open", Kk(this, Mk, "f").appendChild(Kk(this, Pk, "f")), Yk(this, Ik, document.createElement("div"), "f"), Kk(this, Ik, "f").className = "tracks-container", Kk(this, Mk, "f").appendChild(Kk(this, Ik, "f")), Yk(this, Rk, document.createElement("div"), "f"), Kk(this, Rk, "f").className = "tracks-container", Kk(this, Mk, "f").appendChild(Kk(this, Rk, "f")); + const g = document.createElement("button"); + g.className = "button", l ? (g.innerHTML = ' ', g.append(document.createTextNode(Kk(this, vk, "f").get("Cancel")))) : (g.innerHTML = ' ', g.append(document.createTextNode(Kk(this, vk, "f").get("Back")))), g.addEventListener("click", (() => { + Kk(this, wk, "f").playUIClick(), c() + })), d.appendChild(g); + const v = document.createElement("div"); + v.className = "search-bar-container", d.appendChild(v), Yk(this, Uk, document.createElement("input"), "f"), Kk(this, Uk, "f").type = "text", Kk(this, Uk, "f").spellcheck = !1, Kk(this, Uk, "f").autocomplete = "off", Kk(this, Uk, "f").autocapitalize = "off", Kk(this, Uk, "f").enterKeyHint = "search", Kk(this, Uk, "f").placeholder = Kk(this, vk, "f").get("Search tracks..."), Kk(this, Uk, "f").addEventListener("input", (() => { + Kk(this, mk, "m", Qk).call(this) + })), v.appendChild(Kk(this, Uk, "f")); + const w = document.createElement("img"); + w.src = "images/search.svg", v.appendChild(w); + const y = document.createElement("button"); + y.className = "button", y.innerHTML = ' ', y.append(document.createTextNode(Kk(this, vk, "f").get("Import"))), y.addEventListener("click", (() => { + Kk(this, wk, "f").playUIClick(), this.hide(), Yk(this, zk, new Hx("", (() => { + var e; + this.show(), null === (e = Kk(this, zk, "f")) || void 0 === e || e.dispose(), Yk(this, zk, null, "f") + }), ((e, t, n, i) => { + var r; + null === (r = Kk(this, zk, "f")) || void 0 === r || r.dispose(), Yk(this, zk, null, "f"), Kk(this, mk, "m", jk).call(this, "custom"), Kk(this, Sk, "f").call(this, e, t, "custom", n, i) + }), !0, t, n, r, s), "f") + })), d.appendChild(y), window.addEventListener("keydown", Yk(this, Wk, (e => { + Kk(this, Ok, "f") && "Escape" == e.code && (c(), e.preventDefault()) + }), "f")), Kk(this, Ak, "f").addCustomTracksChangedListener(Yk(this, Vk, (() => { + Kk(this, Fk, "f") && this.refresh() + }), "f")), Kk(this, Pk, "f").addEventListener("scroll", (() => { + Xk = Kk(this, Pk, "f").scrollTop + }), { + passive: !0 + }), Kk(this, Ik, "f").addEventListener("scroll", (() => { + Zk = Kk(this, Ik, "f").scrollTop + }), { + passive: !0 + }), Kk(this, Rk, "f").addEventListener("scroll", (() => { + Jk = Kk(this, Rk, "f").scrollTop + }), { + passive: !0 + }), Kk(this, yk, "f").addRecordChangedCallback(Yk(this, Hk, (() => { + this.refresh() + }), "f")) + } + dispose() { + var e; + Kk(this, gk, "f").removeChild(Kk(this, Mk, "f")), window.removeEventListener("keydown", Kk(this, Wk, "f")), null === (e = Kk(this, zk, "f")) || void 0 === e || e.dispose(), Yk(this, zk, null, "f"), Kk(this, Ak, "f").removeCustomTracksChangedListener(Kk(this, Vk, "f")), Kk(this, yk, "f").removeRecordChangedCallback(Kk(this, Hk, "f")) + } + hide() { + Kk(this, Mk, "f").className = "hidden", Yk(this, Ok, !1, "f") + } + show() { + Kk(this, Ek, "f") ? Kk(this, Mk, "f").className = "track-selection editor-track-selection" : Kk(this, Mk, "f").className = "track-selection", Yk(this, Ok, !0, "f"), Kk(this, Fk, "f") || this.refresh(), null == qk && (qk = Kk(this, kk, "f").loadTrackSelectionTab()), "official" == qk ? (Kk(this, Tk, "f").classList.add("selected"), Kk(this, _k, "f").classList.remove("selected"), Kk(this, Ck, "f").classList.remove("selected"), Kk(this, Pk, "f").classList.add("open"), Kk(this, Ik, "f").classList.remove("open"), Kk(this, Rk, "f").classList.remove("open"), Kk(this, Pk, "f").scrollTop = Xk) : "community" == qk ? (Kk(this, Tk, "f").classList.remove("selected"), Kk(this, _k, "f").classList.add("selected"), Kk(this, Ck, "f").classList.remove("selected"), Kk(this, Pk, "f").classList.remove("open"), Kk(this, Ik, "f").classList.add("open"), Kk(this, Rk, "f").classList.remove("open"), Kk(this, Ik, "f").scrollTop = Zk) : (Kk(this, Tk, "f").classList.remove("selected"), Kk(this, _k, "f").classList.remove("selected"), Kk(this, Ck, "f").classList.add("selected"), Kk(this, Pk, "f").classList.remove("open"), Kk(this, Ik, "f").classList.remove("open"), Kk(this, Rk, "f").classList.add("open"), Kk(this, Rk, "f").scrollTop = Jk) + } + get isOpen() { + return Kk(this, Ok, "f") || null != Kk(this, zk, "f") + } + refresh() { + if (Yk(this, Bk, [], "f"), Kk(this, Pk, "f").innerHTML = "", Kk(this, Ik, "f").innerHTML = "", Kk(this, Rk, "f").innerHTML = "", Kk(this, Lk, "f").clear(), Kk(this, Dk, "f").clear(), Kk(this, Nk, "f").clear(), Kk(this, Ak, "f").forEachOfficialTrack(((e, t, n, i) => { + Kk(this, mk, "m", Gk).call(this, "official", t, n, e, i) + })), Kk(this, Ak, "f").isCommunityTracksEmpty()) { + const e = document.createElement("div"); + e.className = "empty"; + const t = document.createElement("div"); + t.className = "title", t.textContent = Kk(this, vk, "f").get("No community tracks"), e.appendChild(t); + const n = document.createElement("div"); + n.className = "description", n.textContent = Kk(this, vk, "f").get("Community tracks are coming soon"), e.appendChild(n), Kk(this, Ik, "f").appendChild(e) + } else Kk(this, Ak, "f").forEachCommunityTrack(((e, t, n, i) => { + Kk(this, mk, "m", Gk).call(this, "community", t, n, e, i) + })); + if (Kk(this, Ak, "f").isCustomTracksEmpty()) { + const e = document.createElement("div"); + e.className = "empty"; + const t = document.createElement("div"); + t.className = "title", t.textContent = Kk(this, vk, "f").get("No custom tracks"), e.appendChild(t); + const n = document.createElement("div"); + n.className = "description", n.textContent = Kk(this, vk, "f").get("Create a track using the editor or import a track code"), e.appendChild(n), Kk(this, Rk, "f").appendChild(e) + } else Kk(this, Ak, "f").forEachCustomTrack(((e, t, n, i) => { + Kk(this, mk, "m", Gk).call(this, "custom", t, n, e, i, (() => { + this.hide(), Kk(this, xk, "f").showConfirm(Kk(this, vk, "f").get('Are you sure you want to delete "{0}"?', [t.name]), Kk(this, vk, "f").get("Cancel"), Kk(this, vk, "f").get("Delete"), (() => { + this.show() + }), (() => { + Kk(this, Ak, "f").deleteCustomTrack(t.name), this.show() + })) + })) + })); + Kk(this, mk, "m", Qk).call(this), Yk(this, Fk, !0, "f") + } + }; + var eE = n(2346), + tE = {}; + tE.styleTagTransform = u(), tE.setAttributes = l(), tE.insert = s().bind(null, "head"), tE.domAPI = r(), tE.insertStyleElement = h(); + t()(eE.A, tE); + eE.A && eE.A.locals && eE.A.locals; + var nE, iE, rE, aE, sE, oE, lE, cE, hE = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + dE = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + nE = new WeakMap, iE = new WeakMap, rE = new WeakMap, aE = new WeakMap, sE = new WeakMap, oE = new WeakMap, lE = new WeakMap, cE = new WeakMap; + const uE = class { + constructor(e, t, n, i, r, a, s) { + nE.set(this, void 0), iE.set(this, void 0), rE.set(this, void 0), aE.set(this, void 0), sE.set(this, void 0), oE.set(this, void 0), lE.set(this, []), cE.set(this, void 0), hE(this, nE, e, "f"), hE(this, iE, n, "f"), hE(this, rE, document.createElement("div"), "f"), dE(this, rE, "f").className = "editor-side-toolbar", dE(this, nE, "f").appendChild(dE(this, rE, "f")); + let o = !1; + const l = document.createElement("button"), + c = document.createElement("img"); + c.src = "images/overlapping_disabled.svg", l.appendChild(c), l.addEventListener("click", (() => { + t.playUIClick(), o = !o, c.src = o ? "images/overlapping_enabled.svg" : "images/overlapping_disabled.svg", i(o) + })), dE(this, rE, "f").appendChild(l); + let h = !0; + const d = document.createElement("button"), + u = document.createElement("img"); + u.src = "images/grid_large.svg", d.appendChild(u), d.addEventListener("click", (() => { + t.playUIClick(), h = !h, u.src = h ? "images/grid_large.svg" : "images/grid_small.svg", r(h) + })), dE(this, rE, "f").appendChild(d); + const p = document.createElement("div"); + p.className = "accordion", dE(this, rE, "f").appendChild(p), hE(this, oE, document.createElement("button"), "f"), dE(this, oE, "f").innerHTML = '', dE(this, oE, "f").addEventListener("click", (() => { + t.playUIClick(), p.classList.toggle("open"); + for (const e of p.children) e != dE(this, oE, "f") && e instanceof HTMLButtonElement && (p.classList.contains("open") ? (e.inert = !1, e.tabIndex = 0) : (e.inert = !0, e.tabIndex = -1)) + })), p.appendChild(dE(this, oE, "f")); + for (const e of [nA.YPositive, nA.YNegative, nA.XPositive, nA.XNegative, nA.ZPositive, nA.ZNegative]) { + const n = document.createElement("button"); + switch (n.inert = !0, n.tabIndex = -1, e) { + case nA.YPositive: + n.innerHTML = ''; + break; + case nA.YNegative: + n.innerHTML = ''; + break; + case nA.XPositive: + n.innerHTML = ''; + break; + case nA.XNegative: + n.innerHTML = ''; + break; + case nA.ZPositive: + n.innerHTML = ''; + break; + case nA.ZNegative: + n.innerHTML = '' + } + n.addEventListener("click", (() => { + t.playUIClick(), a(e) + })), e == nA.YPositive && n.classList.add("selected"), p.appendChild(n), dE(this, lE, "f").push([e, n]) + } + const f = document.createElement("button"); + f.className = "rotate", f.addEventListener("click", (() => { + t.playUIClick(), s() + })), dE(this, rE, "f").appendChild(f), hE(this, aE, document.createElement("div"), "f"), dE(this, aE, "f").innerHTML = '', f.appendChild(dE(this, aE, "f")), hE(this, sE, document.createElement("span"), "f"), dE(this, sE, "f").textContent = "0°", f.appendChild(dE(this, sE, "f")), n.addChangeListener(hE(this, cE, (e => { + e ? dE(this, rE, "f").classList.add("touch") : dE(this, rE, "f").classList.remove("touch") + }), "f")) + } + dispose() { + dE(this, nE, "f").removeChild(dE(this, rE, "f")), dE(this, iE, "f").removeChangeListener(dE(this, cE, "f")) + } + set rotation(e) { + dE(this, aE, "f").style.transform = `rotate(${(90*-e).toString()}deg)`, dE(this, sE, "f").textContent = (90 * e).toString() + "°" + } + set rotationAxis(e) { + let t; + switch (e) { + case nA.YPositive: + t = "images/rotation_axis_y_positive.svg"; + break; + case nA.YNegative: + t = "images/rotation_axis_y_negative.svg"; + break; + case nA.XPositive: + t = "images/rotation_axis_x_positive.svg"; + break; + case nA.XNegative: + t = "images/rotation_axis_x_negative.svg"; + break; + case nA.ZPositive: + t = "images/rotation_axis_z_positive.svg"; + break; + case nA.ZNegative: + t = "images/rotation_axis_z_negative.svg" + } + dE(this, oE, "f").innerHTML = ""; + const n = document.createElement("img"); + n.src = t, dE(this, oE, "f").appendChild(n); + for (const [t, n] of dE(this, lE, "f")) t == e ? n.classList.add("selected") : n.classList.remove("selected") + } + hide() { + dE(this, rE, "f").classList.add("hidden") + } + show() { + dE(this, rE, "f").classList.remove("hidden") + } + }; + var pE = n(9242), + fE = {}; + fE.styleTagTransform = u(), fE.setAttributes = l(), fE.insert = s().bind(null, "head"), fE.domAPI = r(), fE.insertStyleElement = h(); + t()(pE.A, fE); + pE.A && pE.A.locals && pE.A.locals; + var mE, gE, vE, wE = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + yE = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + mE = new WeakMap, gE = new WeakMap, vE = new WeakMap; + const AE = class { + constructor(e, t, n, i, r, a, s, o) { + mE.set(this, void 0), gE.set(this, void 0), vE.set(this, void 0); + const l = document.getElementById("ui"); + if (null == l) throw new Error("UI element not found"); + wE(this, mE, l, "f"), wE(this, gE, document.createElement("div"), "f"), yE(this, gE, "f").className = "editor-help", yE(this, mE, "f").appendChild(yE(this, gE, "f")); + const c = document.createElement("div"); + c.className = "background", yE(this, gE, "f").appendChild(c); + const h = document.createElement("section"); + h.className = "container", yE(this, gE, "f").appendChild(h); + const d = document.createElement("h1"); + d.textContent = t.get("How to use the editor"), h.appendChild(d); + const u = document.createElement("section"); + u.className = "content", h.appendChild(u); + const p = document.createElement("h2"); + + function f(e) { + const i = n.getKeyBindings(e).filter((e => null != e)); + return 0 == i.length ? t.get("Not set") : i.map((e => "[" + e + "]")).join(" " + t.get("or") + " ") + } + p.textContent = t.get("Camera controls"), u.appendChild(p); + let m = ""; + i.touchEnabled ? (m += t.get("The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.") + "\n\n", m += t.get("The edited height can be changed by using the height selection in the bottom left corner.")) : (m += t.get("The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.") + "\n\n", m += t.get("Alternatively, the camera can also be controlled using the following keyboard keys:") + "\n\n", m += "\t" + t.get("Move forwards:") + " " + f(Ix.EditorMoveForwards) + "\n", m += "\t" + t.get("Move backwards:") + " " + f(Ix.EditorMoveBackwards) + "\n", m += "\t" + t.get("Move left:") + " " + f(Ix.EditorMoveLeft) + "\n", m += "\t" + t.get("Move right:") + " " + f(Ix.EditorMoveRight) + "\n", m += "\t" + t.get("Rotate left:") + " " + f(Ix.EditorRotateViewLeft) + "\n", m += "\t" + t.get("Rotate right:") + " " + f(Ix.EditorRotateViewRight) + "\n\n", m += t.get("The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:") + "\n\n", m += "\t" + t.get("Move up:") + " " + f(Ix.EditorMoveUp) + "\n", m += "\t" + t.get("Move down:") + " " + f(Ix.EditorMoveDown)); + const g = document.createElement("p"); + g.textContent = m, u.appendChild(g); + const v = document.createElement("h2"); + v.textContent = t.get("Editing"), u.appendChild(v); + let w = ""; + i.touchEnabled ? (w += t.get("Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.") + "\n\n", w += t.get("The selected part can then be rotated by tapping the rotate button in the bottom left corner.") + "\n\n", w += t.get("Track parts can be deleted by using the delete tool in the right side menu.")) : (w += t.get("Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.") + "\n\n", w += t.get("Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:") + " " + f(Ix.EditorPick) + "\n\n", w += t.get("The selected part can then be rotated using the following keyboard shortcut:") + " " + f(Ix.EditorRotatePart) + "\n\n", w += t.get("Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:") + " " + f(Ix.EditorDelete)); + const y = document.createElement("p"); + y.textContent = w, u.appendChild(y); + const A = document.createElement("h2"); + A.textContent = t.get("Starting points, checkpoints and the finish line"), u.appendChild(A); + let b = t.get("Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.") + "\n\n"; + b += t.get("Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.") + "\n\n", b += t.get("Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.") + "\n\n", b += t.get("The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines."); + const x = document.createElement("p"); + x.textContent = b, u.appendChild(x); + const k = document.createElement("div"); + k.className = "part-images", u.appendChild(k); + const E = document.createElement("div"); + k.appendChild(E); + const S = document.createElement("img"); + S.className = "loading", r.then((e => { + S.className = "", S.src = e + })).catch((e => { + console.error(e) + })), E.appendChild(S); + const M = document.createElement("span"); + M.textContent = t.get("Starting point"), E.appendChild(M); + const T = document.createElement("div"); + k.appendChild(T); + const _ = document.createElement("img"); + _.className = "loading", a.then((e => { + _.className = "", _.src = e + })).catch((e => { + console.error(e) + })), T.appendChild(_); + const C = document.createElement("span"); + C.textContent = t.get("Checkpoint"), T.appendChild(C); + const P = document.createElement("div"); + k.appendChild(P); + const I = document.createElement("img"); + I.className = "loading", s.then((e => { + I.className = "", I.src = e + })).catch((e => { + console.error(e) + })), P.appendChild(I); + const R = document.createElement("span"); + R.textContent = t.get("Finish line"), P.appendChild(R); + const L = document.createElement("h2"); + L.textContent = t.get("Exporting the track"), u.appendChild(L); + const D = t.get("When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.") + "\n\n", + N = document.createElement("p"); + N.textContent = D, u.appendChild(N); + const B = document.createElement("div"); + B.className = "button-wrapper", h.appendChild(B); + const U = document.createElement("button"); + U.className = "button", U.innerHTML = ' ', U.append(document.createTextNode(t.get("Close"))), U.addEventListener("click", (() => { + e.playUIClick(), o() + })), B.appendChild(U), window.addEventListener("keydown", wE(this, vE, (e => { + "Escape" == e.code && (o(), e.preventDefault()) + }), "f")) + } + dispose() { + yE(this, mE, "f").removeChild(yE(this, gE, "f")), window.removeEventListener("keydown", yE(this, vE, "f")) + } + }; + var bE = n(1997), + xE = {}; + xE.styleTagTransform = u(), xE.setAttributes = l(), xE.insert = s().bind(null, "head"), xE.domAPI = r(), xE.insertStyleElement = h(); + t()(bE.A, xE); + bE.A && bE.A.locals && bE.A.locals; + var kE, EE, SE, ME, TE = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + _E = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + kE = new WeakMap, EE = new WeakMap, SE = new WeakMap, ME = new WeakMap; + const CE = class { + constructor(e, t, n, i, r, a, s, o, l) { + kE.set(this, void 0), EE.set(this, void 0), SE.set(this, null), ME.set(this, void 0); + const c = document.getElementById("ui"); + if (null == c) throw new Error("UI element not found"); + TE(this, kE, c, "f"), TE(this, EE, document.createElement("div"), "f"), _E(this, EE, "f").className = "editor-track-settings", _E(this, kE, "f").appendChild(_E(this, EE, "f")); + const h = document.createElement("div"); + h.className = "background", _E(this, EE, "f").appendChild(h); + const d = document.createElement("section"); + d.className = "container", _E(this, EE, "f").appendChild(d); + const u = document.createElement("h1"); + u.textContent = t.get("Track settings"), d.appendChild(u); + const p = document.createElement("section"); + p.className = "content", d.appendChild(p); + const f = document.createElement("div"); + f.className = "setting", p.appendChild(f); + const m = document.createElement("label"); + m.className = "title", m.append(document.createTextNode(t.get("Track name"))), f.appendChild(m); + const g = document.createElement("input"); + g.type = "text", g.maxLength = 64, g.spellcheck = !1, g.value = null != n ? n : "", g.addEventListener("input", (() => { + 0 == g.value.trim().length ? (null != _E(this, SE, "f") && (_E(this, SE, "f").disabled = !0), f.classList.add("error")) : (null != _E(this, SE, "f") && (_E(this, SE, "f").disabled = !1), f.classList.remove("error")) + })), f.appendChild(g), null != n && 0 != n.length || (f.classList.add("error"), g.focus()); + const v = document.createElement("div"); + v.className = "setting", p.appendChild(v); + const w = document.createElement("label"); + w.className = "title", w.append(document.createTextNode(t.get("Author"))), v.appendChild(w); + const y = document.createElement("input"); + y.type = "text", y.maxLength = 64, y.spellcheck = !1, y.value = null != i ? i : "", y.placeholder = t.get("Unknown"), y.addEventListener("input", (() => { + const e = y.value.trim(); + 0 == e.length ? r.trackAuthor = null : r.trackAuthor = e + })), v.appendChild(y); + const A = document.createElement("div"); + A.className = "setting", p.appendChild(A); + const b = document.createElement("div"); + b.className = "title", b.append(document.createTextNode(t.get("Environment"))), A.appendChild(b); + const x = document.createElement("button"); + x.className = "button environment-button", a.environment == QA.Summer && (x.classList.add("selected"), x.disabled = !0), x.innerHTML = ' ', x.append(document.createTextNode(t.get("Summer"))), x.addEventListener("click", (() => { + e.playUIClick(), s(QA.Summer), x.classList.add("selected"), k.classList.remove("selected"), E.classList.remove("selected"), x.disabled = !0, k.disabled = !1, E.disabled = !1 + })), A.appendChild(x); + const k = document.createElement("button"); + k.className = "button environment-button", a.environment == QA.Winter && (k.classList.add("selected"), k.disabled = !0), k.innerHTML = ' ', k.append(document.createTextNode(t.get("Winter"))), k.addEventListener("click", (() => { + e.playUIClick(), s(QA.Winter), x.classList.remove("selected"), k.classList.add("selected"), E.classList.remove("selected"), x.disabled = !1, k.disabled = !0, E.disabled = !1 + })), A.appendChild(k); + const E = document.createElement("button"); + E.className = "button environment-button", a.environment == QA.Desert && (E.classList.add("selected"), E.disabled = !0), E.innerHTML = ' ', E.append(document.createTextNode(t.get("Desert"))), E.addEventListener("click", (() => { + e.playUIClick(), s(QA.Desert), x.classList.remove("selected"), k.classList.remove("selected"), E.classList.add("selected"), x.disabled = !1, k.disabled = !1, E.disabled = !0 + })), A.appendChild(E); + const S = document.createElement("div"); + S.className = "setting", p.appendChild(S); + const M = document.createElement("label"); + M.className = "title", M.append(document.createTextNode(t.get("Sun direction") + " (")), S.appendChild(M); + const T = document.createTextNode(a.sunDirection.toDegrees().toString()); + M.appendChild(T), M.append(document.createTextNode("°)")); + let _ = null; + const C = document.createElement("input"); + C.type = "range", C.min = "0", C.max = "360", C.step = "2", C.value = a.sunDirection.toDegrees().toString(), C.addEventListener("input", (() => { + a.sunDirection = GA.fromDegrees(parseInt(C.value, 10)), T.textContent = C.value, null == _ && (_ = setTimeout((() => { + a.generateMeshes(), _ = null + }), 100)) + })), S.appendChild(C); + const P = document.createElement("div"); + P.className = "button-wrapper", d.appendChild(P); + const I = document.createElement("button"); + I.className = "button", I.innerHTML = ' ', I.append(document.createTextNode(t.get("Close"))), I.addEventListener("click", (() => { + e.playUIClick(); + const t = g.value.trim(); + 0 == t.length ? o(null) : o(t) + })), P.appendChild(I), null != l && (TE(this, SE, document.createElement("button"), "f"), _E(this, SE, "f").disabled = null == n || 0 == n.length, _E(this, SE, "f").className = "button", _E(this, SE, "f").innerHTML = ' ', _E(this, SE, "f").append(document.createTextNode(t.get("Save"))), _E(this, SE, "f").addEventListener("click", (() => { + e.playUIClick(); + const t = g.value.trim(); + 0 == t.length || l(t) + })), P.appendChild(_E(this, SE, "f"))), window.addEventListener("keydown", TE(this, ME, (e => { + if ("Escape" == e.code) { + const t = g.value.trim(); + 0 == t.length ? o(null) : o(t), e.preventDefault() + } + }), "f")) + } + dispose() { + _E(this, kE, "f").removeChild(_E(this, EE, "f")), window.removeEventListener("keydown", _E(this, ME, "f")) + } + }; + var PE = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }; + let IE = null, + RE = null, + LE = null, + DE = null; + + function NE(e) { + return PE(this, void 0, void 0, (function*() { + for (; null != DE;) yield DE; + const t = function(e) { + return new Promise((t => { + setTimeout((() => { + var n; + if (null == IE || null == RE || null == LE) { + const e = document.createElement("canvas"); + e.width = 128, e.height = 128, IE = new Xd({ + canvas: e, + alpha: !0, + preserveDrawingBuffer: !0, + antialias: !0 + }), IE.outputColorSpace = vt, LE = new Or, RE = new Io(-1, 1, 1, -1, .5, Au.maxViewDistance), RE.position.set(1e3, 1e3, 1e3), RE.lookAt(0, 0, 0), LE.add(RE); + const t = new Lo(16777215, 4.7); + t.position.set(8, 10, 10), LE.add(t) + } + e.geometry.computeBoundingSphere(); + const i = null === (n = e.geometry.boundingSphere) || void 0 === n ? void 0 : n.clone(); + if (null == i) throw new Error("Bounding sphere is null"); + RE.zoom = 1 / i.radius * .9, RE.position.copy(i.center), RE.position.addScalar(1e3), RE.updateProjectionMatrix(), IE.clear(), LE.add(e), IE.render(LE, RE), LE.remove(e), t(IE.domElement.toDataURL()) + }), 25) + })) + }(e); + let n; + DE = t; + try { + n = yield t + } finally { + DE = null + } + return n + })) + } + var BE, UE, zE, OE, FE, WE, VE, HE, GE, jE, QE, YE, KE, qE, XE, ZE, JE, $E, eS, tS, nS, iS, rS, aS, sS, oS, lS, cS, hS, dS, uS, pS, fS, mS, gS, vS, wS, yS, AS, bS, xS, kS, ES, SS, MS, TS, _S, CS, PS, IS, RS, LS, DS, NS, BS, US, zS, OS, FS, WS, VS, HS, GS, jS, QS, YS, KS, qS, XS, ZS, JS, $S, eM, tM, nM, iM, rM, aM, sM, oM, lM, cM, hM, dM, uM, pM, fM, mM, gM, vM, wM, yM, AM, bM, xM, kM, EM, SM, MM, TM, _M = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + CM = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + UE = new WeakMap, zE = new WeakMap, OE = new WeakMap, FE = new WeakMap, WE = new WeakMap, VE = new WeakMap, HE = new WeakMap, GE = new WeakMap, jE = new WeakMap, QE = new WeakMap, YE = new WeakMap, KE = new WeakMap, qE = new WeakMap, XE = new WeakMap, ZE = new WeakMap, JE = new WeakMap, $E = new WeakMap, eS = new WeakMap, tS = new WeakMap, nS = new WeakMap, iS = new WeakMap, rS = new WeakMap, aS = new WeakMap, sS = new WeakMap, oS = new WeakMap, lS = new WeakMap, cS = new WeakMap, hS = new WeakMap, dS = new WeakMap, uS = new WeakMap, pS = new WeakMap, fS = new WeakMap, mS = new WeakMap, gS = new WeakMap, vS = new WeakMap, wS = new WeakMap, yS = new WeakMap, AS = new WeakMap, bS = new WeakMap, xS = new WeakMap, kS = new WeakMap, ES = new WeakMap, SS = new WeakMap, MS = new WeakMap, TS = new WeakMap, _S = new WeakMap, CS = new WeakMap, PS = new WeakMap, IS = new WeakMap, RS = new WeakMap, LS = new WeakMap, DS = new WeakMap, NS = new WeakMap, BS = new WeakMap, US = new WeakMap, zS = new WeakMap, OS = new WeakMap, FS = new WeakMap, WS = new WeakMap, VS = new WeakMap, HS = new WeakMap, GS = new WeakMap, jS = new WeakMap, QS = new WeakMap, YS = new WeakMap, KS = new WeakMap, qS = new WeakMap, XS = new WeakMap, ZS = new WeakMap, JS = new WeakMap, $S = new WeakMap, eM = new WeakMap, tM = new WeakMap, nM = new WeakMap, iM = new WeakMap, rM = new WeakMap, aM = new WeakMap, sM = new WeakMap, oM = new WeakMap, BE = new WeakSet, lM = function(e) { + var t; + _M(this, eM, e, "f"), CM(this, uS, "f").innerHTML = ' ', CM(this, uS, "f").append(document.createTextNode(null !== (t = CM(this, eM, "f")) && void 0 !== t ? t : CM(this, OE, "f").get("Unnamed Track"))) + }, cM = function(e) { + const t = () => { + CM(this, WE, "f").trigger((() => { + _M(this, DS, !0, "f"), CM(this, BE, "m", lM).call(this, null), e(), CM(this, $E, "f").inert = !1 + })) + }; + CM(this, DS, "f") ? t() : (CM(this, $E, "f").inert = !0, CM(this, KE, "f").showConfirm(CM(this, OE, "f").get("Are you sure you want to exit the editor?") + "\n\n" + CM(this, OE, "f").get("All unsaved data will be lost!"), CM(this, OE, "f").get("Cancel"), CM(this, OE, "f").get("Confirm"), (() => { + CM(this, $E, "f").inert = !1 + }), (() => { + t() + }))) + }, hM = function() { + if (null != CM(this, VE, "f").getStartTransform()) { + if (null == CM(this, ZE, "f")) throw new Error("Test callback is null"); + CM(this, ZE, "f").call(this) + } else CM(this, BE, "m", uM).call(this, CM(this, OE, "f").get("Starting point is missing!"), !1) + }, dM = function() { + if (null != CM(this, YS, "f") && null != CM(this, rM, "f")) { + const e = CM(this, iM, "f")[CM(this, rM, "f")], + t = CM(this, BE, "m", EM).call(this, CM(this, YS, "f"), e.tiles); + if (t.length > 0) { + let e; + e = CM(this, ZS, "f") ? new yn(CM(this, YS, "f").x + 2, CM(this, YS, "f").y, CM(this, YS, "f").z + 2) : new yn(CM(this, YS, "f").x, CM(this, YS, "f").y, Math.floor(CM(this, YS, "f").z)); + let n = t[0], + i = e.distanceToSquared(new yn(n.x, n.y, n.z)); + for (let r = 1; r < t.length; r++) { + const a = t[r], + s = e.distanceToSquared(new yn(a.x, a.y, a.z)); + s < i && (n = a, i = s) + } + const r = n.parts[n.parts.length - 1], + a = CM(this, iM, "f").findIndex((e => e.id == r.id)); + if (a >= 0) { + const e = CM(this, iM, "f")[a]; + _M(this, qS, r.rotation, "f"), CM(this, cS, "f").rotation = CM(this, qS, "f"), _M(this, XS, r.rotationAxis, "f"), CM(this, cS, "f").rotationAxis = CM(this, XS, "f"), _M(this, aM, r.color, "f"), CM(this, BE, "m", vM).call(this, e.category), CM(this, BE, "m", wM).call(this, a) + } + } + } + }, uM = function(e, t) { + null != CM(this, nS, "f") && (clearTimeout(CM(this, nS, "f")), _M(this, nS, null, "f")), t ? CM(this, tS, "f").classList.add("green") : CM(this, tS, "f").classList.remove("green"), CM(this, tS, "f").classList.remove("show"), CM(this, tS, "f").classList.remove("hide"), _M(this, nS, window.setTimeout((() => { + CM(this, tS, "f").textContent = e, CM(this, tS, "f").classList.add("show"), _M(this, nS, window.setTimeout((() => { + CM(this, tS, "f").classList.remove("show"), CM(this, tS, "f").classList.add("hide") + }), 3e3), "f") + }), 0), "f") + }, pM = function() { + var e; + const t = CM(this, HE, "f").getAllParts(); + for (let n = 0; n < t.length; n++) { + const i = t[n], + r = i.colors.get(Jy.Summer); + if (null == r) throw new Error("Mesh is not loaded"); + const a = r.clone(); + a.material = CM(this, zS, "f"), CM(this, US, "f").add(a); + let s = null === (e = CM(this, sM, "f").find((e => e.category == i.configuration.category))) || void 0 === e ? void 0 : e.partPanel; + if (null == s) { + s = document.createElement("div"), s.className = "part-panel hidden", CM(this, iS, "f").prepend(s); + const e = CM(this, HE, "f").getCategoryMesh(i.configuration.category, CM(this, VE, "f").environment), + t = document.createElement("button"); + t.addEventListener("click", (() => { + CM(this, BE, "m", vM).call(this, i.configuration.category), CM(this, UE, "f").playUIClick() + })), CM(this, rS, "f").appendChild(t); + const n = document.createElement("img"); + n.className = "loading", NE(e).then((e => { + n.src = e, n.className = "" + })).catch((e => { + console.error(e) + })), t.appendChild(n), CM(this, sM, "f").push({ + category: i.configuration.category, + button: t, + image: n, + partPanel: s, + selectedIndex: null + }) + } + const o = document.createElement("button"); + o.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(), CM(this, BE, "m", wM).call(this, 1 + n) + })), s.appendChild(o); + const l = document.createElement("img"); + l.className = "loading", o.appendChild(l); + const c = []; + let h; + if (i.colors.size <= 1) h = null; + else { + h = document.createElement("div"), h.className = "color-panel hidden", CM(this, iS, "f").prepend(h); + const e = [Jy.Default].concat(Array.from(i.colors.keys())); + for (const t of e) { + const e = document.createElement("button"); + e.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(), _M(this, aM, t, "f"), e.classList.add("selected"); + const n = e.parentElement; + if (null == n) throw new Error("Color panel not found"); + for (const t of n.children) t != e && t.classList.remove("selected") + })), t == Jy.Default && e.classList.add("selected"), h.appendChild(e); + const n = document.createElement("img"); + n.className = "loading", e.appendChild(n), c.push([t, e, n]) + } + } + const d = { + id: i.configuration.id, + selectionMesh: a, + button: o, + image: l, + colorPanel: h, + colorButtons: c, + tiles: i.configuration.tiles, + isCheckpoint: null != i.configuration.detector && i.configuration.detector.type == XA.Checkpoint, + isStart: null != i.configuration.startOffset, + category: i.configuration.category + }; + CM(this, iM, "f").push(d) + } + }, fM = function() { + if (null == CM(this, rM, "f")) return Jy.Default; + return CM(this, iM, "f")[CM(this, rM, "f")].colorButtons.some((([e]) => e == CM(this, aM, "f"))) ? CM(this, aM, "f") : Jy.Default + }, mM = function(e) { + CM(this, VE, "f").environment = e, CM(this, BE, "m", gM).call(this), CM(this, VE, "f").generateMeshes() + }, gM = function() { + for (const e of CM(this, sM, "f")) { + const t = CM(this, HE, "f").getCategoryMesh(e.category, CM(this, VE, "f").environment); + e.image.removeAttribute("src"), e.image.className = "loading", NE(t).then((t => { + e.image.src = t, e.image.className = "" + })).catch((e => { + console.error(e) + })) + } + let e; + switch (CM(this, VE, "f").environment) { + case QA.Summer: + e = Jy.Summer; + break; + case QA.Winter: + e = Jy.Winter; + break; + case QA.Desert: + e = Jy.Desert + } + for (const t of CM(this, iM, "f")) + if (null != t.id) + if (t.category == CM(this, oM, "f")) { + const n = CM(this, HE, "f").getPart(t.id).colors.get(e); + if (null == n) throw new Error("Mesh is not loaded"); + t.image.removeAttribute("src"), t.image.className = "loading", NE(n).then((e => { + t.image.src = e, t.image.className = "" + })).catch((e => { + console.error(e) + })) + } else t.image.removeAttribute("src"), t.image.className = "loading" + }, vM = function(e) { + var t; + if (CM(this, oM, "f") != e || null == e) { + _M(this, oM, e, "f"); + for (const t of CM(this, sM, "f")) t.category == e ? (t.button.classList.add("selected"), t.partPanel.classList.remove("hidden")) : (t.button.classList.remove("selected"), t.partPanel.classList.add("hidden")); + if (null == e) CM(this, BE, "m", wM).call(this, 0); + else { + let n; + switch (CM(this, VE, "f").environment) { + case QA.Summer: + n = Jy.Summer; + break; + case QA.Winter: + n = Jy.Winter; + break; + case QA.Desert: + n = Jy.Desert + } + for (const t of CM(this, iM, "f")) + if (t.category == e && null != t.id && !t.image.hasAttribute("src")) { + const e = CM(this, HE, "f").getPart(t.id).colors.get(n); + if (null == e) throw new Error("Mesh is not loaded"); + t.image.className = "loading", NE(e).then((e => { + t.image.src = e, t.image.className = "" + })).catch((e => { + console.error(e) + })) + } let i = null === (t = CM(this, sM, "f").find((t => t.category == e))) || void 0 === t ? void 0 : t.selectedIndex; + if (null == i && (i = CM(this, iM, "f").findIndex((t => t.category == e)), i < 0)) throw new Error("Empty category"); + CM(this, BE, "m", wM).call(this, i) + } + } + }, wM = function(e) { + for (let t = 0; t < CM(this, iM, "f").length; t++) { + const { + selectionMesh: n, + button: i, + colorPanel: r + } = CM(this, iM, "f")[t]; + t == e ? (n.visible = !0, i.className = "selected", null == r || r.classList.remove("hidden")) : (n.visible = !1, i.className = "", null == r || r.classList.add("hidden")) + } + _M(this, rM, e, "f"); + const t = CM(this, sM, "f").find((e => e.category == CM(this, oM, "f"))); + if (null != t && (t.selectedIndex = e), null != CM(this, WS, "f")) { + if (CM(this, US, "f").remove(CM(this, WS, "f")), CM(this, WS, "f").geometry.dispose(), Array.isArray(CM(this, WS, "f").material)) + for (const e of CM(this, WS, "f").material) e.dispose(); + else CM(this, WS, "f").material.dispose(); + CM(this, WS, "f").dispose(), _M(this, WS, null, "f") + } + if (null != e && e >= 0 && e < CM(this, iM, "f").length) { + const t = CM(this, iM, "f")[e]; + t.isCheckpoint ? CM(this, sS, "f").show() : CM(this, sS, "f").hide(); + const n = new ua(CM(this, FS, "f"), CM(this, OS, "f"), t.tiles.length); + t.tiles.forEach(((e, t, i, r) => { + const a = (new qn).makeTranslation(e * jb.partSize, t * jb.partSize, i * jb.partSize); + n.setMatrixAt(r, a) + })), CM(this, US, "f").add(n), _M(this, WS, n, "f"); + const i = CM(this, BE, "m", fM).call(this); + if (null != t.id) + for (const [e, n, r] of t.colorButtons) + if (e == i ? n.classList.add("selected") : n.classList.remove("selected"), !r.hasAttribute("src")) + if (e == Jy.Default) r.src = "images/empty.svg", r.className = ""; + else { + const n = CM(this, HE, "f").getPart(t.id).colors.get(e); + if (null == n) throw new Error("Mesh is not loaded"); + r.className = "loading", NE(n).then((e => { + r.src = e, r.className = "" + })).catch((e => { + console.error(e) + })) + } + } else CM(this, sS, "f").hide(); + CM(this, BE, "m", bM).call(this) + }, yM = function() { + return Math.floor(CM(this, BS, "f").position.y / 5) + }, AM = function(e) { + const t = CM(this, BE, "a", yM); + CM(this, BS, "f").position.y = 5 * e, CM(this, kS, "f").position.y += 5 * (e - t), CM(this, ES, "f").target.y = 5 * e, CM(this, aS, "f").refresh(e), CM(this, BS, "f").updateWorldMatrix(!0, !0), CM(this, ES, "f").update() + }, bM = function() { + if (null != CM(this, rM, "f") && CM(this, rM, "f") >= 0 && CM(this, rM, "f") < CM(this, iM, "f").length) { + const e = CM(this, iM, "f")[CM(this, rM, "f")]; + _M(this, KS, 0, "f"), e.tiles.rotated(CM(this, qS, "f"), CM(this, XS, "f")).forEach(((e, t) => { + _M(this, KS, Math.max(CM(this, KS, "f"), -t), "f") + })) + } else _M(this, KS, 0, "f") + }, xM = function() { + const e = performance.now(); + if (e - CM(this, zE, "f") > 35) { + const t = CM(this, UE, "f").getBuffer("editor_edit"); + if (null != t && null != CM(this, UE, "f").context && null != CM(this, UE, "f").destinationSfx) { + const e = CM(this, UE, "f").context.createBufferSource(); + e.buffer = t, e.playbackRate.value = .7; + const n = CM(this, UE, "f").context.createGain(); + n.gain.value = .05, e.connect(n), n.connect(CM(this, UE, "f").destinationSfx), e.start(0) + } + _M(this, zE, e, "f") + } + }, kM = function() { + let e; + if (CM(this, qE, "f").touchEnabled) e = new yn(CM(this, ES, "f").target.x / jb.partSize, CM(this, ES, "f").target.y / jb.partSize, CM(this, ES, "f").target.z / jb.partSize); + else { + let t; + if (null != CM(this, GS, "f") ? (CM(this, NS, "f").setFromCamera(CM(this, GS, "f"), CM(this, FE, "f").camera), t = CM(this, NS, "f").intersectObjects([CM(this, BS, "f")])) : t = [], t.length > 0) { + const n = t[0]; + e = n.point.distanceToSquared(CM(this, ES, "f").target) <= CM(this, tM, "f") * CM(this, tM, "f") ? new yn(Math.round(n.point.x / jb.partSize), Math.floor(CM(this, BS, "f").position.y / jb.partSize), Math.round(n.point.z / jb.partSize)) : null + } else e = null + } + if (null != e) { + let t, n; + t = CM(this, ZS, "f") ? 4 : 1, n = CM(this, XS, "f") == nA.XPositive || CM(this, XS, "f") == nA.XNegative ? Math.round(e.x) : Math.round(e.x / t) * t; + const i = Math.round(e.y) + CM(this, KS, "f"); + let r; + return r = CM(this, XS, "f") == nA.ZPositive || CM(this, XS, "f") == nA.ZNegative ? Math.round(e.z) : Math.round(e.z / t) * t, new yn(n, i, r) + } + return null + }, EM = function(e, t) { + const n = []; + return t.rotated(CM(this, qS, "f"), CM(this, XS, "f")).forEach(((t, i, r) => { + const a = e.x + t, + s = e.y + i, + o = e.z + r, + l = CM(this, VE, "f").getPartsAt(a, s, o); + l.length > 0 && n.push({ + x: a, + y: s, + z: o, + parts: l + }) + })), n + }, SM = function(e) { + var t; + let n = !1; + for (const { + x: t, + y: i, + z: r + } + of e) CM(this, VE, "f").deletePartsAt(t, i, r) && (n = !0); + n && (CM(this, BE, "m", xM).call(this), CM(this, VE, "f").generateMeshes(), null === (t = CM(this, nM, "f")) || void 0 === t || t.refresh(CM(this, VE, "f")), CM(this, sS, "f").setFromExistingCheckpoints(CM(this, VE, "f")), _M(this, DS, !1, "f")) + }, MM = function(e) { + const t = 4 * CM(this, ES, "f").getDistance(); + if (CM(this, JE, "f") && CM(this, BE, "m", TM).call(this)) { + const n = new yn; + if (CM(this, MS, "f") && (n.z = -1), CM(this, TS, "f") && (n.x = 1), CM(this, _S, "f") && (n.z = 1), CM(this, CS, "f") && (n.x = -1), 0 != n.x || 0 != n.z) { + const i = n.applyQuaternion(CM(this, kS, "f").quaternion), + r = new jt(i.x, i.z).normalize(), + a = new yn(r.x, 0, r.y).multiplyScalar(t * e); + CM(this, kS, "f").position.add(a), CM(this, ES, "f").target.add(a) + } + let i = 0; + CM(this, PS, "f") && (i += 1.5 * Math.PI * e), CM(this, IS, "f") && (i -= 1.5 * Math.PI * e); + let r = 0; + if (CM(this, RS, "f") && (r += 1.5 * Math.PI * e), CM(this, LS, "f") && (r -= 1.5 * Math.PI * e), 0 != i || 0 != r) { + const e = new jt(CM(this, kS, "f").position.x, CM(this, kS, "f").position.z).distanceTo(new jt(CM(this, ES, "f").target.x, CM(this, ES, "f").target.z)), + t = CM(this, kS, "f").position.y - CM(this, ES, "f").target.y, + n = Math.sqrt(e * e + t * t), + a = Math.atan2(CM(this, kS, "f").position.z - CM(this, ES, "f").target.z, CM(this, kS, "f").position.x - CM(this, ES, "f").target.x) + r; + let s = Math.asin(t / n) + i; + s = Math.max(-Math.PI / 2 + .001, Math.min(Math.PI / 2 - .001, s)), CM(this, kS, "f").position.x = CM(this, ES, "f").target.x + Math.cos(s) * Math.cos(a) * n, CM(this, kS, "f").position.y = CM(this, ES, "f").target.y + Math.sin(s) * n, CM(this, kS, "f").position.z = CM(this, ES, "f").target.z + Math.cos(s) * Math.sin(a) * n, CM(this, ES, "f").update() + } + } + }, TM = function() { + return !!CM(this, JE, "f") && (!CM(this, KE, "f").isOpen && null == CM(this, lS, "f") && !CM(this, oS, "f").isOpen && null == CM(this, hS, "f") && null == CM(this, dS, "f")) + }; + const PM = class { + constructor(e, t, n, i, r, a, s, o, l, c, h, d, u, p) { + var f; + BE.add(this), UE.set(this, void 0), zE.set(this, performance.now()), OE.set(this, void 0), FE.set(this, void 0), WE.set(this, void 0), VE.set(this, void 0), HE.set(this, void 0), GE.set(this, void 0), jE.set(this, void 0), QE.set(this, void 0), YE.set(this, void 0), KE.set(this, void 0), qE.set(this, void 0), XE.set(this, void 0), ZE.set(this, null), JE.set(this, !1), $E.set(this, void 0), eS.set(this, void 0), tS.set(this, void 0), nS.set(this, null), iS.set(this, void 0), rS.set(this, void 0), aS.set(this, void 0), sS.set(this, void 0), oS.set(this, void 0), lS.set(this, null), cS.set(this, void 0), hS.set(this, null), dS.set(this, null), uS.set(this, void 0), pS.set(this, void 0), fS.set(this, void 0), mS.set(this, void 0), gS.set(this, void 0), vS.set(this, void 0), wS.set(this, void 0), yS.set(this, void 0), AS.set(this, void 0), bS.set(this, void 0), xS.set(this, void 0), kS.set(this, void 0), ES.set(this, void 0), SS.set(this, !1), MS.set(this, !1), TS.set(this, !1), _S.set(this, !1), CS.set(this, !1), PS.set(this, !1), IS.set(this, !1), RS.set(this, !1), LS.set(this, !1), DS.set(this, !0), NS.set(this, void 0), BS.set(this, void 0), US.set(this, void 0), zS.set(this, void 0), OS.set(this, void 0), FS.set(this, void 0), WS.set(this, null), VS.set(this, !1), HS.set(this, !1), GS.set(this, null), jS.set(this, null), QS.set(this, !1), YS.set(this, null), KS.set(this, 0), qS.set(this, 0), XS.set(this, nA.YPositive), ZS.set(this, !0), JS.set(this, !1), $S.set(this, null), eM.set(this, null), tM.set(this, 1e3), nM.set(this, null), iM.set(this, []), rM.set(this, null), aM.set(this, Jy.Default), sM.set(this, []), oM.set(this, null), _M(this, OE, e, "f"), _M(this, UE, t, "f"), _M(this, FE, n, "f"), _M(this, WE, i, "f"), _M(this, VE, r, "f"), _M(this, HE, a, "f"), _M(this, QE, s, "f"), _M(this, YE, o, "f"), _M(this, GE, l, "f"), _M(this, jE, c, "f"), _M(this, KE, h, "f"), _M(this, qE, d, "f"), _M(this, XE, u, "f"), _M(this, kS, new Pr(70, 1, .5, Au.maxViewDistance), "f"), CM(this, kS, "f").position.set(40, 40, -40), n.scene.add(CM(this, kS, "f")), _M(this, ES, new _A(CM(this, kS, "f"), n.canvas), "f"), CM(this, ES, "f").mouseButtons = { + MIDDLE: g, + RIGHT: w + }, CM(this, ES, "f").minDistance = 4, CM(this, ES, "f").maxDistance = 600, _M(this, NS, new jo, "f"), this.trackAuthor = o.getCurrentUserProfile().nickname, _M(this, zS, new Fs({ + transparent: !0, + opacity: .3, + polygonOffset: !0, + polygonOffsetFactor: -.3, + depthWrite: !1 + }), "f"), _M(this, US, new Nr, "f"), CM(this, US, "f").visible = !1, n.scene.add(CM(this, US, "f")), _M(this, FS, (new sr).setFromPoints([new yn(0, 0, 0), new yn(0, 0, 0), new yn(0, 0, 1), new yn(0, 0, 1), new yn(0, 0, 1), new yn(1, 0, 1), new yn(1, 0, 1), new yn(1, 0, 1), new yn(1, 0, 0), new yn(1, 0, 0), new yn(1, 0, 0), new yn(0, 0, 0), new yn(0, 1, 0), new yn(0, 1, 0), new yn(0, 1, 1), new yn(0, 1, 1), new yn(0, 1, 1), new yn(1, 1, 1), new yn(1, 1, 1), new yn(1, 1, 1), new yn(1, 1, 0), new yn(1, 1, 0), new yn(1, 1, 0), new yn(0, 1, 0), new yn(0, 0, 0), new yn(0, 0, 0), new yn(0, 1, 0), new yn(0, 0, 1), new yn(0, 0, 1), new yn(0, 1, 1), new yn(1, 0, 1), new yn(1, 0, 1), new yn(1, 1, 1), new yn(1, 0, 0), new yn(1, 0, 0), new yn(1, 1, 0)]).scale(jb.partSize, jb.partSize, jb.partSize), "f"), _M(this, OS, new ji({ + wireframe: !0 + }), "f"), _M(this, BS, new wr(new Ns(1e6, 1e6), new ji({ + side: 2 + })), "f"), CM(this, BS, "f").rotation.x = -Math.PI / 2, CM(this, BS, "f").updateWorldMatrix(!0, !0), n.canvas.addEventListener("mousemove", _M(this, pS, (e => { + const t = e.clientX / window.innerWidth * 2 - 1, + n = -e.clientY / window.innerHeight * 2 + 1; + null == CM(this, GS, "f") ? _M(this, GS, new jt(t, n), "f") : CM(this, GS, "f").set(t, n) + }), "f")), n.canvas.addEventListener("mousedown", _M(this, fS, (e => { + 0 == e.button && _M(this, HS, !0, "f"), 1 == e.button && e.preventDefault() + }), "f")), window.addEventListener("mouseup", _M(this, mS, (e => { + 0 == e.button && (_M(this, HS, !1, "f"), _M(this, $S, null, "f")) + }), "f")), n.canvas.addEventListener("mouseout", _M(this, gS, (() => { + _M(this, GS, null, "f") + }), "f")), n.canvas.addEventListener("touchstart", _M(this, vS, (() => { + CM(this, qE, "f").touchEnabled && _M(this, jS, Date.now(), "f") + }), "f")), n.canvas.addEventListener("click", _M(this, wS, (() => { + CM(this, qE, "f").touchEnabled && null != CM(this, jS, "f") && Date.now() - CM(this, jS, "f") < 200 && (_M(this, jS, null, "f"), _M(this, QS, !0, "f")) + }), "f")), window.addEventListener("keydown", _M(this, yS, (e => { + CM(this, BE, "m", TM).call(this) && (CM(this, KE, "f").isOpen || CM(this, oS, "f").isOpen || null != CM(this, lS, "f") || null != CM(this, hS, "f") || "Escape" == e.code && (CM(this, BE, "m", cM).call(this, p), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorRotatePart) && (_M(this, qS, (CM(this, qS, "f") + 1) % 4, "f"), CM(this, cS, "f").rotation = CM(this, qS, "f"), CM(this, BE, "m", bM).call(this), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorHeightModifier) && (_M(this, SS, !0, "f"), CM(this, ES, "f").enableZoom = !1, e.preventDefault()), u.checkKeyBinding(e, Ix.EditorDelete) && (_M(this, VS, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorMoveForwards) && (_M(this, MS, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorMoveRight) && (_M(this, TS, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorMoveBackwards) && (_M(this, _S, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorMoveLeft) && (_M(this, CS, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorRotateViewUp) && (_M(this, PS, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorRotateViewDown) && (_M(this, IS, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorRotateViewLeft) && (_M(this, RS, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorRotateViewRight) && (_M(this, LS, !0, "f"), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorMoveDown) && (_M(this, BE, Math.max(0, CM(this, BE, "a", yM) - 1), "a", AM), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorMoveUp) && (_M(this, BE, CM(this, BE, "a", yM) + 1, "a", AM), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorTest) && (CM(this, BE, "m", hM).call(this), e.preventDefault()), u.checkKeyBinding(e, Ix.EditorPick) && (CM(this, BE, "m", dM).call(this), e.preventDefault())) + }), "f")), window.addEventListener("keyup", _M(this, AS, (e => { + u.checkKeyBinding(e, Ix.EditorHeightModifier) && (_M(this, SS, !1, "f"), CM(this, ES, "f").enableZoom = !0), u.checkKeyBinding(e, Ix.EditorDelete) && _M(this, VS, !1, "f"), u.checkKeyBinding(e, Ix.EditorMoveForwards) && _M(this, MS, !1, "f"), u.checkKeyBinding(e, Ix.EditorMoveRight) && _M(this, TS, !1, "f"), u.checkKeyBinding(e, Ix.EditorMoveBackwards) && _M(this, _S, !1, "f"), u.checkKeyBinding(e, Ix.EditorMoveLeft) && _M(this, CS, !1, "f"), u.checkKeyBinding(e, Ix.EditorRotateViewUp) && _M(this, PS, !1, "f"), u.checkKeyBinding(e, Ix.EditorRotateViewDown) && _M(this, IS, !1, "f"), u.checkKeyBinding(e, Ix.EditorRotateViewLeft) && _M(this, RS, !1, "f"), u.checkKeyBinding(e, Ix.EditorRotateViewRight) && _M(this, LS, !1, "f") + }), "f")), window.addEventListener("wheel", _M(this, bS, (e => { + CM(this, SS, "f") && CM(this, JE, "f") && (e.deltaY > 0 ? _M(this, BE, CM(this, BE, "a", yM) + 1, "a", AM) : e.deltaY < 0 && _M(this, BE, Math.max(0, CM(this, BE, "a", yM) - 1), "a", AM)) + }), "f")), window.addEventListener("beforeunload", _M(this, xS, (e => !CM(this, DS, "f") && (e.preventDefault(), !0)), "f")); + const m = document.getElementById("ui"); + if (null == m) throw new Error("Failed to find UI element"); + _M(this, $E, document.createElement("div"), "f"), CM(this, $E, "f").className = "hidden", m.appendChild(CM(this, $E, "f")), _M(this, eS, document.createElement("div"), "f"), CM(this, eS, "f").className = "top", CM(this, $E, "f").appendChild(CM(this, eS, "f")); + const v = document.createElement("div"); + v.className = "button-bar", CM(this, eS, "f").appendChild(v); + const y = document.createElement("button"); + y.className = "button", y.innerHTML = ' ', y.append(document.createTextNode(CM(this, OE, "f").get("Exit"))), y.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(), CM(this, BE, "m", cM).call(this, p) + })), v.appendChild(y); + const A = document.createElement("button"); + A.className = "button", A.innerHTML = ' ', A.append(CM(this, OE, "f").get("Test")), A.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(), CM(this, BE, "m", hM).call(this) + })), v.appendChild(A); + const b = document.createElement("button"); + b.className = "button", b.innerHTML = ' ', b.append(CM(this, OE, "f").get("Generate")), b.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(); + const e = () => { + var e; + ! function(e) { + let t; + e.clear(); + do { + let n = 0, + i = 0, + r = 0, + a = Math.floor(4 * Math.random()); + Math.random() < .5 && (i = Math.floor(20 * Math.random())); + const s = new Map; + + function o() { + switch (a) { + case 0: + --r; + break; + case 1: + --n; + break; + case 2: + ++r; + break; + case 3: + ++n + } + } + + function l() { + switch (a) { + case 0: + ++r; + break; + case 1: + ++n; + break; + case 2: + --r; + break; + case 3: + --n + } + } + + function c() { + switch ((a + 1) % 4) { + case 0: + --r; + break; + case 1: + --n; + break; + case 2: + ++r; + break; + case 3: + ++n + } + } + + function h() { + switch (((a - 1) % 4 + 4) % 4) { + case 0: + --r; + break; + case 1: + --n; + break; + case 2: + ++r; + break; + case 3: + ++n + } + } + + function d(e, n, i, r = null) { + const a = e.toString() + "|" + n.toString() + "|" + i.toString(); + s.has(a) && (t = !0), null != r && (r.x = e, r.y = n, r.z = i, "direction" in r && (r.direction = (r.direction % 4 + 4) % 4)), s.set(a, r) + } + + function u(e, t, n) { + return !!s.has(e.toString() + "|" + t.toString() + "|" + n.toString()) + } + + function p() { + let e = !1; + for (let t = 0; t < i; ++t) + if (u(n, t, r)) { + e = !0; + break + } if (!e) + for (let e = 0; e < i; ++e) { + let t; + t = 0 == e && e == i - 1 ? 22 : 0 == e ? 21 : e == i - 1 ? 19 : 20, d(n, e, r, { + type: t, + direction: 0 + }) + } + } + + function f(e) { + e > 0 ? (--e, Math.random() < .2 ? E(e) : Math.random() < .6 ? g(e) : Math.random() < .5 ? y(e, i < 2 || Math.random() < .5) : Math.random() < .5 ? v(e) : w(e)) : x() + } + + function m(e) { + e > 0 ? (--e, Math.random() < .1 ? S(e) : Math.random() < .6 ? M(e) : Math.random() < .5 ? C(e, i < 2 || Math.random() < .5) : Math.random() < .5 ? T(e) : _(e)) : S(e) + } + + function g(e) { + d(n, i, r, { + type: 0, + direction: a + }), p(), o(), f(e) + } + + function v(e) { + d(n, i, r, { + type: 1, + direction: a - 1 + }), p(), a = (a + 1) % 4, o(), e > 0 ? (--e, Math.random() < .4 ? g(e) : Math.random() < .5 ? v(e) : w(e)) : x() + } + + function w(e) { + d(n, i, r, { + type: 1, + direction: a + }), p(), a = ((a - 1) % 4 + 4) % 4, o(), e > 0 ? (--e, Math.random() < .4 ? g(e) : Math.random() < .5 ? v(e) : w(e)) : x() + } + + function y(e, t) { + let s; + s = t ? 2 : 3, t || --i, d(n, i + 1, r), d(n, i, r, { + type: s, + direction: a + }), o(), t && ++i, e > 0 ? (--e, Math.random() < .4 || i <= 3 ? A(e, t) : b(e, t)) : A(e, t) + } + + function A(e, t) { + let s; + t || --i, d(n, i + 1, r), s = t ? 3 : 2, d(n, i, r, { + type: s, + direction: a + 2 + }), o(), t && ++i, e > 0 ? f(--e) : x() + } + + function b(e, t) { + let s; + t || (i -= 2), d(n, i + 1, r), d(n, i + 2, r), s = t ? a : a + 2, d(n, i, r, { + type: 4, + direction: s + }), o(), t && (i += 2), e > 0 ? (--e, Math.random() < .4 || i <= 3 ? A(e, t) : b(e, t)) : A(e, t) + } + + function x() { + d(n, i, r, { + type: 6, + direction: a + }) + } + + function k(e) { + d(n, i, r, { + type: 5, + direction: a + }), p(), o(), f(e) + } + + function E(e) { + Math.random() < .5 ? (d(n, i, r, { + type: 8, + direction: a + }), p(), h(), d(n, i, r, { + type: 12, + direction: a + 2 + }), p(), o()) : (d(n, i, r, { + type: 9, + direction: a + }), p(), c(), d(n, i, r, { + type: 12, + direction: a + 1 + }), p(), o(), h()), m(e) + } + + function S(e) { + Math.random() < .5 ? (d(n, i, r, { + type: 12, + direction: a + 3 + }), p(), c(), d(n, i, r, { + type: 9, + direction: a + 2 + }), p(), o()) : (d(n, i, r, { + type: 8, + direction: a + 2 + }), p(), c(), d(n, i, r, { + type: 12, + direction: a + }), p(), o(), h()), f(e) + } + + function M(e) { + d(n, i, r, { + type: 10, + direction: a + }), p(), c(), d(n, i, r, { + type: 10, + direction: a + 2 + }), p(), h(), o(), m(e) + } + + function T(e) { + d(n, i, r, { + type: 10, + direction: a + }), p(), o(), d(n, i, r, { + type: 12, + direction: a + 3 + }), p(), c(), d(n, i, r, { + type: 10, + direction: a + 1 + }), p(), l(), d(n, i, r, { + type: 11, + direction: a + 3 + }), p(), o(), a = (a + 1) % 4, o(), m(e) + } + + function _(e) { + d(n, i, r, { + type: 11, + direction: a + }), p(), c(), d(n, i, r, { + type: 10, + direction: a + 2 + }), p(), o(), d(n, i, r, { + type: 12, + direction: a + }), p(), h(), d(n, i, r, { + type: 10, + direction: a + 1 + }), p(), l(), a = ((a - 1) % 4 + 4) % 4, o(), m(e) + } + + function C(e, t) { + let s, l; + t ? (s = 13, l = 14) : (s = 15, l = 16), t || --i, c(), d(n, i + 1, r), d(n, i, r, { + type: s, + direction: a + }), h(), d(n, i + 1, r), d(n, i, r, { + type: l, + direction: a + }), o(), t && ++i, e > 0 ? (--e, Math.random() < .4 || i <= 3 ? P(e, t) : I(e, t)) : P(e, t) + } + + function P(e, t) { + let s, l; + t || --i, t ? (s = 16, l = 15) : (s = 14, l = 13), c(), d(n, i + 1, r), d(n, i, r, { + type: s, + direction: a + 2 + }), h(), d(n, i + 1, r), d(n, i, r, { + type: l, + direction: a + 2 + }), o(), t && ++i, m(e) + } + + function I(e, t) { + t || (i -= 2), t ? (c(), d(n, i + 1, r), d(n, i + 2, r), d(n, i, r, { + type: 17, + direction: a + }), h(), d(n, i + 1, r), d(n, i + 2, r), d(n, i, r, { + type: 18, + direction: a + })) : (c(), d(n, i + 1, r), d(n, i + 2, r), d(n, i, r, { + type: 18, + direction: a + 2 + }), h(), d(n, i + 1, r), d(n, i + 2, r), d(n, i, r, { + type: 17, + direction: a + 2 + })), o(), t && (i += 2), e > 0 ? (--e, Math.random() < .4 || i <= 3 ? P(e, t) : I(e, t)) : P(e, t) + } + if (t = !1, k(50), !t) + for (const R of s.values()) + if (null != R) { + let L = null; + R.type == eA.Start && (L = 0), e.setPart(4 * R.x, R.y, 4 * R.z, R.type, R.direction, nA.YPositive, Jy.Default, null, L) + } + } while (t) + }(CM(this, VE, "f")), CM(this, VE, "f").generateMeshes(), null === (e = CM(this, nM, "f")) || void 0 === e || e.refresh(CM(this, VE, "f")), CM(this, sS, "f").setFromExistingCheckpoints(CM(this, VE, "f")), _M(this, DS, !0, "f") + }; + CM(this, DS, "f") ? e() : (CM(this, $E, "f").inert = !0, CM(this, KE, "f").showConfirm(CM(this, OE, "f").get("Are you sure you want to generate a new track?\n\nYour current track will be lost!"), CM(this, OE, "f").get("Cancel"), CM(this, OE, "f").get("Confirm"), (() => { + CM(this, $E, "f").inert = !1 + }), (() => { + e(), CM(this, $E, "f").inert = !1 + }))) + })), v.appendChild(b), _M(this, oS, new $k(m, CM(this, OE, "f"), CM(this, UE, "f"), CM(this, GE, "f"), CM(this, jE, "f"), CM(this, YE, "f"), CM(this, KE, "f"), CM(this, QE, "f"), !0, (() => { + CM(this, $E, "f").className = "editor", CM(this, oS, "f").hide() + }), ((e, t) => { + var n; + const i = CM(this, VE, "f").environment; + CM(this, VE, "f").loadTrackData(t, !1), CM(this, VE, "f").environment != i && CM(this, BE, "m", gM).call(this), CM(this, VE, "f").generateMeshes(), null === (n = CM(this, nM, "f")) || void 0 === n || n.refresh(CM(this, VE, "f")), CM(this, sS, "f").setFromExistingCheckpoints(CM(this, VE, "f")), _M(this, DS, !0, "f"), CM(this, BE, "m", lM).call(this, e.name), this.trackAuthor = e.author; + const r = CM(this, VE, "f").getStart(); + if (null != r) this.resetView(r.x, r.y, r.z); + else { + const e = CM(this, VE, "f").getBounds(); + this.resetView(e.min.x + Math.floor((e.max.x - e.min.x) / 2), 0, e.min.y + Math.floor((e.max.y - e.min.y) / 2)) + } + CM(this, $E, "f").className = "editor", CM(this, oS, "f").hide() + })), "f"), _M(this, cS, new uE(CM(this, $E, "f"), CM(this, UE, "f"), CM(this, qE, "f"), (e => { + _M(this, JS, e, "f") + }), (e => { + _M(this, ZS, e, "f") + }), (e => { + _M(this, XS, e, "f"), CM(this, cS, "f").rotationAxis = CM(this, XS, "f"), CM(this, BE, "m", bM).call(this) + }), (() => { + _M(this, qS, (CM(this, qS, "f") + 1) % 4, "f"), CM(this, cS, "f").rotation = CM(this, qS, "f"), CM(this, BE, "m", bM).call(this) + })), "f"); + const x = document.createElement("button"); + x.className = "button", x.innerHTML = ' ', x.append(document.createTextNode(CM(this, OE, "f").get("Load"))), x.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(), CM(this, DS, "f") ? (CM(this, oS, "f").show(), CM(this, $E, "f").className = "hidden") : (CM(this, $E, "f").inert = !0, CM(this, KE, "f").showConfirm(CM(this, OE, "f").get("Are you sure you want to load a new track?\n\nYour current track will be lost!"), CM(this, OE, "f").get("Cancel"), CM(this, OE, "f").get("Confirm"), (() => { + CM(this, $E, "f").inert = !1 + }), (() => { + CM(this, oS, "f").show(), CM(this, $E, "f").className = "hidden", CM(this, $E, "f").inert = !1 + }))) + })), v.appendChild(x); + const k = document.createElement("button"); + k.className = "button", k.innerHTML = ' ', k.append(document.createTextNode(CM(this, OE, "f").get("Save"))), k.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(); + const e = e => { + const t = { + name: e, + author: this.trackAuthor + }, + n = CM(this, VE, "f").getTrackData(); + CM(this, jE, "f").saveCustomTrack(t, n) ? (CM(this, BE, "m", uM).call(this, CM(this, OE, "f").get("Track saved!"), !0), _M(this, DS, !0, "f")) : CM(this, BE, "m", uM).call(this, CM(this, OE, "f").get("Failed to save!"), !1) + }, + t = this.getTrackName(); + if (null == t) CM(this, $E, "f").className = "hidden", _M(this, dS, new CE(CM(this, UE, "f"), CM(this, OE, "f"), CM(this, eM, "f"), this.trackAuthor, this, CM(this, VE, "f"), (e => { + CM(this, BE, "m", mM).call(this, e) + }), (e => { + var t; + CM(this, BE, "m", lM).call(this, e), null === (t = CM(this, dS, "f")) || void 0 === t || t.dispose(), _M(this, dS, null, "f"), CM(this, $E, "f").className = "editor" + }), (t => { + var n; + CM(this, BE, "m", lM).call(this, t), null === (n = CM(this, dS, "f")) || void 0 === n || n.dispose(), _M(this, dS, null, "f"), e(t), CM(this, $E, "f").className = "editor" + })), "f"); + else { + CM(this, jE, "f").checkCustomTrackNameExists(t) ? (CM(this, $E, "f").inert = !0, CM(this, KE, "f").showConfirm(CM(this, OE, "f").get('Are you sure you want to overwrite "{0}"?', [t]), CM(this, OE, "f").get("Cancel"), CM(this, OE, "f").get("Confirm"), (() => { + CM(this, $E, "f").inert = !1 + }), (() => { + e(t), CM(this, $E, "f").inert = !1 + }))) : e(t) + } + })), v.appendChild(k); + const E = document.createElement("button"); + E.className = "button", E.innerHTML = ' ', E.append(document.createTextNode(CM(this, OE, "f").get("Export"))), E.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(); + const e = this.getTrackName(); + if (null == e) CM(this, $E, "f").className = "hidden", _M(this, dS, new CE(CM(this, UE, "f"), CM(this, OE, "f"), CM(this, eM, "f"), this.trackAuthor, this, CM(this, VE, "f"), (e => { + CM(this, BE, "m", mM).call(this, e) + }), (e => { + var t; + CM(this, BE, "m", lM).call(this, e), null === (t = CM(this, dS, "f")) || void 0 === t || t.dispose(), _M(this, dS, null, "f"), CM(this, $E, "f").className = "editor" + }), (e => { + var t; + CM(this, BE, "m", lM).call(this, e), null === (t = CM(this, dS, "f")) || void 0 === t || t.dispose(), _M(this, dS, null, "f"); + const n = { + name: e, + author: this.trackAuthor + }, + i = CM(this, VE, "f").getTrackData().toExportString(n); + _M(this, lS, new Hx(i, (() => { + var e; + null === (e = CM(this, lS, "f")) || void 0 === e || e.dispose(), _M(this, lS, null, "f"), CM(this, $E, "f").className = "editor" + }), null, !1, CM(this, OE, "f"), CM(this, UE, "f"), CM(this, jE, "f"), CM(this, KE, "f")), "f") + })), "f"); + else { + CM(this, $E, "f").className = "hidden"; + const t = { + name: e, + author: this.trackAuthor + }, + n = CM(this, VE, "f").getTrackData().toExportString(t); + _M(this, lS, new Hx(n, (() => { + var e; + null === (e = CM(this, lS, "f")) || void 0 === e || e.dispose(), _M(this, lS, null, "f"), CM(this, $E, "f").className = "editor" + }), null, !1, CM(this, OE, "f"), CM(this, UE, "f"), CM(this, jE, "f"), CM(this, KE, "f")), "f") + } + })), v.appendChild(E); + const S = document.createElement("button"); + S.className = "button", S.innerHTML = ' ', S.append(document.createTextNode(CM(this, OE, "f").get("Help"))), S.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(); + const e = CM(this, HE, "f").getPart(eA.Start).colors.get(Jy.Summer); + if (null == e) throw new Error("Starting point mesh is null"); + const t = NE(e), + n = CM(this, HE, "f").getPart(eA.Checkpoint).colors.get(Jy.Summer); + if (null == n) throw new Error("Checkpoint mesh is null"); + const i = NE(n), + r = CM(this, HE, "f").getPart(eA.Finish).colors.get(Jy.Summer); + if (null == r) throw new Error("Finish line mesh is null"); + const a = NE(r); + CM(this, $E, "f").className = "hidden", _M(this, hS, new AE(CM(this, UE, "f"), CM(this, OE, "f"), CM(this, XE, "f"), CM(this, qE, "f"), t, i, a, (() => { + var e; + null === (e = CM(this, hS, "f")) || void 0 === e || e.dispose(), _M(this, hS, null, "f"), CM(this, $E, "f").className = "editor" + })), "f") + })), v.appendChild(S); + const M = document.createElement("div"); + M.className = "track-settings-container", CM(this, eS, "f").appendChild(M), _M(this, uS, document.createElement("button"), "f"), CM(this, uS, "f").className = "button", CM(this, uS, "f").innerHTML = ' ', CM(this, uS, "f").append(document.createTextNode(null !== (f = CM(this, eM, "f")) && void 0 !== f ? f : CM(this, OE, "f").get("Unnamed Track"))), CM(this, uS, "f").addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(), CM(this, $E, "f").className = "hidden", _M(this, dS, new CE(CM(this, UE, "f"), CM(this, OE, "f"), CM(this, eM, "f"), this.trackAuthor, this, CM(this, VE, "f"), (e => { + CM(this, BE, "m", mM).call(this, e) + }), (e => { + var t; + CM(this, BE, "m", lM).call(this, e), null === (t = CM(this, dS, "f")) || void 0 === t || t.dispose(), _M(this, dS, null, "f"), CM(this, $E, "f").className = "editor" + }), null), "f") + })), M.appendChild(CM(this, uS, "f")), _M(this, tS, document.createElement("div"), "f"), CM(this, tS, "f").className = "message", CM(this, $E, "f").appendChild(CM(this, tS, "f")); + const T = document.createElement("side"); + T.className = "side", CM(this, $E, "f").appendChild(T), _M(this, sS, new mx(T, CM(this, OE, "f"), CM(this, UE, "f"), CM(this, qE, "f")), "f"), _M(this, iS, document.createElement("div"), "f"), CM(this, iS, "f").className = "side-panel", T.appendChild(CM(this, iS, "f")), _M(this, rS, document.createElement("div"), "f"), CM(this, rS, "f").className = "category-panel", CM(this, iS, "f").appendChild(CM(this, rS, "f")); + const _ = new Ar(4 * jb.partSize, jb.partSize, 4 * jb.partSize); + _.translate(0, jb.partSize / 2, 0); + const C = new wr(_, CM(this, zS, "f")), + P = document.createElement("button"); + P.addEventListener("click", (() => { + CM(this, UE, "f").playUIClick(), CM(this, BE, "m", vM).call(this, null) + })), CM(this, rS, "f").appendChild(P); + const I = document.createElement("img"); + I.src = "images/erase.svg", P.appendChild(I), CM(this, US, "f").add(C), CM(this, iM, "f").push({ + id: null, + selectionMesh: C, + button: P, + image: I, + colorPanel: null, + colorButtons: [], + tiles: new tb([ + [-2, 0, -2], + [-1, 0, -2], + [0, 0, -2], + [1, 0, -2], + [-2, 0, -1], + [-1, 0, -1], + [0, 0, -1], + [1, 0, -1], + [-2, 0, 0], + [-1, 0, 0], + [0, 0, 0], + [1, 0, 0], + [-2, 0, 1], + [-1, 0, 1], + [0, 0, 1], + [1, 0, 1] + ]), + isCheckpoint: !1, + isStart: !1, + category: null + }), _M(this, aS, new Cx(CM(this, $E, "f"), CM(this, OE, "f"), CM(this, qE, "f"), (() => { + CM(this, UE, "f").playUIClick(), _M(this, BE, CM(this, BE, "a", yM) + 1, "a", AM) + }), (() => { + CM(this, UE, "f").playUIClick(), _M(this, BE, Math.max(0, CM(this, BE, "a", yM) - 1), "a", AM) + })), "f"), CM(this, aS, "f").refresh(CM(this, BE, "a", yM)) + } + dispose() { + var e, t, n; + _M(this, JE, !1, "f"), null === (e = CM(this, nM, "f")) || void 0 === e || e.dispose(), CM(this, aS, "f").dispose(), CM(this, sS, "f").dispose(), null === (t = CM(this, lS, "f")) || void 0 === t || t.dispose(), _M(this, lS, null, "f"), CM(this, oS, "f").dispose(), CM(this, cS, "f").dispose(), null === (n = CM(this, hS, "f")) || void 0 === n || n.dispose(), _M(this, hS, null, "f"); + const i = document.getElementById("ui"); + if (null == i) throw new Error("Failed to find UI element"); + i.removeChild(CM(this, $E, "f")), CM(this, FE, "f").scene.remove(CM(this, kS, "f")), CM(this, ES, "f").dispose(), CM(this, FE, "f").canvas.style.touchAction = "", CM(this, zS, "f").dispose(); + for (const e of CM(this, US, "f").children) { + const t = e; + if (t.geometry.dispose(), Array.isArray(t.material)) + for (const e of t.material) e.dispose(); + else t.material.dispose() + } + if (CM(this, FE, "f").scene.remove(CM(this, US, "f")), null != CM(this, WS, "f") && (CM(this, FE, "f").scene.remove(CM(this, WS, "f")), CM(this, WS, "f").dispose(), CM(this, FS, "f").dispose(), CM(this, OS, "f").dispose(), _M(this, WS, null, "f")), CM(this, BS, "f").geometry.dispose(), Array.isArray(CM(this, BS, "f").material)) + for (const e of CM(this, BS, "f").material) e.dispose(); + else CM(this, BS, "f").material.dispose(); + CM(this, FE, "f").canvas.removeEventListener("mousemove", CM(this, pS, "f")), CM(this, FE, "f").canvas.removeEventListener("mousedown", CM(this, fS, "f")), window.removeEventListener("mouseup", CM(this, mS, "f")), CM(this, FE, "f").canvas.removeEventListener("mouseout", CM(this, gS, "f")), CM(this, FE, "f").canvas.removeEventListener("touchstart", CM(this, vS, "f")), CM(this, FE, "f").canvas.removeEventListener("click", CM(this, wS, "f")), window.removeEventListener("keydown", CM(this, yS, "f")), window.removeEventListener("keyup", CM(this, AS, "f")), window.removeEventListener("wheel", CM(this, bS, "f")), window.removeEventListener("beforeunload", CM(this, xS, "f")) + } + getTrackName() { + return CM(this, eM, "f") + } + setTestCallback(e) { + _M(this, ZE, e, "f") + } + enable() { + var e; + _M(this, JE, !0, "f"), CM(this, ES, "f").enabled = !0, 1 == CM(this, iM, "f").length && CM(this, BE, "m", pM).call(this), null === (e = CM(this, nM, "f")) || void 0 === e || e.dispose(), _M(this, nM, new ex(CM(this, FE, "f")), "f"), CM(this, nM, "f").refresh(CM(this, VE, "f")), CM(this, cS, "f").show(), CM(this, $E, "f").className = "editor" + } + disable() { + var e, t, n; + _M(this, JE, !1, "f"), CM(this, ES, "f").enabled = !1, CM(this, US, "f").visible = !1, null === (e = CM(this, nM, "f")) || void 0 === e || e.dispose(), CM(this, $E, "f").className = "hidden", null === (t = CM(this, lS, "f")) || void 0 === t || t.dispose(), _M(this, lS, null, "f"), CM(this, oS, "f").hide(), CM(this, cS, "f").hide(), null === (n = CM(this, hS, "f")) || void 0 === n || n.dispose(), _M(this, hS, null, "f") + } + isEnabled() { + return CM(this, JE, "f") + } + resetView(e, t, n) { + _M(this, BE, t, "a", AM); + const i = new yn(e * jb.partSize, t * jb.partSize, n * jb.partSize); + CM(this, kS, "f").position.copy(i).add(new yn(40, 40, -40)), CM(this, ES, "f").target.copy(i), CM(this, ES, "f").update() + } + get camera() { + return CM(this, kS, "f") + } + update(e) { + var t; + if (CM(this, BE, "m", MM).call(this, e), CM(this, JE, "f")) { + if (CM(this, kS, "f").position.y < .499 && (CM(this, kS, "f").position.y = .5, CM(this, ES, "f").update()), _M(this, YS, CM(this, BE, "m", kM).call(this), "f"), null != CM(this, YS, "f")) { + const e = vb(CM(this, qS, "f"), CM(this, XS, "f")), + t = new yn(CM(this, YS, "f").x * jb.partSize, CM(this, YS, "f").y * jb.partSize, CM(this, YS, "f").z * jb.partSize); + CM(this, US, "f").position.copy(t), CM(this, US, "f").quaternion.copy(e), CM(this, US, "f").visible = !0 + } else CM(this, US, "f").visible = !1; + const e = CM(this, YS, "f"); + if (null != e && null != CM(this, rM, "f")) { + const n = CM(this, iM, "f")[CM(this, rM, "f")], + i = CM(this, BE, "m", EM).call(this, e, n.tiles); + if (null == n.id || CM(this, VS, "f")) i.length > 0 ? (CM(this, zS, "f").color.set(12255232), CM(this, OS, "f").color.set(12255232)) : (CM(this, zS, "f").color.set(12263970), CM(this, OS, "f").color.set(12263970)); + else { + let t, r; + if (CM(this, JS, "f")) t = i.some((({ + parts: t + }) => t.some((t => t.id == n.id && t.x == e.x && t.y == e.y && t.z == e.z && t.rotation == CM(this, qS, "f") && t.rotationAxis == CM(this, XS, "f"))))), r = !1; + else { + t = !1; + for (const { + parts: a + } + of i) + for (const i of a) { + if (!CM(this, HE, "f").isPartCombinationAllowed({ + id: n.id, + x: e.x, + y: e.y, + z: e.z, + rotation: CM(this, qS, "f"), + rotationAxis: CM(this, XS, "f") + }, { + id: i.id, + x: i.x, + y: i.y, + z: i.z, + rotation: i.rotation, + rotationAxis: i.rotationAxis + })) { + t = !0; + break + } + r = !0 + } + } + t ? (CM(this, zS, "f").color.set(12303104), CM(this, OS, "f").color.set(12303104)) : r ? (CM(this, zS, "f").color.set(48059), CM(this, OS, "f").color.set(48059)) : (CM(this, zS, "f").color.set(187), CM(this, OS, "f").color.set(187)) + } + if (CM(this, VS, "f")) CM(this, BE, "m", SM).call(this, i); + else if (CM(this, HS, "f") || CM(this, QS, "f")) { + if (null == n.id) CM(this, BE, "m", SM).call(this, i); + else if (null == CM(this, $S, "f") || CM(this, $S, "f").x != e.x || CM(this, $S, "f").y != e.y || CM(this, $S, "f").z != e.z || CM(this, $S, "f").id != n.id || CM(this, $S, "f").rotation != CM(this, qS, "f") || CM(this, $S, "f").rotationAxis != CM(this, XS, "f")) { + if (CM(this, JS, "f")) + for (const { + parts: t + } + of i) { + const i = t.find((t => t.id == n.id && t.x == e.x && t.y == e.y && t.z == e.z && t.rotation == CM(this, qS, "f") && t.rotationAxis == CM(this, XS, "f"))); + null != i && CM(this, VE, "f").deleteSpecificPart(i.id, i.x, i.y, i.z, i.rotation, i.rotationAxis) + } else + for (const { + parts: t + } + of i) + for (const i of t) CM(this, HE, "f").isPartCombinationAllowed({ + id: n.id, + x: e.x, + y: e.y, + z: e.z, + rotation: CM(this, qS, "f"), + rotationAxis: CM(this, XS, "f") + }, { + id: i.id, + x: i.x, + y: i.y, + z: i.z, + rotation: i.rotation, + rotationAxis: i.rotationAxis + }) || CM(this, VE, "f").deleteSpecificPart(i.id, i.x, i.y, i.z, i.rotation, i.rotationAxis); + let r = null; + n.isCheckpoint && (r = CM(this, sS, "f").checkpointOrder); + let a = null; + n.isStart && (a = CM(this, VE, "f").getNextStartOrder()), CM(this, VE, "f").setPart(e.x, e.y, e.z, n.id, CM(this, qS, "f"), CM(this, XS, "f"), CM(this, BE, "m", fM).call(this), r, a), CM(this, BE, "m", xM).call(this), _M(this, $S, { + x: e.x, + y: e.y, + z: e.z, + id: n.id, + rotation: CM(this, qS, "f"), + rotationAxis: CM(this, XS, "f") + }, "f"), CM(this, VE, "f").generateMeshes(), null === (t = CM(this, nM, "f")) || void 0 === t || t.refresh(CM(this, VE, "f")), CM(this, sS, "f").setFromExistingCheckpoints(CM(this, VE, "f")), _M(this, DS, !1, "f") + } + _M(this, QS, !1, "f") + } + CM(this, US, "f").visible = !0 + } else CM(this, US, "f").visible = !1 + } + } + }; + var IM, RM, LM, DM, NM, BM, UM, zM = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + OM = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + IM = new WeakMap, RM = new WeakMap, LM = new WeakMap, DM = new WeakMap, NM = new WeakMap, BM = new WeakMap, UM = new WeakMap; + const FM = class { + constructor(e, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m, g) { + IM.set(this, void 0), RM.set(this, void 0), LM.set(this, void 0), DM.set(this, void 0), NM.set(this, void 0), BM.set(this, void 0), UM.set(this, void 0), this.isPaused = !1, zM(this, IM, e, "f"), zM(this, RM, i, "f"), zM(this, LM, r, "f"), zM(this, DM, s, "f"), zM(this, NM, o, "f"), zM(this, BM, l, "f"), zM(this, UM, new PM(a, s, o, c, e, t, n, h, d, u, p, f, l, m), "f"), OM(this, UM, "f").enable(), OM(this, IM, "f").clear(), OM(this, IM, "f").setPart(0, 0, 0, eA.Start, 0, nA.YPositive, Jy.Default, null, 0), OM(this, IM, "f").generateMeshes(), o.setCamera(OM(this, UM, "f").camera), OM(this, UM, "f").setTestCallback((() => { + var e; + OM(this, UM, "f").disable(); + const t = { + name: null !== (e = OM(this, UM, "f").getTrackName()) && void 0 !== e ? e : a.get("Unnamed Track"), + author: OM(this, UM, "f").trackAuthor + }; + g(t, OM(this, IM, "f").getTrackData(), (() => { + OM(this, UM, "f").enable(), o.setCamera(OM(this, UM, "f").camera) + })) + })) + } + dispose() { + OM(this, UM, "f").dispose(), OM(this, IM, "f").clear() + } + update(e) { + this.isPaused || OM(this, UM, "f").update(e), OM(this, RM, "f").update(OM(this, IM, "f")), OM(this, LM, "f").update(e, OM(this, NM, "f").camera, OM(this, IM, "f").sunDirection), OM(this, DM, "f").update(e, !1, OM(this, NM, "f"), OM(this, BM, "f")), OM(this, NM, "f").update(new yn, OM(this, IM, "f").sunDirection) + } + }; + var WM = n(5811), + VM = {}; + VM.styleTagTransform = u(), VM.setAttributes = l(), VM.insert = s().bind(null, "head"), VM.domAPI = r(), VM.insertStyleElement = h(); + t()(WM.A, VM); + WM.A && WM.A.locals && WM.A.locals; + var HM, GM, jM, QM, YM, KM, qM = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + XM = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + HM = new WeakMap, GM = new WeakMap, jM = new WeakMap, QM = new WeakMap, YM = new WeakMap, KM = new WeakMap; + const ZM = class { + constructor(e, t) { + HM.set(this, void 0), GM.set(this, void 0), jM.set(this, void 0), QM.set(this, void 0), YM.set(this, void 0), KM.set(this, null), qM(this, HM, t, "f"), qM(this, GM, e, "f"); + const n = document.getElementById("ui"); + if (null == n) throw new Error("UI element not found"); + qM(this, jM, n, "f"), qM(this, QM, document.createElement("div"), "f"), 0 == XM(this, GM, "f") || "off" == t.getSetting($o.Checkpoints) ? "top" == t.getSetting($o.Checkpoints) ? XM(this, QM, "f").className = "checkpoint up" : XM(this, QM, "f").className = "checkpoint" : XM(this, QM, "f").className = "hidden", XM(this, jM, "f").appendChild(XM(this, QM, "f")); + const i = document.createElement("div"); + XM(this, QM, "f").appendChild(i); + const r = document.createElement("img"); + r.src = "images/checkpoint.svg", i.appendChild(r), qM(this, YM, document.createElement("span"), "f"), i.appendChild(XM(this, YM, "f")) + } + dispose() { + XM(this, jM, "f").removeChild(XM(this, QM, "f")) + } + setOverridePosition(e) { + const t = XM(this, HM, "f").getSetting($o.Checkpoints); + 0 == XM(this, GM, "f") || "off" == t ? XM(this, QM, "f").className = "hidden" : XM(this, QM, "f").className = (null != e ? e : "top" == t) ? "checkpoint up" : "checkpoint" + } + update(e) { + const t = e.getNextCheckpointIndex().toString() + "/" + XM(this, GM, "f").toString(); + t != XM(this, KM, "f") && (XM(this, YM, "f").textContent = t, qM(this, KM, t, "f")) + } + }; + var JM = n(8229), + $M = {}; + $M.styleTagTransform = u(), $M.setAttributes = l(), $M.insert = s().bind(null, "head"), $M.domAPI = r(), $M.insertStyleElement = h(); + t()(JM.A, $M); + JM.A && JM.A.locals && JM.A.locals; + var eT, tT, nT, iT, rT, aT, sT, oT, lT, cT, hT, dT, uT, pT = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + fT = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + tT = new WeakMap, nT = new WeakMap, iT = new WeakMap, rT = new WeakMap, aT = new WeakMap, sT = new WeakMap, oT = new WeakMap, lT = new WeakMap, cT = new WeakMap, eT = new WeakSet, hT = function(e, t) { + fT(this, sT, "f").textContent = e, fT(this, oT, "f").textContent = t, fT(this, aT, "f").className = "hint show" + }, dT = function() { + pT(this, lT, 2.5, "f"), fT(this, aT, "f").className = "hint hide" + }, uT = function() { + pT(this, lT, 2.5, "f"), fT(this, aT, "f").className = "hint" + }; + const mT = class { + constructor(e, t, n) { + eT.add(this), tT.set(this, void 0), nT.set(this, void 0), iT.set(this, void 0), rT.set(this, void 0), aT.set(this, void 0), sT.set(this, void 0), oT.set(this, void 0), lT.set(this, 2.5), cT.set(this, void 0), pT(this, tT, e, "f"), pT(this, nT, t, "f"), pT(this, iT, n, "f"); + const i = document.getElementById("ui"); + if (null == i) throw new Error("UI element not found"); + pT(this, rT, i, "f"), pT(this, aT, document.createElement("div"), "f"), fT(this, aT, "f").className = "hint", fT(this, rT, "f").appendChild(fT(this, aT, "f")), pT(this, sT, document.createElement("div"), "f"), fT(this, sT, "f").className = "title", fT(this, aT, "f").appendChild(fT(this, sT, "f")), pT(this, oT, document.createElement("div"), "f"), fT(this, oT, "f").className = "subtitle", fT(this, aT, "f").appendChild(fT(this, oT, "f")), pT(this, cT, (() => { + fT(this, eT, "m", uT).call(this) + }), "f"), fT(this, nT, "f").addChangeListener(fT(this, cT, "f")) + } + dispose() { + fT(this, rT, "f").removeChild(fT(this, aT, "f")), fT(this, nT, "f").removeChangeListener(fT(this, cT, "f")) + } + update(e, t) { + if (e.hasStarted() && !e.getControls().reset && fT(this, iT, "f").getSettingBoolean($o.ResetHintEnabled)) + if (e.getSpeedKmh() < 50 || e.hasFinished()) { + if (0 != fT(this, lT, "f") && (pT(this, lT, fT(this, lT, "f") - t, "f"), fT(this, lT, "f") <= 0)) { + if (fT(this, nT, "f").touchEnabled) fT(this, eT, "m", hT).call(this, fT(this, tT, "f").get("Reset once to return to the last checkpoint"), fT(this, tT, "f").get("Reset again to start over")); + else { + const e = fT(this, iT, "f").getKeyBindings(Ix.VehicleCheckpointReset).filter((e => null != e)), + t = fT(this, iT, "f").getKeyBindings(Ix.VehicleStartReset).filter((e => null != e)); + let n = ""; + e.length > 0 && (n = fT(this, tT, "f").get("Press {0} to return to the last checkpoint", [e.map((e => "[" + e + "]")).join(" / ")])); + let i = ""; + t.length > 0 && (i = fT(this, tT, "f").get("Press {0} to start over", [t.map((e => "[" + e + "]")).join(" / ")])), "" != n && "" != i ? fT(this, eT, "m", hT).call(this, n, i) : "" != n ? fT(this, eT, "m", hT).call(this, n, "") : "" != i && fT(this, eT, "m", hT).call(this, i, "") + } + pT(this, lT, 0, "f") + } + } else fT(this, eT, "m", dT).call(this); + else fT(this, eT, "m", uT).call(this) + } + }; + var gT = n(5151), + vT = {}; + vT.styleTagTransform = u(), vT.setAttributes = l(), vT.insert = s().bind(null, "head"), vT.domAPI = r(), vT.insertStyleElement = h(); + t()(gT.A, vT); + gT.A && gT.A.locals && gT.A.locals; + var wT, yT, AT, bT, xT, kT, ET, ST = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + MT = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + wT = new WeakMap, yT = new WeakMap, AT = new WeakMap, bT = new WeakMap, xT = new WeakMap, kT = new WeakMap, ET = new WeakMap; + const TT = class { + constructor(e) { + wT.set(this, void 0), yT.set(this, void 0), AT.set(this, void 0), bT.set(this, void 0), xT.set(this, void 0), kT.set(this, null), ET.set(this, void 0), ST(this, wT, e, "f"), ST(this, ET, e.getSettingBoolean($o.ImperialUnitsEnabled), "f"); + const t = document.getElementById("ui"); + if (null == t) throw new Error("UI element not found"); + ST(this, yT, t, "f"), ST(this, AT, document.createElement("div"), "f"), "off" == e.getSetting($o.Speedometer) ? MT(this, AT, "f").className = "speedometer hidden" : "top" == e.getSetting($o.Speedometer) ? MT(this, AT, "f").className = "speedometer up" : MT(this, AT, "f").className = "speedometer", MT(this, yT, "f").appendChild(MT(this, AT, "f")); + const n = document.createElement("div"); + MT(this, AT, "f").appendChild(n), ST(this, bT, document.createElement("span"), "f"), MT(this, bT, "f").textContent = "0", n.appendChild(MT(this, bT, "f")), ST(this, xT, document.createElement("span"), "f"), MT(this, ET, "f") ? MT(this, xT, "f").textContent = "mph" : MT(this, xT, "f").textContent = "km/h", n.appendChild(MT(this, xT, "f")) + } + dispose() { + MT(this, yT, "f").removeChild(MT(this, AT, "f")) + } + setOverridePosition(e) { + const t = MT(this, wT, "f").getSetting($o.Speedometer); + MT(this, AT, "f").className = "off" == t ? "speedometer hidden" : (null != e ? e : "top" == t) ? "speedometer up" : "speedometer" + } + update(e) { + const t = Math.abs(e.getSpeedKmh()); + let n; + n = MT(this, ET, "f") ? t / 1.609344 : t; + const i = Math.trunc(n).toString(); + if (i != MT(this, kT, "f")) { + MT(this, bT, "f").innerHTML = ""; + for (const e of i) { + const t = document.createElement("span"); + t.textContent = e, MT(this, bT, "f").appendChild(t) + } + ST(this, kT, i, "f") + } + } + }; + var _T = n(2817), + CT = {}; + CT.styleTagTransform = u(), CT.setAttributes = l(), CT.insert = s().bind(null, "head"), CT.domAPI = r(), CT.insertStyleElement = h(); + t()(_T.A, CT); + _T.A && _T.A.locals && _T.A.locals; + var PT, IT, RT, LT, DT, NT, BT, UT, zT, OT, FT = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + WT = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + PT = new WeakMap, IT = new WeakMap, RT = new WeakMap, LT = new WeakMap, DT = new WeakMap, NT = new WeakMap, BT = new WeakMap, UT = new WeakMap, zT = new WeakMap, OT = new WeakMap; + const VT = class { + constructor(e, t, n, i, r) { + PT.set(this, void 0), IT.set(this, void 0), RT.set(this, void 0), LT.set(this, void 0), DT.set(this, void 0), NT.set(this, void 0), BT.set(this, void 0), UT.set(this, void 0), zT.set(this, void 0), OT.set(this, void 0); + const a = document.getElementById("ui"); + if (null == a) throw new Error("UI element not found"); + if (FT(this, PT, a, "f"), FT(this, IT, document.createElement("div"), "f"), WT(this, IT, "f").className = "time-announcer", FT(this, RT, document.createElement("div"), "f"), WT(this, RT, "f").className = "hidden", WT(this, RT, "f").textContent = e.get("New record"), WT(this, IT, "f").appendChild(WT(this, RT, "f")), FT(this, LT, document.createElement("div"), "f"), WT(this, LT, "f").className = "track-name", WT(this, LT, "f").textContent = t, WT(this, IT, "f").appendChild(WT(this, LT, "f")), FT(this, DT, document.createElement("div"), "f"), WT(this, DT, "f").className = "current", WT(this, IT, "f").appendChild(WT(this, DT, "f")), FT(this, NT, document.createElement("div"), "f"), WT(this, IT, "f").appendChild(WT(this, NT, "f")), FT(this, BT, document.createElement("p"), "f"), WT(this, NT, "f").appendChild(WT(this, BT, "f")), FT(this, UT, document.createElement("div"), "f"), WT(this, IT, "f").appendChild(WT(this, UT, "f")), FT(this, zT, document.createElement("p"), "f"), WT(this, zT, "f").className = "title", WT(this, UT, "f").appendChild(WT(this, zT, "f")), FT(this, OT, document.createElement("p"), "f"), WT(this, UT, "f").appendChild(WT(this, OT, "f")), WT(this, PT, "f").appendChild(WT(this, IT, "f")), WT(this, DT, "f").textContent = fk.formatTimeString(n), null == i) WT(this, RT, "f").className = "record", WT(this, NT, "f").className = "hidden"; + else { + const e = n.difference(i); + WT(this, BT, "f").textContent = fk.formatTimeString(e, !0), e.isNegative() ? (WT(this, RT, "f").className = "record", WT(this, NT, "f").className = "difference") : (WT(this, RT, "f").className = "hidden", WT(this, NT, "f").className = "difference red") + } + if (null == r) WT(this, UT, "f").className = "hidden"; + else { + const e = n.difference(r.record); + WT(this, zT, "f").textContent = r.name, WT(this, OT, "f").textContent = fk.formatTimeString(e, !0), e.isNegative() ? WT(this, UT, "f").className = "difference" : WT(this, UT, "f").className = "difference red" + } + } + dispose() { + WT(this, PT, "f").removeChild(WT(this, IT, "f")) + } + }; + var HT, GT, jT, QT, YT, KT, qT, XT, ZT, JT, $T, e_, t_, n_, i_, r_ = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + a_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + HT = new WeakMap, GT = new WeakMap, jT = new WeakMap, QT = new WeakMap, YT = new WeakMap, KT = new WeakMap, qT = new WeakMap, XT = new WeakMap, ZT = new WeakMap, JT = new WeakMap, $T = new WeakMap, e_ = new WeakMap, t_ = new WeakMap, n_ = new WeakMap, i_ = new WeakMap; + const s_ = class { + constructor(e, t) { + HT.set(this, void 0), GT.set(this, void 0), jT.set(this, !1), QT.set(this, []), YT.set(this, void 0), KT.set(this, void 0), qT.set(this, void 0), XT.set(this, void 0), ZT.set(this, void 0), JT.set(this, void 0), $T.set(this, !1), e_.set(this, !1), t_.set(this, !1), n_.set(this, !1), i_.set(this, !1), r_(this, HT, e, "f"), r_(this, GT, new Pr(70, 1, .5, Au.maxViewDistance), "f"), a_(this, GT, "f").position.set(0, 20, 0), window.addEventListener("keydown", r_(this, YT, (e => { + t.checkKeyBinding(e, Ix.SpectatorMoveForwards) ? (r_(this, $T, !0, "f"), e.preventDefault()) : t.checkKeyBinding(e, Ix.SpectatorMoveRight) ? (r_(this, e_, !0, "f"), e.preventDefault()) : t.checkKeyBinding(e, Ix.SpectatorMoveBackwards) ? (r_(this, t_, !0, "f"), e.preventDefault()) : t.checkKeyBinding(e, Ix.SpectatorMoveLeft) ? (r_(this, n_, !0, "f"), e.preventDefault()) : t.checkKeyBinding(e, Ix.SpectatorSpeedModifier) && (r_(this, i_, !0, "f"), e.preventDefault()) + }), "f")), window.addEventListener("keyup", r_(this, KT, (e => { + t.checkKeyBinding(e, Ix.SpectatorMoveForwards) ? r_(this, $T, !1, "f") : t.checkKeyBinding(e, Ix.SpectatorMoveRight) ? r_(this, e_, !1, "f") : t.checkKeyBinding(e, Ix.SpectatorMoveBackwards) ? r_(this, t_, !1, "f") : t.checkKeyBinding(e, Ix.SpectatorMoveLeft) ? r_(this, n_, !1, "f") : t.checkKeyBinding(e, Ix.SpectatorSpeedModifier) && r_(this, i_, !1, "f") + }), "f")); + let n = !1, + i = { + x: 0, + y: 0 + }, + r = 0, + a = 0; + e.canvas.addEventListener("mousedown", r_(this, qT, (e => { + n = !0; + const t = (new ai).setFromQuaternion(a_(this, GT, "f").quaternion, "YXZ"); + r = t.y, a = t.x, i = { + x: e.clientX, + y: e.clientY + } + }), "f")), window.addEventListener("mouseup", r_(this, XT, (() => { + n = !1 + }), "f")), window.addEventListener("mousemove", r_(this, ZT, (e => { + if (n) { + const t = Math.max(window.innerWidth, window.innerHeight), + n = (e.clientX - i.x) / t, + s = (e.clientY - i.y) / t; + i = { + x: e.clientX, + y: e.clientY + }; + const o = 10; + r -= n * o, a -= s * o, r %= 2 * Math.PI, a = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, a)), r = Math.round(1e4 * r) / 1e4, a = Math.round(1e4 * a) / 1e4; + const l = (new wn).setFromAxisAngle(new yn(1, 0, 0), a), + c = (new wn).setFromAxisAngle(new yn(0, 1, 0), r); + a_(this, GT, "f").quaternion.copy(c).multiply(l) + } + }), "f")), window.addEventListener("contextmenu", r_(this, JT, (e => { + a_(this, jT, "f") && e.preventDefault() + }), "f")) + } + dispose() { + window.removeEventListener("keydown", a_(this, YT, "f")), window.removeEventListener("keyup", a_(this, KT, "f")), a_(this, HT, "f").canvas.removeEventListener("mousedown", a_(this, qT, "f")), window.removeEventListener("mouseup", a_(this, XT, "f")), window.removeEventListener("mousemove", a_(this, ZT, "f")), window.removeEventListener("contextmenu", a_(this, JT, "f")) + } + addToggleListener(e) { + a_(this, QT, "f").push(e) + } + get isEnabled() { + return a_(this, jT, "f") + } + set isEnabled(e) { + if (a_(this, jT, "f") != e) { + r_(this, jT, e, "f"); + for (const e of a_(this, QT, "f")) e(a_(this, jT, "f")) + } + } + toggle() { + this.isEnabled = !a_(this, jT, "f") + } + update(e) { + if (a_(this, jT, "f")) { + let t; + if (t = a_(this, i_, "f") ? 400 * e : 50 * e, a_(this, $T, "f")) { + const e = new yn(0, 0, -1).applyQuaternion(a_(this, GT, "f").quaternion); + a_(this, GT, "f").position.add(e.multiplyScalar(t)) + } + if (a_(this, e_, "f")) { + const e = new yn(1, 0, 0).applyQuaternion(a_(this, GT, "f").quaternion); + a_(this, GT, "f").position.add(e.multiplyScalar(t)) + } + if (a_(this, t_, "f")) { + const e = new yn(0, 0, 1).applyQuaternion(a_(this, GT, "f").quaternion); + a_(this, GT, "f").position.add(e.multiplyScalar(t)) + } + if (a_(this, n_, "f")) { + const e = new yn(-1, 0, 0).applyQuaternion(a_(this, GT, "f").quaternion); + a_(this, GT, "f").position.add(e.multiplyScalar(t)) + } + } + } + get camera() { + return a_(this, GT, "f") + } + }; + var o_ = n(3571), + l_ = {}; + l_.styleTagTransform = u(), l_.setAttributes = l(), l_.insert = s().bind(null, "head"), l_.domAPI = r(), l_.insertStyleElement = h(); + t()(o_.A, l_); + o_.A && o_.A.locals && o_.A.locals; + var c_, h_, d_, u_ = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + p_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + c_ = new WeakMap, h_ = new WeakMap, d_ = new WeakMap; + const f_ = class { + constructor(e, t, n) { + c_.set(this, void 0), h_.set(this, void 0), d_.set(this, void 0); + const i = document.getElementById("ui"); + if (null == i) throw new Error("UI element not found"); + u_(this, c_, i, "f"), u_(this, h_, document.createElement("div"), "f"), p_(this, h_, "f").className = "hidden", p_(this, c_, "f").appendChild(p_(this, h_, "f")); + const r = document.createElement("button"); + r.className = "reset", r.innerHTML = '', r.addEventListener("touchstart", (() => { + t.playUIClick(), r.classList.add("active"), n() + })), r.addEventListener("touchend", (() => { + r.classList.remove("active") + })), p_(this, h_, "f").appendChild(r); + const a = document.createElement("div"); + a.className = "left-container", p_(this, h_, "f").appendChild(a); + const s = document.createElement("div"); + s.innerHTML = '', a.appendChild(s); + const o = document.createElement("div"); + o.innerHTML = '', a.appendChild(o); + const l = document.createElement("div"); + l.className = "right-container", p_(this, h_, "f").appendChild(l); + const c = document.createElement("div"); + c.innerHTML = '', l.appendChild(c); + const h = document.createElement("div"); + h.innerHTML = '', l.appendChild(h), u_(this, d_, (t => { + let n = !1, + i = !1, + r = !1, + a = !1; + for (let e = 0; e < t.touches.length; e++) { + const l = t.touches.item(e); + if (null != l) { + switch (document.elementFromPoint(l.clientX, l.clientY)) { + case s: + n = !0; + break; + case h: + i = !0; + break; + case o: + r = !0; + break; + case c: + a = !0 + } + } + } + e.up = n, e.right = i, e.down = r, e.left = a, s.className = n ? "active" : "", h.className = i ? "active" : "", o.className = r ? "active" : "", c.className = a ? "active" : "", t.target instanceof HTMLButtonElement || t.preventDefault() + }), "f"), window.addEventListener("touchstart", p_(this, d_, "f"), { + passive: !1 + }), window.addEventListener("touchmove", p_(this, d_, "f"), { + passive: !1 + }), window.addEventListener("touchend", p_(this, d_, "f"), { + passive: !1 + }) + } + setEnabled(e) { + p_(this, h_, "f").className = e ? "touch-controls" : "hidden" + } + dispose() { + p_(this, c_, "f").removeChild(p_(this, h_, "f")), window.removeEventListener("touchstart", p_(this, d_, "f")), window.removeEventListener("touchmove", p_(this, d_, "f")), window.removeEventListener("touchend", p_(this, d_, "f")) + } + }; + var m_, g_, v_, w_, y_, A_, b_, x_, k_ = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + E_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + m_ = new WeakMap, g_ = new WeakMap, v_ = new WeakMap, w_ = new WeakMap, y_ = new WeakMap, A_ = new WeakMap, b_ = new WeakMap, x_ = new WeakMap; + const S_ = class { + constructor(e) { + m_.set(this, !1), g_.set(this, !1), v_.set(this, !1), w_.set(this, !1), y_.set(this, !1), A_.set(this, void 0), b_.set(this, void 0), x_.set(this, []), window.addEventListener("keydown", k_(this, A_, (t => { + e.checkKeyBinding(t, Ix.VehicleAccelerate) ? (this.up = !0, t.preventDefault()) : e.checkKeyBinding(t, Ix.VehicleTurnRight) ? (this.right = !0, t.preventDefault()) : e.checkKeyBinding(t, Ix.VehicleBrake) ? (this.down = !0, t.preventDefault()) : e.checkKeyBinding(t, Ix.VehicleTurnLeft) && (this.left = !0, t.preventDefault()) + }), "f")), window.addEventListener("keyup", k_(this, b_, (t => { + e.checkKeyBinding(t, Ix.VehicleAccelerate) ? this.up = !1 : e.checkKeyBinding(t, Ix.VehicleTurnRight) ? this.right = !1 : e.checkKeyBinding(t, Ix.VehicleBrake) ? this.down = !1 : e.checkKeyBinding(t, Ix.VehicleTurnLeft) && (this.left = !1) + }), "f")) + } + get up() { + return E_(this, m_, "f") + } + set up(e) { + if (E_(this, m_, "f") != e) { + k_(this, m_, e, "f"); + for (const e of E_(this, x_, "f")) e(this) + } + } + get right() { + return E_(this, g_, "f") + } + set right(e) { + if (E_(this, g_, "f") != e) { + k_(this, g_, e, "f"); + for (const e of E_(this, x_, "f")) e(this) + } + } + get down() { + return E_(this, v_, "f") + } + set down(e) { + if (E_(this, v_, "f") != e) { + k_(this, v_, e, "f"); + for (const e of E_(this, x_, "f")) e(this) + } + } + get left() { + return E_(this, w_, "f") + } + set left(e) { + if (E_(this, w_, "f") != e) { + k_(this, w_, e, "f"); + for (const e of E_(this, x_, "f")) e(this) + } + } + get reset() { + return E_(this, y_, "f") + } + set reset(e) { + if (E_(this, y_, "f") != e) { + k_(this, y_, e, "f"); + for (const e of E_(this, x_, "f")) e(this) + } + } + addChangeCallback(e) { + E_(this, x_, "f").push(e) + } + removeChangeCallback(e) { + const t = E_(this, x_, "f").indexOf(e); + t >= 0 && E_(this, x_, "f").splice(t, 1) + } + dispose() { + window.removeEventListener("keydown", E_(this, A_, "f")), window.removeEventListener("keyup", E_(this, b_, "f")) + } + getControls() { + return { + up: this.up, + right: this.right, + down: this.down, + left: this.left, + reset: this.reset + } + } + }; + var M_, T_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + M_ = new WeakMap; + const __ = class { + constructor() { + M_.set(this, []) + } + push(e) { + if (T_(this, M_, "f").length > 0) { + if (e.frames != T_(this, M_, "f")[T_(this, M_, "f").length - 1].frames + 1) throw new Error("Car states are not continuous") + } else if (e.frames > 0) throw new Error("First frame must be zero"); + T_(this, M_, "f").push(e) + } + getFrame(e) { + return e >= 0 && e < T_(this, M_, "f").length ? T_(this, M_, "f")[e] : null + } + getLastFrame() { + return 0 == T_(this, M_, "f").length ? new xp(0) : new xp(T_(this, M_, "f")[T_(this, M_, "f").length - 1].frames) + } + }; + var C_ = n(4804), + P_ = {}; + P_.styleTagTransform = u(), P_.setAttributes = l(), P_.insert = s().bind(null, "head"), P_.domAPI = r(), P_.insertStyleElement = h(); + t()(C_.A, P_); + C_.A && C_.A.locals && C_.A.locals; + var I_, R_, L_, D_, N_, B_, U_, z_, O_, F_ = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + W_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + R_ = new WeakMap, L_ = new WeakMap, D_ = new WeakMap, N_ = new WeakMap, B_ = new WeakMap, U_ = new WeakMap, z_ = new WeakMap, I_ = new WeakSet, O_ = function() { + "top" == W_(this, L_, "f").getSetting($o.Checkpoints) || W_(this, D_, "f").touchEnabled ? W_(this, N_, "f").classList.remove("up") : W_(this, N_, "f").classList.add("up"), W_(this, D_, "f").touchEnabled ? W_(this, N_, "f").classList.add("touch") : W_(this, N_, "f").classList.remove("touch") + }; + const V_ = class { + constructor(e, t, n, i, r, a) { + I_.add(this), R_.set(this, void 0), L_.set(this, void 0), D_.set(this, void 0), N_.set(this, void 0), B_.set(this, void 0), U_.set(this, !0), z_.set(this, void 0), F_(this, L_, n, "f"), F_(this, D_, i, "f"); + const s = document.getElementById("ui"); + if (null == s) throw new Error("UI element not found"); + F_(this, R_, s, "f"), F_(this, N_, document.createElement("div"), "f"), W_(this, N_, "f").className = "game-toolbar visible", W_(this, I_, "m", O_).call(this), W_(this, D_, "f").addChangeListener(F_(this, z_, (() => { + W_(this, I_, "m", O_).call(this) + }), "f")); + const o = document.createElement("button"); + o.className = "button", o.innerHTML = ' ', o.append(document.createTextNode(t.get("Exit"))), o.addEventListener("click", (() => { + e.playUIClick(), r() + })), W_(this, N_, "f").appendChild(o), F_(this, B_, document.createElement("button"), "f"), W_(this, B_, "f").className = "button", W_(this, B_, "f").innerHTML = ' ', W_(this, B_, "f").append(document.createTextNode(t.get("Watch"))), W_(this, B_, "f").addEventListener("click", (() => { + e.playUIClick(), a() + })), W_(this, N_, "f").appendChild(W_(this, B_, "f")), W_(this, R_, "f").appendChild(W_(this, N_, "f")) + } + dispose() { + W_(this, R_, "f").removeChild(W_(this, N_, "f")), W_(this, D_, "f").removeChangeListener(W_(this, z_, "f")) + } + setWatchButtonEnabled(e) { + W_(this, B_, "f").disabled = !e + } + setVisible(e) { + W_(this, U_, "f") != e && (e ? W_(this, N_, "f").classList.add("visible") : W_(this, N_, "f").classList.remove("visible"), W_(this, N_, "f").inert = !e, F_(this, U_, e, "f")) + } + }; + var H_, G_ = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }; + ! function(e) { + e[e.Loading = 0] = "Loading", e[e.Error = 1] = "Error", e[e.Ready = 2] = "Ready" + }(H_ || (H_ = {})); + let j_ = H_.Loading, + Q_ = !1, + Y_ = !1; + + function K_() { + return G_(this, void 0, void 0, (function*() { + try { + j_ = H_.Ready + } catch (e) { + j_ = H_.Error, console.error(e) + } + })) + } + + function q_() { + if (j_ == H_.Ready && !Q_) try { + window.CrazyGames ? window.CrazyGames.SDK.game.gameplayStart() : window.PokiSDK ? window.PokiSDK.gameplayStart() : window.adsbygoogle, Q_ = !0 + } catch (e) { + console.error(e) + } + } + + function X_() { + if (j_ == H_.Ready && Q_) try { + window.CrazyGames ? window.CrazyGames.SDK.game.gameplayStop() : window.PokiSDK ? window.PokiSDK.gameplayStop() : window.adsbygoogle, Q_ = !1 + } catch (e) { + console.error(e) + } + } + + function Z_() { + if (j_ == H_.Ready && !Y_) try { + window.CrazyGames ? window.CrazyGames.SDK.game.loadingStart() : window.PokiSDK || window.adsbygoogle, Y_ = !0 + } catch (e) { + console.error(e) + } + } + + function J_() { + if (j_ == H_.Ready && Y_) try { + window.CrazyGames ? window.CrazyGames.SDK.game.loadingStop() : window.PokiSDK || window.adsbygoogle, Y_ = !1 + } catch (e) { + console.error(e) + } + } + + function $_() { + if (j_ == H_.Ready) try { + window.CrazyGames ? window.CrazyGames.SDK.game.loadingStop() : window.PokiSDK ? window.PokiSDK.gameLoadingFinished() : window.adsbygoogle + } catch (e) { + console.error(e) + } + } + + function eC(e, t) { + return G_(this, void 0, void 0, (function*() { + if (j_ == H_.Ready) try { + if (window.CrazyGames) { + const t = window.CrazyGames; + yield new Promise(((n, i) => { + t.SDK.ad.requestAd("midgame", { + adFinished: n, + adError: i, + adStarted: e + }) + })) + } else if (window.PokiSDK) yield window.PokiSDK.commercialBreak(); + else if (window.adsbygoogle) { + const n = window.adsbygoogle; + yield new Promise((i => { + n.push({ + type: "start", + name: t, + beforeAd: e, + adBreakDone: i + }) + })) + } + } catch (e) { + throw console.error(e), e + } + })) + } + var tC = n(4538), + nC = {}; + nC.styleTagTransform = u(), nC.setAttributes = l(), nC.insert = s().bind(null, "head"), nC.domAPI = r(), nC.insertStyleElement = h(); + t()(tC.A, nC); + tC.A && tC.A.locals && tC.A.locals; + var iC, rC, aC, sC = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + oC = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + iC = new WeakMap, rC = new WeakMap, aC = new WeakMap; + const lC = class { + constructor(e) { + iC.set(this, void 0), rC.set(this, void 0), aC.set(this, !1); + const t = document.getElementById("ui"); + if (null == t) throw new Error("UI element not found"); + sC(this, iC, t, "f"), sC(this, rC, document.createElement("div"), "f"), oC(this, rC, "f").className = "pause-screen", oC(this, iC, "f").appendChild(oC(this, rC, "f")); + const n = document.createElement("div"); + n.className = "title", n.textContent = e.get("Paused"), oC(this, rC, "f").appendChild(n) + } + dispose() { + oC(this, iC, "f").removeChild(oC(this, rC, "f")) + } + startFadeOut(e) { + oC(this, aC, "f") || (sC(this, aC, !0, "f"), oC(this, rC, "f").classList.add("fade-out"), setTimeout(e, 250)) + } + }; + var cC = n(4239), + hC = {}; + hC.styleTagTransform = u(), hC.setAttributes = l(), hC.insert = s().bind(null, "head"), hC.domAPI = r(), hC.insertStyleElement = h(); + t()(cC.A, hC); + cC.A && cC.A.locals && cC.A.locals; + var dC, uC, pC, fC, mC = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + gC = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + dC = new WeakMap, uC = new WeakMap, pC = new WeakMap, fC = new WeakMap; + const vC = class { + constructor(e, t) { + dC.set(this, void 0), uC.set(this, void 0), pC.set(this, void 0), fC.set(this, void 0), mC(this, dC, t, "f"); + const n = document.getElementById("ui"); + if (null == n) throw new Error("UI element not found"); + mC(this, uC, n, "f"), mC(this, pC, document.createElement("div"), "f"), gC(this, pC, "f").className = "ghost-loading-ui", gC(this, pC, "f").textContent = e.get("Loading replay"), gC(this, uC, "f").appendChild(gC(this, pC, "f")), mC(this, fC, document.createElement("span"), "f"), gC(this, fC, "f").className = "percentage", gC(this, pC, "f").appendChild(gC(this, fC, "f")), this.update(1) + } + dispose() { + gC(this, uC, "f").removeChild(gC(this, pC, "f")) + } + setOverridePosition(e) { + const t = gC(this, dC, "f").getSetting($o.Speedometer); + (null != e ? e : "top" == t) ? gC(this, pC, "f").classList.add("down"): gC(this, pC, "f").classList.remove("down") + } + update(e) { + gC(this, fC, "f").textContent = Math.floor(100 * e).toString() + "%", e >= 1 ? gC(this, pC, "f").classList.add("hide") : gC(this, pC, "f").classList.remove("hide") + } + }; + new WeakMap, new WeakMap, new WeakMap, new WeakMap, new WeakMap, new WeakMap; + var wC, yC, AC, bC, xC, kC, EC, SC, MC, TC, _C, CC, PC, IC, RC, LC, DC, NC, BC, UC, zC, OC, FC, WC, VC, HC, GC, jC, QC, YC, KC, qC, XC, ZC, JC, $C, eP, tP, nP, iP, rP, aP, sP, oP, lP, cP, hP, dP, uP, pP, fP, mP, gP, vP, wP = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + yP = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + yC = new WeakMap, AC = new WeakMap, bC = new WeakMap, xC = new WeakMap, kC = new WeakMap, EC = new WeakMap, SC = new WeakMap, MC = new WeakMap, TC = new WeakMap, _C = new WeakMap, CC = new WeakMap, PC = new WeakMap, IC = new WeakMap, RC = new WeakMap, LC = new WeakMap, DC = new WeakMap, NC = new WeakMap, BC = new WeakMap, UC = new WeakMap, zC = new WeakMap, OC = new WeakMap, FC = new WeakMap, WC = new WeakMap, VC = new WeakMap, HC = new WeakMap, GC = new WeakMap, jC = new WeakMap, QC = new WeakMap, YC = new WeakMap, KC = new WeakMap, qC = new WeakMap, XC = new WeakMap, ZC = new WeakMap, JC = new WeakMap, $C = new WeakMap, eP = new WeakMap, tP = new WeakMap, nP = new WeakMap, iP = new WeakMap, rP = new WeakMap, aP = new WeakMap, sP = new WeakMap, oP = new WeakMap, lP = new WeakMap, cP = new WeakMap, hP = new WeakMap, wC = new WeakSet, dP = function(e) { + var t, n, i, r, a, s, o, l, c; + if (e) { + const e = yP(this, wC, "m", mP).call(this); + wP(this, OC, new mT(yP(this, EC, "f"), yP(this, IC, "f"), yP(this, _C, "f")), "f"), wP(this, FC, new vC(yP(this, EC, "f"), yP(this, _C, "f")), "f"), wP(this, WC, new ZM(yP(this, bC, "f").getTotalNumberOfCheckpointIndices(), yP(this, _C, "f")), "f"), wP(this, VC, new TT(yP(this, _C, "f")), "f"), wP(this, HC, new fk(yP(this, EC, "f"), yP(this, _C, "f")), "f"), null == e || e.settings.isSelf || (yP(this, HC, "f").nickname = e.settings.name), wP(this, jC, new V_(yP(this, MC, "f"), yP(this, EC, "f"), yP(this, _C, "f"), yP(this, IC, "f"), yP(this, LC, "f"), (() => { + yP(this, tP, "f").length > 0 && null != yP(this, DC, "f") && yP(this, DC, "f").call(this, yP(this, NC, "f"), yP(this, BC, "f"), yP(this, UC, "f"), yP(this, tP, "f").map((e => e.settings))) + })), "f"), yP(this, jC, "f").setWatchButtonEnabled(yP(this, tP, "f").length > 0 && null != yP(this, DC, "f")), yP(this, jC, "f").setVisible(!(null !== (n = null === (t = yP(this, eP, "f")) || void 0 === t ? void 0 : t.hasStarted()) && void 0 !== n && n)), yP(this, IC, "f").touchEnabled ? (yP(this, FC, "f").setOverridePosition(!0), yP(this, WC, "f").setOverridePosition(!0), yP(this, HC, "f").setOverridePosition(!0), yP(this, VC, "f").setOverridePosition(!0)) : (yP(this, FC, "f").setOverridePosition(null), yP(this, WC, "f").setOverridePosition(null), yP(this, HC, "f").setOverridePosition(null), yP(this, VC, "f").setOverridePosition(null)), yP(this, qC, "f").setEnabled(yP(this, IC, "f").touchEnabled), yP(this, wC, "m", vP).call(this) + } else null === (i = yP(this, OC, "f")) || void 0 === i || i.dispose(), wP(this, OC, null, "f"), null === (r = yP(this, FC, "f")) || void 0 === r || r.dispose(), wP(this, FC, null, "f"), null === (a = yP(this, WC, "f")) || void 0 === a || a.dispose(), wP(this, WC, null, "f"), null === (s = yP(this, VC, "f")) || void 0 === s || s.dispose(), wP(this, VC, null, "f"), null === (o = yP(this, HC, "f")) || void 0 === o || o.dispose(), wP(this, HC, null, "f"), null === (l = yP(this, GC, "f")) || void 0 === l || l.dispose(), wP(this, GC, null, "f"), null === (c = yP(this, jC, "f")) || void 0 === c || c.dispose(), wP(this, jC, null, "f") + }, uP = function() { + var e; + yP(this, cP, "f") || ((null === (e = yP(this, eP, "f")) || void 0 === e ? void 0 : e.hasFinished()) ? (wP(this, cP, !0, "f"), eC((() => { + yP(this, MC, "f").mute() + }), "game-finish-reset").finally((() => { + wP(this, cP, !1, "f"), yP(this, MC, "f").unmute(), yP(this, wC, "m", pP).call(this), yP(this, wC, "m", fP).call(this) + })).catch((e => { + console.error(e) + }))) : (yP(this, wC, "m", pP).call(this), yP(this, wC, "m", fP).call(this))) + }, pP = function() { + var e, t; + const n = yP(this, TC, "f").getCurrentUserProfile(); + let i = !1; + null != yP(this, eP, "f") ? (i = yP(this, SC, "f").camera == yP(this, eP, "f").cameraCockpit, yP(this, wC, "m", vP).call(this), yP(this, eP, "f").dispose(), wP(this, eP, null, "f")) : i = yP(this, _C, "f").getSettingBoolean($o.DefaultCameraMode); + const r = yP(this, bC, "f").getStartTransform(); + if (null == r) throw new Error("Start transform is null"); + wP(this, eP, new Aw(yP(this, yC, "f"), r, null, yP(this, JC, "f"), yP(this, SC, "f"), yP(this, MC, "f"), yP(this, xC, "f"), yP(this, bC, "f"), yP(this, _C, "f")), "f"), yP(this, eP, "f").notificationAudioEnabled = !0, yP(this, eP, "f").addResetCallback((() => { + yP(this, JC, "f").reset = !1, null == yP(this, eP, "f") ? wP(this, ZC, !1, "f") : (wP(this, ZC, yP(this, eP, "f").getControls().up || yP(this, eP, "f").getControls().down, "f"), yP(this, ZC, "f") && wP(this, $C, new Date, "f")) + })), yP(this, eP, "f").addCheckpointCallback((e => { + if (null == yP(this, eP, "f") || null == yP(this, HC, "f")) return; + const t = yP(this, eP, "f").getTime(); + let n = null; + const i = yP(this, wC, "m", mP).call(this); + null != i && i.checkpointTimes.length > e && (n = i.checkpointTimes[e]), yP(this, HC, "f").showCheckpointTime(t, n) + })), yP(this, eP, "f").addFinishCallback((e => { + var t, i; + const r = e.getTime(), + a = e.getRecording(), + s = e.getColors(), + o = yP(this, iP, "f"); + if (null == yP(this, iP, "f") || r.lessThan(yP(this, iP, "f"))) { + if (yP(this, RC, "f").call(this, yP(this, bC, "f").getID(), a, r), 0 == yP(this, tP, "f").length) yP(this, tP, "f").push({ + car: null, + carId: null, + hasEnded: !1, + loadedFrames: 0, + maxFrames: 0, + settings: { + recording: a, + carColors: s, + name: n.nickname, + time: r, + isSelf: !0 + }, + replay: null, + checkpointTimes: [] + }), null === (t = yP(this, jC, "f")) || void 0 === t || t.setWatchButtonEnabled(null != yP(this, DC, "f")); + else { + const e = yP(this, tP, "f").find((e => e.settings.isSelf)); + null != e && (e.settings = { + recording: a, + carColors: s, + name: n.nickname, + time: r, + isSelf: !0 + }), null === (i = yP(this, jC, "f")) || void 0 === i || i.setWatchButtonEnabled(null != yP(this, DC, "f")) + } + wP(this, iP, r, "f") + } + let l = null; + const c = yP(this, wC, "m", mP).call(this); + null == c || c.settings.isSelf || (l = { + record: c.settings.time, + name: c.settings.name + }), wP(this, GC, new VT(yP(this, EC, "f"), yP(this, NC, "f").name, r, o, l), "f") + })), yP(this, eP, "f").setColors(n.carColors), i ? yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraCockpit) : yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraOrbit), yP(this, sP, "f").isEnabled = !1, null === (e = yP(this, GC, "f")) || void 0 === e || e.dispose(), wP(this, GC, null, "f"), null === (t = yP(this, HC, "f")) || void 0 === t || t.hideCheckpointTime(), yP(this, JC, "f").reset = !1, wP(this, ZC, !1, "f"), wP(this, $C, null, "f") + }, fP = function() { + var e; + if (yP(this, _C, "f").getSettingBoolean($o.GhostCarEnabled)) + for (const t of yP(this, tP, "f")) { + null != t.car && (t.car.dispose(), t.car = null); + const n = yP(this, bC, "f").getStartTransform(); + if (null == n) throw new Error("Start transform is null"); + if (t.settings.recording != (null === (e = t.replay) || void 0 === e ? void 0 : e.recording) && (null != t.carId && (yP(this, AC, "f").deleteCar(t.carId), t.carId = null), t.replay = null), null == t.replay) { + const e = t.settings.time.numberOfFrames + yP(this, hP, "f"), + i = new __, + r = []; + let a = 0; + const s = yP(this, AC, "f").createCar(n, yP(this, xC, "f").getMountainVertices(), yP(this, xC, "f").getMountainOffset(), yP(this, bC, "f").getTrackData(), t.settings.recording, (n => { + i.push(n), n.nextCheckpointIndex > a && (r.push(new xp(n.frames)), a = n.nextCheckpointIndex), n.frames >= e && null != t.carId && (null != n.finishFrames && n.finishFrames == t.settings.time.numberOfFrames || wP(this, nP, !0, "f"), yP(this, AC, "f").deleteCar(t.carId), t.carId = null), t.loadedFrames = n.frames, t.maxFrames = e + })); + i.push(s), yP(this, AC, "f").startCar(s.id, new xp(e)), t.carId = s.id, t.loadedFrames = 0, t.maxFrames = e, t.replay = { + replay: i, + recording: t.settings.recording + }, t.checkpointTimes = r + } + const i = new Aw(null, n, t.settings.recording, null, yP(this, SC, "f"), yP(this, MC, "f"), yP(this, xC, "f"), yP(this, bC, "f"), yP(this, _C, "f")); + i.setColors(t.settings.carColors), i.audioVolume = .35, yP(this, wC, "m", gP).call(this), t.car = i, t.hasEnded = !1 + } + }, mP = function() { + let e = null; + for (const t of yP(this, tP, "f"))(null == e || t.settings.time.lessThan(e.settings.time) || t.settings.time.equals(e.settings.time) && t.settings.isSelf) && (e = t); + return e + }, gP = function() { + if (null != yP(this, eP, "f")) + for (const e of yP(this, tP, "f")) + if (null != e.car) { + const t = e.car.getPosition().distanceTo(yP(this, eP, "f").getPosition()), + n = Math.max(0, Math.min(1, t / 5)); + e.car.setOpacity(n) + } + }, vP = function() { + var e; + if (null != yP(this, HC, "f")) { + const t = yP(this, wC, "m", mP).call(this); + yP(this, HC, "f").record = null !== (e = null == t ? void 0 : t.settings.time) && void 0 !== e ? e : null, null == t || t.settings.isSelf ? yP(this, HC, "f").nickname = null : yP(this, HC, "f").nickname = t.settings.name + } + }; + const AP = class { + constructor(e, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m, g, v, w, y, A) { + if (wC.add(this), yC.set(this, void 0), AC.set(this, void 0), bC.set(this, void 0), xC.set(this, void 0), kC.set(this, void 0), EC.set(this, void 0), SC.set(this, void 0), MC.set(this, void 0), TC.set(this, void 0), _C.set(this, void 0), CC.set(this, void 0), PC.set(this, void 0), IC.set(this, void 0), RC.set(this, void 0), LC.set(this, void 0), DC.set(this, void 0), NC.set(this, void 0), BC.set(this, void 0), UC.set(this, void 0), zC.set(this, !0), OC.set(this, null), FC.set(this, null), WC.set(this, null), VC.set(this, null), HC.set(this, null), GC.set(this, null), jC.set(this, null), QC.set(this, 0), YC.set(this, null), KC.set(this, null), qC.set(this, void 0), XC.set(this, void 0), ZC.set(this, !1), JC.set(this, void 0), $C.set(this, null), eP.set(this, null), tP.set(this, []), nP.set(this, !1), iP.set(this, void 0), rP.set(this, void 0), aP.set(this, void 0), sP.set(this, void 0), oP.set(this, null), lP.set(this, null), cP.set(this, !1), this.isPaused = !1, hP.set(this, 1e4), wP(this, yC, e, "f"), wP(this, AC, t, "f"), wP(this, bC, n, "f"), wP(this, xC, i, "f"), wP(this, kC, r, "f"), wP(this, EC, a, "f"), wP(this, SC, s, "f"), wP(this, MC, o, "f"), wP(this, TC, l, "f"), wP(this, _C, c, "f"), wP(this, CC, h, "f"), wP(this, PC, d, "f"), wP(this, IC, u, "f"), wP(this, RC, w, "f"), wP(this, LC, y, "f"), wP(this, DC, A, "f"), wP(this, iP, v, "f"), wP(this, NC, p, "f"), wP(this, BC, f, "f"), wP(this, UC, m, "f"), n.loadTrackData(f), n.generateMeshes(), i.generateMountains(n.getBounds()), wP(this, tP, g.map((e => ({ + car: null, + carId: null, + hasEnded: !1, + loadedFrames: 0, + maxFrames: 0, + settings: e, + replay: null, + checkpointTimes: [] + }))), "f"), wP(this, JC, new S_(c), "f"), yP(this, JC, "f").addChangeCallback((e => { + null == yP(this, eP, "f") || !e.up && !e.down || yP(this, ZC, "f") || (wP(this, ZC, !0, "f"), wP(this, $C, new Date, "f")) + })), h.setCursorHiddenWhenInactive(!0), wP(this, qC, new f_(yP(this, JC, "f"), yP(this, MC, "f"), (() => { + var e; + !yP(this, cP, "f") && (null === (e = yP(this, eP, "f")) || void 0 === e ? void 0 : e.hasStarted()) && (yP(this, eP, "f").hasFinished() || 0 == yP(this, eP, "f").getNextCheckpointIndex() || !yP(this, ZC, "f") || null != yP(this, $C, "f") && (new Date).getTime() - yP(this, $C, "f").getTime() < 250 ? (yP(this, wC, "m", uP).call(this), yP(this, JC, "f").reset = !1) : yP(this, JC, "f").reset = !0) + })), "f"), yP(this, qC, "f").setEnabled(yP(this, IC, "f").touchEnabled), yP(this, wC, "m", dP).call(this, !0), yP(this, wC, "m", vP).call(this), wP(this, sP, new s_(s, c), "f"), yP(this, sP, "f").addToggleListener((e => { + e ? (yP(this, wC, "m", dP).call(this, !1), s.setCamera(yP(this, sP, "f").camera)) : null != yP(this, eP, "f") && (yP(this, wC, "m", dP).call(this, yP(this, zC, "f")), yP(this, _C, "f").getSettingBoolean($o.DefaultCameraMode) ? yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraCockpit) : yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraOrbit)) + })), yP(this, IC, "f").addChangeListener(wP(this, XC, (e => { + var t, n, i, r, a, s, o, l; + e ? (null === (t = yP(this, FC, "f")) || void 0 === t || t.setOverridePosition(!0), null === (n = yP(this, WC, "f")) || void 0 === n || n.setOverridePosition(!0), null === (i = yP(this, HC, "f")) || void 0 === i || i.setOverridePosition(!0), null === (r = yP(this, VC, "f")) || void 0 === r || r.setOverridePosition(!0)) : (null === (a = yP(this, FC, "f")) || void 0 === a || a.setOverridePosition(null), null === (s = yP(this, WC, "f")) || void 0 === s || s.setOverridePosition(null), null === (o = yP(this, HC, "f")) || void 0 === o || o.setOverridePosition(null), null === (l = yP(this, VC, "f")) || void 0 === l || l.setOverridePosition(null)), yP(this, qC, "f").setEnabled(e) + }), "f")), yP(this, wC, "m", pP).call(this), yP(this, wC, "m", fP).call(this), window.addEventListener("keydown", wP(this, rP, (e => { + var t, n, i; + if (!yP(this, cP, "f")) { + if (yP(this, sP, "f").isEnabled) "Escape" == e.code && (yP(this, sP, "f").isEnabled = !1); + else if (yP(this, _C, "f").checkKeyBinding(e, Ix.VehicleCheckpointReset)) e.repeat || null == yP(this, YC, "f") && (null === (t = yP(this, eP, "f")) || void 0 === t ? void 0 : t.hasStarted()) && (yP(this, eP, "f").hasFinished() || !yP(this, eP, "f").hasCheckpointToRespawnAt() || !yP(this, ZC, "f") || null != yP(this, $C, "f") && (new Date).getTime() - yP(this, $C, "f").getTime() < 250 ? (yP(this, wC, "m", uP).call(this), yP(this, JC, "f").reset = !1) : yP(this, JC, "f").reset = !0), e.preventDefault(); + else if (yP(this, _C, "f").checkKeyBinding(e, Ix.VehicleStartReset)) e.repeat || null == yP(this, YC, "f") && (null === (n = yP(this, eP, "f")) || void 0 === n ? void 0 : n.hasStarted()) && yP(this, wC, "m", uP).call(this), e.preventDefault(); + else if (yP(this, _C, "f").checkKeyBinding(e, Ix.VehicleCockpitCamera)) e.repeat || null == yP(this, YC, "f") && (null == yP(this, eP, "f") || yP(this, eP, "f").hasFinished() || (yP(this, _C, "f").getSettingBoolean($o.CockpitCameraToggle) ? yP(this, SC, "f").camera == yP(this, eP, "f").cameraOrbit ? yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraCockpit) : yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraOrbit) : yP(this, _C, "f").getSettingBoolean($o.DefaultCameraMode) ? yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraOrbit) : yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraCockpit))), e.preventDefault(); + else if (c.checkKeyBinding(e, Ix.ToggleUI)) wP(this, zC, !yP(this, zC, "f"), "f"), yP(this, wC, "m", dP).call(this, yP(this, zC, "f")), e.preventDefault(); + else if (c.checkKeyBinding(e, Ix.Pause)) { + if (null == yP(this, YC, "f")) { + if (!(null === (i = yP(this, eP, "f")) || void 0 === i ? void 0 : i.hasFinished())) { + const e = new Date; + (null == yP(this, KC, "f") || Math.abs(e.getTime() - yP(this, KC, "f").getTime()) > 1e3) && (wP(this, YC, new lC(a), "f"), wP(this, KC, e, "f")) + } + } else yP(this, YC, "f").startFadeOut((() => { + var e; + null === (e = yP(this, YC, "f")) || void 0 === e || e.dispose(), wP(this, YC, null, "f") + })); + e.preventDefault() + } else "Escape" == e.code && (null != yP(this, YC, "f") ? yP(this, YC, "f").startFadeOut((() => { + var e; + null === (e = yP(this, YC, "f")) || void 0 === e || e.dispose(), wP(this, YC, null, "f") + })) : y(), e.preventDefault()); + if (c.checkKeyBinding(e, Ix.ToggleSpectatorCamera) && null != yP(this, eP, "f")) { + if (null == yP(this, YC, "f") && !yP(this, eP, "f").hasFinished()) { + yP(this, sP, "f").camera.position.copy(yP(this, SC, "f").camera.position); + const e = new ai(0, 0, 0, "YXZ").setFromQuaternion(yP(this, SC, "f").camera.quaternion); + e.x = Math.round(1e4 * e.x) / 1e4, e.y = Math.round(1e4 * e.y) / 1e4, e.z = 0, yP(this, sP, "f").camera.quaternion.setFromEuler(e), yP(this, sP, "f").toggle() + } + e.preventDefault() + } + } + }), "f")), window.addEventListener("keyup", wP(this, aP, (e => { + yP(this, sP, "f").isEnabled || yP(this, _C, "f").checkKeyBinding(e, Ix.VehicleCockpitCamera) && (null == yP(this, eP, "f") || yP(this, eP, "f").hasFinished() || yP(this, _C, "f").getSettingBoolean($o.CockpitCameraToggle) || (yP(this, _C, "f").getSettingBoolean($o.DefaultCameraMode) ? yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraCockpit) : yP(this, SC, "f").setCamera(yP(this, eP, "f").cameraOrbit))) + }), "f")), "official" == m) + if ("Summer 1" == p.name) { + let e = !1, + t = null; + (new vl).load("data:application/octet-stream;base64,Z2xURgIAAABABQAAtAIAAEpTT057ImFzc2V0Ijp7ImdlbmVyYXRvciI6Iktocm9ub3MgZ2xURiBCbGVuZGVyIEkvTyB2NC4zLjQ3IiwidmVyc2lvbiI6IjIuMCJ9LCJzY2VuZSI6MCwic2NlbmVzIjpbeyJuYW1lIjoiU2NlbmUiLCJub2RlcyI6WzBdfV0sIm5vZGVzIjpbeyJtZXNoIjowLCJuYW1lIjoiVGltIn1dLCJtZXNoZXMiOlt7Im5hbWUiOiJJY29zcGhlcmUiLCJwcmltaXRpdmVzIjpbeyJhdHRyaWJ1dGVzIjp7IlBPU0lUSU9OIjowfSwiaW5kaWNlcyI6MX1dfV0sImFjY2Vzc29ycyI6W3siYnVmZmVyVmlldyI6MCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjQwLCJtYXgiOlsxLjkyMjk4MTczOTA0NDE4OTUsMC45Nzk5NTkyNDk0OTY0NiwxLjkyMzk4MzIxNjI4NTcwNTZdLCJtaW4iOlstMS42MTkzMzUxNzQ1NjA1NDY5LC0wLjAwMjY1NzAwMzcwMDczMzE4NSwtMS45MjM5ODMyMTYyODU3MDU2XSwidHlwZSI6IlZFQzMifSx7ImJ1ZmZlclZpZXciOjEsImNvbXBvbmVudFR5cGUiOjUxMjMsImNvdW50Ijo3MiwidHlwZSI6IlNDQUxBUiJ9XSwiYnVmZmVyVmlld3MiOlt7ImJ1ZmZlciI6MCwiYnl0ZUxlbmd0aCI6NDgwLCJieXRlT2Zmc2V0IjowLCJ0YXJnZXQiOjM0OTYyfSx7ImJ1ZmZlciI6MCwiYnl0ZUxlbmd0aCI6MTQ0LCJieXRlT2Zmc2V0Ijo0ODAsInRhcmdldCI6MzQ5NjN9XSwiYnVmZmVycyI6W3siYnl0ZUxlbmd0aCI6NjI0fV19IHACAABCSU4AYEbPv2KYkj0AAACAVHJ2vwDMGrnP99++pLydPwDMGrk24B2/RCT2PwDMGrkAAACAV3+OP6V5DT8AAACAUM+Fvs+7Sz4Yv+C9RFdmvi6DTT5GfDa+MSy1vwQnJD2OQq2/RVCtv35EKz2hUrO/EL9cPcD2DT44Hmy+lw8GPigmDT7YbnW+soYBvkD287rCHfO/fZtKvSAhLrvWR/S/a+9QP9nDJT70Gmy+jsBkP4VDJj7YG2e+tHeIPwD7eDoVRfa/MSSSP4BTvDp4CfS/slywP3B5qj5wHtq9IVfXP5zeej9eSjG/sqqyP941lz5w8BC+IaXZP9Q8cT+sQjq/urH2vakt/T4AAACAVHJ2vwDMGrnP998+pLydPwDMGrk24B0/UM+Fvs+7Sz4Yv+A9RFdmvi6DTT5GfDY+MSy1vwQnJD2OQq0/RVCtv35EKz2hUrM/EL9cPcD2DT44Hmw+lw8GPigmDT7YbnU+soYBvkD287rCHfM/fZtKvSAhLrvWR/Q/a+9QP9nDJT70Gmw+jsBkP4VDJj7YG2c+tHeIPwD7eDoVRfY/MSSSP4BTvDp4CfQ/slywP3B5qj5wHto9IVfXP5zeej9eSjE/sqqyP941lz5w8BA+IaXZP9Q8cT+sQjo/AgABAAQAAwACAAQAFQABAAAABgAHAAUACgALAAkADgAPAA0AEgATABEAFQAEAAEABgAIAAcACgAMAAsADgAQAA8AEgAUABMAFwAEABYAAwAEABcAFQAAABYAGQAYABoAHQAcAB4AIQAgACIAJQAkACYAFQAWAAQAGQAaABsAHQAeAB8AIQAiACMAJQAmACcA", (n => { + if (n.scene.children.length > 1) throw new Error("Model contains more than one object"); + if (!(n.scene.children[0] instanceof wr)) throw new Error("Model is not a mesh"); + e ? (t = n.scene.children[0], t.geometry.dispose(), t.material.dispose(), t = null) : (t = n.scene.children[0], t.geometry.computeVertexNormals(), t.material = new Fs({ + color: 4464662, + side: 2 + }), t.position.set(-155.65, .209, -21.87), t.rotation.set(0, -2, 0), t.scale.set(.05, .05, .05), s.scene.add(t)) + })), wP(this, oP, { + dispose: () => { + null != t && (yP(this, SC, "f").scene.remove(t), t.geometry.dispose(), t.material.dispose()), e = !0 + }, + update: () => { + null != t && (t.visible = !yP(this, sP, "f").isEnabled) + } + }, "f") + } else if ("Summer 3" == p.name) { + const e = (new vo).load("data:image/png;base64,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"), + t = new ji({ + map: e + }), + n = new Ns(136 / 157 * 2, 2), + i = new wr(n, t); + i.position.set(-640, 2, -249.95), i.visible = !1, s.scene.add(i), wP(this, oP, { + dispose: () => { + yP(this, SC, "f").scene.remove(i), n.dispose(), t.dispose(), e.dispose() + }, + update: () => { + i.visible = !yP(this, sP, "f").isEnabled + } + }, "f") + } + } + dispose(e = !0) { + var t, n, i, r, a; + yP(this, CC, "f").setCursorHiddenWhenInactive(!1), yP(this, PC, "f").hide(), yP(this, wC, "m", dP).call(this, !1), yP(this, qC, "f").dispose(), yP(this, IC, "f").removeChangeListener(yP(this, XC, "f")), null === (t = yP(this, YC, "f")) || void 0 === t || t.dispose(), wP(this, YC, null, "f"), e && yP(this, bC, "f").clear(), yP(this, xC, "f").clearMountains(), yP(this, JC, "f").dispose(), null === (n = yP(this, eP, "f")) || void 0 === n || n.dispose(); + for (const e of yP(this, tP, "f")) null === (i = e.car) || void 0 === i || i.dispose(), e.car = null, null != e.carId && (yP(this, AC, "f").deleteCar(e.carId), e.carId = null), e.replay = null; + window.removeEventListener("keydown", yP(this, rP, "f")), window.removeEventListener("keyup", yP(this, aP, "f")), yP(this, sP, "f").dispose(), null === (r = yP(this, oP, "f")) || void 0 === r || r.dispose(), null === (a = yP(this, lP, "f")) || void 0 === a || a.dispose() + } + update(e) { + var t, n, i, r, a, s, o, l, c, h, d, u, p, f, m; + let g; + if (g = null == yP(this, eP, "f") || yP(this, sP, "f").isEnabled || this.isPaused || yP(this, cP, "f") || null != yP(this, YC, "f") ? 0 : e, this.isPaused || null != yP(this, YC, "f") || yP(this, cP, "f")) { + null != yP(this, eP, "f") && (yP(this, eP, "f").isPaused = !0, yP(this, eP, "f").audioVolume = 0, yP(this, eP, "f").update(g), yP(this, eP, "f").updateCameras(g)); + for (const e of yP(this, tP, "f")) null != e.car && (e.car.isPaused = !0, e.car.audioVolume = 0, e.car.update(g)); + null === (u = yP(this, jC, "f")) || void 0 === u || u.setVisible(!yP(this, cP, "f")) + } else { + if (null != yP(this, eP, "f")) { + if (yP(this, eP, "f").update(g), yP(this, eP, "f").updateCameras(g), yP(this, sP, "f").isEnabled) yP(this, eP, "f").isPaused = !0, yP(this, eP, "f").audioVolume = 0; + else { + yP(this, eP, "f").isPaused = !1, yP(this, eP, "f").audioVolume = 1; + const c = yP(this, JC, "f").getControls(); + (c.up || c.down) && (yP(this, eP, "f").hasStarted() || yP(this, eP, "f").start()), yP(this, eP, "f").hasStarted() && !yP(this, eP, "f").hasFinished() ? q_() : X_(), yP(this, eP, "f").hasStarted() || yP(this, nP, "f") && (yP(this, PC, "f").show(yP(this, EC, "f").get("Invalid replay detected!"), yP(this, EC, "f").get("Ok"), (() => { + yP(this, PC, "f").hide() + })), wP(this, nP, !1, "f")); + const h = yP(this, tP, "f").reduce(((e, t) => e + t.loadedFrames), 0), + d = yP(this, tP, "f").reduce(((e, t) => e + t.maxFrames), 0); + let u; + u = d > 0 ? h / d : 1, null === (t = yP(this, OC, "f")) || void 0 === t || t.update(yP(this, eP, "f"), e), null === (n = yP(this, FC, "f")) || void 0 === n || n.update(u), null === (i = yP(this, VC, "f")) || void 0 === i || i.update(yP(this, eP, "f")), null === (r = yP(this, HC, "f")) || void 0 === r || r.update(yP(this, eP, "f")), null === (a = yP(this, WC, "f")) || void 0 === a || a.update(yP(this, eP, "f")), yP(this, eP, "f").hasStarted() && !yP(this, eP, "f").hasFinished() && yP(this, ZC, "f") ? yP(this, eP, "f").getSpeedKmh() < 50 ? (wP(this, QC, yP(this, QC, "f") + e, "f"), null === (o = yP(this, jC, "f")) || void 0 === o || o.setVisible(yP(this, QC, "f") > 2.25)) : (null === (l = yP(this, jC, "f")) || void 0 === l || l.setVisible(!1), wP(this, QC, 0, "f")) : (null === (s = yP(this, jC, "f")) || void 0 === s || s.setVisible(!0), wP(this, QC, 0, "f")) + } + yP(this, eP, "f").getTime().numberOfFrames >= cv.maxFrames && yP(this, wC, "m", uP).call(this), null === (c = yP(this, lP, "f")) || void 0 === c || c.updateCar(yP(this, eP, "f")) + } + for (const e of yP(this, tP, "f")) + if (null != e.car) { + if (!e.hasEnded) { + const t = null === (h = yP(this, eP, "f")) || void 0 === h ? void 0 : h.getTime().numberOfFrames; + if (null != t) { + for (let n = e.car.getTime().numberOfFrames + 1; n <= t; n++) { + const t = null === (d = e.replay) || void 0 === d ? void 0 : d.replay.getFrame(n); + if (null == t) { + e.hasEnded = !0, e.car.setVisible(!1); + break + } + e.car.setCarState(t) + } + } + e.car.update(g) + } + e.hasEnded || yP(this, sP, "f").isEnabled ? e.car.audioVolume = 0 : e.car.audioVolume = .35 + } yP(this, wC, "m", gP).call(this), yP(this, sP, "f").update(e) + } + null === (p = yP(this, oP, "f")) || void 0 === p || p.update(), yP(this, xC, "f").update(yP(this, bC, "f")), yP(this, kC, "f").update(g, yP(this, SC, "f").camera, yP(this, bC, "f").sunDirection), yP(this, MC, "f").update(e, !1, yP(this, SC, "f"), yP(this, _C, "f")), yP(this, SC, "f").update(null !== (m = null === (f = yP(this, eP, "f")) || void 0 === f ? void 0 : f.getPosition()) && void 0 !== m ? m : new yn, yP(this, bC, "f").sunDirection) + } + }; + var bP, xP, kP, EP = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }, + SP = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }; + class MP { + constructor(e) { + if (xP.set(this, void 0), null != e) { + if (!Number.isInteger(e)) throw new Error("Seed must be an integer"); + SP(this, xP, e % EP(bP, bP, "f", kP).length, "f") + } else SP(this, xP, 0, "f") + } + next() { + var e; + return SP(this, xP, (e = EP(this, xP, "f"), ++e), "f"), EP(this, xP, "f") >= EP(bP, bP, "f", kP).length && SP(this, xP, 0, "f"), EP(bP, bP, "f", kP)[EP(this, xP, "f")] + } + } + bP = MP, xP = new WeakMap, kP = { + value: [.12047764760664692, .19645762332790628, .5525629082262744, .41272626379209965, .7795036003541387, .13367266027110114, .7999601557377349, .9519714253374205, .1735048382917752, .7513367084489158, .6531386724839523, .9026427867068505, .8543272738216994, .11176849958868162, .6705698284858437, .26628732081296946, .31140322993719605, .45170300835470933, .12615515120247944, .0610638094525735, .291990923385425, .4613983868623317, .6615759832726253, .4373182881232056, .7432890501246443, .39316710322388837, .49444122821563297, .5994296685114344, .060050119050233386, .4165885432422003, .43974364800990084, .1628314496954224, .05787972729968116, .225388541259955, .6075775236386991, .8908354370882479, .47072983115144584, .7662003453186828, .20651036895645647, .03724062137286044, .17110277274376795, .7626426077793496, .8372112804261309, .8761690804447455, .13887024930406633, .8287513367412203, .9794446290917873, .807658524448803, .8465629116398186, .5187285629536083, .33962953580139277, .9798419666114342, .6777071959103609, .5388899884934379, .7863389168762325, .4274591420924474, .25631366937500566, .5695289062505289, .026841382754547727, .18267938207996903, .9853642975717878, .24428485895234409, .5322028747608949, .9655065842019517, .043810183244384016, .541216190236913, .05897981610006209, .2849168541804703, .5349823008832073, .9655676144971486, .22831812764497283, .7698701658704175, .4103995069939841, .25782763124411856, .8490222628872495, .39280879489916987, .31999467883347554, .2860820872456349, .9684928577493004, .9973831481899462, .2930912094664657, .4847128131859766, .7218400909709828, .40407009594106236, .7059298060123587, .45362146566562744, .4640974655488792, .16076769483252273, .5989453525750241, .585759299589679, .9417035568973537, .20117930667657413, .5777873180244959, .1991854396549344, .8743781441651348, .624666386634513, .38720573630932886, .9967931526923675, .49817894572849486, .24585267823751833, .8639168275132305, .2865624029759799, .6163605496913385, .5864748073339972, .8781049154377354, .7497547608938613, .7864098057445887, .0334170452332867, .4875588105294657, .6737395339380896, .21851121231639659, .2923739650597854, .6073797612662293, .41823228947229896, .8531029420136382, .3260916332061783, .6306262204574675, .5268576689601923, .3516570914484707, .8659366375222706, .8447448461834428, .3794548980890986, .9832775904115916, .8442256760399809, .3006550591973338, .9718660619781394, .5103245035851833, .794319831388071] + }; + const TP = MP; + var _P, CP, PP, IP, RP, LP, DP, NP, BP, UP, zP, OP = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + FP = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class WP { + constructor(e) { + _P.add(this), PP.set(this, void 0), IP.set(this, QA.Summer), RP.set(this, void 0), LP.set(this, void 0), DP.set(this, void 0), NP.set(this, void 0), BP.set(this, null), OP(this, PP, e, "f"), OP(this, RP, new Fs({ + depthWrite: !1 + }), "f"), OP(this, LP, new Fs, "f"), OP(this, DP, new wr(new Ns(6 * Au.maxViewDistance, 6 * Au.maxViewDistance), FP(this, RP, "f")), "f"), FP(this, DP, "f").rotation.x = -Math.PI / 2, FP(this, DP, "f").renderOrder = -3, e.scene.add(FP(this, DP, "f")), OP(this, NP, new wr(new Ns(120, 120), FP(this, RP, "f")), "f"), FP(this, NP, "f").rotation.x = -Math.PI / 2, FP(this, NP, "f").receiveShadow = !0, FP(this, NP, "f").renderOrder = -2, e.scene.add(FP(this, NP, "f")), FP(this, _P, "m", zP).call(this, QA.Summer) + } + clearMountains() { + null != FP(this, BP, "f") && (FP(this, BP, "f").material.dispose(), FP(this, BP, "f").geometry.dispose(), FP(this, PP, "f").scene.remove(FP(this, BP, "f")), OP(this, BP, null, "f")) + } + generateMountains(e) { + this.clearMountains(); + const { + vertices: t, + offset: n + } = CP.createMountainVertices(e), i = new sr; + i.setAttribute("position", new qi(new Float32Array(t), 3)), i.computeVertexNormals(); + const r = new wr(i, FP(this, LP, "f")); + r.position.copy(n), r.receiveShadow = !0, FP(this, PP, "f").scene.add(r), OP(this, BP, r, "f") + } + static createMountainVertices(e) { + const t = new TP, + n = Math.max(200, 160 + Math.max(Math.abs(e.max.x - e.min.x) * jb.partSize / 2 * Math.SQRT2, Math.abs(e.max.y - e.min.y) * jb.partSize / 2 * Math.SQRT2)), + i = new jt((e.min.x + (e.max.x - e.min.x) / 2) * jb.partSize, (e.min.y + (e.max.y - e.min.y) / 2) * jb.partSize); + if (n > 4500) return { + vertices: [], + offset: new yn + }; + const r = Math.floor(n / 10), + a = []; + for (let e = 0; e < r; ++e) { + const e = []; + for (let n = 0; n < 8; ++n) 0 == n || 7 == n || 1 == n && t.next() < .5 ? e.push(0) : e.push(t.next()); + a.push(e) + } + const s = 100, + o = []; + for (let e = 0; e < a.length; ++e) { + const t = e / a.length * Math.PI * 2, + i = (e + 1) / a.length * Math.PI * 2, + r = a[e]; + let l; + l = e + 1 < a.length ? a[e + 1] : a[0]; + for (let e = 0; e < r.length - 1; ++e) { + const a = n + 100 * e, + c = n + 100 * (e + 1); + o.push(Math.cos(t) * a, r[e] * s, Math.sin(t) * a), o.push(Math.cos(i) * a, l[e] * s, Math.sin(i) * a), o.push(Math.cos(i) * c, l[e + 1] * s, Math.sin(i) * c), o.push(Math.cos(t) * a, r[e] * s, Math.sin(t) * a), o.push(Math.cos(i) * c, l[e + 1] * s, Math.sin(i) * c), o.push(Math.cos(t) * c, r[e + 1] * s, Math.sin(t) * c) + } + } + return { + vertices: o, + offset: new yn(i.x, 0, i.y) + } + } + getMountainVertices() { + if (null == FP(this, BP, "f")) return []; + const e = FP(this, BP, "f").geometry; + if (!(e.attributes.position instanceof qi)) throw new Error("Vertices must use BufferAttribute"); + return Array.from(e.attributes.position.array) + } + getMountainOffset() { + return null == FP(this, BP, "f") ? new yn : FP(this, BP, "f").position.clone() + } + raycast(e) { + const t = e.intersectObject(FP(this, NP, "f")); + if (t.length > 0) return t[0]; + if (null != FP(this, BP, "f")) { + const t = e.intersectObject(FP(this, BP, "f")); + if (t.length > 0) return t[0] + } + return null + } + update(e) { + e.environment != FP(this, IP, "f") && FP(this, _P, "m", zP).call(this, e.environment); + const t = new yn, + n = new wn, + i = new yn; + FP(this, PP, "f").camera.matrix.decompose(t, n, i), FP(this, DP, "f").position.set(t.x, 0, t.z); + const r = FP(this, PP, "f").getLightTarget(); + FP(this, NP, "f").position.set(r.x, 0, r.z), FP(this, NP, "f").visible = FP(this, NP, "f").position.manhattanDistanceTo(FP(this, DP, "f").position) < 8e3 + } + } + CP = WP, PP = new WeakMap, IP = new WeakMap, RP = new WeakMap, LP = new WeakMap, DP = new WeakMap, NP = new WeakMap, BP = new WeakMap, _P = new WeakSet, UP = function(e) { + let t; + switch (e) { + case QA.Summer: + t = new Wi(3495480); + break; + case QA.Winter: + t = new Wi(11053224); + break; + case QA.Desert: + t = new Wi(11171394) + } + return t + }, zP = function(e) { + OP(this, IP, e, "f"); + const t = FP(CP, CP, "m", UP).call(CP, e); + FP(this, RP, "f").color.copy(t), FP(this, LP, "f").color.copy(t) + }; + const VP = WP; + var HP = n(2915), + GP = {}; + GP.styleTagTransform = u(), GP.setAttributes = l(), GP.insert = s().bind(null, "head"), GP.domAPI = r(), GP.insertStyleElement = h(); + t()(HP.A, GP); + HP.A && HP.A.locals && HP.A.locals; + var jP = n(2927), + QP = {}; + QP.styleTagTransform = u(), QP.setAttributes = l(), QP.insert = s().bind(null, "head"), QP.domAPI = r(), QP.insertStyleElement = h(); + t()(jP.A, QP); + jP.A && jP.A.locals && jP.A.locals; + var YP, KP, qP = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + XP = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + YP = new WeakMap, KP = new WeakMap; + const ZP = class { + constructor(e, t, n) { + YP.set(this, void 0), KP.set(this, void 0), qP(this, YP, e, "f"), qP(this, KP, document.createElement("div"), "f"), XP(this, KP, "f").className = "loading-ui", e.appendChild(XP(this, KP, "f")); + const i = document.createElement("p"); + i.textContent = t.get("Loading") + "...", XP(this, KP, "f").appendChild(i); + const r = document.createElement("div"); + XP(this, KP, "f").appendChild(r); + const a = document.createElement("div"); + r.appendChild(a); + const s = document.createElement("div"); + a.appendChild(s), n.addProgressListener((e => { + s.style.width = (100 * e).toString() + "%" + })) + } + fadeOut(e) { + XP(this, KP, "f").classList.add("fade-out"), setTimeout(e, 250) + } + dispose() { + XP(this, YP, "f").removeChild(XP(this, KP, "f")) + } + }; + var JP = n(1643), + $P = {}; + $P.styleTagTransform = u(), $P.setAttributes = l(), $P.insert = s().bind(null, "head"), $P.domAPI = r(), $P.insertStyleElement = h(); + t()(JP.A, $P); + JP.A && JP.A.locals && JP.A.locals; + var eI, tI, nI, iI, rI, aI, sI, oI, lI, cI, hI, dI, uI, pI, fI, mI, gI, vI, wI, yI, AI, bI = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + xI = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + tI = new WeakMap, nI = new WeakMap, iI = new WeakMap, rI = new WeakMap, aI = new WeakMap, sI = new WeakMap, oI = new WeakMap, lI = new WeakMap, cI = new WeakMap, hI = new WeakMap, dI = new WeakMap, uI = new WeakMap, eI = new WeakSet, pI = function() { + xI(this, oI, "f").className = "hidden" + }, fI = function() { + xI(this, oI, "f").className = "settings-menu" + }, mI = function() { + xI(this, lI, "f").innerHTML = "", xI(this, eI, "m", gI).call(this, xI(this, nI, "f").get("Gameplay")), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Units"), [{ + title: xI(this, nI, "f").get("Metric"), + value: "false" + }, { + title: xI(this, nI, "f").get("Imperial"), + value: "true" + }], $o.ImperialUnitsEnabled), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Reset hint"), [{ + title: xI(this, nI, "f").get("Disabled"), + value: "false" + }, { + title: xI(this, nI, "f").get("Enabled"), + value: "true" + }], $o.ResetHintEnabled), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Ghost car"), [{ + title: xI(this, nI, "f").get("Disabled"), + value: "false" + }, { + title: xI(this, nI, "f").get("Enabled"), + value: "true" + }], $o.GhostCarEnabled), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Default camera"), [{ + title: xI(this, nI, "f").get("Default"), + value: "false" + }, { + title: xI(this, nI, "f").get("Cockpit"), + value: "true" + }], $o.DefaultCameraMode), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Cockpit camera mode"), [{ + title: xI(this, nI, "f").get("Hold"), + value: "false" + }, { + title: xI(this, nI, "f").get("Toggle"), + value: "true" + }], $o.CockpitCameraToggle), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Checkpoints"), [{ + title: xI(this, nI, "f").get("Off"), + value: "off" + }, { + title: xI(this, nI, "f").get("Bottom"), + value: "bottom" + }, { + title: xI(this, nI, "f").get("Top"), + value: "top" + }], $o.Checkpoints), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Timer"), [{ + title: xI(this, nI, "f").get("Off"), + value: "off" + }, { + title: xI(this, nI, "f").get("Bottom"), + value: "bottom" + }, { + title: xI(this, nI, "f").get("Top"), + value: "top" + }], $o.Timer), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Speedometer"), [{ + title: xI(this, nI, "f").get("Off"), + value: "off" + }, { + title: xI(this, nI, "f").get("Bottom"), + value: "bottom" + }, { + title: xI(this, nI, "f").get("Top"), + value: "top" + }], $o.Speedometer), xI(this, eI, "m", gI).call(this, xI(this, nI, "f").get("Language")), xI(this, eI, "m", wI).call(this, null, [{ + title: "العربية", + value: "ar" + }, { + title: "Deutsch", + value: "de-DE" + }, { + title: "English", + value: "en-US" + }, { + title: "Español", + value: "es-ES" + }, { + title: "Français", + value: "fr-FR" + }, { + title: "Italiano", + value: "it-IT" + }, { + title: "日本語", + value: "ja-JP" + }, { + title: "한국어", + value: "ko-KR" + }, { + title: "Polski", + value: "pl-PL" + }, { + title: "Português (BR)", + value: "pt-BR" + }, { + title: "Português (PT)", + value: "pt-PT" + }, { + title: "Русский", + value: "ru-RU" + }, { + title: "Türkçe", + value: "tr-TR" + }, { + title: "Українська", + value: "uk-UA" + }, { + title: "简体中文", + value: "zh-CN" + }, { + title: "繁體中文", + value: "zh-TW" + }], $o.Language), xI(this, eI, "m", gI).call(this, xI(this, nI, "f").get("Graphics")), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Car shadow"), [{ + title: xI(this, nI, "f").get("Off"), + value: "0" + }, { + title: xI(this, nI, "f").get("Low"), + value: "1024" + }, { + title: xI(this, nI, "f").get("Medium"), + value: "2048" + }, { + title: xI(this, nI, "f").get("High"), + value: "4096" + }], $o.CarShadowQuality), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Track shadow"), [{ + title: xI(this, nI, "f").get("Off"), + value: "false" + }, { + title: xI(this, nI, "f").get("On"), + value: "true" + }], $o.TrackShadowEnabled, (() => { + xI(this, aI, "f").generateMeshes() + })), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Clouds"), [{ + title: xI(this, nI, "f").get("Off"), + value: "false" + }, { + title: xI(this, nI, "f").get("On"), + value: "true" + }], $o.CloudsEnabled), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Particles"), [{ + title: xI(this, nI, "f").get("Off"), + value: "false" + }, { + title: xI(this, nI, "f").get("On"), + value: "true" + }], $o.ParticlesEnabled), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Skidmarks"), [{ + title: xI(this, nI, "f").get("Off"), + value: "false" + }, { + title: xI(this, nI, "f").get("On"), + value: "true" + }], $o.SkidmarksEnabled), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Render scale"), [{ + title: "25%", + value: "0.25" + }, { + title: "50%", + value: "0.5" + }, { + title: "100%", + value: "1" + }, { + title: "150%", + value: "1.5" + }, { + title: "200%", + value: "2" + }], $o.RenderScale), xI(this, eI, "m", wI).call(this, xI(this, nI, "f").get("Anti-aliasing (requires restart)"), [{ + title: xI(this, nI, "f").get("Off"), + value: "false" + }, { + title: xI(this, nI, "f").get("On"), + value: "true" + }], $o.Antialiasing), xI(this, eI, "m", gI).call(this, xI(this, nI, "f").get("Audio")), xI(this, eI, "m", yI).call(this, xI(this, nI, "f").get("Sound effect volume"), $o.SoundEffectVolume), xI(this, eI, "m", yI).call(this, xI(this, nI, "f").get("Music volume"), $o.MusicVolume), xI(this, eI, "m", yI).call(this, xI(this, nI, "f").get("Checkpoint volume"), $o.CheckpointVolume), xI(this, eI, "m", gI).call(this, xI(this, nI, "f").get("Controls")), xI(this, eI, "m", vI).call(this, xI(this, nI, "f").get("Vehicle")), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Accelerate"), Ix.VehicleAccelerate), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Brake"), Ix.VehicleBrake), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Turn left"), Ix.VehicleTurnLeft), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Turn right"), Ix.VehicleTurnRight), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Checkpoint reset"), Ix.VehicleCheckpointReset), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Start reset"), Ix.VehicleStartReset), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Cockpit camera"), Ix.VehicleCockpitCamera), xI(this, eI, "m", vI).call(this, xI(this, nI, "f").get("Editor")), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Rotate part"), Ix.EditorRotatePart), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Height modifier"), Ix.EditorHeightModifier), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Delete part"), Ix.EditorDelete), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move forwards"), Ix.EditorMoveForwards), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move backwards"), Ix.EditorMoveBackwards), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move left"), Ix.EditorMoveLeft), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move right"), Ix.EditorMoveRight), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Rotate view up"), Ix.EditorRotateViewUp), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Rotate view down"), Ix.EditorRotateViewDown), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Rotate view left"), Ix.EditorRotateViewLeft), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Rotate view right"), Ix.EditorRotateViewRight), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move down"), Ix.EditorMoveDown), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move up"), Ix.EditorMoveUp), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Test track"), Ix.EditorTest), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Pick part"), Ix.EditorPick), xI(this, eI, "m", vI).call(this, xI(this, nI, "f").get("Spectator")), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move forwards"), Ix.SpectatorMoveForwards), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move backwards"), Ix.SpectatorMoveBackwards), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move left"), Ix.SpectatorMoveLeft), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Move right"), Ix.SpectatorMoveRight), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Speed modifier"), Ix.SpectatorSpeedModifier), xI(this, eI, "m", vI).call(this, xI(this, nI, "f").get("Other")), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Hide UI"), Ix.ToggleUI), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Pause"), Ix.Pause), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Toggle FPS counter"), Ix.ToggleFpsCounter), xI(this, eI, "m", AI).call(this, xI(this, nI, "f").get("Toggle spectator camera"), Ix.ToggleSpectatorCamera) + }, gI = function(e) { + const t = document.createElement("h2"); + t.textContent = e, xI(this, lI, "f").appendChild(t) + }, vI = function(e) { + const t = document.createElement("h3"); + t.textContent = e, xI(this, lI, "f").appendChild(t) + }, wI = function(e, t, n, i) { + var r; + const a = null !== (r = xI(this, dI, "f").get(n)) && void 0 !== r ? r : xI(this, rI, "f").getSetting(n), + s = document.createElement("div"); + if (s.className = "setting", null != e) { + const t = document.createElement("p"); + t.textContent = e, s.appendChild(t) + } else s.classList.add("wrappable"); + const o = document.createElement("div"); + o.className = "button-wrapper", s.appendChild(o); + const l = []; + for (const { + title: e, + value: r + } + of t) { + const t = document.createElement("button"); + t.className = r == a ? "button selected" : "button", t.textContent = e, t.addEventListener("click", (() => { + xI(this, iI, "f").playUIClick(); + for (const e of l) e.className = "button"; + t.className = "button selected", xI(this, dI, "f").set(n, r), xI(this, rI, "f").updateSettings(Array.from(xI(this, dI, "f"))), null != i && i() + })), o.appendChild(t), l.push(t) + } + xI(this, lI, "f").appendChild(s) + }, yI = function(e, t, n = 0, i = 1) { + var r; + let a = parseFloat(null !== (r = xI(this, dI, "f").get(t)) && void 0 !== r ? r : xI(this, rI, "f").getSetting(t)); + Number.isNaN(a) && (a = 0); + const s = document.createElement("div"); + s.className = "setting"; + const o = document.createElement("p"); + o.textContent = e, s.appendChild(o); + const l = document.createElement("input"); + l.type = "range", l.min = (20 * n).toString(), l.max = (20 * i).toString(), l.value = (20 * a).toString(), l.addEventListener("input", (() => { + const e = parseFloat(l.value) / 20; + xI(this, dI, "f").set(t, e.toString()), xI(this, rI, "f").updateSettings(Array.from(xI(this, dI, "f"))) + })), s.appendChild(l), xI(this, lI, "f").appendChild(s) + }, AI = function(e, t) { + var n, i, r; + const a = document.createElement("div"); + a.className = "setting"; + const s = document.createElement("p"); + s.textContent = e, a.appendChild(s); + const o = document.createElement("div"); + o.className = "button-wrapper", a.appendChild(o); + const l = null !== (n = xI(this, uI, "f").get(t)) && void 0 !== n ? n : xI(this, rI, "f").getKeyBindings(t), + c = document.createElement("button"); + c.className = "button key-binding", c.textContent = null !== (i = l[0]) && void 0 !== i ? i : "", c.addEventListener("click", (() => { + xI(this, iI, "f").playUIClick(), xI(this, eI, "m", pI).call(this); + const e = t => { + "Escape" == t.code || "Tab" == t.code || "Enter" == t.code && null != document.activeElement && document.activeElement != document.body || (xI(this, sI, "f").hide(), l[0] = t.code, c.textContent = t.code, xI(this, eI, "m", fI).call(this), window.removeEventListener("keydown", e), t.preventDefault()) + }; + window.addEventListener("keydown", e), xI(this, sI, "f").showConfirm(xI(this, nI, "f").get("Press any key...\n\nPress [Escape] to cancel."), xI(this, nI, "f").get("Cancel"), xI(this, nI, "f").get("Clear"), (() => { + xI(this, eI, "m", fI).call(this), window.removeEventListener("keydown", e) + }), (() => { + c.textContent = "", l[0] = null, window.removeEventListener("keydown", e), xI(this, eI, "m", fI).call(this) + })) + })), o.appendChild(c); + const h = document.createElement("button"); + h.className = "button key-binding", h.textContent = null !== (r = l[1]) && void 0 !== r ? r : "", h.addEventListener("click", (() => { + xI(this, iI, "f").playUIClick(), xI(this, eI, "m", pI).call(this); + const e = t => { + "Escape" == t.code || "Tab" == t.code || "Enter" == t.code && null != document.activeElement && document.activeElement != document.body || (xI(this, sI, "f").hide(), l[1] = t.code, h.textContent = t.code, xI(this, eI, "m", fI).call(this), window.removeEventListener("keydown", e), t.preventDefault()) + }; + window.addEventListener("keydown", e), xI(this, sI, "f").showConfirm(xI(this, nI, "f").get("Press any key...\n\nPress [Escape] to cancel."), xI(this, nI, "f").get("Cancel"), xI(this, nI, "f").get("Clear"), (() => { + xI(this, eI, "m", fI).call(this), window.removeEventListener("keydown", e) + }), (() => { + h.textContent = "", l[1] = null, window.removeEventListener("keydown", e), xI(this, eI, "m", fI).call(this) + })) + })), o.appendChild(h), xI(this, lI, "f").appendChild(a) + }; + const kI = class { + constructor(e, t, n, i, r, a, s) { + eI.add(this), tI.set(this, void 0), nI.set(this, void 0), iI.set(this, void 0), rI.set(this, void 0), aI.set(this, void 0), sI.set(this, void 0), oI.set(this, void 0), lI.set(this, void 0), cI.set(this, void 0), hI.set(this, new Map), dI.set(this, new Map), uI.set(this, new Map), bI(this, tI, e, "f"), bI(this, nI, t, "f"), bI(this, iI, n, "f"), bI(this, rI, i, "f"), bI(this, aI, r, "f"), bI(this, sI, a, "f"), bI(this, oI, document.createElement("div"), "f"), xI(this, oI, "f").className = "settings-menu", e.appendChild(xI(this, oI, "f")); + const o = document.createElement("h2"); + o.textContent = t.get("Settings"), xI(this, oI, "f").appendChild(o), bI(this, lI, document.createElement("div"), "f"), xI(this, lI, "f").className = "container", xI(this, oI, "f").appendChild(xI(this, lI, "f")), bI(this, hI, new Map(i.getSettings()), "f"), xI(this, eI, "m", mI).call(this); + const l = document.createElement("div"); + l.className = "button-wrapper", xI(this, oI, "f").appendChild(l); + const c = document.createElement("button"); + c.className = "button cancel", c.innerHTML = ' ', c.append(document.createTextNode(t.get("Cancel"))), c.addEventListener("click", (() => { + n.playUIClick(), i.updateSettings(Array.from(xI(this, hI, "f"))), r.generateMeshes(), s() + })), l.appendChild(c); + const h = document.createElement("button"); + h.className = "button reset", h.innerHTML = ' ', h.append(document.createTextNode(t.get("Reset"))), h.addEventListener("click", (() => { + n.playUIClick(), bI(this, dI, xI(this, rI, "f").defaultSettings(), "f"), i.updateSettings(Array.from(xI(this, dI, "f"))), bI(this, uI, xI(this, rI, "f").defaultKeyBindings(), "f"), r.generateMeshes(), xI(this, eI, "m", mI).call(this) + })), l.appendChild(h); + const d = document.createElement("button"); + d.className = "button apply", d.append(document.createTextNode(t.get("Apply"))), d.innerHTML += ' ', d.addEventListener("click", (() => { + n.playUIClick(), i.updateSettings(Array.from(xI(this, dI, "f"))), i.saveSettings(), i.setKeyBindings(Array.from(xI(this, uI, "f"))), r.generateMeshes(), t.language = i.getSetting($o.Language), s() + })), l.appendChild(d), window.addEventListener("keydown", bI(this, cI, (e => { + "Escape" == e.code && (s(), e.preventDefault()) + }), "f")) + } + dispose() { + xI(this, tI, "f").removeChild(xI(this, oI, "f")), window.removeEventListener("keydown", xI(this, cI, "f")) + } + }; + var EI = n(5586), + SI = {}; + SI.styleTagTransform = u(), SI.setAttributes = l(), SI.insert = s().bind(null, "head"), SI.domAPI = r(), SI.insertStyleElement = h(); + t()(EI.A, SI); + EI.A && EI.A.locals && EI.A.locals; + var MI = n(6657), + TI = {}; + TI.styleTagTransform = u(), TI.setAttributes = l(), TI.insert = s().bind(null, "head"), TI.domAPI = r(), TI.insertStyleElement = h(); + t()(MI.A, TI); + MI.A && MI.A.locals && MI.A.locals; + var _I = n(5086), + CI = {}; + CI.styleTagTransform = u(), CI.setAttributes = l(), CI.insert = s().bind(null, "head"), CI.domAPI = r(), CI.insertStyleElement = h(); + t()(_I.A, CI); + _I.A && _I.A.locals && _I.A.locals; + var PI = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }; + let II = null, + RI = null, + LI = null, + DI = null, + NI = null; + + function BI(e, t) { + return PI(this, void 0, void 0, (function*() { + for (; null != NI;) yield NI; + const n = function(e, t) { + return new Promise((n => { + const i = setTimeout((() => { + null != II && null != RI && null != LI && null != DI || (RI = document.createElement("canvas"), RI.width = 200, RI.height = 200, LI = new Au(RI, null, !1, !0), DI = new Io(-1, 1, 1, -1, .1, 1e4), DI.position.set(1e3, 1e3, 1e3), DI.lookAt(0, 0, 0), DI.zoom = .5, DI.position.add(new yn(.1, .3, 0)), DI.updateProjectionMatrix(), LI.scene.add(DI), LI.setCamera(DI), II = new Aw(null, { + position: new yn, + quaternion: new wn + }, null, null, LI, null, null, null, null), II.update(0)), II.setColors(e), LI.update(new yn, new GA), n(RI.toDataURL()) + }), 25); + t.addCancelCallback((() => { + clearTimeout(i), n("") + })) + })) + }(e, t); + let i; + NI = n; + try { + i = yield n + } finally { + NI = null + } + return i + })) + } + var UI, zI, OI = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }, + FI = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }; + UI = new WeakMap, zI = new WeakMap; + const WI = class { + constructor() { + UI.set(this, !1), zI.set(this, []) + } + cancel() { + if (!OI(this, UI, "f")) { + FI(this, UI, !0, "f"); + for (const e of OI(this, zI, "f")) e() + } + } + get isCancelled() { + return OI(this, UI, "f") + } + addCancelCallback(e) { + OI(this, zI, "f").push(e), OI(this, UI, "f") && e() + } + }; + var VI, HI; + ! function(e) { + e[e.Uninitialized = 0] = "Uninitialized", e[e.Ok = 1] = "Ok", e[e.TestFailed = 2] = "TestFailed", e[e.AssetsFailed = 3] = "AssetsFailed" + }(VI || (VI = {})), + function(e) { + e[e.Pending = 0] = "Pending", e[e.Verified = 1] = "Verified", e[e.Invalid = 2] = "Invalid", e[e.InvalidDuplicate = 3] = "InvalidDuplicate", e[e.InvalidManual = 4] = "InvalidManual" + }(HI || (HI = {})); + var GI, jI, QI, YI, KI, qI, XI, ZI, JI, $I, eR, tR, nR, iR, rR, aR, sR, oR, lR, cR, hR, dR, uR, pR, fR, mR, gR, vR, wR = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + yR = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class AR { + constructor(e, t, n, i, r, a, s, o, l, c, h) { + GI.add(this), QI.set(this, void 0), YI.set(this, void 0), KI.set(this, void 0), qI.set(this, void 0), XI.set(this, void 0), ZI.set(this, void 0), JI.set(this, void 0), $I.set(this, void 0), eR.set(this, void 0), tR.set(this, void 0), nR.set(this, void 0), iR.set(this, void 0), rR.set(this, void 0), aR.set(this, void 0), sR.set(this, void 0), oR.set(this, null), lR.set(this, !1), cR.set(this, void 0), hR.set(this, 0), dR.set(this, 0), uR.set(this, null), pR.set(this, null), fR.set(this, []), wR(this, QI, t, "f"), wR(this, YI, n, "f"), wR(this, KI, i, "f"), wR(this, qI, r, "f"), wR(this, XI, a, "f"), wR(this, ZI, s, "f"), wR(this, JI, c, "f"), wR(this, $I, h, "f"), wR(this, cR, o.isOfficialTrack(t) || o.isCommunityTrack(t), "f"), wR(this, eR, e, "f"), wR(this, tR, document.createElement("div"), "f"), yR(this, tR, "f").className = "leaderboard", e.appendChild(yR(this, tR, "f")); + const d = document.createElement("h2"); + d.textContent = n.get("Leaderboard"), yR(this, tR, "f").appendChild(d); + const u = document.createElement("h3"), + p = iu.replace(/(\d+\.\d+)\.\d+/, "$1"); + u.textContent = n.get("Version") + " " + p, yR(this, tR, "f").appendChild(u), wR(this, nR, document.createElement("div"), "f"), yR(this, nR, "f").className = "container", yR(this, tR, "f").appendChild(yR(this, nR, "f")), wR(this, iR, document.createElement("div"), "f"), yR(this, iR, "f").className = "loading-spinner-container", yR(this, nR, "f").appendChild(yR(this, iR, "f")); + const f = document.createElement("div"); + f.className = "loading-spinner", yR(this, iR, "f").appendChild(f), yR(this, GI, "m", mR).call(this, !1), wR(this, sR, document.createElement("div"), "f"), yR(this, sR, "f").className = "pages", yR(this, tR, "f").appendChild(yR(this, sR, "f")), yR(this, GI, "m", vR).call(this); + const m = document.createElement("div"); + m.className = "button-wrapper", yR(this, tR, "f").appendChild(m); + const g = document.createElement("button"); + g.className = "button back", g.innerHTML = ' ', g.append(document.createTextNode(n.get("Back"))), g.addEventListener("click", (() => { + r.playUIClick(), l() + })), m.appendChild(g), wR(this, rR, document.createElement("button"), "f"), yR(this, rR, "f").className = "button icon-button first", yR(this, rR, "f").innerHTML = '', yR(this, rR, "f").disabled = !0, yR(this, rR, "f").addEventListener("click", (() => { + r.playUIClick(), null != yR(this, pR, "f") ? yR(this, pR, "f").scrollIntoView({ + behavior: "smooth" + }) : null != yR(this, uR, "f") && (wR(this, hR, yR(this, uR, "f"), "f"), yR(this, GI, "m", vR).call(this), yR(this, GI, "m", mR).call(this, !0)) + })), m.appendChild(yR(this, rR, "f")), wR(this, aR, document.createElement("button"), "f"), yR(this, aR, "f").className = "button only-verified", yR(this, cR, "f") || yR(this, aR, "f").classList.add("disabled"), yR(this, aR, "f").textContent = yR(this, YI, "f").get("Only verified"), yR(this, aR, "f").innerHTML += '', yR(this, aR, "f").addEventListener("click", (() => { + r.playUIClick(), wR(this, cR, !yR(this, cR, "f"), "f"), yR(this, cR, "f") ? yR(this, aR, "f").classList.remove("disabled") : yR(this, aR, "f").classList.add("disabled"), wR(this, hR, 0, "f"), wR(this, dR, 0, "f"), yR(this, GI, "m", vR).call(this), yR(this, GI, "m", mR).call(this, !1) + })), m.appendChild(yR(this, aR, "f")) + } + dispose() { + var e; + null === (e = yR(this, oR, "f")) || void 0 === e || e.cancel(), yR(this, eR, "f").removeChild(yR(this, tR, "f")) + } + static getPositionSuffix(e) { + if (e <= 0 || !Number.isInteger(e)) throw new Error("Position must be a positive integer."); + const t = e % 100; + if (t >= 11 && t <= 13) return "th"; + switch (e % 10) { + case 1: + return "st"; + case 2: + return "nd"; + case 3: + return "rd"; + default: + return "th" + } + } + } + jI = AR, QI = new WeakMap, YI = new WeakMap, KI = new WeakMap, qI = new WeakMap, XI = new WeakMap, ZI = new WeakMap, JI = new WeakMap, $I = new WeakMap, eR = new WeakMap, tR = new WeakMap, nR = new WeakMap, iR = new WeakMap, rR = new WeakMap, aR = new WeakMap, sR = new WeakMap, oR = new WeakMap, lR = new WeakMap, cR = new WeakMap, hR = new WeakMap, dR = new WeakMap, uR = new WeakMap, pR = new WeakMap, fR = new WeakMap, GI = new WeakSet, mR = function e(t) { + var n; + null === (n = yR(this, oR, "f")) || void 0 === n || n.cancel(); + const i = new WI; + wR(this, oR, i, "f"), yR(this, nR, "f").innerHTML = "", yR(this, nR, "f").appendChild(yR(this, iR, "f")), wR(this, pR, null, "f"), setTimeout((() => { + if (!i.isCancelled) { + const n = 20, + r = yR(this, hR, "f") * n; + yR(this, KI, "f").getLeaderboard(yR(this, XI, "f").getCurrentUserProfile().tokenHash, yR(this, QI, "f"), r, n, yR(this, cR, "f")).then((({ + total: a, + entries: s, + userEntry: o + }) => { + if (!i.isCancelled) { + wR(this, dR, Math.ceil(a / n), "f"), yR(this, GI, "m", vR).call(this); + for (let e = 0; e < s.length; e++) { + const { + id: t, + name: n, + time: a, + carColors: o, + verifiedState: l, + isSelf: c + } = s[e], h = r + e + 1; + yR(this, GI, "m", gR).call(this, h, n, a, o, l, c, t, i) + } + if (yR(this, KI, "f").determinismState == VI.Ok && (null != o ? (wR(this, uR, Math.floor((o.position - 1) / n), "f"), yR(this, rR, "f").disabled = !1, t && null != yR(this, pR, "f") && yR(this, pR, "f").scrollIntoView(), yR(this, $I, "f").call(this, o)) : (wR(this, uR, null, "f"), yR(this, rR, "f").disabled = !0, yR(this, $I, "f").call(this, null)), !yR(this, lR, "f"))) { + wR(this, lR, !0, "f"); + let n = null; + null != o && (n = { + time: o.time, + recordingId: o.id + }), yR(this, ZI, "f").syncRecord(yR(this, XI, "f").profileSlot, yR(this, QI, "f"), n).then((n => { + "Upload" == n && yR(this, GI, "m", e).call(this, t) + })).catch((e => { + console.warn(e) + })) + } + } + })).catch((e => { + if (!i.isCancelled) { + const e = document.createElement("p"); + e.className = "error-message", e.textContent = yR(this, YI, "f").get("Error: Failed to load leaderboard"), yR(this, nR, "f").appendChild(e) + } + console.error(e) + })).finally((() => { + i.isCancelled || yR(this, nR, "f").removeChild(yR(this, iR, "f")) + })) + } + }), 500) + }, gR = function(e, t, n, i, r, a, s, o) { + const l = document.createElement("button"); + l.className = "button main", a && (wR(this, pR, l, "f"), l.classList.add("self")), l.addEventListener("click", (() => { + yR(this, qI, "f").playUIClick(), yR(this, fR, "f").some((e => e.recordingId == s)) ? (wR(this, fR, yR(this, fR, "f").filter((e => e.recordingId != s)), "f"), l.classList.remove("selected"), yR(this, JI, "f").call(this, yR(this, fR, "f"))) : yR(this, fR, "f").length < 10 && (wR(this, fR, yR(this, fR, "f").concat([{ + name: t, + recordingId: s, + isSelf: a + }]), "f"), l.classList.add("selected"), yR(this, JI, "f").call(this, yR(this, fR, "f"))) + })), yR(this, nR, "f").appendChild(l), yR(this, fR, "f").some((e => e.recordingId == s)) && l.classList.add("selected"); + const c = document.createElement("div"); + c.className = "image-container", l.appendChild(c); + const h = document.createElement("img"); + h.className = "show", h.src = "images/car_thumbnail_placeholder.png", c.appendChild(h); + const d = document.createElement("img"); + BI(i, o).then((e => { + d.src = e, h.classList.remove("show"), d.classList.add("show") + })).catch((e => { + console.error(e) + })), c.appendChild(d); + const u = document.createElement("img"); + u.className = "checkmark", u.src = "images/checkmark.svg", l.appendChild(u); + const p = document.createElement("div"); + p.className = "left", l.appendChild(p); + const f = document.createElement("p"); + f.className = "position", f.textContent = e.toString(), p.appendChild(f); + const m = document.createElement("span"); + m.textContent = jI.getPositionSuffix(e), f.appendChild(m); + const g = document.createElement("p"); + g.textContent = fk.formatTimeString(n), p.appendChild(g); + const v = document.createElement("div"); + v.className = "right", l.appendChild(v); + const w = document.createElement("div"); + w.className = "name-container", v.appendChild(w); + const y = document.createElement("span"); + if (y.className = "name", y.textContent = t, w.appendChild(y), a) { + const e = document.createElement("span"); + e.className = "self", e.textContent = "(" + yR(this, YI, "f").get("You") + ")", w.appendChild(e) + } + const A = document.createElement("p"); + r == HI.Pending ? (A.innerHTML = '', A.prepend(document.createTextNode(yR(this, YI, "f").get("Pending"))), A.className = "verified-state pending") : r == HI.Verified ? (A.innerHTML = '', A.prepend(document.createTextNode(yR(this, YI, "f").get("Verified"))), A.className = "verified-state verified") : r == HI.InvalidDuplicate ? (A.innerHTML = '', A.prepend(document.createTextNode(yR(this, YI, "f").get("Duplicate"))), A.className = "verified-state invalid") : (A.innerHTML = '', A.prepend(document.createTextNode(yR(this, YI, "f").get("Invalid"))), A.className = "verified-state invalid"), v.appendChild(A) + }, vR = function e() { + yR(this, sR, "f").innerHTML = ""; + const t = document.createElement("button"); + let n; + t.className = "button", t.textContent = "<", yR(this, hR, "f") > 0 ? t.addEventListener("click", (() => { + yR(this, qI, "f").playUIClick(), wR(this, hR, yR(this, hR, "f") - 1, "f"), yR(this, GI, "m", e).call(this), yR(this, GI, "m", mR).call(this, !1) + })) : t.disabled = !0, yR(this, sR, "f").appendChild(t), n = yR(this, hR, "f") < 1e3 - Math.ceil(3.5) ? 7 : yR(this, hR, "f") < 1e5 - Math.ceil(2.5) ? 5 : 3; + const i = Math.max(0, yR(this, hR, "f") - Math.floor(n / 2)); + for (let t = i; t < i + n; ++t) { + const n = document.createElement("button"); + n.textContent = (t + 1).toString(), t >= yR(this, dR, "f") ? (n.className = "button page", n.disabled = !0) : t == yR(this, hR, "f") ? n.className = "button page selected" : (n.className = "button page", n.addEventListener("click", (() => { + yR(this, qI, "f").playUIClick(), wR(this, hR, t, "f"), yR(this, GI, "m", e).call(this), yR(this, GI, "m", mR).call(this, !1) + }))), yR(this, sR, "f").appendChild(n) + } + const r = document.createElement("button"); + r.className = "button", r.textContent = ">", yR(this, hR, "f") + 1 >= yR(this, dR, "f") ? r.disabled = !0 : r.addEventListener("click", (() => { + yR(this, qI, "f").playUIClick(), wR(this, hR, yR(this, hR, "f") + 1, "f"), yR(this, GI, "m", e).call(this), yR(this, GI, "m", mR).call(this, !1) + })), yR(this, sR, "f").appendChild(r) + }; + const bR = AR; + var xR, kR, ER, SR, MR, TR, _R, CR, PR, IR, RR, LR, DR, NR, BR, UR, zR = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + OR = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + kR = new WeakMap, ER = new WeakMap, SR = new WeakMap, MR = new WeakMap, TR = new WeakMap, _R = new WeakMap, CR = new WeakMap, PR = new WeakMap, IR = new WeakMap, RR = new WeakMap, LR = new WeakMap, DR = new WeakMap, NR = new WeakMap, BR = new WeakMap, xR = new WeakSet, UR = function() { + OR(this, BR, "f").length > 0 ? (OR(this, IR, "f").classList.remove("no-opponents"), 1 == OR(this, BR, "f").length ? OR(this, IR, "f").textContent = OR(this, kR, "f").get("{0} opponent selected", [OR(this, BR, "f").length.toString()]) : OR(this, IR, "f").textContent = OR(this, kR, "f").get("{0} opponents selected", [OR(this, BR, "f").length.toString()])) : (OR(this, IR, "f").classList.add("no-opponents"), OR(this, IR, "f").textContent = OR(this, kR, "f").get("Select opponents to race against from the leaderboard on the left")), OR(this, RR, "f").disabled = 0 == OR(this, BR, "f").length && null == OR(this, SR, "f").getRecord(OR(this, MR, "f").profileSlot, OR(this, TR, "f")) + }; + const FR = class { + constructor(e, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m, g) { + var v; + xR.add(this), kR.set(this, void 0), ER.set(this, void 0), SR.set(this, void 0), MR.set(this, void 0), TR.set(this, void 0), _R.set(this, void 0), CR.set(this, void 0), PR.set(this, void 0), IR.set(this, void 0), RR.set(this, void 0), LR.set(this, void 0), DR.set(this, void 0), NR.set(this, null), BR.set(this, []), zR(this, kR, t, "f"), zR(this, ER, n, "f"), zR(this, SR, r, "f"), zR(this, MR, i, "f"), zR(this, TR, c, "f"), zR(this, _R, e, "f"), zR(this, CR, document.createElement("div"), "f"), OR(this, CR, "f").className = "track-info", e.appendChild(OR(this, CR, "f")); + const w = r.getRecord(i.profileSlot, c); + zR(this, LR, new bR(OR(this, CR, "f"), c, t, n, a, i, r, d, u, (e => { + zR(this, BR, e, "f"), OR(this, xR, "m", UR).call(this) + }), (e => { + null == e || null != w && !e.time.lessOrEqual(w.time) ? null != w ? (C.textContent = fk.formatTimeString(w.time), C.classList.remove("no-record")) : (C.textContent = t.get("No record"), C.classList.add("no-record")) : (C.textContent = fk.formatTimeString(e.time) + " - " + e.position.toString() + bR.getPositionSuffix(e.position), C.classList.remove("no-record")) + })), "f"), zR(this, PR, document.createElement("div"), "f"), OR(this, PR, "f").className = "side-panel", OR(this, CR, "f").appendChild(OR(this, PR, "f")); + const y = document.createElement("h2"); + y.textContent = o.name, OR(this, PR, "f").appendChild(y); + const A = document.createElement("canvas"); + A.width = h.width, A.height = h.height; + const b = A.getContext("2d"); + null == b ? console.error("Failed to get 2D context for thumbnail canvas") : b.drawImage(h, 0, 0); + const x = document.createElement("div"); + x.className = "thumbnail", x.appendChild(A), OR(this, PR, "f").appendChild(x); + const k = document.createElement("button"); + let E; + switch (k.className = "button share", k.innerHTML = '', k.addEventListener("click", (() => { + a.playUIClick(), OR(this, CR, "f").className = "hidden"; + const e = l.toExportString(o); + zR(this, NR, new Hx(e, (() => { + var e; + null === (e = OR(this, NR, "f")) || void 0 === e || e.dispose(), zR(this, NR, null, "f"), OR(this, CR, "f").className = "track-info" + }), null, !1, t, a, d, s), "f") + })), x.appendChild(k), l.environment) { + case QA.Summer: + E = "images/summer.svg"; + break; + case QA.Winter: + E = "images/winter.svg"; + break; + case QA.Desert: + E = "images/desert.svg" + } + const S = document.createElement("img"); + S.className = "environment", S.src = E, x.appendChild(S); + const M = document.createElement("div"); + M.className = "track-author", M.textContent = t.get("Author") + ": " + (null !== (v = o.author) && void 0 !== v ? v : t.get("Unknown")), OR(this, PR, "f").appendChild(M); + const T = document.createElement("div"); + T.className = "divider", OR(this, PR, "f").appendChild(T); + const _ = document.createElement("div"); + _.className = "personal-best-title", _.textContent = t.get("Personal best"), OR(this, PR, "f").appendChild(_); + const C = document.createElement("div"); + C.className = "personal-best", null != w ? (C.textContent = fk.formatTimeString(w.time), C.classList.remove("no-record")) : (C.textContent = t.get("No record"), C.classList.add("no-record")), OR(this, PR, "f").appendChild(C); + const P = document.createElement("div"); + P.className = "divider", OR(this, PR, "f").appendChild(P); + const I = document.createElement("div"); + I.className = "opponents-title", I.textContent = t.get("Opponents"), OR(this, PR, "f").appendChild(I), zR(this, IR, document.createElement("div"), "f"), OR(this, IR, "f").className = "opponents-container", OR(this, PR, "f").appendChild(OR(this, IR, "f")), zR(this, RR, document.createElement("button"), "f"), OR(this, RR, "f").className = "button watch", OR(this, RR, "f").innerHTML = '', OR(this, RR, "f").disabled = !0, OR(this, RR, "f").prepend(document.createTextNode(t.get("Watch"))), OR(this, RR, "f").addEventListener("click", (() => { + if (a.playUIClick(), l.hasStartingPoint()) { + const e = OR(this, BR, "f"); + if (e.length > 0) m(OR(this, ER, "f").getRecordings(e.map((e => e.recordingId))).then((t => { + if (t.some((e => null == e))) throw new Error("Failed to load at least one recording."); + return t.filter((e => null != e)).map(((t, n) => ({ + recording: t.recording, + carColors: t.carColors, + name: e[n].name, + time: t.time, + isSelf: e[n].isSelf + }))) + }))); + else { + const e = r.getRecord(i.profileSlot, c); + if (null != e) { + const t = i.getCurrentUserProfile(); + g([{ + recording: e.recording, + carColors: t.carColors, + name: t.nickname, + time: e.time, + isSelf: !0 + }]) + } + } + } else OR(this, CR, "f").classList.add("hidden"), s.show(t.get("Track is missing starting point"), t.get("Ok"), (() => { + OR(this, CR, "f").classList.remove("hidden") + })) + })), OR(this, PR, "f").appendChild(OR(this, RR, "f")), OR(this, xR, "m", UR).call(this); + const R = document.createElement("button"); + R.className = "button play", R.innerHTML = '', R.prepend(document.createTextNode(t.get("Play"))), R.addEventListener("click", (() => { + if (a.playUIClick(), l.hasStartingPoint()) { + const e = OR(this, BR, "f"); + if (e.length > 0) p(OR(this, ER, "f").getRecordings(e.map((e => e.recordingId))).then((t => { + if (t.some((e => null == e))) throw new Error("Failed to load at least one recording."); + return t.filter((e => null != e)).map(((t, n) => ({ + recording: t.recording, + carColors: t.carColors, + name: e[n].name, + time: t.time, + isSelf: e[n].isSelf + }))) + }))); + else { + const e = r.getRecord(i.profileSlot, c); + if (null != e) { + const t = i.getCurrentUserProfile(); + f([{ + recording: e.recording, + carColors: t.carColors, + name: t.nickname, + time: e.time, + isSelf: !0 + }]) + } else f([]) + } + } else OR(this, CR, "f").classList.add("hidden"), s.show(t.get("Track is missing starting point"), t.get("Ok"), (() => { + OR(this, CR, "f").classList.remove("hidden") + })) + })), OR(this, PR, "f").appendChild(R), window.addEventListener("keydown", zR(this, DR, (e => { + "Escape" == e.code && (u(), e.preventDefault()) + }), "f")) + } + dispose() { + OR(this, LR, "f").dispose(), OR(this, _R, "f").removeChild(OR(this, CR, "f")), window.removeEventListener("keydown", OR(this, DR, "f")) + } + }; + var WR = n(5140), + VR = {}; + VR.styleTagTransform = u(), VR.setAttributes = l(), VR.insert = s().bind(null, "head"), VR.domAPI = r(), VR.insertStyleElement = h(); + t()(WR.A, VR); + WR.A && WR.A.locals && WR.A.locals; + var HR, GR, jR, QR, YR, KR, qR, XR, ZR, JR, $R = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + eL = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + GR = new WeakMap, jR = new WeakMap, QR = new WeakMap, YR = new WeakMap, KR = new WeakMap, qR = new WeakMap, XR = new WeakMap, ZR = new WeakMap, HR = new WeakSet, JR = function(e, t) { + const n = eL(this, YR, "f").getUserProfile(e), + i = document.createElement("div"); + i.className = "slot"; + const r = document.createElement("button"); + if (r.className = "button main", e == eL(this, YR, "f").profileSlot && r.classList.add("selected"), r.addEventListener("click", (() => { + eL(this, QR, "f").playUIClick(); + for (const e of eL(this, qR, "f")) e.classList.remove("selected"); + r.classList.add("selected"), t(e) + })), i.appendChild(r), eL(this, qR, "f").push(r), null != n) { + const e = document.createElement("div"); + e.className = "image-container", r.appendChild(e); + const t = document.createElement("img"); + t.className = "placeholder show", t.src = "images/car_thumbnail_placeholder.png", e.appendChild(t); + const i = document.createElement("img"); + BI(n.carColors, eL(this, ZR, "f")).then((e => { + i.src = e, t.classList.remove("show"), i.classList.add("show") + })).catch((e => { + console.error(e) + })), e.appendChild(i); + const a = document.createElement("p"); + a.className = "name", a.textContent = n.nickname, r.appendChild(a) + } else { + const e = document.createElement("div"); + e.className = "image-container", r.appendChild(e); + const t = document.createElement("img"); + t.className = "show", t.src = "images/car_thumbnail_placeholder.png", e.appendChild(t); + const n = document.createElement("p"); + n.className = "name empty", n.textContent = eL(this, jR, "f").get("Empty"), r.appendChild(n) + } + eL(this, KR, "f").appendChild(i) + }; + const tL = class { + constructor(e, t, n, i, r, a) { + HR.add(this), GR.set(this, void 0), jR.set(this, void 0), QR.set(this, void 0), YR.set(this, void 0), KR.set(this, void 0), qR.set(this, []), XR.set(this, void 0), ZR.set(this, new WI); + const s = document.getElementById("ui"); + if (null == s) throw new Error("UI element not found"); + $R(this, GR, s, "f"), $R(this, jR, e, "f"), $R(this, QR, t, "f"), $R(this, YR, n, "f"), $R(this, KR, document.createElement("div"), "f"), eL(this, KR, "f").className = "profile-selection", eL(this, GR, "f").appendChild(eL(this, KR, "f")); + const o = document.createElement("div"); + o.className = "top-bar", eL(this, KR, "f").appendChild(o); + const l = document.createElement("h2"); + l.textContent = e.get("Profiles"), o.appendChild(l); + for (let e = 0; e < 3; e++) eL(this, HR, "m", JR).call(this, e, a); + const c = document.createElement("div"); + c.className = "bottom-bar", eL(this, KR, "f").appendChild(c); + const h = document.createElement("button"); + h.className = "button", h.innerHTML = ' ', h.append(document.createTextNode(e.get("Back"))), h.addEventListener("click", (() => { + t.playUIClick(), i() + })), c.appendChild(h); + const d = document.createElement("button"); + d.className = "button right", d.innerHTML = ' ', d.append(document.createTextNode(e.get("Import"))), d.addEventListener("click", (() => { + t.playUIClick(), r() + })), c.appendChild(d), window.addEventListener("keydown", $R(this, XR, (e => { + "Escape" == e.code && (i(), e.preventDefault()) + }), "f")) + } + dispose() { + eL(this, ZR, "f").cancel(), eL(this, GR, "f").removeChild(eL(this, KR, "f")), window.removeEventListener("keydown", eL(this, XR, "f")) + } + }; + var nL = n(6474), + iL = {}; + iL.styleTagTransform = u(), iL.setAttributes = l(), iL.insert = s().bind(null, "head"), iL.domAPI = r(), iL.insertStyleElement = h(); + t()(nL.A, iL); + nL.A && nL.A.locals && nL.A.locals; + class rL { + constructor(e = gL.createToken(), t = gL.defaultNickname, n = Pu.random()) { + this.token = e, this.nickname = t, this.carColors = n + } + get tokenHash() { + return (0, LA.sha256)(this.token) + } + clone() { + return new rL(this.token, this.nickname, this.carColors) + } + } + const aL = rL; + var sL, oL, lL, cL, hL, dL, uL, pL = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + fL = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class mL { + constructor(e) { + var t; + sL.add(this), lL.set(this, void 0), cL.set(this, void 0), hL.set(this, void 0), pL(this, lL, e, "f"), pL(this, cL, null !== (t = fL(this, lL, "f").loadUserProfileSlot()) && void 0 !== t ? t : 0, "f"), pL(this, hL, fL(this, sL, "m", uL).call(this, fL(this, cL, "f")), "f") + } + static createToken() { + let e = ""; + try { + const t = new Uint8Array(32); + crypto.getRandomValues(t), e += t.toString() + } catch (e) {} + try { + e += crypto.randomUUID() + } catch (e) {} + if (0 == e.length) throw new Error("Failed to generate user token"); + return (0, LA.sha256)(e) + } + createProfile(e, t, n, i) { + return !!this.isValidToken(t) && (fL(this, lL, "f").saveUserProfile(e, t, n, i), null != fL(this, lL, "f").loadUserProfile(e)) + } + isValidToken(e) { + return !(!/^[0-9a-f]*$/.test(e) || 64 != e.length) + } + hasDuplicateToken(e) { + var t; + for (let n = 0; n < 3; n++) + if ((null === (t = fL(this, lL, "f").loadUserProfile(n)) || void 0 === t ? void 0 : t.token) == e) return !0; + return !1 + } + firstOccupiedProfileSlot() { + for (let e = 0; e < 3; e++) + if (null != fL(this, lL, "f").loadUserProfile(e)) return e; + return null + } + firstFreeProfileSlot() { + for (let e = 0; e < 3; e++) + if (null == fL(this, lL, "f").loadUserProfile(e)) return e; + return null + } + deleteProfileSlot(e) { + fL(this, lL, "f").deleteAllRecords(e), fL(this, lL, "f").deleteUserProfile(e) + } + setProfileSlot(e) { + if (!Number.isSafeInteger(e) || e < 0) throw new Error("Profile slot is invalid"); + pL(this, cL, e, "f"), pL(this, hL, fL(this, sL, "m", uL).call(this, fL(this, cL, "f")), "f"), fL(this, lL, "f").saveUserProfileSlot(fL(this, cL, "f")) + } + setNickname(e, t = fL(this, cL, "f")) { + let n; + n = t == fL(this, cL, "f") ? fL(this, hL, "f") : fL(this, sL, "m", uL).call(this, t), n.nickname = e, fL(this, lL, "f").saveUserProfile(t, n.token, n.nickname, n.carColors) + } + setCarColors(e, t = fL(this, cL, "f")) { + let n; + n = t == fL(this, cL, "f") ? fL(this, hL, "f") : fL(this, sL, "m", uL).call(this, t), n.carColors = e, fL(this, lL, "f").saveUserProfile(t, n.token, n.nickname, n.carColors) + } + get profileSlot() { + return fL(this, cL, "f") + } + getCurrentUserProfile() { + return fL(this, hL, "f").clone() + } + getUserProfile(e) { + if (e == fL(this, cL, "f")) return this.getCurrentUserProfile(); + { + const t = fL(this, lL, "f").loadUserProfile(e); + return null == t ? null : new aL(t.token, t.nickname, t.carColors) + } + } + syncUserProfile(e) { + const t = this.getCurrentUserProfile(); + e.getUser(t.token).then((e => { + if (null == e) return; + const n = this.getCurrentUserProfile(); + n.token == t.token && n.nickname == t.nickname && n.carColors.serialize() == t.carColors.serialize() && (this.setNickname(e.name), this.setCarColors(e.carColors)) + })).catch((e => { + console.error(e) + })) + } + } + oL = mL, lL = new WeakMap, cL = new WeakMap, hL = new WeakMap, sL = new WeakSet, dL = function(e) { + const t = oL.createToken(), + n = oL.defaultNickname, + i = Pu.random(); + fL(this, lL, "f").saveUserProfile(e, t, n, i) + }, uL = function(e) { + null == fL(this, lL, "f").loadUserProfile(e) && fL(this, sL, "m", dL).call(this, e); + const t = fL(this, lL, "f").loadUserProfile(e); + return null == t ? new aL : new aL(t.token, t.nickname, t.carColors) + }, mL.defaultNickname = "Anonymous"; + const gL = mL; + + function vL(e) { + return new Blob([e]).size + } + var wL, yL, AL, bL, xL, kL, EL, SL, ML, TL = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + _L = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + yL = new WeakMap, AL = new WeakMap, bL = new WeakMap, xL = new WeakMap, kL = new WeakMap, EL = new WeakMap, SL = new WeakMap, wL = new WeakSet, ML = function() { + let e = _L(this, xL, "f").value; + return /\S/.test(e) || (e = "Anonymous"), e + }; + const CL = class { + constructor(e, t, n, i, r, a, s, o, l) { + wL.add(this), yL.set(this, void 0), AL.set(this, !1), bL.set(this, void 0), xL.set(this, void 0), kL.set(this, null), EL.set(this, null), SL.set(this, void 0); + const c = document.getElementById("ui"); + if (null == c) throw new Error("UI element not found"); + TL(this, yL, c, "f"), TL(this, bL, document.createElement("div"), "f"), _L(this, bL, "f").className = "nickname", _L(this, yL, "f").appendChild(_L(this, bL, "f")); + const h = document.createElement("h1"); + h.textContent = e.get("Nickname"), _L(this, bL, "f").appendChild(h), TL(this, xL, document.createElement("input"), "f"), _L(this, xL, "f").type = "text", _L(this, xL, "f").placeholder = gL.defaultNickname, _L(this, xL, "f").spellcheck = !1, null != r ? _L(this, xL, "f").value = r : null != i && i.nickname != _L(this, xL, "f").placeholder && (_L(this, xL, "f").value = i.nickname), _L(this, bL, "f").appendChild(_L(this, xL, "f")), _L(this, xL, "f").focus(), _L(this, xL, "f").addEventListener("input", (() => { + let e = _L(this, xL, "f").value; + for (; vL(e) >= 50;) e = e.substring(0, e.length - 1); + _L(this, xL, "f").value = e + })), _L(this, xL, "f").addEventListener("keydown", (e => { + "Enter" == e.code && (o(_L(this, wL, "m", ML).call(this)), e.preventDefault()) + })); + const d = document.createElement("p"); + d.textContent = e.get("Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time."), _L(this, bL, "f").appendChild(d); + const u = document.createElement("button"); + u.className = "button delete", u.innerHTML = ' ', u.append(e.get("Delete")), u.addEventListener("click", (() => { + t.playUIClick(), a(_L(this, wL, "m", ML).call(this)) + })), _L(this, bL, "f").appendChild(u); + const p = document.createElement("button"); + p.className = "button", p.innerHTML = ' ', p.append(e.get("Export")), p.addEventListener("click", (() => { + var e; + t.playUIClick(), s(_L(this, wL, "m", ML).call(this), null !== (e = null == i ? void 0 : i.token) && void 0 !== e ? e : "") + })), _L(this, bL, "f").appendChild(p); + const f = document.createElement("button"); + f.className = "button", f.textContent = e.get("Ok"), f.addEventListener("click", (() => { + t.playUIClick(), o(_L(this, wL, "m", ML).call(this)) + })), _L(this, bL, "f").appendChild(f), null != i && n.getUser(i.token).then((n => { + const r = 1 == (null == n ? void 0 : n.isVerifier); + !_L(this, AL, "f") && r && (TL(this, kL, document.createElement("button"), "f"), _L(this, kL, "f").className = "button nickname-verifier-button", _L(this, kL, "f").textContent = e.get("Verifier"), _L(this, kL, "f").addEventListener("click", (() => { + t.playUIClick(), l(i.token) + })), _L(this, yL, "f").appendChild(_L(this, kL, "f"))) + })).catch((e => { + console.error(e) + })), null != (null == i ? void 0 : i.tokenHash) && (TL(this, EL, document.createElement("p"), "f"), _L(this, EL, "f").className = "nickname-user-token", _L(this, EL, "f").textContent = e.get("User ID") + ": " + i.tokenHash, _L(this, yL, "f").appendChild(_L(this, EL, "f"))), window.addEventListener("keydown", TL(this, SL, (e => { + "Escape" == e.code && (o(_L(this, wL, "m", ML).call(this)), e.preventDefault()) + }), "f")) + } + dispose() { + _L(this, yL, "f").removeChild(_L(this, bL, "f")), null != _L(this, kL, "f") && _L(this, yL, "f").removeChild(_L(this, kL, "f")), null != _L(this, EL, "f") && _L(this, yL, "f").removeChild(_L(this, EL, "f")), window.removeEventListener("keydown", _L(this, SL, "f")), TL(this, AL, !0, "f") + } + }; + var PL = n(7818), + IL = {}; + IL.styleTagTransform = u(), IL.setAttributes = l(), IL.insert = s().bind(null, "head"), IL.domAPI = r(), IL.insertStyleElement = h(); + t()(PL.A, IL); + PL.A && PL.A.locals && PL.A.locals; + var RL, LL, DL, NL = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + BL = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + RL = new WeakMap, LL = new WeakMap, DL = new WeakMap; + const UL = class { + constructor(e, t, n, i, r) { + RL.set(this, void 0), LL.set(this, void 0), DL.set(this, void 0); + const a = document.getElementById("ui"); + if (null == a) throw new Error("UI element not found"); + NL(this, RL, a, "f"), NL(this, LL, document.createElement("div"), "f"), BL(this, LL, "f").className = "user-export", BL(this, RL, "f").appendChild(BL(this, LL, "f")); + const s = document.createElement("textarea"); + s.value = n, s.readOnly = null == r, s.placeholder = "Paste user token here...", BL(this, LL, "f").appendChild(s); + const o = document.createElement("div"); + o.className = "bar", BL(this, LL, "f").appendChild(o); + const l = document.createElement("button"); + if (l.className = "button", l.innerHTML = ' ', l.append(document.createTextNode(t.get("Back"))), l.addEventListener("click", (() => { + e.playUIClick(), i() + })), o.appendChild(l), null != r) { + const n = document.createElement("button"); + n.className = "button right", n.innerHTML = ' ', n.append(document.createTextNode(t.get("Import"))), n.addEventListener("click", (() => { + e.playUIClick(), r(s.value) + })), o.appendChild(n) + } else { + const n = document.createElement("button"); + n.className = "button right", n.innerHTML = ' ', n.append(document.createTextNode(t.get("Copy"))), n.addEventListener("click", (() => { + e.playUIClick(); + try { + navigator.clipboard.writeText(s.value).catch((e => { + console.error(e) + })) + } catch (e) { + console.error(e) + } + })), o.appendChild(n) + } + window.addEventListener("keydown", NL(this, DL, (e => { + "Escape" == e.code && (i(), e.preventDefault()) + }), "f")) + } + dispose() { + BL(this, RL, "f").removeChild(BL(this, LL, "f")), window.removeEventListener("keydown", BL(this, DL, "f")) + } + }; + try { + if (void 0 !== window.BroadcastChannel) { + const e = new window.BroadcastChannel("polytrack-single-instance"); + e.addEventListener("message", (t => { + "new-instance" == t.data && zL && e.postMessage("conflict"), "conflict" == t.data && (zL = !1) + })), e.postMessage("new-instance"), window.addEventListener("beforeunload", (() => { + e.close() + })) + } + } catch (e) { + console.error(e) + } + let zL = !0; + + function OL() { + let e; + switch (Jd) { + case "kodub": + case "electron": + case "capacitor": + case "jest": + e = " "; + break; + case "itch": + e = " "; + break; + case "armorgames": + e = "https://armorgames.com/polytrack-game/19464"; + break; + case "gato": + e = "https://gato.us/game/poly-track"; + break; + case "crazygames": + e = "https://www.crazygames.com/game/polytrack"; + break; + case "poki": + e = "https://poki.com/en/g/polytrack"; + break; + case "y8": + e = "https://www.y8.com/games/poly_track" + } + return e + } + var FL, WL, VL, HL, GL, jL, QL, YL, KL, qL, XL, ZL, JL, $L, eD, tD, nD, iD, rD, aD, sD, oD, lD, cD, hD, dD, uD, pD, fD, mD, gD, vD = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + wD = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + WL = new WeakMap, VL = new WeakMap, HL = new WeakMap, GL = new WeakMap, jL = new WeakMap, QL = new WeakMap, YL = new WeakMap, KL = new WeakMap, qL = new WeakMap, XL = new WeakMap, ZL = new WeakMap, JL = new WeakMap, $L = new WeakMap, eD = new WeakMap, tD = new WeakMap, nD = new WeakMap, iD = new WeakMap, rD = new WeakMap, aD = new WeakMap, sD = new WeakMap, oD = new WeakMap, lD = new WeakMap, FL = new WeakSet, cD = function(e, t, n, i, r, a, s, o, l, c) { + return new $k(wD(this, GL, "f"), e, t, n, i, r, a, s, !1, (() => { + wD(this, qL, "f").hide(), wD(this, FL, "m", pD).call(this), wD(this, FL, "m", mD).call(this) + }), ((s, h, d, u, p) => { + wD(this, qL, "f").hide(); + const f = () => { + var e; + wD(this, qL, "f").show(), null === (e = wD(this, XL, "f")) || void 0 === e || e.dispose(), vD(this, XL, null, "f") + }, + m = e => { + var t; + null === (t = wD(this, XL, "f")) || void 0 === t || t.dispose(), vD(this, XL, null, "f"), l(s, h, d, e) + }, + g = c => { + var y; + null === (y = wD(this, XL, "f")) || void 0 === y || y.dispose(), vD(this, XL, null, "f"), o.determinismState != VI.Ok ? a.show(e.get("Cannot load recordings due to non-determinism"), e.get("Ok"), (() => { + vD(this, XL, new FR(wD(this, GL, "f"), e, o, r, n, t, a, s, h, u, p, i, f, g, m, v, w), "f") + })) : c.then((e => { + l(s, h, d, e) + })).catch((() => { + a.show(e.get("Failed to load recordings"), e.get("Ok"), (() => { + vD(this, XL, new FR(wD(this, GL, "f"), e, o, r, n, t, a, s, h, u, p, i, f, g, m, v, w), "f") + })) + })) + }, + v = l => { + var y; + null === (y = wD(this, XL, "f")) || void 0 === y || y.dispose(), vD(this, XL, null, "f"), o.determinismState != VI.Ok ? a.show(e.get("Cannot load recordings due to non-determinism"), e.get("Ok"), (() => { + vD(this, XL, new FR(wD(this, GL, "f"), e, o, r, n, t, a, s, h, u, p, i, f, g, m, v, w), "f") + })) : l.then((e => { + c(s, h, d, e) + })).catch((() => { + a.show(e.get("Failed to load recordings"), e.get("Ok"), (() => { + vD(this, XL, new FR(wD(this, GL, "f"), e, o, r, n, t, a, s, h, u, p, i, f, g, m, v, w), "f") + })) + })) + }, + w = e => { + var t; + null === (t = wD(this, XL, "f")) || void 0 === t || t.dispose(), vD(this, XL, null, "f"), c(s, h, d, e) + }; + vD(this, XL, new FR(wD(this, GL, "f"), e, o, r, n, t, a, s, h, u, p, i, f, g, m, v, w), "f"), wD(this, FL, "m", fD).call(this) + })) + }, hD = function e(t, n, i, r, a, s, o, l, c, h, d, u, p, f, m, g) { + for (const e of wD(this, iD, "f")) wD(this, nD, "f").removeChild(e); + vD(this, iD, [], "f"); + for (const e of wD(this, aD, "f")) wD(this, rD, "f").removeChild(e); + vD(this, aD, [], "f"); + const v = document.createElement("button"); + v.className = "button button-image", v.innerHTML = '', v.addEventListener("click", (() => { + n.playUIClick(), u() + })); + const w = document.createElement("p"); + w.textContent = t.get("Customize"), v.appendChild(w), wD(this, nD, "f").appendChild(v), wD(this, iD, "f").push(v); + const y = document.createElement("button"); + y.className = "button button-image", y.innerHTML = '', y.addEventListener("click", (() => { + n.playUIClick(), p() + })); + const A = document.createElement("p"); + A.textContent = t.get("Editor"), y.appendChild(A), wD(this, nD, "f").appendChild(y), wD(this, iD, "f").push(y); + const b = document.createElement("button"); + b.className = "button button-image", b.innerHTML = '', b.addEventListener("click", (() => { + n.playUIClick(), wD(this, FL, "m", uD).call(this), wD(this, FL, "m", fD).call(this), vD(this, ZL, new kI(wD(this, GL, "f"), t, n, r, a, d, (() => { + var v; + null === (v = wD(this, ZL, "f")) || void 0 === v || v.dispose(), vD(this, ZL, null, "f"), wD(this, qL, "f").dispose(), vD(this, qL, wD(this, FL, "m", cD).call(this, t, n, l, s, o, d, c, h, f, m), "f"), wD(this, FL, "m", dD).call(this, t), wD(this, FL, "m", e).call(this, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m, g), wD(this, FL, "m", pD).call(this), wD(this, FL, "m", mD).call(this) + })), "f") + })); + const x = document.createElement("p"); + x.textContent = t.get("Settings"), b.appendChild(x), wD(this, nD, "f").appendChild(b), wD(this, iD, "f").push(b); + const k = document.createElement("button"); + k.className = "button button-image", k.innerHTML = '', k.addEventListener("click", (() => { + n.playUIClick(), wD(this, FL, "m", uD).call(this); + const e = (i, a) => { + vD(this, eD, new UL(n, t, a, (() => { + var e; + null === (e = wD(this, eD, "f")) || void 0 === e || e.dispose(), vD(this, eD, null, "f"), r() + }), (n => { + var a; + null === (a = wD(this, eD, "f")) || void 0 === a || a.dispose(), vD(this, eD, null, "f"), o.hasDuplicateToken(n) ? d.show(t.get("You cannot have duplicate user profiles"), t.get("Ok"), (() => { + e(i, n) + })) : o.isValidToken(n) ? h.getUser(n).then((a => { + null != a ? o.createProfile(i, n, a.name, a.carColors) ? (o.setProfileSlot(i), wD(this, qL, "f").refresh(), r()) : d.show(t.get("Failed to create user profile"), t.get("Ok"), (() => { + e(i, n) + })) : d.show(t.get("This user profile does not exist on the server"), t.get("Ok"), (() => { + e(i, n) + })) + })).catch((r => { + console.error(r), d.show(t.get("Failed to download user profile from the server"), t.get("Ok"), (() => { + e(i, n) + })) + })) : d.show(t.get("User token is invalid"), t.get("Ok"), (() => { + e(i, n) + })) + })), "f") + }, + i = (e, a) => { + var s; + null === (s = wD(this, JL, "f")) || void 0 === s || s.dispose(), vD(this, JL, null, "f"); + const l = o.getUserProfile(e); + vD(this, $L, new CL(t, n, h, l, a, (n => { + var a; + null === (a = wD(this, $L, "f")) || void 0 === a || a.dispose(), vD(this, $L, null, "f"), d.showConfirm(t.get('Are you sure you would like to delete "{0}"?', [n]), t.get("Cancel"), t.get("Confirm"), (() => { + i(e, n) + }), (() => { + var t; + o.deleteProfileSlot(e), e == o.profileSlot && (o.setProfileSlot(null !== (t = o.firstOccupiedProfileSlot()) && void 0 !== t ? t : 0), wD(this, qL, "f").refresh()), r() + })) + }), ((r, a) => { + var s; + null === (s = wD(this, $L, "f")) || void 0 === s || s.dispose(), vD(this, $L, null, "f"), d.showConfirm(t.get("Are you sure you want to display your private key?") + "\n\n" + t.get("DO NOT SHARE THIS KEY WITH ANYONE."), t.get("Cancel"), t.get("Confirm"), (() => { + i(e, r) + }), (() => { + vD(this, eD, new UL(n, t, a, (() => { + var t; + null === (t = wD(this, eD, "f")) || void 0 === t || t.dispose(), vD(this, eD, null, "f"), i(e, r) + }), null), "f") + })) + }), (t => { + var n; + if (null === (n = wD(this, $L, "f")) || void 0 === n || n.dispose(), vD(this, $L, null, "f"), t != (null == l ? void 0 : l.nickname)) { + o.setNickname(t, e); + const n = o.getUserProfile(e); + null != n && h.submitUserProfile(n.token, n.nickname, n.carColors).catch((e => { + console.warn(e) + })) + } + o.setProfileSlot(e), wD(this, qL, "f").refresh(), r() + }), (e => { + var t; + null === (t = wD(this, $L, "f")) || void 0 === t || t.dispose(), vD(this, $L, null, "f"), g(e), wD(this, FL, "m", pD).call(this) + })), "f") + }, + r = () => { + vD(this, JL, new tL(t, n, o, (() => { + var e; + null === (e = wD(this, JL, "f")) || void 0 === e || e.dispose(), vD(this, JL, null, "f"), wD(this, FL, "m", pD).call(this) + }), (() => { + var n; + null === (n = wD(this, JL, "f")) || void 0 === n || n.dispose(), vD(this, JL, null, "f"); + const i = o.firstFreeProfileSlot(); + null == i ? d.show(t.get("You need a free user profile slot to import a new user profile"), t.get("Ok"), (() => { + r() + })) : e(i, "") + }), (e => { + i(e, null) + })), "f") + }; + r() + })); + const E = document.createElement("p"); + E.textContent = t.get("Profile"), k.appendChild(E), wD(this, nD, "f").appendChild(k), wD(this, iD, "f").push(k); + const S = document.createElement("button"); + S.className = "button button-image", S.innerHTML = '', S.addEventListener("click", (() => { + n.playUIClick(), wD(this, FL, "m", uD).call(this), wD(this, FL, "m", fD).call(this), wD(this, qL, "f").show() + })); + const M = document.createElement("p"); + if (M.textContent = t.get("Play"), S.appendChild(M), wD(this, nD, "f").appendChild(S), wD(this, iD, "f").push(S), window.electron) { + const e = document.createElement("button"); + e.className = "button small", e.innerHTML = '', e.appendChild(document.createTextNode(" " + t.get("Quit"))), e.addEventListener("click", (() => { + var e; + n.playUIClick(), null === (e = window.electron) || void 0 === e || e.quit() + })), wD(this, rD, "f").appendChild(e), wD(this, aD, "f").push(e) + } { + const e = document.createElement("button"); + e.className = "button small", i.isFullscreen ? (e.innerHTML = '', e.appendChild(document.createTextNode(" " + t.get("Windowed")))) : (e.innerHTML = '', e.appendChild(document.createTextNode(" " + t.get("Fullscreen")))), null != wD(this, lD, "f") && i.removeFullscreenChangeListener(wD(this, lD, "f")), i.addFullscreenChangeListener(vD(this, lD, (() => { + i.isFullscreen ? (e.innerHTML = '', e.appendChild(document.createTextNode(" " + t.get("Windowed")))) : (e.innerHTML = '', e.appendChild(document.createTextNode(" " + t.get("Fullscreen")))) + }), "f")), e.addEventListener("click", (() => { + n.playUIClick(), i.toggleFullscreen().catch((e => { + console.error(e) + })) + })), wD(this, rD, "f").appendChild(e), wD(this, aD, "f").push(e) + } + }, dD = function(e) { + wD(this, YL, "f").innerHTML = ""; + const t = document.createElement("a"); + t.href = "https://www.kodub.com", t.target = "_blank", t.textContent = "kodub.com - " + e.get("Version") + " " + iu, wD(this, YL, "f").appendChild(t); + const n = document.createElement("a"); + n.href = "https://opengameart.org/content/sci-fi-theme-1", n.target = "_blank", n.textContent = 'OpenGameArt.org "Sci-fi Theme" by Maou (CC-BY 4.0)', wD(this, YL, "f").appendChild(n), wD(this, YL, "f").appendChild(document.createElement("br")); + const i = document.createElement("a"); + i.href = "https://www.kodub.com/privacy/polytrack", i.target = "_blank", i.textContent = "Privacy Policy", wD(this, YL, "f").appendChild(i) + }, uD = function() { + var e; + null === (e = wD(this, tD, "f")) || void 0 === e || e.classList.add("hidden"), wD(this, nD, "f").classList.add("hidden"); + for (const e of wD(this, iD, "f")) e.classList.remove("button-spawn"); + for (const e of wD(this, aD, "f")) e.classList.add("hidden"); + null != wD(this, QL, "f") && (wD(this, QL, "f").className = "hidden"), wD(this, YL, "f").className = "hidden" + }, pD = function() { + var e; + null === (e = wD(this, tD, "f")) || void 0 === e || e.classList.remove("hidden"), wD(this, nD, "f").classList.remove("hidden"); + for (const e of wD(this, aD, "f")) e.classList.remove("hidden"); + null != wD(this, QL, "f") && (wD(this, QL, "f").className = "discord-link"), wD(this, YL, "f").className = "info" + }, fD = function() { + wD(this, jL, "f").className = "hidden" + }, mD = function() { + wD(this, jL, "f").className = "logo" + }, gD = function() { + const e = wD(this, VL, "f").getBounds(), + t = new jt((e.min.x + (e.max.x - e.min.x) / 2) * jb.partSize, (e.min.y + (e.max.y - e.min.y) / 2) * jb.partSize); + wD(this, sD, "f").position.set(t.x + 250 * Math.cos(wD(this, oD, "f")), 100, t.y - 250 * Math.sin(wD(this, oD, "f"))), wD(this, sD, "f").rotation.y = wD(this, oD, "f") + Math.PI / 2 + }; + const yD = class { + constructor(e, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m, g, v) { + FL.add(this), WL.set(this, void 0), VL.set(this, void 0), HL.set(this, void 0), GL.set(this, void 0), jL.set(this, void 0), QL.set(this, void 0), YL.set(this, void 0), KL.set(this, null), qL.set(this, void 0), XL.set(this, null), ZL.set(this, null), JL.set(this, null), $L.set(this, null), eD.set(this, null), tD.set(this, void 0), nD.set(this, void 0), iD.set(this, []), rD.set(this, void 0), aD.set(this, []), sD.set(this, void 0), oD.set(this, Math.random() * Math.PI * 2), lD.set(this, null), vD(this, WL, n, "f"), vD(this, VL, r, "f"); + const w = document.getElementById("ui"); + if (null == w) throw new Error("UI element not found"); + if (vD(this, HL, w, "f"), vD(this, GL, document.createElement("div"), "f"), wD(this, GL, "f").className = "menu", wD(this, HL, "f").appendChild(wD(this, GL, "f")), vD(this, jL, document.createElement("img"), "f"), wD(this, jL, "f").src = "images/logo.svg", wD(this, jL, "f").className = "logo", wD(this, GL, "f").appendChild(wD(this, jL, "f")), function() { + let e; + switch (Jd) { + case "kodub": + case "jest": + e = [/\.kodub\.com$/]; + break; + case "electron": + case "capacitor": + return !1; + case "itch": + e = [/itch\.io$/, /itch\.zone$/]; + break; + case "armorgames": + e = [/^19464\.cache\.armorgames\.com$/]; + break; + case "gato": + e = [/^gato-files-prod\.s3\.amazonaws\.com$/]; + break; + case "crazygames": + e = [/\.crazygames\.com$/]; + break; + case "poki": + e = [/\.poki\.com$/, /\.poki-gdn\.com$/]; + break; + case "y8": + e = [/\.y8\.com$/] + } + return !e.some((e => e.test(location.hostname))) + }()) { + vD(this, tD, document.createElement("div"), "f"), wD(this, tD, "f").className = "warning-message", wD(this, tD, "f").textContent = e.get(" ", ["PolyTrack"]); + const t = document.createElement("a"); + t.href = OL(), t.textContent = OL(), wD(this, tD, "f").appendChild(t), wD(this, GL, "f").appendChild(wD(this, tD, "f")) + } else vD(this, tD, null, "f"); + vD(this, qL, wD(this, FL, "m", cD).call(this, e, t, s, c, a, d, o, l, m, g), "f"), vD(this, QL, document.createElement("a"), "f"), wD(this, QL, "f").className = "discord-link", wD(this, QL, "f").href = "https://www.kodub.com/discord/polytrack", wD(this, QL, "f").target = "_blank", wD(this, QL, "f").innerHTML = '', wD(this, GL, "f").appendChild(wD(this, QL, "f")), vD(this, YL, document.createElement("div"), "f"), wD(this, YL, "f").className = "info", wD(this, GL, "f").appendChild(wD(this, YL, "f")), wD(this, FL, "m", dD).call(this, e), vD(this, nD, document.createElement("div"), "f"), wD(this, nD, "f").className = "main-buttons-container hidden", wD(this, GL, "f").appendChild(wD(this, nD, "f")), vD(this, rD, document.createElement("div"), "f"), wD(this, rD, "f").className = "bottom-buttons", wD(this, GL, "f").appendChild(wD(this, rD, "f")), wD(this, FL, "m", hD).call(this, e, t, n, h, r, c, a, s, o, l, d, p, f, m, g, v), i.hasLoaded() ? wD(this, FL, "m", pD).call(this) : (wD(this, GL, "f").classList.add("loading-screen"), vD(this, KL, new ZP(wD(this, GL, "f"), e, i), "f"), i.addCompleteListener((() => { + wD(this, GL, "f").classList.remove("loading-screen"); + const t = wD(this, KL, "f"); + null == t || t.fadeOut((() => { + t.dispose(), zL ? l.determinismState == VI.Ok ? wD(this, FL, "m", pD).call(this) : l.determinismState == VI.AssetsFailed ? (wD(this, FL, "m", fD).call(this), d.show(e.get("Non-deterministic game assets found.") + " " + e.get("Some leaderboard features are disabled.") + "\n\n" + e.get("Please try clearing your browser cache."), e.get("Ok"), (() => { + wD(this, FL, "m", mD).call(this), wD(this, FL, "m", pD).call(this) + }))) : (wD(this, FL, "m", fD).call(this), d.show(e.get("Computer determinism check failed.") + " " + e.get("Some leaderboard features are disabled.") + "\n\n" + e.get("Please try another browser or device."), e.get("Ok"), (() => { + wD(this, FL, "m", mD).call(this), wD(this, FL, "m", pD).call(this) + }))) : d.showNoButtons(e.get("You already have another instance of PolyTrack open.") + "\n\n" + e.get("Please switch to that tab or window to continue.")); + for (let e = 0; e < wD(this, iD, "f").length; e++) { + const t = wD(this, iD, "f")[e]; + t.classList.add("button-spawn"), t.style.animationDelay = (.3 + .1 * e).toString() + "s" + } + })), vD(this, KL, null, "f") + }))), u && (wD(this, FL, "m", uD).call(this), wD(this, FL, "m", fD).call(this), wD(this, qL, "f").show()), vD(this, sD, new Pr(70, 1, .5, Au.maxViewDistance), "f"), n.scene.add(wD(this, sD, "f")), wD(this, FL, "m", gD).call(this) + } + dispose() { + var e; + wD(this, HL, "f").removeChild(wD(this, GL, "f")), wD(this, qL, "f").dispose(), null === (e = wD(this, XL, "f")) || void 0 === e || e.dispose(), vD(this, XL, null, "f"), null != wD(this, lD, "f") && wD(this, WL, "f").removeFullscreenChangeListener(wD(this, lD, "f")) + } + get camera() { + return wD(this, sD, "f") + } + update(e) { + vD(this, oD, wD(this, oD, "f") + .05 * e, "f"), wD(this, FL, "m", gD).call(this) + } + }; + var AD, bD, xD, kD, ED, SD, MD, TD, _D, CD, PD, ID, RD, LD, DD = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + ND = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + bD = new WeakMap, xD = new WeakMap, kD = new WeakMap, ED = new WeakMap, SD = new WeakMap, MD = new WeakMap, TD = new WeakMap, _D = new WeakMap, CD = new WeakMap, PD = new WeakMap, ID = new WeakMap, RD = new WeakMap, AD = new WeakSet, LD = function() { + ND(this, xD, "f").loadTrackData(ND(this, SD, "f").getRandomOfficialTrackData()), ND(this, xD, "f").generateMeshes(), ND(this, kD, "f").generateMountains(ND(this, xD, "f").getBounds()); + let e = null; + const t = ND(this, xD, "f").getID(); + if (null != t) { + const n = ND(this, MD, "f").getRecord(ND(this, PD, "f").profileSlot, t); + null != n && (e = n.recording) + } + if (null != e) { + const t = ND(this, xD, "f").getStartTransform(); + if (null == t) throw new Error("Start transform is null"); + DD(this, RD, new Aw(ND(this, bD, "f"), t, e, null, ND(this, _D, "f"), ND(this, CD, "f"), ND(this, kD, "f"), ND(this, xD, "f"), ND(this, TD, "f")), "f"), ND(this, RD, "f").audioVolume = 0, ND(this, RD, "f").start() + } + }; + const BD = class { + constructor(e, t, n, i, r, a, s, o, l, c, h, d, u, p, f, m, g, v, w, y, A) { + AD.add(this), bD.set(this, void 0), xD.set(this, void 0), kD.set(this, void 0), ED.set(this, void 0), SD.set(this, void 0), MD.set(this, void 0), TD.set(this, void 0), _D.set(this, void 0), CD.set(this, void 0), PD.set(this, void 0), ID.set(this, void 0), RD.set(this, null), DD(this, bD, e, "f"), DD(this, xD, t, "f"), DD(this, kD, n, "f"), DD(this, ED, i, "f"), DD(this, SD, r, "f"), DD(this, MD, l, "f"), DD(this, TD, u, "f"), DD(this, _D, c, "f"), DD(this, CD, h, "f"), DD(this, PD, o, "f"), DD(this, ID, new yD(a, h, c, f, t, o, l, d, p, r, u, s, m, g, v, w, y, A), "f"), c.setCamera(ND(this, ID, "f").camera), f.hasLoaded() ? ND(this, AD, "m", LD).call(this) : f.addCompleteListener((() => { + ND(this, AD, "m", LD).call(this) + })) + } + dispose() { + var e; + null === (e = ND(this, RD, "f")) || void 0 === e || e.dispose(), ND(this, ID, "f").dispose(), ND(this, xD, "f").clear(), ND(this, kD, "f").clearMountains() + } + update(e) { + var t, n, i; + null === (t = ND(this, RD, "f")) || void 0 === t || t.update(e), ND(this, ID, "f").update(e), ND(this, kD, "f").update(ND(this, xD, "f")), ND(this, ED, "f").update(e, ND(this, _D, "f").camera, ND(this, xD, "f").sunDirection), ND(this, CD, "f").update(e, !0, ND(this, _D, "f"), ND(this, TD, "f")), ND(this, _D, "f").update(null !== (i = null === (n = ND(this, RD, "f")) || void 0 === n ? void 0 : n.getPosition()) && void 0 !== i ? i : new yn, ND(this, xD, "f").sunDirection) + } + }; + var UD = n(5437), + zD = {}; + zD.styleTagTransform = u(), zD.setAttributes = l(), zD.insert = s().bind(null, "head"), zD.domAPI = r(), zD.insertStyleElement = h(); + t()(UD.A, zD); + UD.A && UD.A.locals && UD.A.locals; + var OD, FD, WD, VD, HD, GD, jD, QD, YD, KD, qD, XD, ZD, JD = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + $D = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + FD = new WeakMap, WD = new WeakMap, VD = new WeakMap, HD = new WeakMap, GD = new WeakMap, jD = new WeakMap, QD = new WeakMap, YD = new WeakMap, KD = new WeakMap, OD = new WeakSet, qD = function() { + null == $D(this, KD, "f") && window.addEventListener("keydown", JD(this, KD, (e => { + this.isOpen && ("Escape" == e.code ? (null != $D(this, QD, "f") && $D(this, QD, "f").call(this), this.hide(), e.stopImmediatePropagation(), e.preventDefault()) : "Enter" == e.code && "message" == $D(this, FD, "f") && (null != $D(this, YD, "f") && $D(this, YD, "f").call(this), this.hide(), e.stopImmediatePropagation(), e.preventDefault())) + }), "f")) + }, XD = function() { + null != $D(this, KD, "f") && (window.removeEventListener("keydown", $D(this, KD, "f")), JD(this, KD, null, "f")) + }, ZD = function() { + const e = Math.max(.01, Math.min(window.innerWidth, 1.4375 * window.innerHeight) / 1150); + $D(this, VD, "f").style.transform = e < 1 ? "scale(" + e.toString() + ")" : "" + }; + const eN = class { + constructor(e) { + OD.add(this), FD.set(this, null), WD.set(this, void 0), VD.set(this, void 0), HD.set(this, void 0), GD.set(this, void 0), jD.set(this, void 0), QD.set(this, null), YD.set(this, null), KD.set(this, null), JD(this, WD, document.createElement("dialog"), "f"), $D(this, WD, "f").className = "hidden", document.body.appendChild($D(this, WD, "f")), JD(this, VD, document.createElement("div"), "f"), $D(this, WD, "f").appendChild($D(this, VD, "f")), JD(this, HD, document.createElement("p"), "f"), $D(this, VD, "f").appendChild($D(this, HD, "f")), JD(this, GD, document.createElement("button"), "f"), $D(this, GD, "f").className = "button", $D(this, GD, "f").addEventListener("click", (() => { + e.playUIClick(); + const t = $D(this, QD, "f"); + this.hide(), null != t && t() + })), $D(this, VD, "f").appendChild($D(this, GD, "f")), JD(this, jD, document.createElement("button"), "f"), $D(this, jD, "f").className = "button", $D(this, jD, "f").addEventListener("click", (() => { + e.playUIClick(); + const t = $D(this, YD, "f"); + this.hide(), null != t && t() + })), $D(this, VD, "f").appendChild($D(this, jD, "f")), window.addEventListener("resize", (() => { + $D(this, OD, "m", ZD).call(this) + })), $D(this, OD, "m", ZD).call(this) + } + get isOpen() { + return null != $D(this, FD, "f") + } + show(e, t, n) { + JD(this, FD, "message", "f"), $D(this, WD, "f").className = "message-box message", $D(this, WD, "f").showModal(), $D(this, HD, "f").textContent = e, $D(this, GD, "f").textContent = "", $D(this, jD, "f").textContent = t, $D(this, GD, "f").blur(), $D(this, jD, "f").blur(), JD(this, QD, n, "f"), JD(this, YD, n, "f"), $D(this, OD, "m", qD).call(this) + } + showConfirm(e, t, n, i, r) { + JD(this, FD, "confirm", "f"), $D(this, WD, "f").className = "message-box confirm", $D(this, WD, "f").showModal(), $D(this, HD, "f").textContent = e, $D(this, GD, "f").textContent = t, $D(this, jD, "f").textContent = n, $D(this, GD, "f").blur(), $D(this, jD, "f").blur(), JD(this, QD, i, "f"), JD(this, YD, r, "f"), $D(this, OD, "m", qD).call(this) + } + showNoButtons(e) { + JD(this, FD, "no-buttons", "f"), $D(this, WD, "f").className = "message-box no-buttons", $D(this, WD, "f").showModal(), $D(this, HD, "f").textContent = e, $D(this, GD, "f").textContent = "", $D(this, jD, "f").textContent = "", $D(this, GD, "f").blur(), $D(this, jD, "f").blur(), JD(this, QD, null, "f"), JD(this, YD, null, "f"), $D(this, OD, "m", qD).call(this) + } + hide() { + JD(this, FD, null, "f"), $D(this, WD, "f").className = "hidden", $D(this, WD, "f").close(), $D(this, HD, "f").textContent = "", $D(this, GD, "f").textContent = "", $D(this, jD, "f").textContent = "", JD(this, QD, null, "f"), JD(this, YD, null, "f"), $D(this, OD, "m", XD).call(this) + } + }; + var tN, nN, iN, rN, aN = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }, + sN = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }; + tN = new WeakMap, nN = new WeakMap, iN = new WeakMap, rN = new WeakMap; + const oN = class { + constructor() { + tN.set(this, 0), nN.set(this, 0), iN.set(this, []), rN.set(this, []) + } + hasLoaded() { + return aN(this, nN, "f") == aN(this, tN, "f") + } + getProgress() { + return aN(this, nN, "f") / aN(this, tN, "f") + } + addResource() { + var e; + sN(this, tN, (e = aN(this, tN, "f"), ++e), "f") + } + loadedResource() { + var e; + sN(this, nN, (e = aN(this, nN, "f"), ++e), "f"); + for (const e of aN(this, iN, "f")) e(this.getProgress()); + if (this.hasLoaded()) + for (const e of aN(this, rN, "f")) e() + } + addProgressListener(e) { + aN(this, iN, "f").push(e) + } + addCompleteListener(e) { + aN(this, rN, "f").push(e) + } + preloadImage(e) { + this.addResource(); + const t = new Image; + t.addEventListener("load", (() => { + this.loadedResource() + })), t.addEventListener("error", (() => { + console.error("Failed to preload image: " + e) + })), t.src = e + } + }; + var lN, cN, hN, dN, uN, pN, fN, mN, gN = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }, + vN = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + wN = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + cN = new WeakMap, hN = new WeakMap, dN = new WeakMap, uN = new WeakMap, pN = new WeakMap, lN = new WeakSet, fN = function(e, t, n, i) { + return gN(this, void 0, void 0, (function*() { + var r, a; + if (wN(this, hN, "f").determinismState != VI.Ok) return; + const s = wN(this, dN, "f").getUserProfile(e); + if (null == s) return; + const o = e.toString() + "_" + t, + l = (null !== (r = wN(this, uN, "f").get(o)) && void 0 !== r ? r : 0) + 1; + wN(this, uN, "f").set(o, l); + const { + uploadId: c + } = yield wN(this, hN, "f").submitLeaderboard(s.token, s.nickname, s.carColors, t, n, i); + wN(this, uN, "f").get(o) == l && (null === (a = wN(this, dN, "f").getUserProfile(e)) || void 0 === a ? void 0 : a.token) == s.token && wN(this, cN, "f").saveRecord(e, s.tokenHash, t, c, n, i, wN(this, hN, "f").determinismState) + })) + }, mN = function(e, t, n) { + return gN(this, void 0, void 0, (function*() { + var i, r; + if (wN(this, hN, "f").determinismState != VI.Ok) return; + const a = wN(this, dN, "f").getUserProfile(e); + if (null == a) return; + const s = e.toString() + "_" + t, + o = (null !== (i = wN(this, uN, "f").get(s)) && void 0 !== i ? i : 0) + 1; + wN(this, uN, "f").set(s, o); + const l = yield wN(this, hN, "f").getRecordings([n]); + if (l.length < 1 || null == l[0]) throw new Error("Record not found"); + const c = l[0]; + if (wN(this, uN, "f").get(s) == o && (null === (r = wN(this, dN, "f").getUserProfile(e)) || void 0 === r ? void 0 : r.token) == a.token) { + const i = this.getRecordTime(e, t); + if (null == i || c.time.lessThan(i)) { + wN(this, cN, "f").saveRecord(e, a.tokenHash, t, n, c.time, c.recording, wN(this, hN, "f").determinismState); + for (const e of wN(this, pN, "f")) e() + } + } + })) + }; + const yN = class { + constructor(e, t, n) { + lN.add(this), cN.set(this, void 0), hN.set(this, void 0), dN.set(this, void 0), uN.set(this, new Map), pN.set(this, []), vN(this, cN, e, "f"), vN(this, hN, t, "f"), vN(this, dN, n, "f") + } + addRecordChangedCallback(e) { + wN(this, pN, "f").push(e) + } + removeRecordChangedCallback(e) { + const t = wN(this, pN, "f").indexOf(e); + t >= 0 && wN(this, pN, "f").splice(t, 1) + } + setRecord(e, t, n, i) { + const r = wN(this, dN, "f").getUserProfile(e); + if (null != r) { + wN(this, cN, "f").saveRecord(e, r.tokenHash, t, null, n, i, wN(this, hN, "f").determinismState), wN(this, lN, "m", fN).call(this, e, t, n, i).catch((e => { + console.warn(e) + })); + for (const e of wN(this, pN, "f")) e() + } + } + syncRecord(e, t, n) { + return gN(this, void 0, void 0, (function*() { + if (wN(this, hN, "f").determinismState != VI.Ok) return null; + const i = this.getRecord(e, t); + return null != i && (null == n || i.uploadId != n.recordingId && i.time.lessThan(n.time)) ? (yield wN(this, lN, "m", fN).call(this, e, t, i.time, i.recording), "Upload") : null != n && (null == i || i.uploadId != n.recordingId && n.time.lessThan(i.time)) ? (yield wN(this, lN, "m", mN).call(this, e, t, n.recordingId), "Download") : null + })) + } + getRecordTime(e, t) { + const n = this.getRecord(e, t); + return null == n ? null : n.time + } + getRecord(e, t) { + const n = wN(this, dN, "f").getUserProfile(e); + return null == n ? null : wN(this, cN, "f").loadRecord(e, n.tokenHash, t, wN(this, hN, "f").determinismState) + } + }; + var AN, bN, xN, kN, EN, SN, MN, TN, _N, CN, PN, IN = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + RN = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + bN = new WeakMap, xN = new WeakMap, kN = new WeakMap, EN = new WeakMap, SN = new WeakMap, AN = new WeakSet, MN = function(e, t) { + return RN(this, AN, "m", _N).call(this, "tracks/official/" + e, t) + }, TN = function(e, t) { + return RN(this, AN, "m", _N).call(this, "tracks/community/" + e, t) + }, _N = function(e, t) { + return t.addResource(), new Promise((n => { + const i = new XMLHttpRequest; + i.overrideMimeType("text/plain"), i.onreadystatechange = () => { + if (4 == i.readyState && 200 == i.status) { + t.loadedResource(); + const e = Sb.fromExportString(i.responseText); + if (null == e) throw new Error("Failed to load bundled track"); + const { + trackMetadata: r, + trackData: a + } = e; + n({ + id: a.getId(), + trackMetadata: r, + trackData: a, + thumbnail: a.createThumbnail(), + saveTime: null + }) + } + }, i.open("GET", e, !0), i.send() + })) + }, CN = function(e) { + return new Promise((t => { + setTimeout((() => { + const n = RN(this, EN, "f").loadCustomTrack(e); + if (null != n) { + const { + trackMetadata: e, + trackData: i, + saveTime: r + } = n, a = { + id: i.getId(), + trackMetadata: e, + trackData: i, + thumbnail: i.createThumbnail(), + saveTime: r + }; + t(a) + } else t(null) + })) + })) + }, PN = function() { + for (const e of RN(this, SN, "f")) e() + }; + const LN = class { + constructor(e, t) { + AN.add(this), bN.set(this, []), xN.set(this, []), kN.set(this, []), EN.set(this, void 0), SN.set(this, []), IN(this, EN, t, "f"); + Promise.all(["summer1.track", "summer2.track", "summer3.track", "summer4.track", "summer5.track", "summer6.track", "summer7.track", "winter1.track", "winter2.track", "winter3.track", "winter4.track", "desert1.track", "desert2.track", "desert3.track", "desert4.track"].map((t => RN(this, AN, "m", MN).call(this, t, e)))).then((e => { + IN(this, bN, e, "f") + })).catch((e => { + console.error(e) + })); + Promise.all(["90_reset.track", "arabica.track", "clay_temples.track", "concrete_jungle.track", "desert_stallion.track", "hyperions_sanctuary.track", "las_calles.track", "last_remnant.track", "lu_muvimento.track", "malformations.track", "opal_place_ii.track", "re_akina.track", "sandline_ultimatum.track", "snow_park.track", "winter_hollow.track"].map((t => RN(this, AN, "m", TN).call(this, t, e)))).then((e => { + IN(this, xN, e, "f") + })).catch((e => { + console.error(e) + })); + const n = RN(this, EN, "f").getAllCustomTrackNames(); + if (null != n) { + const e = []; + for (const t of n) e.push(RN(this, AN, "m", CN).call(this, t)); + Promise.all(e).then((e => { + IN(this, kN, e.filter((e => null != e)).sort(((e, t) => { + var n, i; + return (null !== (n = t.saveTime) && void 0 !== n ? n : -1 / 0) - (null !== (i = e.saveTime) && void 0 !== i ? i : -1 / 0) + })), "f") + })).catch((e => { + console.error(e) + })) + } + } + saveCustomTrack(e, t) { + const n = new Date; + if (RN(this, EN, "f").saveCustomTrack(e, t, n)) { + const i = { + id: t.getId(), + trackMetadata: e, + trackData: t, + thumbnail: t.createThumbnail(), + saveTime: n.getTime() + }, + r = RN(this, kN, "f").findIndex((t => t.trackMetadata.name == e.name)); + return r >= 0 ? RN(this, kN, "f")[r] = i : RN(this, kN, "f").unshift(i), RN(this, AN, "m", PN).call(this), !0 + } + return !1 + } + deleteCustomTrack(e) { + if (RN(this, EN, "f").deleteCustomTrack(e)) { + const t = RN(this, kN, "f").findIndex((t => t.trackMetadata.name == e)); + if (t >= 0) { + const e = RN(this, kN, "f")[t]; + RN(this, EN, "f").deleteAllRecordsForTrack(e.id), RN(this, kN, "f").splice(t, 1) + } + return RN(this, AN, "m", PN).call(this), !0 + } + return !1 + } + checkCustomTrackNameExists(e) { + return RN(this, kN, "f").some((t => t.trackMetadata.name == e)) + } + addCustomTracksChangedListener(e) { + RN(this, SN, "f").push(e) + } + removeCustomTracksChangedListener(e) { + const t = RN(this, SN, "f").indexOf(e); + t >= 0 && RN(this, SN, "f").splice(t, 1) + } + isCommunityTracksEmpty() { + return 0 == RN(this, xN, "f").length + } + isCustomTracksEmpty() { + return 0 == RN(this, kN, "f").length + } + forEachTrack(e) { + this.forEachOfficialTrack(e), this.forEachCommunityTrack(e), this.forEachCustomTrack(e) + } + forEachOfficialTrack(e) { + for (const t of RN(this, bN, "f")) e(t.id, t.trackMetadata, t.trackData, t.thumbnail) + } + forEachCommunityTrack(e) { + for (const t of RN(this, xN, "f")) e(t.id, t.trackMetadata, t.trackData, t.thumbnail) + } + forEachCustomTrack(e) { + for (const t of RN(this, kN, "f")) e(t.id, t.trackMetadata, t.trackData, t.thumbnail) + } + getRandomOfficialTrackData() { + return RN(this, bN, "f")[Math.floor(Math.random() * RN(this, bN, "f").length)].trackData + } + isOfficialTrack(e) { + return RN(this, bN, "f").some((t => t.id == e)) + } + isCommunityTrack(e) { + return RN(this, xN, "f").some((t => t.id == e)) + } + }, + DN = new WeakMap; + class NN extends uo { + constructor(e) { + super(e), this.decoderPath = "", this.decoderConfig = {}, this.decoderBinary = null, this.decoderPending = null, this.workerLimit = 4, this.workerPool = [], this.workerNextTaskID = 1, this.workerSourceURL = "", this.defaultAttributeIDs = { + position: "POSITION", + normal: "NORMAL", + color: "COLOR", + uv: "TEX_COORD" + }, this.defaultAttributeTypes = { + position: "Float32Array", + normal: "Float32Array", + color: "Float32Array", + uv: "Float32Array" + } + } + setDecoderPath(e) { + return this.decoderPath = e, this + } + setDecoderConfig(e) { + return this.decoderConfig = e, this + } + setWorkerLimit(e) { + return this.workerLimit = e, this + } + load(e, t, n, i) { + const r = new mo(this.manager); + r.setPath(this.path), r.setResponseType("arraybuffer"), r.setRequestHeader(this.requestHeader), r.setWithCredentials(this.withCredentials), r.load(e, (e => { + this.parse(e, t, i) + }), n, i) + } + parse(e, t, n = () => {}) { + this.decodeDracoFile(e, t, null, null, gt, n).catch(n) + } + decodeDracoFile(e, t, n, i, r = vt, a = () => {}) { + const s = { + attributeIDs: n || this.defaultAttributeIDs, + attributeTypes: i || this.defaultAttributeTypes, + useUniqueIDs: !!n, + vertexColorSpace: r + }; + return this.decodeGeometry(e, s).then(t).catch(a) + } + decodeGeometry(e, t) { + const n = JSON.stringify(t); + if (DN.has(e)) { + const t = DN.get(e); + if (t.key === n) return t.promise; + if (0 === e.byteLength) throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.") + } + let i; + const r = this.workerNextTaskID++, + a = e.byteLength, + s = this._getWorker(r, a).then((n => (i = n, new Promise(((n, a) => { + i._callbacks[r] = { + resolve: n, + reject: a + }, i.postMessage({ + type: "decode", + id: r, + taskConfig: t, + buffer: e + }, [e]) + }))))).then((e => this._createGeometry(e.geometry))); + return s.catch((() => !0)).then((() => { + i && r && this._releaseTask(i, r) + })), DN.set(e, { + key: n, + promise: s + }), s + } + _createGeometry(e) { + const t = new sr; + e.index && t.setIndex(new qi(e.index.array, 1)); + for (let n = 0; n < e.attributes.length; n++) { + const i = e.attributes[n], + r = i.name, + a = i.array, + s = i.itemSize, + o = new qi(a, s); + "color" === r && (this._assignVertexColorSpace(o, i.vertexColorSpace), o.normalized = a instanceof Float32Array == !1), t.setAttribute(r, o) + } + return t + } + _assignVertexColorSpace(e, t) { + if (t !== gt) return; + const n = new Wi; + for (let t = 0, i = e.count; t < i; t++) n.fromBufferAttribute(e, t), nn.toWorkingColorSpace(n, gt), e.setXYZ(t, n.r, n.g, n.b) + } + _loadLibrary(e, t) { + const n = new mo(this.manager); + return n.setPath(this.decoderPath), n.setResponseType(t), n.setWithCredentials(this.withCredentials), new Promise(((t, i) => { + n.load(e, t, void 0, i) + })) + } + preload() { + return this._initDecoder(), this + } + _initDecoder() { + if (this.decoderPending) return this.decoderPending; + const e = "object" != typeof WebAssembly || "js" === this.decoderConfig.type, + t = []; + return e ? t.push(this._loadLibrary("draco_decoder.js", "text")) : (t.push(this._loadLibrary("draco_wasm_wrapper.js", "text")), t.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"))), this.decoderPending = Promise.all(t).then((t => { + const n = t[0]; + e || (this.decoderConfig.wasmBinary = t[1]); + const i = BN.toString(), + r = ["/* draco decoder */", n, "", "/* worker */", i.substring(i.indexOf("{") + 1, i.lastIndexOf("}"))].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([r])) + })), this.decoderPending + } + _getWorker(e, t) { + return this._initDecoder().then((() => { + if (this.workerPool.length < this.workerLimit) { + const e = new Worker(this.workerSourceURL); + e._callbacks = {}, e._taskCosts = {}, e._taskLoad = 0, e.postMessage({ + type: "init", + decoderConfig: this.decoderConfig + }), e.onmessage = function(t) { + const n = t.data; + switch (n.type) { + case "decode": + e._callbacks[n.id].resolve(n); + break; + case "error": + e._callbacks[n.id].reject(n); + break; + default: + console.error('THREE.DRACOLoader: Unexpected message, "' + n.type + '"') + } + }, this.workerPool.push(e) + } else this.workerPool.sort((function(e, t) { + return e._taskLoad > t._taskLoad ? -1 : 1 + })); + const n = this.workerPool[this.workerPool.length - 1]; + return n._taskCosts[e] = t, n._taskLoad += t, n + })) + } + _releaseTask(e, t) { + e._taskLoad -= e._taskCosts[t], delete e._callbacks[t], delete e._taskCosts[t] + } + debug() { + console.log("Task load: ", this.workerPool.map((e => e._taskLoad))) + } + dispose() { + for (let e = 0; e < this.workerPool.length; ++e) this.workerPool[e].terminate(); + return this.workerPool.length = 0, "" !== this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL), this + } + } + + function BN() { + let e, t; + + function n(e, t, n, i, r, a) { + const s = a.num_components(), + o = n.num_points() * s, + l = o * r.BYTES_PER_ELEMENT, + c = function(e, t) { + switch (t) { + case Float32Array: + return e.DT_FLOAT32; + case Int8Array: + return e.DT_INT8; + case Int16Array: + return e.DT_INT16; + case Int32Array: + return e.DT_INT32; + case Uint8Array: + return e.DT_UINT8; + case Uint16Array: + return e.DT_UINT16; + case Uint32Array: + return e.DT_UINT32 + } + }(e, r), + h = e._malloc(l); + t.GetAttributeDataArrayForAllPoints(n, a, c, l, h); + const d = new r(e.HEAPF32.buffer, h, o).slice(); + return e._free(h), { + name: i, + array: d, + itemSize: s + } + } + onmessage = function(i) { + const r = i.data; + switch (r.type) { + case "init": + e = r.decoderConfig, t = new Promise((function(t) { + e.onModuleLoaded = function(e) { + t({ + draco: e + }) + }, DracoDecoderModule(e) + })); + break; + case "decode": + const i = r.buffer, + a = r.taskConfig; + t.then((e => { + const t = e.draco, + s = new t.Decoder; + try { + const e = function(e, t, i, r) { + const a = r.attributeIDs, + s = r.attributeTypes; + let o, l; + const c = t.GetEncodedGeometryType(i); + if (c === e.TRIANGULAR_MESH) o = new e.Mesh, l = t.DecodeArrayToMesh(i, i.byteLength, o); + else { + if (c !== e.POINT_CLOUD) throw new Error("THREE.DRACOLoader: Unexpected geometry type."); + o = new e.PointCloud, l = t.DecodeArrayToPointCloud(i, i.byteLength, o) + } + if (!l.ok() || 0 === o.ptr) throw new Error("THREE.DRACOLoader: Decoding failed: " + l.error_msg()); + const h = { + index: null, + attributes: [] + }; + for (const i in a) { + const l = self[s[i]]; + let c, d; + if (r.useUniqueIDs) d = a[i], c = t.GetAttributeByUniqueId(o, d); + else { + if (d = t.GetAttributeId(o, e[a[i]]), -1 === d) continue; + c = t.GetAttribute(o, d) + } + const u = n(e, t, o, i, l, c); + "color" === i && (u.vertexColorSpace = r.vertexColorSpace), h.attributes.push(u) + } + c === e.TRIANGULAR_MESH && (h.index = function(e, t, n) { + const i = n.num_faces(), + r = 3 * i, + a = 4 * r, + s = e._malloc(a); + t.GetTrianglesUInt32Array(n, a, s); + const o = new Uint32Array(e.HEAPF32.buffer, s, r).slice(); + return e._free(s), { + array: o, + itemSize: 1 + } + }(e, t, o)); + return e.destroy(o), h + }(t, s, new Int8Array(i), a), + o = e.attributes.map((e => e.array.buffer)); + e.index && o.push(e.index.array.buffer), self.postMessage({ + type: "decode", + id: r.id, + geometry: e + }, o) + } catch (e) { + console.error(e), self.postMessage({ + type: "error", + id: r.id, + error: e.message + }) + } finally { + t.destroy(s) + } + })) + } + } + } + var UN, zN, ON, FN, WN, VN = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }, + HN = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class GN { + constructor() { + UN.add(this), zN.set(this, new Map), ON.set(this, new Map) + } + init(e) { + return VN(this, void 0, void 0, (function*() { + const t = new vl, + n = new NN; + n.setDecoderPath("lib/draco/"), t.setDRACOLoader(n); + const i = (r = ["models/blocks.glb", "models/pillar.glb", "models/planes.glb", "models/road.glb", "models/road_wide.glb", "models/signs.glb", "models/wall_track.glb"], Promise.all(r.map((e => { + return n = e, new Promise((e => { + t.load(n, (t => { + e(t) + })) + })); + var n + })))); + var r; + const a = new Fs({ + vertexColors: !0 + }), + s = t => VN(this, void 0, void 0, (function*() { + var n, r, s; + if (e.addResource(), HN(this, zN, "f").has(t.id)) throw new Error("Track part types have same Id"); + const o = { + configuration: t, + colors: new Map(t.colors.map((({ + id: e + }) => [e, null]))), + physicsShapeVertices: null + }; + HN(this, zN, "f").set(t.id, o); + const l = yield i; + + function c(e, t, n, i, r, a) { + const s = l.find((t => t.scene.name == e)); + if (null == s) throw new Error('Scene "' + e + '" does not exist'); + const o = s.scene.getObjectByName(t); + if (null == o) throw new Error('Mesh "' + t + '" does not exist in scene "' + e + '"'); + let c; + if (0 == o.children.length) { + const e = o, + t = h(e, a); + e.updateMatrixWorld(!0), t.applyMatrix4(e.matrix), c = [t] + } else { + c = o.children.map((e => h(e, a))), o.updateMatrixWorld(!0); + for (const e of c) e.applyMatrix4(o.matrix) + } + let d = -1 / 0; + if (i) + for (const e of c) + for (let t = 0; t < e.attributes.position.array.length; t += 3) d = Math.max(d, e.attributes.position.array[t + 1]); + for (const e of c) { + if (e.applyMatrix4((new qn).makeScale(n ? -1 : 1, i ? -1 : 1, r ? -1 : 1)), n || i || r) { + const t = e.index; + if (null != t) + for (let e = 0; e < t.count; e += 3) { + const n = t.getX(e), + i = t.getX(e + 1), + r = t.getX(e + 2); + t.setXYZ(e, n, r, i) + } else { + const t = e.attributes.position; + for (let e = 0; e < t.count; e += 3) { + const n = e, + i = e + 1, + r = e + 2, + a = t.getX(n), + s = t.getY(n), + o = t.getZ(n), + l = t.getX(i), + c = t.getY(i), + h = t.getZ(i), + d = t.getX(r), + u = t.getY(r), + p = t.getZ(r); + t.setXYZ(n, a, s, o), t.setXYZ(i, d, u, p), t.setXYZ(r, l, c, h) + } + } + } + i && e.translate(0, d, 0) + } + return c + } + + function h(e, t) { + const n = e.material; + if (!(n instanceof zs)) throw new Error("Material is not a MeshStandardMaterial"); + let i, r, a; + if (Object.prototype.hasOwnProperty.call(t, n.name)) { + const e = new Wi(t[n.name]); + i = e.r, r = e.g, a = e.b + } else i = n.color.r, r = n.color.g, a = n.color.b; + const s = e.geometry.clone(), + o = new Float32Array(s.attributes.position.array.length); + for (let e = 0; e < o.length; e += 3) o[e + 0] = i, o[e + 1] = r, o[e + 2] = a; + return s.attributes.color = new qi(o, 3), s + } + let d = null; + for (const e of t.colors) { + const i = []; + for (const [a, o, l] of t.models) { + const t = c(a, o, null !== (n = null == l ? void 0 : l.flipX) && void 0 !== n && n, null !== (r = null == l ? void 0 : l.flipY) && void 0 !== r && r, null !== (s = null == l ? void 0 : l.flipZ) && void 0 !== s && s, e.colors); + for (const e of t) i.push(e) + } + const l = pl(i, !0).toNonIndexed(); + l.computeVertexNormals(); + const h = ml(l), + u = new wr(h, a); + o.colors.set(e.id, u), null != d || (d = l) + } + if (null == d) throw new Error("Physics geometry is missing"); + if (!(d.attributes.position instanceof qi)) throw new Error("Vertices must use BufferAttribute"); + o.physicsShapeVertices = new Float32Array(d.attributes.position.array), e.loadedResource() + })), + o = yield Promise.all(ab.map((e => s(e)))).then((() => VN(this, void 0, void 0, (function*() { + return yield HN(this, UN, "m", WN).call(this) + })))), l = (e, t, n = null) => { + let i = HN(this, ON, "f").get(e); + null == i && (i = new Map, HN(this, ON, "f").set(e, i)), null == n && (n = (e, t) => e.x == t.x && e.y == t.y && e.z == t.z && e.rotation == t.rotation && e.rotationAxis == t.rotationAxis), i.set(t, n) + }; + l(eA.BlockSlopeUp, eA.SlopeUp), l(eA.BlockSlopeUp, eA.SlopeUpLeftWide), l(eA.BlockSlopeUp, eA.SlopeUpRightWide), l(eA.BlockSlopeUp, eA.PlaneSlopeUp), l(eA.BlockSlopedUp, eA.Slope), l(eA.BlockSlopedUp, eA.SlopeLeftWide), l(eA.BlockSlopedUp, eA.SlopeRightWide), l(eA.BlockSlopedUp, eA.PlaneSlope), l(eA.BlockSlopeDown, eA.SlopeDown), l(eA.BlockSlopeDown, eA.SlopeDownLeftWide), l(eA.BlockSlopeDown, eA.SlopeDownRightWide), l(eA.BlockSlopeDown, eA.PlaneSlopeDown), l(eA.BlockSlopeDownLong, eA.SlopeDownLong), l(eA.BlockSlopeDownLong, eA.SlopeDownLongLeftWide), l(eA.BlockSlopeDownLong, eA.SlopeDownLongRightWide), l(eA.BlockSlopeDownLong, eA.PlaneSlopeDownLong), l(eA.BlockSlopeUpLong, eA.SlopeUpLong), l(eA.BlockSlopeUpLong, eA.SlopeUpLongLeftWide), l(eA.BlockSlopeUpLong, eA.SlopeUpLongRightWide), l(eA.BlockSlopeUpLong, eA.PlaneSlopeUpLong), l(eA.BlockSlopeVerticalTop, eA.WallTrackTop), l(eA.BlockSlopeVerticalInnerCornerTop, eA.WallTrackTopInnerCorner), l(eA.BlockSlopeVerticalInnerCornerBottom, eA.WallTrackBottomInnerCorner), l(eA.BlockInnerCorner, eA.WallTrackMiddleCorner); + const c = (e, t) => e.x == t.x && e.y == t.y && e.z == t.z && e.rotation == t.rotation && e.rotationAxis == t.rotationAxis || e.x == t.x && e.y == t.y + 3 && e.z == t.z && e.rotation == t.rotation && (e.rotationAxis == nA.YPositive && t.rotationAxis == nA.YNegative || e.rotationAxis == nA.YNegative && t.rotationAxis == nA.YPositive || e.rotationAxis == nA.XPositive && t.rotationAxis == nA.XNegative || e.rotationAxis == nA.XNegative && t.rotationAxis == nA.XPositive || e.rotationAxis == nA.ZPositive && t.rotationAxis == nA.ZNegative || e.rotationAxis == nA.ZNegative && t.rotationAxis == nA.ZPositive); + return l(eA.BlockSlopeVerticalBottom, eA.PlaneSlopeVerticalBottom, c), l(eA.BlockSlopeVerticalBottom, eA.WallTrackBottom, c), l(eA.BlockSlopeVerticalBottom, eA.SlopeUpVertical, c), l(eA.BlockSlopeVerticalBottom, eA.SlopeUpVerticalLeftWide, c), l(eA.BlockSlopeVerticalBottom, eA.SlopeUpVerticalRightWide, c), l(eA.BlockSlopeVerticalCornerBottom, eA.WallTrackBottomCorner), l(eA.BlockSlopeVerticalCornerTop, eA.WallTrackTopCorner), l(eA.BlockSlopeToVertical, eA.PlaneSlopeToVertical), l(eA.BlockSlopeToVertical, eA.WallTrackSlopeToVertical), l(eA.HalfBlock, eA.HalfBlock, ((e, t) => e.rotation == (t.rotation + 2) % 4 && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.HalfBlock, eA.HalfPlane, ((e, t) => e.rotation == (t.rotation + 2) % 4 && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.HalfBlock, eA.QuarterBlock, ((e, t) => e.rotation != t.rotation && (e.rotation + 1) % 4 != t.rotation && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.HalfBlock, eA.QuarterPlane, ((e, t) => e.rotation != t.rotation && (e.rotation + 1) % 4 != t.rotation && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.QuarterBlock, eA.QuarterBlock, ((e, t) => e.rotation != t.rotation && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.QuarterBlock, eA.HalfPlane, ((e, t) => e.rotation != t.rotation && e.rotation != (t.rotation + 1) % 4 && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.QuarterBlock, eA.QuarterPlane, ((e, t) => e.rotation != t.rotation && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.HalfPlane, eA.HalfPlane, ((e, t) => e.rotation == (t.rotation + 2) % 4 && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.HalfPlane, eA.QuarterPlane, ((e, t) => e.rotation != t.rotation && (e.rotation + 1) % 4 != t.rotation && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.QuarterPlane, eA.QuarterPlane, ((e, t) => e.rotation != t.rotation && e.x == t.x && e.y == t.y && e.z == t.z && e.rotationAxis == t.rotationAxis)), l(eA.WallTrackTopInnerCorner, eA.WallTrackCeilingCorner, ((e, t) => { + let n; + switch (e.rotationAxis) { + case nA.YPositive: + n = new yn(0, 1, 0); + break; + case nA.YNegative: + n = new yn(0, -1, 0); + break; + case nA.XPositive: + n = new yn(1, 0, 0); + break; + case nA.XNegative: + n = new yn(-1, 0, 0); + break; + case nA.ZPositive: + n = new yn(0, 0, 1); + break; + case nA.ZNegative: + n = new yn(0, 0, -1); + break; + default: + throw new Error("Invalid rotation axis") + } + return e.rotation == t.rotation && e.x + 3 * n.x == t.x && e.y + 3 * n.y == t.y && e.z + 3 * n.z == t.z && e.rotationAxis == t.rotationAxis + })), l(eA.WallTrackTopInnerCorner, eA.WallTrackCeilingPlaneCorner, ((e, t) => { + let n; + switch (e.rotationAxis) { + case nA.YPositive: + n = new yn(0, 1, 0); + break; + case nA.YNegative: + n = new yn(0, -1, 0); + break; + case nA.XPositive: + n = new yn(1, 0, 0); + break; + case nA.XNegative: + n = new yn(-1, 0, 0); + break; + case nA.ZPositive: + n = new yn(0, 0, 1); + break; + case nA.ZNegative: + n = new yn(0, 0, -1); + break; + default: + throw new Error("Invalid rotation axis") + } + return e.rotation == t.rotation && e.x + 3 * n.x == t.x && e.y + 3 * n.y == t.y && e.z + 3 * n.z == t.z && e.rotationAxis == t.rotationAxis + })), l(eA.WallTrackBottomInnerCorner, eA.WallTrackFloorCorner), l(eA.WallTrackBottomInnerCorner, eA.WallTrackFloorPlaneCorner), o + })) + } + isPartCombinationAllowed(e, t) { + const n = HN(this, UN, "m", FN).call(this, e.id, t.id); + if (null == n ? void 0 : n(e, t)) return !0; + const i = HN(this, UN, "m", FN).call(this, t.id, e.id); + return !!(null == i ? void 0 : i(t, e)) + } + getPhysicsParts() { + var e, t; + const n = []; + for (const { + configuration: i, + physicsShapeVertices: r + } + of HN(this, zN, "f").values()) { + if (null == r) throw new Error("Part model has not been loaded yet"); + n.push({ + id: i.id, + vertices: r, + detector: i.detector, + startOffset: null !== (t = null === (e = i.startOffset) || void 0 === e ? void 0 : e.toArray()) && void 0 !== t ? t : null + }) + } + return n + } + hasPart(e) { + return HN(this, zN, "f").has(e) + } + getPart(e) { + const t = HN(this, zN, "f").get(e); + if (null == t) throw new Error('Track part with the id "' + e.toString() + '" does not exist'); + return t + } + getAllParts() { + return Array.from(HN(this, zN, "f").values()) + } + getPartStartOffset(e) { + var t, n; + const i = HN(this, zN, "f").get(e); + if (null == i) throw new Error('Track part with the id "' + e.toString() + '" does not exist'); + return null !== (n = null === (t = i.configuration.startOffset) || void 0 === t ? void 0 : t.clone()) && void 0 !== n ? n : null + } + getPartTypesWithDetector(e) { + const t = []; + for (const [n, i] of HN(this, zN, "f").entries()) null != i.configuration.detector && i.configuration.detector.type == e && t.push(n); + return t + } + getStartPartTypes() { + const e = []; + for (const [t, n] of HN(this, zN, "f").entries()) null != n.configuration.startOffset && e.push(t); + return e + } + getCategoryMesh(e, t) { + let n, i; + switch (e) { + case KA.Special: + n = this.getPart(eA.Start); + break; + case KA.Road: + n = this.getPart(eA.Straight); + break; + case KA.RoadTurns: + n = this.getPart(eA.TurnShort); + break; + case KA.RoadWide: + n = this.getPart(eA.OuterCornerWide); + break; + case KA.Plane: + n = this.getPart(eA.Plane); + break; + case KA.Block: + n = this.getPart(eA.Block); + break; + case KA.WallTrack: + n = this.getPart(eA.WallTrackBottom); + break; + case KA.Pillar: + n = this.getPart(eA.PillarShort); + break; + case KA.Sign: + n = this.getPart(eA.SignArrowLeft) + } + switch (t) { + case QA.Summer: + i = Jy.Summer; + break; + case QA.Winter: + i = Jy.Winter; + break; + case QA.Desert: + i = Jy.Desert + } + const r = n.colors.get(i); + if (null == r) throw new Error("Category mesh is not loaded"); + return r + } + } + zN = new WeakMap, ON = new WeakMap, UN = new WeakSet, FN = function(e, t) { + var n; + const i = HN(this, ON, "f").get(e); + return null == i ? null : null !== (n = i.get(t)) && void 0 !== n ? n : null + }, WN = function() { + return VN(this, void 0, void 0, (function*() { + const e = Object.values(eA).filter((e => "string" != typeof e)); + let t = !0; + for (const n of e) { + const e = HN(this, zN, "f").get(n); + if (null == e) throw new Error("Part with id " + n.toString() + " does not exist"); + const i = e.physicsShapeVertices; + if (null == i) throw new Error("Part model with id " + n.toString() + " has not been loaded yet"); + const r = yield window.crypto.subtle.digest("SHA-256", i), a = Array.from(new Uint8Array(r)).map((e => e.toString(16).padStart(2, "0"))).join(""); + a != e.configuration.checksum && (console.error("Part id " + n.toString() + " " + eA[n] + " checksum mismatch: " + a + " != " + e.configuration.checksum), t = !1) + } + return t + })) + }; + var jN = n(9207), + QN = {}; + QN.styleTagTransform = u(), QN.setAttributes = l(), QN.insert = s().bind(null, "head"), QN.domAPI = r(), QN.insertStyleElement = h(); + t()(jN.A, QN); + jN.A && jN.A.locals && jN.A.locals; + var YN, KN, qN = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }, + XN = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }; + YN = new WeakMap, KN = new WeakMap; + const ZN = class { + constructor() { + YN.set(this, document.getElementById("transition-layer")), KN.set(this, null) + } + trigger(e) { + const t = qN(this, YN, "f"); + if (null == t) throw new Error("Failed to find transition layer"); + null == qN(this, KN, "f") && (t.style.opacity = "1", setTimeout((() => { + if (null != qN(this, KN, "f")) { + const e = qN(this, KN, "f").call(this); + null == e ? (t.style.opacity = "0", XN(this, KN, null, "f")) : e.catch((e => { + console.error(e) + })).finally((() => { + t.style.opacity = "0", XN(this, KN, null, "f") + })) + } + }), 250)), XN(this, KN, e, "f") + } + }; + var JN, $N, eB, tB, nB = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + iB = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + JN = new WeakMap, $N = new WeakMap, eB = new WeakMap, tB = new WeakMap; + const rB = class { + constructor(e, t, n) { + JN.set(this, void 0), $N.set(this, void 0), eB.set(this, new jt(100 * Math.random(), 100 * Math.random())), tB.set(this, new jt(100 * Math.random(), 100 * Math.random())), nB(this, JN, t, "f"), n.addResource(); + const i = (new vo).load("images/clouds.jpg", (() => { + n.loadedResource() + })); + i.wrapT = re, i.wrapS = re; + const r = new Us(1e6, 5, 2, 0, 2 * Math.PI, 0, Math.PI), + a = new Sr({ + defines: { + CLOUDS_ENABLED: t.getSettingBoolean($o.CloudsEnabled) + }, + uniforms: { + scrollA: { + value: iB(this, eB, "f") + }, + scrollB: { + value: iB(this, tB, "f") + }, + sampler: { + value: i + }, + cloudDensity: { + value: .6 + }, + cloudLight: { + value: new yn(.75, .75, .75) + }, + sunPosition: { + value: new yn + } + }, + vertexShader: "\n\t\t\t\tvarying vec3 fPos;\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewPosition;\n\t\t\t\t\tgl_Position.z = 0.0;\n\t\t\t\t\tfPos = position;\n\t\t\t\t}\n\t\t\t", + fragmentShader: "\n\t\t\t\tvarying vec3 fPos;\n\n\t\t\t\tuniform vec2 offset;\n\t\t\t\tuniform vec2 scrollA;\n\t\t\t\tuniform vec2 scrollB;\n\t\t\t\tuniform sampler2D sampler;\n\n\t\t\t\tuniform float cloudDensity;\n\t\t\t\tuniform vec3 cloudLight;\n\n\t\t\t\tuniform vec3 sunPosition;\n\n\t\t\t\tvoid main()\n\t\t\t\t{\n\t\t\t\t\t#ifdef CLOUDS_ENABLED\n\t\t\t\t\t\tfloat c00 = texture2D(sampler, vec2(fPos.x / ((fPos.y + 0.06) / 0.1) - scrollB.x * 0.981, fPos.z / ((fPos.y + 0.06) / 0.1) - scrollB.y * 1.041) + scrollA).r;\n\t\t\t\t\t\tfloat c10 = texture2D(sampler, vec2(fPos.x / ((fPos.y + 0.06) / 0.1) + scrollB.x * 0.821, fPos.z / ((fPos.y + 0.06) / 0.1) - scrollB.y * 0.951) + scrollA).r;\n\t\t\t\t\t\tfloat c01 = texture2D(sampler, vec2(fPos.x / ((fPos.y + 0.06) / 0.1) - scrollB.x * 1.043, fPos.z / ((fPos.y + 0.06) / 0.1) + scrollB.y * 0.899) + scrollA).r;\n\t\t\t\t\t\tfloat c11 = texture2D(sampler, vec2(fPos.x / ((fPos.y + 0.06) / 0.1) + scrollB.x * 0.901, fPos.z / ((fPos.y + 0.06) / 0.1) + scrollB.y * 1.045) + scrollA).r;\n\t\t\t\t\t\tfloat cloud = min(1.0, max(0.0, (c00 + c10 + c01 + c11) / 4.0 - (1.0 - cloudDensity)) * 3.0);\n\n\t\t\t\t\t\tvec3 cloudColor = vec3(min(1.0, (c00 + c10 + c01 + c11) / 4.0 - (1.0 - cloudDensity)) * 4.0 + cloudDensity) * cloudLight;\n\t\t\t\t\t\tfloat cloudIntensity = cloud * min(1.0, max(0.0, fPos.y * 2.0 / 1000000.0));\n\t\t\t\t\t#else\n\t\t\t\t\t\tvec3 cloudColor = vec3(0.0);\n\t\t\t\t\t\tfloat cloudIntensity = 0.0;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\tvec3 horizonColor = vec3(255.0 / 255.0, 255.0 / 255.0, 255.0 / 255.0);\n\t\t\t\t\tvec3 zenithColor = vec3(5.0 / 255.0, 140.0 / 255.0, 255.0 / 255.0);\n\t\t\t\t\tfloat h = pow(clamp(fPos.y / 1000000.0, 0.01, 1.0), 0.2);\n\t\t\t\t\tvec3 skyColor = zenithColor * h + horizonColor * (1.0 - h);\n\n\t\t\t\t\tvec3 normal = normalize(-fPos);\n\t\t\t\t\tfloat sun = pow(max(0.0, max(0.0, dot(normal, sunPosition)) - 0.999), 4.0) * 60000000000.0;\n\t\t\t\t\tvec3 sunColor = vec3(20.0 * sun, 20.0 * sun, 19.0 * sun);\n\n\t\t\t\t\tgl_FragColor = vec4((skyColor * (1.0 - cloudIntensity) + cloudColor * cloudIntensity) * max(vec3(0.0), vec3(1.0) - sunColor) + sunColor, 1.0);\n\t\t\t\t}\n\t\t\t" + }); + a.side = 1, a.depthWrite = !1, nB(this, $N, new wr(r, a), "f"), iB(this, $N, "f").renderOrder = -3, iB(this, $N, "f").matrixAutoUpdate = !1, iB(this, $N, "f").updateMatrix(), e.scene.add(iB(this, $N, "f")) + } + update(e, t, n) { + iB(this, JN, "f").getSettingBoolean($o.CloudsEnabled) ? (iB(this, eB, "f").x += .00226 * e, iB(this, eB, "f").y += .001646 * e, iB(this, tB, "f").x += .001752 * e, iB(this, tB, "f").y += .001057 * e, 1 != iB(this, $N, "f").material.defines.CLOUDS_ENABLED && (iB(this, $N, "f").material.defines.CLOUDS_ENABLED = !0, iB(this, $N, "f").material.needsUpdate = !0)) : 0 != iB(this, $N, "f").material.defines.CLOUDS_ENABLED && (iB(this, $N, "f").material.defines.CLOUDS_ENABLED = !1, iB(this, $N, "f").material.needsUpdate = !0); + const i = n.getSunPosition(); + iB(this, $N, "f").material.uniforms.sunPosition.value.copy(i.negate()), iB(this, $N, "f").position.copy(t.position), iB(this, $N, "f").updateMatrix() + } + }; + var aB, sB, oB, lB, cB, hB, dB, uB, pB, fB, mB, gB, vB, wB, yB, AB, bB, xB, kB, EB, SB = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + MB = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class TB { + constructor(e) { + aB.add(this), oB.set(this, void 0), SB(this, oB, null == e ? { + getItem: e => window.localStorage.getItem(e), + setItem: (e, t) => { + window.localStorage.setItem(e, t) + }, + removeItem: e => { + window.localStorage.removeItem(e) + }, + getAllKeys: () => Object.keys(window.localStorage) + } : e, "f") + } + migrate() { + const e = MB(this, aB, "m", vB).call(this); + "v4" == e || ("v3" == e ? (MB(this, aB, "m", uB).call(this), MB(this, aB, "m", gB).call(this)) : (MB(this, aB, "m", cB).call(this), MB(this, aB, "m", hB).call(this), MB(this, aB, "m", dB).call(this), MB(this, aB, "m", uB).call(this), MB(this, aB, "m", gB).call(this))) + } + saveRecord(e, t, n, i, r, a, s) { + if (!Number.isSafeInteger(e) || e < 0) throw new Error("Profile slot is invalid"); + try { + let o; + o = s == VI.Ok ? MB(sB, sB, "f", wB) + e.toString() + "_default_" + n : MB(sB, sB, "f", wB) + e.toString() + "_undeterministic_" + n, MB(this, oB, "f").setItem(o, JSON.stringify({ + uploadId: i, + tokenHash: t, + frames: r.numberOfFrames.toString(), + recording: a.serialize() + })) + } catch (e) { + console.error(e) + } + } + loadRecord(e, t, n, i) { + if (!Number.isSafeInteger(e) || e < 0) throw new Error("Profile slot is invalid"); + try { + let r; + r = i == VI.Ok ? MB(sB, sB, "f", wB) + e.toString() + "_default_" + n : MB(sB, sB, "f", wB) + e.toString() + "_undeterministic_" + n; + const a = MB(this, oB, "f").getItem(r); + if (null == a) return null; + const s = JSON.parse(a); + if ("object" != typeof s) return null; + if (!("uploadId" in s)) return null; + let o; + if (null == s.uploadId) o = null; + else if (o = Number.parseInt(s.uploadId, 10), !Number.isSafeInteger(o)) return null; + if (!("tokenHash" in s)) return null; + const l = s.tokenHash; + if ("string" != typeof l) return null; + if (l != t) return null; + if (!("frames" in s)) return null; + const c = Number.parseInt(s.frames, 10); + if (!Number.isSafeInteger(c)) return null; + const h = new xp(c); + if (!("recording" in s)) return null; + const d = cv.deserialize(s.recording); + return null == d ? null : { + uploadId: o, + time: h, + recording: d + } + } catch (e) { + console.error(e) + } + return null + } + deleteAllRecords(e) { + if (!Number.isSafeInteger(e) || e < 0) throw new Error("Profile slot is invalid"); + try { + const t = MB(this, oB, "f").getAllKeys(); + for (const n of t) n.startsWith(MB(sB, sB, "f", wB) + e.toString() + "_") && MB(this, oB, "f").removeItem(n) + } catch (e) { + console.error(e) + } + } + deleteAllRecordsForTrack(e) { + for (let t = 0; t < 3; t++) try { + MB(this, oB, "f").removeItem(MB(sB, sB, "f", wB) + t.toString() + "_" + e) + } catch (e) { + console.error(e) + } + } + saveCustomTrack(e, t, n) { + const i = t.toExportString(e); + try { + return MB(this, oB, "f").setItem(MB(sB, sB, "f", yB) + e.name, JSON.stringify({ + data: i, + saveTime: n.getTime() + })), !0 + } catch (e) { + return console.error(e), !1 + } + } + loadCustomTrack(e) { + let t, n; + try { + const i = MB(this, oB, "f").getItem(MB(sB, sB, "f", yB) + e); + if (null == i) return null; + const r = JSON.parse(i); + if ("string" != typeof r.data) return null; + if ("number" != typeof r.saveTime) return null; + t = r.data, n = r.saveTime + } catch (e) { + return console.error(e), null + } + const i = Sb.fromExportString(t); + return null == i ? null : { + trackMetadata: i.trackMetadata, + trackData: i.trackData, + saveTime: n + } + } + deleteCustomTrack(e) { + try { + return MB(this, oB, "f").removeItem(MB(sB, sB, "f", yB) + e), !0 + } catch (e) { + return console.error(e), !1 + } + } + getAllCustomTrackNames() { + let e; + try { + e = MB(this, oB, "f").getAllKeys() + } catch (e) { + return console.error(e), null + } + return e.filter((e => e.startsWith(MB(sB, sB, "f", yB)))).map((e => e.substring(MB(sB, sB, "f", yB).length))) + } + saveUserProfileSlot(e) { + if (!Number.isSafeInteger(e) || e < 0) throw new Error("Profile slot is invalid"); + try { + MB(this, oB, "f").setItem(MB(sB, sB, "f", AB), JSON.stringify(e)) + } catch (e) { + console.error(e) + } + } + loadUserProfileSlot() { + try { + const e = MB(this, oB, "f").getItem(MB(sB, sB, "f", AB)); + if (null != e) try { + const t = JSON.parse(e); + if (!Number.isSafeInteger(t) || t < 0) throw new Error("Profile slot is invalid"); + return t + } catch (e) { + console.error(e) + } + } catch (e) { + console.error(e) + } + return null + } + saveUserProfile(e, t, n, i) { + if (!Number.isSafeInteger(e) || e < 0) throw new Error("Profile slot is invalid"); + try { + MB(this, oB, "f").setItem(MB(sB, sB, "f", bB) + e.toString(), JSON.stringify({ + token: t, + nickname: n, + carColors: i.serialize() + })) + } catch (e) { + console.error(e) + } + } + loadUserProfile(e) { + if (!Number.isSafeInteger(e) || e < 0) throw new Error("Profile slot is invalid"); + try { + const t = MB(this, oB, "f").getItem(MB(sB, sB, "f", bB) + e.toString()); + if (null != t) { + const e = JSON.parse(t); + if ("object" != typeof e) throw new Error("User profile is not an object"); + if ("string" != typeof e.token) throw new Error("User profile token field has invalid type"); + if ("string" != typeof e.nickname) throw new Error("User profile nickname field has invalid type"); + if ("string" != typeof e.carColors) throw new Error("User profile carColors field has invalid type"); + return { + token: e.token, + nickname: e.nickname, + carColors: Pu.deserialize(e.carColors) + } + } + } catch (e) { + console.error(e) + } + return null + } + deleteUserProfile(e) { + try { + MB(this, oB, "f").removeItem(MB(sB, sB, "f", bB) + e.toString()) + } catch (e) { + console.error(e) + } + } + saveSettings(e) { + try { + const t = []; + for (const [n, i] of e.entries()) t.push([$o[n], i]); + MB(this, oB, "f").setItem(MB(sB, sB, "f", xB), JSON.stringify(t)) + } catch (e) { + console.error(e) + } + } + loadSettings() { + try { + const e = MB(this, oB, "f").getItem(MB(sB, sB, "f", xB)); + if (null == e) return null; + const t = JSON.parse(e); + if (!Array.isArray(t)) return null; + const n = []; + for (const e of t) { + if (!Array.isArray(e)) continue; + if (2 != e.length) continue; + if ("string" != typeof e[0]) continue; + const t = e[0]; + if (!(t in $o)) continue; + const i = $o[t], + r = e[1]; + "string" == typeof e[1] && n.push([i, r]) + } + return n + } catch (e) { + console.error(e) + } + return null + } + saveKeyBindings(e) { + try { + const t = []; + for (const [n, i] of e.entries()) t.push([Ix[n], i]); + MB(this, oB, "f").setItem(MB(sB, sB, "f", kB), JSON.stringify(t)) + } catch (e) { + console.error(e) + } + } + loadKeyBindings() { + try { + const e = MB(this, oB, "f").getItem(MB(sB, sB, "f", kB)); + if (null == e) return null; + const t = JSON.parse(e); + if (!Array.isArray(t)) return null; + const n = []; + for (const e of t) { + if (!Array.isArray(e)) continue; + if (2 != e.length) continue; + if ("string" != typeof e[0]) continue; + const t = e[0]; + if (!(t in Ix)) continue; + const i = Ix[t], + r = e[1]; + Array.isArray(r) && (2 == r.length && (null !== r[0] && "string" != typeof r[0] || null !== r[1] && "string" != typeof r[1] || n.push([i, r]))) + } + return n + } catch (e) { + console.error(e) + } + return null + } + saveTrackSelectionTab(e) { + try { + MB(this, oB, "f").setItem(MB(sB, sB, "f", EB), e) + } catch (e) { + console.error(e) + } + } + loadTrackSelectionTab() { + try { + const e = MB(this, oB, "f").getItem(MB(sB, sB, "f", EB)); + if ("official" == e || "community" == e || "custom" == e) return e + } catch (e) { + console.error(e) + } + return "official" + } + } + sB = TB, oB = new WeakMap, aB = new WeakSet, cB = function() { + try { + const e = MB(this, oB, "f").getAllKeys(); + try { + const e = MB(this, oB, "f").getItem("car_colors"); + if (null != e) { + const t = JSON.parse(e), + n = new Pu(new Wi(t[0]), new Wi(t[1]), new Wi(t[2]), new Wi(t[3])); + MB(this, aB, "m", fB).call(this, n), MB(this, oB, "f").removeItem("car_colors") + } + } catch (e) { + console.error(e) + } + for (const t of e) { + if (t.startsWith("record_")) try { + MB(this, oB, "f").removeItem(t) + } catch (e) { + console.error(e) + } + if (t.startsWith("custom_track_")) try { + const e = MB(this, oB, "f").getItem(t); + if (null != e) { + const n = db(e); + if (null != n) { + const { + trackMetadata: e, + trackData: i + } = n; + this.saveCustomTrack(e, i, new Date) && MB(this, oB, "f").removeItem(t) + } + } + } catch (e) { + console.error(e) + } + } + } catch (e) { + console.error(e) + } + }, hB = function() { + try { + const e = MB(this, oB, "f").getAllKeys(); + try { + const e = MB(this, oB, "f").getItem("v1_car"); + if (null != e) { + const t = JSON.parse(e), + n = new Pu(new Wi(t[0]), new Wi(t[1]), new Wi(t[2]), new Wi(t[3])); + MB(this, aB, "m", fB).call(this, n), MB(this, oB, "f").removeItem("v1_car") + } + } catch (e) { + console.error(e) + } + for (const t of e) { + if (t.startsWith("v1_record_")) try { + MB(this, oB, "f").removeItem(t) + } catch (e) { + console.error(e) + } + if (t.startsWith("v1_track_")) try { + const e = MB(this, oB, "f").getItem(t); + if (null != e) { + const n = { + name: t.substring(9), + author: null + }, + i = ub(e); + if (null == i) throw new Error("Failed to load v1 track for migration"); + if (!this.saveCustomTrack(n, i, new Date)) throw new Error("Failed to save v1 track for migration"); + MB(this, oB, "f").removeItem(t) + } + } catch (e) { + console.error(e) + } + } + } catch (e) { + console.error(e) + } + }, dB = function() { + try { + const e = MB(this, oB, "f").getAllKeys(); + try { + const e = MB(this, oB, "f").getItem("v2_user"); + if (null != e) { + const t = JSON.parse(e); + if (Array.isArray(t) || "object" != typeof t) throw new Error("User profile is not an object"); + const n = t.token; + if (null != n && "string" != typeof n) throw new Error("User profile token is not a string or null"); + const i = t.nickname; + if ("string" != typeof i) throw new Error("User profile nickname is not a string"); + const r = Pu.random(); + MB(this, aB, "m", pB).call(this, n, i, r), MB(this, oB, "f").removeItem("v2_user") + } + } catch (e) { + console.error(e) + } + try { + const e = MB(this, oB, "f").getItem("v2_car"); + if (null != e) { + const t = Pu.deserialize(e); + MB(this, aB, "m", fB).call(this, t), MB(this, oB, "f").removeItem("v2_car") + } + } catch (e) { + console.error(e) + } + try { + MB(this, oB, "f").removeItem("v2_settings") + } catch (e) { + console.error(e) + } + try { + MB(this, oB, "f").removeItem("v2_key_bindings") + } catch (e) { + console.error(e) + } + for (const t of e) + if (t.startsWith("v2_record_")) try { + MB(this, oB, "f").removeItem(t) + } catch (e) { + console.error(e) + } else if (t.startsWith("v2_track_")) try { + const e = MB(this, oB, "f").getItem(t); + if (null != e) { + const n = { + name: t.substring(9), + author: null + }, + i = pb(e); + if (null == i) throw new Error("Failed to load v2 track for migration"); + if (!this.saveCustomTrack(n, i, new Date)) throw new Error("Failed to save v2 track for migration"); + MB(this, oB, "f").removeItem(t) + } + } catch (e) { + console.error(e) + } + } catch (e) { + console.error(e) + } + }, uB = function() { + try { + const e = MB(this, oB, "f").getAllKeys(); + try { + const e = MB(this, oB, "f").getItem("polytrack_v3_user_slot"); + if (null != e) { + const t = Number.parseInt(e, 10); + Number.isSafeInteger(t) && t >= 0 && t <= 2 && (this.saveUserProfileSlot(t), MB(this, oB, "f").removeItem("polytrack_v3_user_slot")) + } + } catch (e) { + console.error(e) + } + try { + const e = MB(this, oB, "f").getItem("polytrack_v3_settings"); + if (null != e) { + const t = JSON.parse(e); + if (Array.isArray(t)) { + const e = new Map; + for (const n of t) { + if (!Array.isArray(n) || 2 != n.length) continue; + const t = n[0]; + if ("string" != typeof t || !(t in $o)) continue; + const i = n[1]; + "string" == typeof i && e.set($o[t], i) + } + this.saveSettings(e), MB(this, oB, "f").removeItem("polytrack_v3_settings") + } + } + } catch (e) { + console.error(e) + } + try { + const e = MB(this, oB, "f").getItem("polytrack_v3_key_bindings"); + if (null != e) { + const t = JSON.parse(e); + if (Array.isArray(t)) { + const e = new Map; + for (const n of t) { + if (!Array.isArray(n) || 2 != n.length) continue; + const t = n[0]; + if ("string" != typeof t || !(t in Ix)) continue; + const i = n[1]; + if (!Array.isArray(i) || 2 != i.length) continue; + const r = i[0]; + if (null !== r && "string" != typeof r) continue; + const a = i[1]; + null !== a && "string" != typeof a || e.set(Ix[t], [r, a]) + } + this.saveKeyBindings(e), MB(this, oB, "f").removeItem("polytrack_v3_key_bindings") + } + } + } catch (e) { + console.error(e) + } + for (const t of e) + if (t.startsWith("polytrack_v3_user_")) { + let e; + switch (t) { + case "polytrack_v3_user_0": + e = 0; + break; + case "polytrack_v3_user_1": + e = 1; + break; + case "polytrack_v3_user_2": + e = 2; + break; + default: + e = null + } + if (null != e) try { + const n = MB(this, oB, "f").getItem(t); + if (null != n) { + const i = JSON.parse(n); + if ("object" != typeof i) throw new Error("User profile is not an object"); + if (null != i.token && "string" != typeof i.token) throw new Error("User profile token field has invalid type"); + if ("string" != typeof i.nickname) throw new Error("User profile nickname field has invalid type"); + if ("string" != typeof i.carColors) throw new Error("User profile carColors field has invalid type"); + const r = i.token, + a = i.nickname, + s = Pu.deserialize(i.carColors); + this.saveUserProfile(e, null != r ? r : gL.createToken(), a, s), MB(this, oB, "f").removeItem(t) + } + } catch (e) { + console.error(e) + } + } else if (t.startsWith("polytrack_v3_record_")) try { + MB(this, oB, "f").removeItem(t) + } catch (e) { + console.error(e) + } else if (t.startsWith("polytrack_v3_track_")) try { + const e = MB(this, oB, "f").getItem(t); + if (null != e) { + const n = { + name: t.substring(19), + author: null + }, + i = JSON.parse(e); + if (null == i || "object" != typeof i) throw new Error("Track data is not an object"); + if (null == i.data || "string" != typeof i.data) throw new Error("Track data field is invalid"); + if (null == i.saveTime || "number" != typeof i.saveTime || !Number.isSafeInteger(i.saveTime) || i.saveTime < 0) throw new Error("Track save time field is invalid"); + const r = fb(i.data); + if (null == r) throw new Error("Failed to load v2 track for migration"); + if (!this.saveCustomTrack(n, r, new Date(i.saveTime))) throw new Error("Failed to save v2 track for migration"); + MB(this, oB, "f").removeItem(t) + } + } catch (e) { + console.error(e) + } + try { + MB(this, oB, "f").removeItem("polytrack_v3_migrated") + } catch (e) { + console.error(e) + } + } catch (e) { + console.error(e) + } + }, pB = function(e, t, n) { + null == this.loadUserProfile(0) && this.saveUserProfile(0, null != e ? e : gL.createToken(), t, n) + }, fB = function(e) { + const t = this.loadUserProfile(0); + null == t ? this.saveUserProfile(0, gL.createToken(), gL.defaultNickname, e) : this.saveUserProfile(0, t.token, t.nickname, e) + }, gB = function() { + try { + MB(this, oB, "f").setItem(MB(sB, sB, "f", mB), "") + } catch (e) { + console.error(e) + } + }, vB = function() { + try { + if (null != MB(this, oB, "f").getItem(MB(sB, sB, "f", mB))) return "v4"; + if (null != MB(this, oB, "f").getItem("polytrack_v3_migrated")) return "v3" + } catch (e) { + console.error(e) + } + return null + }, lB = { + value: (() => { + let e = "polytrack_v4_"; + return e += "prod_", e + })() + }, mB = { + value: MB(sB, sB, "f", lB) + "migrated" + }, wB = { + value: MB(sB, sB, "f", lB) + "record_" + }, yB = { + value: MB(sB, sB, "f", lB) + "track_" + }, AB = { + value: MB(sB, sB, "f", lB) + "user_slot" + }, bB = { + value: MB(sB, sB, "f", lB) + "user_" + }, xB = { + value: MB(sB, sB, "f", lB) + "settings" + }, kB = { + value: MB(sB, sB, "f", lB) + "key_bindings" + }, EB = { + value: MB(sB, sB, "f", lB) + "selected_track_tab" + }; + const _B = TB; + var CB, PB, IB, RB, LB, DB, NB, BB = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + UB = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class zB { + constructor() { + CB.add(this), IB.set(this, void 0), RB.set(this, !1), LB.set(this, null); + const e = document.getElementById("ui"); + if (null == e) throw new Error("Failed to find UI element"); + BB(this, IB, e, "f"), window.addEventListener("mousemove", (() => { + document.body.classList.remove("hide-cursor"), UB(this, RB, "f") && (null != UB(this, LB, "f") && clearTimeout(UB(this, LB, "f")), BB(this, LB, setTimeout((() => { + document.body.classList.add("hide-cursor"), BB(this, LB, null, "f") + }), UB(PB, PB, "f", DB)), "f")) + })), document.addEventListener("gesturestart", (function(e) { + e.preventDefault() + })), window.addEventListener("resize", (() => { + UB(this, CB, "m", NB).call(this) + })), UB(this, CB, "m", NB).call(this) + } + setCursorHiddenWhenInactive(e) { + BB(this, RB, e, "f"), e ? BB(this, LB, setTimeout((() => { + document.body.classList.add("hide-cursor"), BB(this, LB, null, "f") + }), UB(PB, PB, "f", DB)), "f") : (document.body.classList.remove("hide-cursor"), null != UB(this, LB, "f") && (clearTimeout(UB(this, LB, "f")), BB(this, LB, null, "f"))) + } + } + PB = zB, IB = new WeakMap, RB = new WeakMap, LB = new WeakMap, CB = new WeakSet, NB = function() { + const e = Math.max(.01, Math.min(window.innerWidth, 1.4375 * window.innerHeight) / 1150); + e < 1 ? (UB(this, IB, "f").style.width = "calc(100% / " + e.toString() + ")", UB(this, IB, "f").style.height = "calc(100% / " + e.toString() + ")", UB(this, IB, "f").style.transform = "scale(" + e.toString() + ")") : (UB(this, IB, "f").style.width = "", UB(this, IB, "f").style.height = "", UB(this, IB, "f").style.transform = "") + }, DB = { + value: 1e3 + }; + const OB = zB; + var FB, WB, VB = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + FB = new WeakMap, WB = new WeakMap; + const HB = class { + constructor() { + this.determinismState = VI.Uninitialized, FB.set(this, 2e4), WB.set(this, 1e4) + } + getLeaderboard(e, t, n, i, r) { + let a = eu + "leaderboard?version=" + iu + "&trackId=" + t + "&skip=" + n.toString() + "&amount=" + i.toString() + "&onlyVerified=" + r.toString(); + return this.determinismState == VI.Ok && (a += "&userTokenHash=" + encodeURIComponent(e)), new Promise(((t, n) => { + const i = new XMLHttpRequest; + i.timeout = VB(this, FB, "f"), i.overrideMimeType("text/plain"), i.onreadystatechange = () => { + if (i.readyState == XMLHttpRequest.DONE) + if (200 == i.status) try { + const r = JSON.parse(i.responseText), + a = r.total; + if ("number" != typeof a) return void n(new Error("Total is not a number")); + if (!Number.isSafeInteger(a)) return void n(new Error("Total is not a safe integer")); + const s = r.entries; + if (!Array.isArray(s)) return void n(new Error("Entries is not an array")); + const o = []; + for (const t of s) { + if (null == t) return void n(new Error("Entry is missing")); + if (!Object.prototype.hasOwnProperty.call(t, "id")) return void n(new Error('Entry is missing "id" field')); + if (!Object.prototype.hasOwnProperty.call(t, "userId")) return void n(new Error('Entry is missing "userId" field')); + if (!Object.prototype.hasOwnProperty.call(t, "name")) return void n(new Error('Entry is missing "name" field')); + if (!Object.prototype.hasOwnProperty.call(t, "frames")) return void n(new Error('Entry is missing "frames" field')); + if (!Object.prototype.hasOwnProperty.call(t, "carColors")) return void n(new Error('Entry is missing "carColors" field')); + if (!Object.prototype.hasOwnProperty.call(t, "verifiedState")) return void n(new Error('Entry is missing "verifiedState" field')); + if ("number" != typeof t.id) return void n(new Error('"id" field has incorrect type')); + if ("string" != typeof t.userId) return void n(new Error('"userId" field has incorrect type')); + if ("string" != typeof t.name) return void n(new Error('"name" field has incorrect type')); + if ("number" != typeof t.frames) return void n(new Error('"frames" field has incorrect type')); + if (!Number.isSafeInteger(t.frames) || t.frames <= 0 || t.frames > cv.maxFrames) return void n(new Error('"frames" field has an invalid value')); + if ("string" != typeof t.carColors) return void n(new Error('"carColors" field has incorrect type')); + if (!Number.isSafeInteger(t.verifiedState) || t.verifiedState < 0) return void n(new Error('"verifiedState" field has an invalid value')); + o.push({ + id: t.id, + name: t.name, + time: new xp(t.frames), + carColors: Pu.deserialize(t.carColors), + verifiedState: t.verifiedState, + isSelf: t.userId == e + }) + } + let l = null; + if (null != r.userEntry) { + const e = r.userEntry.position; + if ("number" != typeof e) return void n(new Error("User position is not a number")); + if (!Number.isSafeInteger(e)) return void n(new Error("User position is not a safe integer")); + const t = r.userEntry.frames; + if ("number" != typeof t) return void n(new Error("User frames is not a number")); + if (!Number.isSafeInteger(t)) return void n(new Error("User frames is not a safe integer")); + const i = new xp(t), + a = r.userEntry.id; + if ("number" != typeof a) return void n(new Error("User record id is not a number")); + if (!Number.isSafeInteger(a)) return void n(new Error("User record id is not a safe integer")); + l = { + position: e, + time: i, + id: a + } + } + t({ + total: a, + entries: o, + userEntry: l + }) + } catch (e) { + n(new Error("Unknown error: " + String(e))) + } else n(new Error("Failed to connect to server, status: " + i.status.toString())) + }, i.open("GET", a, !0), i.send() + })) + } + getRecordings(e) { + const t = eu + "recordings?version=" + iu + "&recordingIds=" + e.join(","); + return new Promise(((e, n) => { + if (this.determinismState != VI.Ok) n(new Error("Getting recordings not allowed")); + else { + const i = new XMLHttpRequest; + i.timeout = VB(this, FB, "f"), i.overrideMimeType("text/plain"), i.onreadystatechange = () => { + if (i.readyState == XMLHttpRequest.DONE) + if (200 == i.status) try { + const t = JSON.parse(i.responseText); + if (!Array.isArray(t)) return void n(new Error("Response is not an array")); + const r = []; + for (const e of t) { + if (null == e) { + r.push(null); + continue + } + if ("object" != typeof e || Array.isArray(e)) return void n(new Error("JSON item is not an object")); + if ("string" != typeof e.recording) return void n(new Error("JSON item recording field has incorrect type")); + const t = cv.deserialize(e.recording); + if (null == t) return void n(new Error("Failed to deserialize recording")); + if ("number" != typeof e.verifiedState) return void n(new Error("JSON item verifiedState field has incorrect type")); + const i = e.verifiedState; + if (!Number.isSafeInteger(i) || i < 0) return void n(new Error("JSON item verifiedState is not a safe integer")); + if ("number" != typeof e.frames) return void n(new Error("JSON item frames field has incorrect type")); + const a = e.frames; + if (!Number.isSafeInteger(a) || a <= 0 || a > cv.maxFrames) return void n(new Error("JSON item frames is not a safe integer")); + const s = new xp(a); + if ("string" != typeof e.carColors) return void n(new Error("JSON item carColors field has incorrect type")); + const o = Pu.deserialize(e.carColors); + r.push({ + recording: t, + time: s, + verifiedState: i, + carColors: o + }) + } + e(r) + } catch (e) { + n(new Error("Unknown error: " + String(e))) + } else n(new Error("Failed to connect to server, status: " + i.status.toString())) + }, i.open("GET", t, !0), i.send() + } + })) + } + submitLeaderboard(e, t, n, i, r, a) { + return new Promise(((s, o) => { + if (this.determinismState != VI.Ok) o(new Error("Submit not allowed")); + else { + const l = a.serialize(); + if (l.length >= VB(this, WB, "f")) o(new Error("Recording is too large")); + else { + const a = eu + "leaderboard", + c = "version=" + iu + "&userToken=" + encodeURIComponent(e) + "&name=" + encodeURIComponent(t) + "&carColors=" + n.serialize() + "&trackId=" + i + "&frames=" + r.numberOfFrames.toString() + "&recording=" + l, + h = new XMLHttpRequest; + h.timeout = VB(this, FB, "f"), h.overrideMimeType("text/plain"), h.onreadystatechange = () => { + if (4 == h.readyState) + if (200 == h.status) try { + const e = JSON.parse(h.responseText); + if (null == e) s({ + uploadId: null + }); + else { + const t = Number.parseInt(e, 10); + Number.isSafeInteger(t) ? s({ + uploadId: t + }) : o(new Error("UploadId is not a safe integer")) + } + } catch (e) { + o(new Error("Unknown error: " + String(e))) + } else o(new Error("Failed to connect to server, status: " + h.status.toString())) + }, h.open("POST", a, !0), h.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), h.send(c) + } + } + })) + } + submitUserProfile(e, t, n) { + return new Promise(((i, r) => { + const a = eu + "user", + s = "version=" + iu + "&userToken=" + encodeURIComponent(e) + "&name=" + encodeURIComponent(t) + "&carColors=" + n.serialize(), + o = new XMLHttpRequest; + o.timeout = VB(this, FB, "f"), o.overrideMimeType("text/plain"), o.onreadystatechange = () => { + 4 == o.readyState && (200 == o.status ? i() : r(new Error("Failed to connect to server, status: " + o.status.toString()))) + }, o.open("POST", a, !0), o.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), o.send(s) + })) + } + verifyRecordings(e, t, n, i, r) { + return new Promise(((a, s) => { + if (this.determinismState != VI.Ok) s(new Error("Submit not allowed")); + else { + const o = eu + "verifyRecordings", + l = "version=" + iu + "&userToken=" + encodeURIComponent(e) + (null != t ? "&trackId=" + t : "") + "&maxFrames=" + n.toString() + "&getEstimatedRemaining=" + i.toString() + "&recordings=" + encodeURIComponent(JSON.stringify(r)), + c = new XMLHttpRequest; + c.timeout = VB(this, FB, "f"), c.overrideMimeType("text/plain"), c.onreadystatechange = () => { + if (4 == c.readyState) + if (200 == c.status) try { + if ("" == c.responseText) return void a({ + unverifiedRecordings: [], + exhaustive: !0, + estimatedRemaining: 0 + }); + const e = JSON.parse(c.responseText); + if (!("exhaustive" in e)) return void s(new Error('Field "exhaustive" does not exist')); + const t = 1 == e.exhaustive; + if (!("estimatedRemaining" in e)) return void s(new Error('Field "estimatedRemaining" does not exist')); + let n; + if (null == e.estimatedRemaining) n = null; + else if (n = parseInt(e.estimatedRemaining, 10), !Number.isSafeInteger(n) || n < 0) return void s(new Error("Estimated remaining is not a valid integer")); + if (!("unverifiedRecordings" in e)) return void s(new Error('Field "unverifiedRecordings" does not exist')); + const i = e.unverifiedRecordings; + if (!Array.isArray(i)) return void s(new Error('Field "unverifiedRecordings" is not an array')); + for (const e of i) { + if ("object" != typeof e) return void s(new Error("Recording is not an object")); + if ("number" != typeof e.id || !Number.isSafeInteger(e.id)) return void s(new Error("Recording id is not a valid integer")); + if ("string" != typeof e.recording) return void s(new Error("Recording recording is not a string")); + if ("number" != typeof e.frames || !Number.isSafeInteger(e.frames) || e.frames <= 0 || e.frames > cv.maxFrames) return void s(new Error("Recording frames is not a valid integer")) + } + a({ + unverifiedRecordings: i, + exhaustive: t, + estimatedRemaining: n + }) + } catch (e) { + s(new Error("Unknown error: " + String(e))) + } else 403 == c.status ? s(new Error("User is not a verifier")) : s(new Error("Failed to connect to server, status: " + c.status.toString())) + }, c.open("POST", o, !0), c.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), c.send(l) + } + })) + } + getUser(e) { + return new Promise(((t, n) => { + const i = eu + "user?version=" + iu + "&userToken=" + encodeURIComponent(e), + r = new XMLHttpRequest; + r.timeout = VB(this, FB, "f"), r.overrideMimeType("text/plain"), r.onreadystatechange = () => { + if (r.readyState == XMLHttpRequest.DONE) + if (200 == r.status) try { + const e = JSON.parse(r.responseText); + if (null == e) return void t(null); + const i = e.name; + if ("string" != typeof i) return void n(new Error("Name is not a string")); + const a = vL(i); + if (0 == a || a > 50) return void n(new Error("Name as invalid length")); + const s = e.carColors; + if ("string" != typeof s) return void n(new Error("CarColors data is not a string")); + const o = Pu.deserialize(s), + l = e.isVerifier; + if ("boolean" != typeof l) return void n(new Error("IsVerifier is not a boolean")); + t({ + name: i, + carColors: o, + isVerifier: l + }) + } catch (e) { + n(new Error("Unknown error: " + String(e))) + } else n(new Error("Failed to connect to server, status: " + r.status.toString())) + }, r.open("GET", i, !0), r.send() + })) + } + }; + var GB, jB, QB, YB, KB, qB = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + XB = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + jB = new WeakMap, QB = new WeakMap, YB = new WeakMap, GB = new WeakSet, KB = function(e) { + for (const [t, n] of e) { + if (!XB(this, YB, "f").has(t)) throw new Error("Key binding is missing"); + XB(this, YB, "f").set(t, n) + } + }; + const ZB = class { + constructor(e) { + GB.add(this), jB.set(this, void 0), QB.set(this, this.defaultSettings()), YB.set(this, this.defaultKeyBindings()), qB(this, jB, e, "f"); + const t = e.loadSettings(); + null != t && this.updateSettings(t); + const n = e.loadKeyBindings(); + null != n && XB(this, GB, "m", KB).call(this, n) + } + defaultSettings() { + return new Map([ + [$o.ImperialUnitsEnabled, "false"], + [$o.ResetHintEnabled, "true"], + [$o.GhostCarEnabled, "true"], + [$o.DefaultCameraMode, "false"], + [$o.CockpitCameraToggle, "true"], + [$o.Checkpoints, "bottom"], + [$o.Timer, "bottom"], + [$o.Speedometer, "bottom"], + [$o.Language, "en-US"], + [$o.CarShadowQuality, "2048"], + [$o.TrackShadowEnabled, "true"], + [$o.CloudsEnabled, "true"], + [$o.ParticlesEnabled, "true"], + [$o.SkidmarksEnabled, "true"], + [$o.RenderScale, "1"], + [$o.Antialiasing, "true"], + [$o.SoundEffectVolume, "1"], + [$o.MusicVolume, "1"], + [$o.CheckpointVolume, "1"] + ]) + } + defaultKeyBindings() { + return new Map([ + [Ix.VehicleAccelerate, ["KeyW", "ArrowUp"]], + [Ix.VehicleTurnRight, ["KeyD", "ArrowRight"]], + [Ix.VehicleBrake, ["KeyS", "ArrowDown"]], + [Ix.VehicleTurnLeft, ["KeyA", "ArrowLeft"]], + [Ix.VehicleCheckpointReset, ["KeyR", "Enter"]], + [Ix.VehicleStartReset, ["KeyT", "Backspace"]], + [Ix.VehicleCockpitCamera, ["KeyC", "KeyM"]], + [Ix.ToggleUI, ["KeyH", null]], + [Ix.Pause, ["KeyP", "Space"]], + [Ix.EditorRotatePart, ["KeyR", "Space"]], + [Ix.EditorHeightModifier, ["ShiftLeft", "ShiftRight"]], + [Ix.EditorDelete, ["Delete", "KeyX"]], + [Ix.EditorMoveForwards, ["KeyW", "ArrowUp"]], + [Ix.EditorMoveRight, ["KeyD", "ArrowRight"]], + [Ix.EditorMoveBackwards, ["KeyS", "ArrowDown"]], + [Ix.EditorMoveLeft, ["KeyA", "ArrowLeft"]], + [Ix.EditorRotateViewUp, ["KeyY", null]], + [Ix.EditorRotateViewDown, ["KeyH", null]], + [Ix.EditorRotateViewLeft, ["KeyQ", null]], + [Ix.EditorRotateViewRight, ["KeyE", null]], + [Ix.EditorMoveDown, ["KeyZ", null]], + [Ix.EditorMoveUp, ["KeyC", null]], + [Ix.EditorTest, ["KeyT", null]], + [Ix.EditorPick, ["KeyG", null]], + [Ix.ToggleFpsCounter, ["Comma", null]], + [Ix.ToggleSpectatorCamera, ["Period", null]], + [Ix.SpectatorMoveForwards, ["KeyW", "ArrowUp"]], + [Ix.SpectatorMoveRight, ["KeyD", "ArrowRight"]], + [Ix.SpectatorMoveBackwards, ["KeyS", "ArrowDown"]], + [Ix.SpectatorMoveLeft, ["KeyA", "ArrowLeft"]], + [Ix.SpectatorSpeedModifier, ["ShiftLeft", "ShiftRight"]] + ]) + } + getSettings() { + return Array.from(XB(this, QB, "f")) + } + getSetting(e) { + const t = XB(this, QB, "f").get(e); + if (null == t) throw new Error("Setting name is missing"); + return t + } + getSettingBoolean(e) { + return "true" == this.getSetting(e) + } + getSettingFloat(e) { + return parseFloat(this.getSetting(e)) + } + getSettingInteger(e) { + return parseInt(this.getSetting(e), 10) + } + updateSettings(e) { + for (const [t, n] of e) { + if (!XB(this, QB, "f").has(t)) throw new Error("Setting name is missing"); + XB(this, QB, "f").set(t, n) + } + } + saveSettings() { + XB(this, jB, "f").saveSettings(XB(this, QB, "f")) + } + getKeyBindings(e) { + var t; + return null !== (t = XB(this, YB, "f").get(e)) && void 0 !== t ? t : [null, null] + } + setKeyBindings(e) { + XB(this, GB, "m", KB).call(this, e), XB(this, jB, "f").saveKeyBindings(XB(this, YB, "f")) + } + checkKeyBinding(e, t) { + var n; + const i = null !== (n = XB(this, YB, "f").get(t)) && void 0 !== n ? n : []; + for (const t of i) + if (null != t && e.code == t) return !0; + return !1 + } + }; + var JB; + ! function(e) { + e[e.Init = 0] = "Init", e[e.Verify = 1] = "Verify", e[e.TestDeterminism = 2] = "TestDeterminism", e[e.CreateCar = 3] = "CreateCar", e[e.DeleteCar = 4] = "DeleteCar", e[e.StartCar = 5] = "StartCar", e[e.ControlCar = 6] = "ControlCar", e[e.PauseCar = 7] = "PauseCar", e[e.VerifyResult = 8] = "VerifyResult", e[e.DeterminismResult = 9] = "DeterminismResult", e[e.UpdateResult = 10] = "UpdateResult" + }(JB || (JB = {})); + const $B = JB; + var eU, tU, nU, iU, rU, aU, sU, oU = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + lU = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + tU = new WeakMap, nU = new WeakMap, iU = new WeakMap, rU = new WeakMap, aU = new WeakMap, eU = new WeakSet, sU = function(e, t) { + const n = t.getPhysicsParts(); + lU(this, nU, "f").postMessage({ + messageType: $B.Init, + isRealtime: e, + trackParts: n + }) + }; + const cU = class { + constructor(e, t, n) { + eU.add(this), tU.set(this, void 0), nU.set(this, void 0), iU.set(this, !1), rU.set(this, 0), aU.set(this, new Map), oU(this, nU, new Worker("simulation_worker.bundle.js"), "f"), null != t && null != n ? (oU(this, tU, t, "f"), n.hasLoaded() ? lU(this, eU, "m", sU).call(this, e, t) : n.addCompleteListener((() => { + lU(this, eU, "m", sU).call(this, e, t) + }))) : oU(this, tU, null, "f") + } + dispose() { + lU(this, nU, "f").terminate(), oU(this, iU, !0, "f") + } + validate(e, t, n) { + return new Promise(((i, r) => { + var a, s; + if (null == lU(this, tU, "f")) throw new Error("TrackPartManager is not initialized"); + if (null == e.getStartTransform()) i(!1); + else { + const o = VP.createMountainVertices(e.getBounds()); + if (null == Aw.models) throw new Error("Car collision model not loaded"); + const l = (oU(this, rU, (s = lU(this, rU, "f"), a = s++, s), "f"), a), + c = setInterval((() => { + lU(this, iU, "f") && (clearInterval(c), r(new Error("Simulation has been disposed"))) + }), 10), + h = e => { + e.data.messageType == $B.VerifyResult && e.data.carId == l && (clearInterval(c), lU(this, nU, "f").removeEventListener("message", h), i(e.data.result)) + }; + lU(this, nU, "f").addEventListener("message", h), lU(this, nU, "f").postMessage({ + messageType: $B.Verify, + mountainVertices: o.vertices, + mountainOffset: { + x: o.offset.x, + y: o.offset.y, + z: o.offset.z + }, + trackData: e.toSaveString(), + carId: l, + carCollisionShapeVertices: Aw.models.collisionShapeVertices, + carMassOffset: Aw.massOffset, + carRecording: t.serialize(), + targetFrames: n.numberOfFrames + }) + } + })) + } + testDeterminism() { + return new Promise((e => { + const t = n => { + if (n.data.messageType === $B.DeterminismResult) lU(this, nU, "f").removeEventListener("message", t), e(n.data.isDeterminstic) + }; + lU(this, nU, "f").addEventListener("message", t), lU(this, nU, "f").postMessage({ + messageType: $B.TestDeterminism + }) + })) + } + createCar(e, t, n, i, r, a) { + var s, o; + if (null == lU(this, tU, "f")) throw new Error("TrackPartManager is not initialized"); + if (null == Aw.models) throw new Error("Car collision model not loaded"); + const l = (oU(this, rU, (o = lU(this, rU, "f"), s = o++, o), "f"), s), + c = e => { + if (e.data.messageType == $B.UpdateResult) { + const t = e.data.carStates; + for (const e of t) e.id == l && a(e) + } + }; + lU(this, nU, "f").addEventListener("message", c), lU(this, aU, "f").set(l, c), lU(this, nU, "f").postMessage({ + messageType: $B.CreateCar, + mountainVertices: t, + mountainOffset: { + x: n.x, + y: n.y, + z: n.z + }, + trackData: i.toSaveString(), + carId: l, + carCollisionShapeVertices: Aw.models.collisionShapeVertices, + carMassOffset: Aw.massOffset, + carRecording: null == r ? void 0 : r.serialize() + }); + const h = [new yn(.627909, .27 - Aw.suspensionResetLengthFront, 1.3478).applyQuaternion(e.quaternion).add(e.position), new yn(-.627909, .27 - Aw.suspensionResetLengthFront, 1.3478).applyQuaternion(e.quaternion).add(e.position), new yn(.720832, .27 - Aw.suspensionResetLengthRear, -1.52686).applyQuaternion(e.quaternion).add(e.position), new yn(-.720832, .27 - Aw.suspensionResetLengthRear, -1.52686).applyQuaternion(e.quaternion).add(e.position)], + d = [(new wn).setFromEuler((new ai).set(0, Math.PI, 0)).multiply(e.quaternion), (new wn).setFromEuler((new ai).set(0, Math.PI, 0)).multiply(e.quaternion), (new wn).setFromEuler((new ai).set(0, Math.PI, 0)).multiply(e.quaternion), (new wn).setFromEuler((new ai).set(0, Math.PI, 0)).multiply(e.quaternion)]; + return { + id: l, + frames: 0, + speedKmh: 0, + hasStarted: !1, + finishFrames: null, + nextCheckpointIndex: 0, + hasCheckpointToRespawnAt: !1, + position: { + x: e.position.x, + y: e.position.y, + z: e.position.z + }, + quaternion: { + x: e.quaternion.x, + y: e.quaternion.y, + z: e.quaternion.z, + w: e.quaternion.w + }, + collisionImpulses: [], + wheelInContact: [!1, !1, !1, !1], + wheelSuspensionLength: [Aw.suspensionResetLengthFront, Aw.suspensionResetLengthFront, Aw.suspensionResetLengthRear, Aw.suspensionResetLengthRear], + wheelSuspensionVelocity: [0, 0, 0, 0], + wheelRotation: [0, 0, 0, 0], + wheelDeltaRotation: [0, 0, 0, 0], + wheelSkidInfo: [0, 0, 0, 0], + wheelPosition: h, + wheelQuaternion: d, + brakeLightEnabled: !1, + controls: { + up: !1, + right: !1, + down: !1, + left: !1, + reset: !1 + } + } + } + deleteCar(e) { + lU(this, nU, "f").postMessage({ + messageType: $B.DeleteCar, + carId: e + }); + const t = lU(this, aU, "f").get(e); + if (null == t) throw new Error("Deleting non-existant car"); + lU(this, nU, "f").removeEventListener("message", t), lU(this, aU, "f").delete(e) + } + startCar(e, t) { + lU(this, nU, "f").postMessage({ + messageType: $B.StartCar, + carId: e, + targetSimulationTimeFrames: null == t ? void 0 : t.numberOfFrames + }) + } + controlCar(e, t, n, i, r, a) { + lU(this, nU, "f").postMessage({ + messageType: $B.ControlCar, + carId: e, + up: t, + right: n, + down: i, + left: r, + reset: a + }) + } + pauseCar(e, t) { + lU(this, nU, "f").postMessage({ + messageType: $B.PauseCar, + carId: e, + isPaused: t + }) + } + }; + var hU = n(2796), + dU = {}; + dU.styleTagTransform = u(), dU.setAttributes = l(), dU.insert = s().bind(null, "head"), dU.domAPI = r(), dU.insertStyleElement = h(); + t()(hU.A, dU); + hU.A && hU.A.locals && hU.A.locals; + var uU, pU, fU, mU, gU, vU, wU, yU = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + AU = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + uU = new WeakMap, pU = new WeakMap, fU = new WeakMap, mU = new WeakMap, gU = new WeakMap, vU = new WeakMap, wU = new WeakMap; + const bU = class { + constructor(e, t, n, i, r, a) { + uU.set(this, void 0), pU.set(this, void 0), fU.set(this, void 0), mU.set(this, void 0), gU.set(this, void 0), vU.set(this, void 0), wU.set(this, new Map); + const s = document.getElementById("ui"); + if (null == s) throw new Error("UI element not found"); + yU(this, uU, s, "f"), yU(this, pU, document.createElement("div"), "f"), AU(this, pU, "f").className = "verifier-ui", AU(this, uU, "f").appendChild(AU(this, pU, "f")), yU(this, fU, document.createElement("p"), "f"), AU(this, pU, "f").appendChild(AU(this, fU, "f")); + const o = document.createElement("p"); + o.textContent = "Number of threads: " + t.toString(), AU(this, pU, "f").appendChild(o); + const l = document.createElement("input"); + l.type = "range", l.min = "0", l.max = t.toString(), l.value = t.toString(), l.addEventListener("change", (() => { + const e = parseInt(l.value, 10); + o.textContent = "Number of threads: " + e.toString(), r(e) + })), AU(this, pU, "f").appendChild(l); + const c = document.createElement("p"); + c.textContent = "Max time: " + Math.floor(n / 60 / 1e3).toString() + " minutes", AU(this, pU, "f").appendChild(c); + const h = document.createElement("input"); + h.type = "range", h.min = 6e4.toString(), h.max = cv.maxFrames.toString(), h.value = n.toString(), h.addEventListener("input", (() => { + const e = parseInt(h.value, 10); + c.textContent = "Max time: " + Math.floor(e / 60 / 1e3).toString() + " minutes", a(e) + })), AU(this, pU, "f").appendChild(h); + const d = document.createElement("table"); + AU(this, pU, "f").appendChild(d), yU(this, mU, d.createTHead(), "f"), yU(this, gU, d.createTBody(), "f"); + const u = AU(this, mU, "f").insertRow(); + for (const e of ["Track", "State", "Verified", "Invalid", "Estimated remaining"]) { + const t = document.createElement("th"); + t.textContent = e, u.appendChild(t) + } + const p = document.createElement("button"); + p.className = "button", p.textContent = "Stop", p.addEventListener("click", (() => { + e.playUIClick(), i() + })), AU(this, pU, "f").appendChild(p), window.addEventListener("keydown", yU(this, vU, (e => { + "Escape" == e.code && (i(), e.preventDefault()) + }), "f")) + } + dispose() { + AU(this, uU, "f").removeChild(AU(this, pU, "f")), window.removeEventListener("keydown", AU(this, vU, "f")) + } + setText(e) { + AU(this, fU, "f").textContent = e + } + setTracks(e) { + for (const t of e) { + let e = AU(this, wU, "f").get(t.id); + if (null == e) { + e = { + element: AU(this, gU, "f").insertRow(), + name: t.name, + exhausted: t.exhausted, + recordingsVerified: t.recordingsVerified, + invalidRecordings: t.invalidRecordings, + estimatedRemaining: t.estimatedRemaining + }, AU(this, wU, "f").set(t.id, e); + e.element.insertCell().textContent = t.name; + e.element.insertCell().textContent = t.exhausted ? "Empty" : "Processing"; + e.element.insertCell().textContent = t.recordingsVerified.toString(); + e.element.insertCell().textContent = t.invalidRecordings.toString(); + const n = e.element.insertCell(); + null != t.estimatedRemaining ? n.textContent = t.estimatedRemaining.toString() : n.textContent = "?" + } else e.name != t.name && (e.element.cells[0].textContent = t.name, e.name = t.name), e.exhausted != t.exhausted && (e.element.cells[1].textContent = t.exhausted ? "Empty" : "Processing", e.exhausted = t.exhausted), e.recordingsVerified != t.recordingsVerified && (e.element.cells[2].textContent = t.recordingsVerified.toString(), e.recordingsVerified = t.recordingsVerified), e.invalidRecordings != t.invalidRecordings && (e.element.cells[3].textContent = t.invalidRecordings.toString(), e.invalidRecordings = t.invalidRecordings), e.estimatedRemaining != t.estimatedRemaining && (null != t.estimatedRemaining ? e.element.cells[4].textContent = t.estimatedRemaining.toString() : e.element.cells[4].textContent = "?", e.estimatedRemaining = t.estimatedRemaining) + } + } + }; + var xU, kU, EU, SU, MU, TU, _U, CU, PU, IU, RU, LU, DU, NU, BU, UU, zU, OU, FU, WU, VU, HU, GU, jU, QU, YU, KU, qU, XU, ZU, JU, $U, ez, tz = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + nz = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + kU = new WeakMap, EU = new WeakMap, SU = new WeakMap, MU = new WeakMap, TU = new WeakMap, _U = new WeakMap, CU = new WeakMap, PU = new WeakMap, IU = new WeakMap, RU = new WeakMap, LU = new WeakMap, DU = new WeakMap, NU = new WeakMap, BU = new WeakMap, UU = new WeakMap, zU = new WeakMap, OU = new WeakMap, FU = new WeakMap, WU = new WeakMap, VU = new WeakMap, HU = new WeakMap, GU = new WeakMap, jU = new WeakMap, QU = new WeakMap, YU = new WeakMap, KU = new WeakMap, qU = new WeakMap, XU = new WeakMap, ZU = new WeakMap, xU = new WeakSet, JU = function(e) { + const t = nz(this, IU, "f").slice(); + do { + const n = Math.floor(Math.random() * t.length), + i = t.splice(n, 1)[0]; + if (e > i.timeout) return i + } while (t.length > 0); + return null + }, $U = function() { + var e; + const t = new Date; + if (!nz(this, LU, "f") && nz(this, NU, "f").length < nz(this, jU, "f") && Math.abs(t.getTime() - nz(this, DU, "f").getTime()) >= nz(this, QU, "f")) { + tz(this, LU, !0, "f"), tz(this, DU, t, "f"); + const n = nz(this, xU, "m", JU).call(this, t); + if (null != n || nz(this, RU, "f").length > 0 && 0 == nz(this, NU, "f").length || nz(this, RU, "f").length > nz(this, GU, "f")) { + const i = nz(this, RU, "f"); + tz(this, RU, [], "f"); + const r = null != n && (null == n.lastEstimatedRemainingTime || Math.abs(t.getTime() - n.lastEstimatedRemainingTime.getTime()) >= nz(this, YU, "f")); + nz(this, MU, "f").verifyRecordings(nz(this, _U, "f"), null !== (e = null == n ? void 0 : n.id) && void 0 !== e ? e : null, nz(this, KU, "f"), r, i).then((({ + unverifiedRecordings: e, + exhaustive: i, + estimatedRemaining: r + }) => { + null != n && (tz(this, NU, nz(this, NU, "f").concat(e.map((({ + id: e, + recording: t, + frames: i + }) => ({ + track: n, + trackData: n.data, + recordingId: e, + recording: cv.deserialize(t), + time: new xp(i) + })))), "f"), i && (n.timeout = new Date(t.getTime() + Math.floor(432e5 + 12 * Math.random() * 60 * 60 * 1e3))), null != r && (n.estimatedRemaining = r, n.lastEstimatedRemainingTime = t)) + })).catch((e => { + console.error(e), nz(this, MU, "f").getUser(nz(this, _U, "f")).then((e => { + (null == e ? void 0 : e.isVerifier) || tz(this, BU, !1, "f") + })).catch((e => { + console.warn(e) + })) + })).finally((() => { + tz(this, LU, !1, "f") + })) + } else tz(this, LU, !1, "f") + } + }, ez = function() { + var e, t, n; + if (nz(this, TU, "f").hasLoaded() && nz(this, BU, "f")) { + nz(this, xU, "m", $U).call(this); + for (const i of nz(this, PU, "f")) + if (!i.isBusy && nz(this, NU, "f").length > 0) { + i.isBusy = !0; + const { + track: r, + trackData: a, + recordingId: s, + recording: o, + time: l + } = nz(this, NU, "f").splice(0, 1)[0]; + null == o ? (tz(this, WU, (e = nz(this, WU, "f"), ++e), "f"), r.recordingsVerified++, tz(this, VU, (t = nz(this, VU, "f"), ++t), "f"), r.invalidRecordings++, null != r.estimatedRemaining && (r.estimatedRemaining = Math.max(0, r.estimatedRemaining - 1)), nz(this, RU, "f").push({ + id: s, + verifiedState: HI.Invalid + }), i.isBusy = !1) : (tz(this, FU, (n = nz(this, FU, "f"), ++n), "f"), i.simulation.validate(a, o, l).then((e => { + var t, n; + tz(this, WU, (t = nz(this, WU, "f"), ++t), "f"), r.recordingsVerified++, e || (tz(this, VU, (n = nz(this, VU, "f"), ++n), "f"), r.invalidRecordings++), null != r.estimatedRemaining && (r.estimatedRemaining = Math.max(0, r.estimatedRemaining - 1)), tz(this, HU, nz(this, HU, "f") + l.numberOfFrames, "f"), nz(this, RU, "f").push({ + id: s, + verifiedState: e ? HI.Verified : HI.Invalid + }) + })).catch((e => { + if (!i.isDisposed) throw e + })).finally((() => { + var e; + i.isBusy = !1, tz(this, FU, (e = nz(this, FU, "f"), --e), "f") + }))) + } + } + }; + const iz = class { + constructor(e, t, n, i, r, a, s, o, l) { + xU.add(this), kU.set(this, void 0), EU.set(this, void 0), SU.set(this, void 0), MU.set(this, void 0), TU.set(this, void 0), _U.set(this, void 0), CU.set(this, void 0), PU.set(this, []), IU.set(this, []), RU.set(this, []), LU.set(this, !1), DU.set(this, new Date), NU.set(this, []), BU.set(this, !0), UU.set(this, void 0), zU.set(this, !1), OU.set(this, new Date), FU.set(this, 0), WU.set(this, 0), VU.set(this, 0), HU.set(this, 0), GU.set(this, 100), jU.set(this, 100), QU.set(this, 1e3), YU.set(this, 36e5), KU.set(this, 6e5), qU.set(this, 4), XU.set(this, void 0), ZU.set(this, null), tz(this, kU, e, "f"), tz(this, EU, t, "f"), tz(this, SU, a, "f"), tz(this, MU, n, "f"), tz(this, TU, s, "f"), tz(this, _U, o, "f"), "undefined" != typeof navigator && "hardwareConcurrency" in navigator && navigator.hardwareConcurrency > 0 && tz(this, qU, navigator.hardwareConcurrency, "f"), tz(this, XU, nz(this, qU, "f"), "f"), t.clear(), tz(this, CU, new bU(e, nz(this, qU, "f"), nz(this, KU, "f"), l, (e => { + for (tz(this, XU, e, "f"); nz(this, PU, "f").length < nz(this, XU, "f");) nz(this, PU, "f").push({ + simulation: new cU(!1, r, s), + isBusy: !1, + isDisposed: !1 + }); + for (; nz(this, PU, "f").length > nz(this, XU, "f");) { + const e = nz(this, PU, "f").pop(); + null != e && (e.simulation.dispose(), e.isDisposed = !0) + } + }), (e => { + tz(this, KU, e, "f"); + for (const e of nz(this, IU, "f")) e.timeout = new Date, e.estimatedRemaining = null + })), "f"); + for (let e = 0; e < nz(this, XU, "f"); e++) nz(this, PU, "f").push({ + simulation: new cU(!1, r, nz(this, TU, "f")), + isBusy: !1, + isDisposed: !1 + }); + i.forEachTrack(((e, t, n) => { + nz(this, IU, "f").push({ + id: e, + name: t.name, + data: n, + timeout: new Date, + recordingsVerified: 0, + invalidRecordings: 0, + estimatedRemaining: null, + lastEstimatedRemainingTime: null + }) + })), tz(this, UU, setInterval((() => { + nz(this, xU, "m", ez).call(this) + }), 10), "f"); + try { + navigator.wakeLock.request("screen").then((e => { + nz(this, zU, "f") ? e.release().catch((e => { + console.error(e) + })) : tz(this, ZU, e, "f") + })).catch((e => { + console.warn(e) + })) + } catch (e) { + console.error(e) + } + } + dispose() { + tz(this, zU, !0, "f"), nz(this, CU, "f").dispose(); + for (const e of nz(this, PU, "f")) e.simulation.dispose(), e.isDisposed = !0; + nz(this, PU, "f").length = 0, clearInterval(nz(this, UU, "f")), null != nz(this, ZU, "f") && nz(this, ZU, "f").release().catch((e => { + console.error(e) + })) + } + update(e) { + if (nz(this, TU, "f").hasLoaded()) { + const e = new Date, + t = (e.getTime() - nz(this, OU, "f").getTime()) / 1e3; + let n = ""; + nz(this, BU, "f") ? n += "Recordings are being verified...\n" : n += "Error: User is no longer a verifier\n", n += "\nBacklog: " + nz(this, NU, "f").length.toString(), n += "\nProcessing: " + nz(this, FU, "f").toString(), n += "\nRecordings verified: " + nz(this, WU, "f").toString(), n += "\nInvalid recordings found: " + nz(this, VU, "f").toString(), n += "\n", n += "\nVerifications per second: " + (nz(this, WU, "f") / t).toFixed(2), n += "\nSimulated frames per second: " + Math.floor(nz(this, HU, "f") / t).toString(), nz(this, CU, "f").setTracks(nz(this, IU, "f").map((({ + id: t, + name: n, + timeout: i, + recordingsVerified: r, + invalidRecordings: a, + estimatedRemaining: s + }) => ({ + id: t, + name: n, + exhausted: i > e, + recordingsVerified: r, + invalidRecordings: a, + estimatedRemaining: s + })))), nz(this, CU, "f").setText(n) + } + nz(this, kU, "f").update(e, !1, nz(this, EU, "f"), nz(this, SU, "f")) + } + }, + rz = { + "Checkpoint order": "ترتيب النقاط التفتيشية", + Height: "الارتفاع", + Exit: "خروج", + Random: "عشوائي", + Primary: "أساسي", + Secondary: "ثانوي", + Frame: "الإطار", + Rims: "الجنوط", + "Are you sure you want to exit without saving?": "هل أنت متأكد من أنك تريد الخروج دون حفظ؟", + "All changes will be lost!": "سيتم فقدان جميع التغييرات!", + "Car saved!": "تم حفظ السيارة!", + Test: "اختبار", + "Starting point is missing!": "نقطة البداية مفقودة!", + Generate: "إنشاء", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "هل أنت متأكد من أنك تريد إنشاء مسار جديد؟\n\nسيتم فقدان المسار الحالي!", + Load: "تحميل", + Save: "حفظ", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "هل أنت متأكد من أنك تريد تحميل مسار جديد؟\n\nسيتم فقدان المسار الحالي!", + "Track saved!": "تم حفظ المسار!", + "Failed to save!": "فشل الحفظ!", + 'Are you sure you want to overwrite "{0}"?': 'هل أنت متأكد من أنك تريد الكتابة فوق "{0}"؟', + Export: "تصدير", + Help: "مساعدة", + "Are you sure you want to exit the editor?": "هل أنت متأكد من أنك تريد الخروج من المحرر؟", + "All unsaved data will be lost!": "سيتم فقدان جميع البيانات غير المحفوظة!", + "Track settings": "إعدادات المسار", + "Unnamed Track": "مسار بدون اسم", + "Track name": "اسم المسار", + Author: "المؤلف", + Unknown: "غير معروف", + Environment: "البيئة", + Summer: "الصيف", + Winter: "الشتاء", + Desert: "الصحراء", + "Sun direction": "اتجاه الشمس", + "How to use the editor": "كيفية استخدام المحرر", + "Camera controls": "ضوابط الكاميرا", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "يمكن تحريك الكاميرا بالنقر بزر الماوس الأيمن وسحب الماوس. قم بتدوير الكاميرا بالنقر على زر الماوس الأوسط (عجلة الماوس) أو بالضغط على مفتاح التحكم والنقر بزر الماوس الأيمن وسحب الماوس. قم بالتكبير والتصغير عن طريق تمرير عجلة الماوس.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "بدلاً من ذلك، يمكن أيضًا التحكم في الكاميرا باستخدام مفاتيح لوحة المفاتيح التالية:", + "Move forwards:": "تحرك للأمام:", + "Move backwards:": "تحرك للخلف:", + "Move left:": "تحرك لليسار:", + "Move right:": "تحرك لليمين:", + "Rotate left:": "تدوير لليسار:", + "Rotate right:": "تدوير لليمين:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "يمكن تغيير الارتفاع المحرر إما باستخدام اختيار الارتفاع في الزاوية السفلية اليسرى، أو بالضغط على مفتاح Shift وتمرير عجلة الماوس. بدلاً من ذلك، يمكنك استخدام مفاتيح لوحة المفاتيح التالية:", + "Move up:": "تحرك لأعلى:", + "Move down:": "تحرك لأسفل:", + Editing: "تحرير", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "يمكن اختيار أجزاء المسار في القائمة الموجودة على اليمين وبعد ذلك يمكن وضعها بالنقر بزر الماوس الأيسر.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "بدلاً من ذلك، يمكن اختيار جزء المسار الذي يتم تحويمه حاليًا بواسطة الماوس باستخدام اختصار لوحة المفاتيح التالي:", + "The selected part can then be rotated using the following keyboard shortcut:": "يمكن بعد ذلك تدوير الجزء المحدد باستخدام اختصار لوحة المفاتيح التالي:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "يمكن حذف أجزاء المسار باستخدام أداة الحذف في القائمة الجانبية اليمنى أو بالضغط على المفتاح التالي:", + "Starting points, checkpoints and the finish line": "نقاط البداية ونقاط التفتيش وخط النهاية", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "يمكن اختيار نقاط البداية ونقاط التفتيش وخطوط النهاية جميعها في الفئة العليا في القائمة الجانبية اليمنى.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "يجب أن يحتوي كل مسار على نقطة بداية واحدة على الأقل. إذا كانت هناك نقاط بداية متعددة، فسيتم استخدام آخر نقطة تم وضعها.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "يجب وضع نقاط التفتيش بين نقطة البداية وخط النهاية. عند اختيار جزء مسار نقطة التفتيش، سيكون هناك أداة في الزاوية السفلية اليمنى لاختيار ترتيب نقطة التفتيش. يحدد هذا الترتيب الذي يجب أن تمر به نقاط التفتيش قبل القيادة إلى خط النهاية. لاحظ أنه من الممكن أن يكون هناك نقاط تفتيش متعددة بنفس ترتيب نقطة التفتيش.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "خط النهاية هو المكان الذي ينتهي فيه المسار ولكنه سيصبح نشطًا فقط بعد اجتياز جميع نقاط التفتيش. من الممكن أيضًا أن يكون هناك خطوط نهاية متعددة.", + "Starting point": "نقطة البداية", + Checkpoint: "نقطة التفتيش", + "Finish line": "خط النهاية", + "Exporting the track": "تصدير المسار", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "عند الانتهاء من المسار، يمكن إدخال اسم للمسار في الزاوية العلوية اليسرى وبعد ذلك يمكن تصدير المسار باستخدام زر التصدير. سيظهر رمز المسار الذي يمكن إرساله إلى مستخدمين آخرين حتى يتمكنوا من استيراد وتشغيل المسار.", + Close: "إغلاق", + "Not set": "غير محدد", + or: "أو", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "يمكن تحريك الكاميرا بالنقر بزر الماوس الأيمن وسحب الماوس. قم بتدوير الكاميرا بالنقر على زر الماوس الأوسط (عجلة الماوس) أو بالضغط على مفتاح التحكم والنقر بزر الماوس الأيمن وسحب الماوس. قم بالتكبير والتصغير عن طريق تمرير عجلة الماوس.", + "The edited height can be changed by using the height selection in the bottom left corner.": "يمكن تغيير الارتفاع المحرر باستخدام اختيار الارتفاع في الزاوية السفلية اليسرى.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "يمكن اختيار أجزاء المسار في القائمة الموجودة على اليمين وبعد ذلك يمكن وضعها بالنقر على الشاشة.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "يمكن بعد ذلك تدوير الجزء المحدد بالنقر على زر الدوران في الزاوية السفلية اليسرى.", + "Track parts can be deleted by using the delete tool in the right side menu.": "يمكن حذف أجزاء المسار باستخدام أداة الحذف في القائمة الجانبية اليمنى.", + Watch: "مشاهدة", + "Loading replay": "جاري تحميل التسجيل", + "Press {0} to return to the last checkpoint": "اضغط {0} للعودة إلى آخر نقطة تفتيش", + "Press {0} to start over": "اضغط {0} للبدء من جديد", + "Reset once to return to the last checkpoint": "إعادة تعيين مرة واحدة للعودة إلى آخر نقطة تفتيش", + "Reset again to start over": "إعادة تعيين مرة أخرى للبدء من جديد", + Leaderboard: "التصنيف", + Back: "عودة", + "Error: Failed to load leaderboard": "خطأ: فشل تحميل التصنيف", + Pending: "قيد الانتظار", + Verified: "تم التحقق", + Invalid: "غير صالح", + Duplicate: "مكرر", + You: "أنت", + "Only verified": "المحققون فقط", + Loading: "جاري التحميل", + "Failed to load recordings": "فشل تحميل التسجيلات", + "Cannot load recordings due to non-determinism": "لا يمكن تحميل التسجيلات بسبب عدم التحديد", + Ok: "موافق", + "Track is missing starting point": "المسار يفتقد نقطة البداية", + "Some leaderboard features are disabled.": "تم تعطيل بعض ميزات التصنيف.", + "Please try another browser or device.": "يرجى محاولة متصفح أو جهاز آخر.", + "You already have another instance of PolyTrack open.": "لديك بالفعل نسخة أخرى من PolyTrack مفتوحة.", + "Please switch to that tab or window to continue.": "يرجى التبديل إلى تلك التبويب أو النافذة للمتابعة.", + "Computer determinism check failed.": "فشل فحص التحديد الحاسوبي.", + "Non-deterministic game assets found.": "تم العثور على موارد اللعبة غير الحاسوبية.", + "Please try clearing your browser cache.": "يرجى محاولة مسح ذاكرة التخزين المؤقت للمتصفح.", + Customize: "تخصيص", + Editor: "المحرر", + Settings: "الإعدادات", + Profile: "الملف الشخصي", + Play: "إلعب", + Version: "الإصدار", + "You cannot have duplicate user profiles": "لا يمكنك امتلاك ملفات تعريف مستخدم مكررة", + "Failed to create user profile": "فشل في إنشاء ملف تعريف المستخدم", + "This user profile does not exist on the server": "هذا الملف الشخصي للمستخدم غير موجود على الخادم", + "Failed to download user profile from the server": "فشل في تحميل ملف تعريف المستخدم من الخادم", + "User token is invalid": "رمز المستخدم غير صالح", + "Are you sure you want to display your private key?": "هل أنت متأكد أنك تريد عرض المفتاح الخاص؟", + "DO NOT SHARE THIS KEY WITH ANYONE.": "لا تشارك هذا المفتاح مع أي شخص.", + "You need a free user profile slot to import a new user profile": "تحتاج إلى فتحة ملف تعريف مستخدم فارغة لاستيراد ملف تعريف مستخدم جديد", + Quit: "الخروج", + Fullscreen: "ملء الشاشة", + Windowed: "نافذة", + " ": "يبدو أنك تلعب نسخة غير رسمية من {0}. للحصول على أحدث إصدار يرجى زيارة المصدر الأصلي:", + Nickname: "اسم المستخدم", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "اختر اسم مستخدم ليظهر في التصنيف. يمكنك تغيير اسم المستخدم في أي وقت.", + Cancel: "إلغاء", + Confirm: "تأكيد", + Verifier: "التحقق", + "User ID": "معرف المستخدم", + Paused: "متوقف", + "Switch car": "تبديل السيارة", + Profiles: "الملفات", + 'Are you sure you would like to delete "{0}"?': 'هل أنت متأكد أنك تريد حذف "{0}"؟', + Empty: "فارغ", + Reset: "إعادة تعيين", + Apply: "تطبيق", + Gameplay: "أسلوب اللعب", + Units: "الوحدات", + Metric: "متري", + Imperial: "إمبراطوري", + "Reset hint": "إعادة تعيين التلميح", + Disabled: "معطل", + Enabled: "مفعل", + "Ghost car": "سيارة الشبح", + "Default camera": "الكاميرا الافتراضية", + Default: "افتراضي", + Cockpit: "القمرة", + "Cockpit camera mode": "وضع الكاميرا في القمرة", + Hold: "استمرار", + Toggle: "تبديل", + Checkpoints: "نقاط التفتيش", + Timer: "المؤقت", + Speedometer: "عداد السرعة", + Bottom: "أسفل", + Top: "أعلى", + Language: "اللغة", + Graphics: "الجرافيكس", + "Car shadow": "ظل السيارة", + "Track shadow": "ظل المسار", + Off: "إيقاف", + On: "تشغيل", + Low: "منخفض", + Medium: "متوسط", + High: "عالي", + Clouds: "السحب", + Particles: "الجسيمات", + Skidmarks: "علامات الانزلاق", + "Render scale": "مقياس الرسم", + "Anti-aliasing (requires restart)": "تمويه الحواف (يتطلب إعادة التشغيل)", + Audio: "الصوت", + "Sound effect volume": "مستوى تأثير الصوت", + "Music volume": "مستوى الموسيقى", + "Checkpoint volume": "مستوى نقطة التفتيش", + Controls: "التحكم", + Vehicle: "المركبة", + Accelerate: "التسارع", + Brake: "الفرامل", + "Turn left": "الدوران لليسار", + "Turn right": "الدوران لليمين", + "Checkpoint reset": "إعادة تعيين نقطة التفتيش", + "Start reset": "إعادة تعيين البداية", + "Cockpit camera": "كاميرا القمرة", + "Rotate part": "تدوير الجزء", + "Height modifier": "معدل الارتفاع", + "Delete part": "حذف الجزء", + "Move forwards": "تحرك للأمام", + "Move backwards": "تحرك للخلف", + "Move left": "تحرك لليسار", + "Move right": "تحرك لليمين", + "Rotate view up": "تدوير العرض لأعلى", + "Rotate view down": "تدوير العرض لأسفل", + "Rotate view left": "تدوير العرض لليسار", + "Rotate view right": "تدوير العرض لليمين", + "Move down": "تحرك لأسفل", + "Move up": "تحرك لأعلى", + "Test track": "اختبار المسار", + "Pick part": "اختيار الجزء", + Spectator: "المشاهد", + "Speed modifier": "معدل السرعة", + Other: "أخرى", + "Hide UI": "إخفاء واجهة المستخدم", + Pause: "إيقاف مؤقت", + "Toggle FPS counter": "تبديل عداد الإطارات في الثانية", + "Toggle spectator camera": "تبديل كاميرا المشاهد", + "Press any key...\n\nPress [Escape] to cancel.": "اضغط على أي مفتاح...\n\nاضغط [إلغاء] للإلغاء.", + Clear: "مسح", + "New record": "رقم قياسي جديد", + Record: "الرقم القياسي", + Current: "الحالي", + Difference: "الفرق", + Copy: "نسخ", + Import: "استيراد", + "Failed to import track": "فشل استيراد المسار", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'المسار "{0}" موجود بالفعل. هل ترغب في الكتابة فوقه؟', + Overwrite: "الكتابة فوقه", + "Paste track data here...": "الصق بيانات المسار هنا...", + Rank: "التصنيف", + "Personal best": "الرقم القياسي الشخصي", + Opponents: "المنافسون", + "{0} opponent selected": "{0} منافس محدد", + "{0} opponents selected": "{0} منافسين محددين", + "Select opponents to race against from the leaderboard on the left": "اختر المنافسين للسباق ضدهم من لوحة المتصدرين على اليسار", + "No record": "لا يوجد تسجيل", + "Official tracks": "المسارات الرسمية", + "Community tracks": "المسارات المجتمعية", + "Custom tracks": "المسارات المخصصة", + 'Are you sure you want to delete "{0}"?': 'هل أنت متأكد من أنك تريد حذف "{0}"؟', + Delete: "حذف", + "No community tracks": "لا توجد مسارات مجتمعية", + "Community tracks are coming soon": "المسارات المجتمعية قادمة قريبًا", + "No custom tracks": "لا توجد مسارات مخصصة", + "Create a track using the editor or import a track code": "أنشئ مسارًا باستخدام المحرر أو استورد رمز مسار", + "Search tracks...": "البحث عن مسارات...", + "Invalid replay detected!": "تم اكتشاف تسجيل غير صالح!" + }, + az = { + "Checkpoint order": "Kontrollpunktreihenfolge", + Height: "Höhe", + Exit: "Beenden", + Random: "Zufällig", + Primary: "Primär", + Secondary: "Sekundär", + Frame: "Rahmen", + Rims: "Felgen", + "Are you sure you want to exit without saving?": "Sind Sie sicher, dass Sie ohne Speichern beenden möchten?", + "All changes will be lost!": "Alle Änderungen gehen verloren!", + "Car saved!": "Auto gespeichert!", + Test: "Test", + "Starting point is missing!": "Startpunkt fehlt!", + Generate: "Generieren", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Sind Sie sicher, dass Sie eine neue Strecke generieren möchten?\n\nIhre aktuelle Strecke geht verloren!", + Load: "Laden", + Save: "Speichern", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Sind Sie sicher, dass Sie eine neue Strecke laden möchten?\n\nIhre aktuelle Strecke geht verloren!", + "Track saved!": "Strecke gespeichert!", + "Failed to save!": "Speichern fehlgeschlagen!", + 'Are you sure you want to overwrite "{0}"?': 'Sind Sie sicher, dass Sie "{0}" überschreiben möchten?', + Export: "Exportieren", + Help: "Hilfe", + "Are you sure you want to exit the editor?": "Sind Sie sicher, dass Sie den Editor verlassen möchten?", + "All unsaved data will be lost!": "Alle nicht gespeicherten Daten gehen verloren!", + "Track settings": "Streckeneinstellungen", + "Unnamed Track": "Unbenannte Strecke", + "Track name": "Streckenname", + Author: "Autor", + Unknown: "Unbekannt", + Environment: "Umgebung", + Summer: "Sommer", + Winter: "Winter", + Desert: "Wüste", + "Sun direction": "Sonnenrichtung", + "How to use the editor": "Wie man den Editor benutzt", + "Camera controls": "Kamerasteuerung", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "Die Kamera kann durch Rechtsklick und Ziehen der Maus bewegt werden. Drehen Sie die Kamera, indem Sie die mittlere Maustaste (Mausrad) klicken oder die Steuerungstaste gedrückt halten und mit der rechten Maustaste ziehen. Zoomen Sie mit dem Mausrad rein und raus.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Alternativ kann die Kamera auch mit den folgenden Tasten gesteuert werden:", + "Move forwards:": "Nach vorne bewegen:", + "Move backwards:": "Nach hinten bewegen:", + "Move left:": "Nach links bewegen:", + "Move right:": "Nach rechts bewegen:", + "Rotate left:": "Nach links drehen:", + "Rotate right:": "Nach rechts drehen:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "Die bearbeitete Höhe kann entweder durch Verwendung der Höhenauswahl in der unteren linken Ecke geändert werden oder indem Sie die Umschalttaste gedrückt halten und das Mausrad scrollen. Alternativ können Sie die folgenden Tasten verwenden:", + "Move up:": "Nach oben bewegen:", + "Move down:": "Nach unten bewegen:", + Editing: "Bearbeiten", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Streckenteile können im Menü auf der rechten Seite ausgewählt werden, danach können sie durch Linksklick mit der Maus platziert werden.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Alternativ kann das Streckenteil, über das die Maus gerade schwebt, mit der folgenden Tastenkombination ausgewählt werden:", + "The selected part can then be rotated using the following keyboard shortcut:": "Das ausgewählte Teil kann dann mit der folgenden Tastenkombination gedreht werden:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Streckenteile können mit dem Löschwerkzeug im Menü auf der rechten Seite gelöscht werden oder indem Sie die folgende Taste gedrückt halten:", + "Starting points, checkpoints and the finish line": "Startpunkte, Kontrollpunkte und die Ziellinie", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Startpunkte, Kontrollpunkte und Ziellinien können alle in der obersten Kategorie im Menü auf der rechten Seite ausgewählt werden.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Jede Strecke muss mindestens einen Startpunkt haben. Wenn es mehrere Startpunkte gibt, wird der zuletzt platzierte verwendet.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Kontrollpunkte sollten zwischen dem Startpunkt und der Ziellinie platziert werden. Wenn ein Kontrollpunkt-Streckenteil ausgewählt ist, gibt es unten rechts ein Werkzeug, um die Reihenfolge des Kontrollpunkts auszuwählen. Dies bestimmt die Reihenfolge, in der die Kontrollpunkte passiert werden müssen, bevor man zur Ziellinie fährt. Beachten Sie, dass es möglich ist, mehrere Kontrollpunkte mit derselben Kontrollpunkt-Reihenfolge zu haben.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "Die Ziellinie ist der Ort, an dem die Strecke endet, wird aber erst aktiv, nachdem alle Kontrollpunkte passiert wurden. Es ist auch möglich, mehrere Ziellinien zu haben.", + "Starting point": "Startpunkt", + Checkpoint: "Kontrollpunkt", + "Finish line": "Ziellinie", + "Exporting the track": "Exportieren der Strecke", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Wenn die Strecke fertig ist, kann oben links ein Name für die Strecke eingegeben werden, danach kann die Strecke mit dem Export-Button exportiert werden. Dadurch wird ein Streckencode angezeigt, der an andere Benutzer gesendet werden kann, damit sie die Strecke importieren und spielen können.", + Close: "Schließen", + "Not set": "Nicht festgelegt", + or: "oder", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "Die Kamera kann durch Ziehen mit einem Finger bewegt werden. Drehen Sie die Kamera, indem Sie mit zwei Fingern ziehen. Zoomen Sie rein und raus, indem Sie kneifen.", + "The edited height can be changed by using the height selection in the bottom left corner.": "Die bearbeitete Höhe kann durch Verwendung der Höhenauswahl in der unteren linken Ecke geändert werden.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Streckenteile können im Menü auf der rechten Seite ausgewählt werden, danach können sie durch Antippen des Bildschirms platziert werden.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "Das ausgewählte Teil kann dann durch Antippen der Drehen-Schaltfläche in der unteren linken Ecke gedreht werden.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Streckenteile können mit dem Löschwerkzeug im Menü auf der rechten Seite gelöscht werden.", + Watch: "Zuschauen", + "Loading replay": "Wiederholung laden", + "Press {0} to return to the last checkpoint": "Drücken Sie {0}, um zum letzten Kontrollpunkt zurückzukehren", + "Press {0} to start over": "Drücken Sie {0}, um von vorne zu beginnen", + "Reset once to return to the last checkpoint": "Einmal zurücksetzen, um zum letzten Kontrollpunkt zurückzukehren", + "Reset again to start over": "Erneut zurücksetzen, um von vorne zu beginnen", + Leaderboard: "Bestenliste", + Back: "Zurück", + "Error: Failed to load leaderboard": "Fehler: Laden der Bestenliste fehlgeschlagen", + Pending: "Ausstehend", + Verified: "Verifiziert", + Invalid: "Ungültig", + Duplicate: "Duplikat", + You: "Sie", + "Only verified": "Nur verifizierte", + Loading: "Laden", + "Failed to load recordings": "Aufnahmen konnten nicht geladen werden", + "Cannot load recordings due to non-determinism": "Aufgrund von Nicht-Determinismus können keine Aufnahmen geladen werden", + Ok: "Ok", + "Track is missing starting point": "Strecke hat keinen Startpunkt", + "Some leaderboard features are disabled.": "Einige Bestenlistenfunktionen sind deaktiviert.", + "Please try another browser or device.": "Bitte versuchen Sie einen anderen Browser oder ein anderes Gerät.", + "You already have another instance of PolyTrack open.": "Sie haben bereits eine andere Instanz von PolyTrack geöffnet.", + "Please switch to that tab or window to continue.": "Bitte wechseln Sie zu diesem Tab oder Fenster, um fortzufahren.", + "Computer determinism check failed.": "Der Computer-Determinismus-Check ist fehlgeschlagen.", + "Non-deterministic game assets found.": "Nicht-deterministische Spiel-Assets gefunden.", + "Please try clearing your browser cache.": "Bitte versuchen Sie, Ihren Browser-Cache zu löschen.", + Customize: "Anpassen", + Editor: "Editor", + Settings: "Einstellungen", + Profile: "Profil", + Play: "Spielen", + Version: "Version", + "You cannot have duplicate user profiles": "Sie können keine doppelten Benutzerprofile haben", + "Failed to create user profile": "Benutzerprofil konnte nicht erstellt werden", + "This user profile does not exist on the server": "Dieses Benutzerprofil existiert nicht auf dem Server", + "Failed to download user profile from the server": "Benutzerprofil konnte nicht vom Server heruntergeladen werden", + "User token is invalid": "Benutzertoken ist ungültig", + "Are you sure you want to display your private key?": "Möchten Sie Ihren privaten Schlüssel wirklich anzeigen?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "TEILEN SIE DIESEN SCHLÜSSEL NICHT MIT JEMANDEM.", + "You need a free user profile slot to import a new user profile": "Sie benötigen einen freien Benutzerprofil-Slot, um ein neues Benutzerprofil zu importieren", + Quit: "Beenden", + Fullscreen: "Vollbild", + Windowed: "Fenstermodus", + " ": "Es scheint, dass Sie eine inoffizielle Version von {0} spielen. Für die aktuellste Version besuchen Sie bitte die Originalquelle:", + Nickname: "Spitzname", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Wählen Sie einen Spitznamen, der in der Bestenliste angezeigt wird. Ihr Spitzname kann jederzeit geändert werden.", + Cancel: "Abbrechen", + Confirm: "Bestätigen", + Verifier: "Verifizierer", + "User ID": "Benutzer-ID", + Paused: "Pausiert", + "Switch car": "Auto wechseln", + Profiles: "Profile", + 'Are you sure you would like to delete "{0}"?': 'Möchten Sie "{0}" wirklich löschen?', + Empty: "Leer", + Reset: "Zurücksetzen", + Apply: "Anwenden", + Gameplay: "Spielablauf", + Units: "Einheiten", + Metric: "Metrisch", + Imperial: "Imperial", + "Reset hint": "Hinweis zurücksetzen", + Disabled: "Deaktiviert", + Enabled: "Aktiviert", + "Ghost car": "Geisterauto", + "Default camera": "Standardkamera", + Default: "Standard", + Cockpit: "Cockpit", + "Cockpit camera mode": "Cockpit-Kameramodus", + Hold: "Halten", + Toggle: "Umschalten", + Checkpoints: "Kontrollpunkte", + Timer: "Timer", + Speedometer: "Tachometer", + Bottom: "Unten", + Top: "Oben", + Language: "Sprache", + Graphics: "Grafik", + "Car shadow": "Auto-Schatten", + "Track shadow": "Strecken-Schatten", + Off: "Aus", + On: "An", + Low: "Niedrig", + Medium: "Mittel", + High: "Hoch", + Clouds: "Wolken", + Particles: "Partikel", + Skidmarks: "Reifenspuren", + "Render scale": "Render-Skalierung", + "Anti-aliasing (requires restart)": "Antialiasing (erfordert Neustart)", + Audio: "Audio", + "Sound effect volume": "Lautstärke Soundeffekte", + "Music volume": "Lautstärke Musik", + "Checkpoint volume": "Lautstärke Kontrollpunkt", + Controls: "Steuerung", + Vehicle: "Fahrzeug", + Accelerate: "Beschleunigen", + Brake: "Bremsen", + "Turn left": "Nach links lenken", + "Turn right": "Nach rechts lenken", + "Checkpoint reset": "Kontrollpunkt zurücksetzen", + "Start reset": "Start zurücksetzen", + "Cockpit camera": "Cockpit-Kamera", + "Rotate part": "Teil drehen", + "Height modifier": "Höhenmodifikator", + "Delete part": "Teil löschen", + "Move forwards": "Nach vorne bewegen", + "Move backwards": "Nach hinten bewegen", + "Move left": "Nach links bewegen", + "Move right": "Nach rechts bewegen", + "Rotate view up": "Ansicht nach oben drehen", + "Rotate view down": "Ansicht nach unten drehen", + "Rotate view left": "Ansicht nach links drehen", + "Rotate view right": "Ansicht nach rechts drehen", + "Move down": "Nach unten bewegen", + "Move up": "Nach oben bewegen", + "Test track": "Strecke testen", + "Pick part": "Teil auswählen", + Spectator: "Zuschauer", + "Speed modifier": "Geschwindigkeitsmodifikator", + Other: "Sonstiges", + "Hide UI": "UI ausblenden", + Pause: "Pause", + "Toggle FPS counter": "FPS-Zähler umschalten", + "Toggle spectator camera": "Zuschauerkamera umschalten", + "Press any key...\n\nPress [Escape] to cancel.": "Drücken Sie eine beliebige Taste...\n\nDrücken Sie [Escape], um abzubrechen.", + Clear: "Löschen", + "New record": "Neuer Rekord", + Record: "Rekord", + Current: "Aktuell", + Difference: "Differenz", + Copy: "Kopieren", + Import: "Importieren", + "Failed to import track": "Import der Strecke fehlgeschlagen", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'Die Strecke "{0}" existiert bereits. Möchten Sie sie überschreiben?', + Overwrite: "Überschreiben", + "Paste track data here...": "Streckendaten hier einfügen...", + Rank: "Rang", + "Personal best": "Persönlicher Rekord", + Opponents: "Gegner", + "{0} opponent selected": "{0} Gegner ausgewählt", + "{0} opponents selected": "{0} Gegner ausgewählt", + "Select opponents to race against from the leaderboard on the left": "Wählen Sie Gegner aus der Bestenliste links aus, gegen die Sie antreten möchten", + "No record": "Kein Rekord", + "Official tracks": "Offizielle Strecken", + "Community tracks": "Community-Strecken", + "Custom tracks": "Benutzerdefinierte Strecken", + 'Are you sure you want to delete "{0}"?': 'Sind Sie sicher, dass Sie "{0}" löschen möchten?', + Delete: "Löschen", + "No community tracks": "Keine Community-Strecken", + "Community tracks are coming soon": "Community-Strecken kommen bald", + "No custom tracks": "Keine benutzerdefinierten Strecken", + "Create a track using the editor or import a track code": "Erstellen Sie eine Strecke mit dem Editor oder importieren Sie einen Streckencode", + "Search tracks...": "Strecken suchen...", + "Invalid replay detected!": "Ungültige Wiederholung erkannt!" + }, + sz = { + "Checkpoint order": "Checkpoint order", + Height: "Height", + Exit: "Exit", + Random: "Random", + Primary: "Primary", + Secondary: "Secondary", + Frame: "Frame", + Rims: "Rims", + "Are you sure you want to exit without saving?": "Are you sure you want to exit without saving?", + "All changes will be lost!": "All changes will be lost!", + "Car saved!": "Car saved!", + Test: "Test", + "Starting point is missing!": "Starting point is missing!", + Generate: "Generate", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Are you sure you want to generate a new track?\n\nYour current track will be lost!", + Load: "Load", + Save: "Save", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Are you sure you want to load a new track?\n\nYour current track will be lost!", + "Track saved!": "Track saved!", + "Failed to save!": "Failed to save!", + 'Are you sure you want to overwrite "{0}"?': 'Are you sure you want to overwrite "{0}"?', + Export: "Export", + Help: "Help", + "Are you sure you want to exit the editor?": "Are you sure you want to exit the editor?", + "All unsaved data will be lost!": "All unsaved data will be lost!", + "Track settings": "Track settings", + "Unnamed Track": "Unnamed Track", + "Track name": "Track name", + Author: "Author", + Unknown: "Unknown", + Environment: "Environment", + Summer: "Summer", + Winter: "Winter", + Desert: "Desert", + "Sun direction": "Sun direction", + "How to use the editor": "How to use the editor", + "Camera controls": "Camera controls", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Alternatively, the camera can also be controlled using the following keyboard keys:", + "Move forwards:": "Move forwards:", + "Move backwards:": "Move backwards:", + "Move left:": "Move left:", + "Move right:": "Move right:", + "Rotate left:": "Rotate left:", + "Rotate right:": "Rotate right:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:", + "Move up:": "Move up:", + "Move down:": "Move down:", + Editing: "Editing", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:", + "The selected part can then be rotated using the following keyboard shortcut:": "The selected part can then be rotated using the following keyboard shortcut:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:", + "Starting points, checkpoints and the finish line": "Starting points, checkpoints and the finish line", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.", + "Starting point": "Starting point", + Checkpoint: "Checkpoint", + "Finish line": "Finish line", + "Exporting the track": "Exporting the track", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.", + Close: "Close", + "Not set": "Not set", + or: "or", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.", + "The edited height can be changed by using the height selection in the bottom left corner.": "The edited height can be changed by using the height selection in the bottom left corner.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "The selected part can then be rotated by tapping the rotate button in the bottom left corner.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Track parts can be deleted by using the delete tool in the right side menu.", + Watch: "Watch", + "Loading replay": "Loading replay", + "Press {0} to return to the last checkpoint": "Press {0} to return to the last checkpoint", + "Press {0} to start over": "Press {0} to start over", + "Reset once to return to the last checkpoint": "Reset once to return to the last checkpoint", + "Reset again to start over": "Reset again to start over", + Leaderboard: "Leaderboard", + Back: "Back", + "Error: Failed to load leaderboard": "Error: Failed to load leaderboard", + Pending: "Pending", + Verified: "Verified", + Invalid: "Invalid", + Duplicate: "Duplicate", + You: "You", + "Only verified": "Only verified", + Loading: "Loading", + "Failed to load recordings": "Failed to load recordings", + "Cannot load recordings due to non-determinism": "Cannot load recordings due to non-determinism", + Ok: "Ok", + "Track is missing starting point": "Track is missing starting point", + "Some leaderboard features are disabled.": "Some leaderboard features are disabled.", + "Please try another browser or device.": "Please try another browser or device.", + "You already have another instance of PolyTrack open.": "You already have another instance of PolyTrack open.", + "Please switch to that tab or window to continue.": "Please switch to that tab or window to continue.", + "Computer determinism check failed.": "Computer determinism check failed.", + "Non-deterministic game assets found.": "Non-deterministic game assets found.", + "Please try clearing your browser cache.": "Please try clearing your browser cache.", + Customize: "Customize", + Editor: "Editor", + Settings: "Settings", + Profile: "Profile", + Play: "Play", + Version: "Version", + "You cannot have duplicate user profiles": "You cannot have duplicate user profiles", + "Failed to create user profile": "Failed to create user profile", + "This user profile does not exist on the server": "This user profile does not exist on the server", + "Failed to download user profile from the server": "Failed to download user profile from the server", + "User token is invalid": "User token is invalid", + "Are you sure you want to display your private key?": "Are you sure you want to display your private key?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "DO NOT SHARE THIS KEY WITH ANYONE.", + "You need a free user profile slot to import a new user profile": "You need a free user profile slot to import a new user profile", + Quit: "Quit", + Fullscreen: "Fullscreen", + Windowed: "Windowed", + " ": " ", + Nickname: "Nickname", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.", + Cancel: "Cancel", + Confirm: "Confirm", + Verifier: "Verifier", + "User ID": "User ID", + Paused: "Paused", + "Switch car": "Switch car", + Profiles: "Profiles", + 'Are you sure you would like to delete "{0}"?': 'Are you sure you would like to delete "{0}"?', + Empty: "Empty", + Reset: "Reset", + Apply: "Apply", + Gameplay: "Gameplay", + Units: "Units", + Metric: "Metric", + Imperial: "Imperial", + "Reset hint": "Reset hint", + Disabled: "Disabled", + Enabled: "Enabled", + "Ghost car": "Ghost car", + "Default camera": "Default camera", + Default: "Default", + Cockpit: "Cockpit", + "Cockpit camera mode": "Cockpit camera mode", + Hold: "Hold", + Toggle: "Toggle", + Checkpoints: "Checkpoints", + Timer: "Timer", + Speedometer: "Speedometer", + Bottom: "Bottom", + Top: "Top", + Language: "Language", + Graphics: "Graphics", + "Car shadow": "Car shadow", + "Track shadow": "Track shadow", + Off: "Off", + On: "On", + Low: "Low", + Medium: "Medium", + High: "High", + Clouds: "Clouds", + Particles: "Particles", + Skidmarks: "Skidmarks", + "Render scale": "Render scale", + "Anti-aliasing (requires restart)": "Anti-aliasing (requires restart)", + Audio: "Audio", + "Sound effect volume": "Sound effect volume", + "Music volume": "Music volume", + "Checkpoint volume": "Checkpoint volume", + Controls: "Controls", + Vehicle: "Vehicle", + Accelerate: "Accelerate", + Brake: "Brake", + "Turn left": "Turn left", + "Turn right": "Turn right", + "Checkpoint reset": "Checkpoint reset", + "Start reset": "Start reset", + "Cockpit camera": "Cockpit camera", + "Rotate part": "Rotate part", + "Height modifier": "Height modifier", + "Delete part": "Delete part", + "Move forwards": "Move forwards", + "Move backwards": "Move backwards", + "Move left": "Move left", + "Move right": "Move right", + "Rotate view up": "Rotate view up", + "Rotate view down": "Rotate view down", + "Rotate view left": "Rotate view left", + "Rotate view right": "Rotate view right", + "Move down": "Move down", + "Move up": "Move up", + "Test track": "Test track", + "Pick part": "Pick part", + Spectator: "Spectator", + "Speed modifier": "Speed modifier", + Other: "Other", + "Hide UI": "Hide UI", + Pause: "Pause", + "Toggle FPS counter": "Toggle FPS counter", + "Toggle spectator camera": "Toggle spectator camera", + "Press any key...\n\nPress [Escape] to cancel.": "Press any key...\n\nPress [Escape] to cancel.", + Clear: "Clear", + "New record": "New record", + Record: "Record", + Current: "Current", + Difference: "Difference", + Copy: "Copy", + Import: "Import", + "Failed to import track": "Failed to import track", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'The track "{0}" already exists. Do you wish to overwrite it?', + Overwrite: "Overwrite", + "Paste track data here...": "Paste track data here...", + Rank: "Rank", + "Personal best": "Personal best", + Opponents: "Opponents", + "{0} opponent selected": "{0} opponent selected", + "{0} opponents selected": "{0} opponents selected", + "Select opponents to race against from the leaderboard on the left": "Select opponents to race against from the leaderboard on the left", + "No record": "No record", + "Official tracks": "Official tracks", + "Community tracks": "Community tracks", + "Custom tracks": "Custom tracks", + 'Are you sure you want to delete "{0}"?': 'Are you sure you want to delete "{0}"?', + Delete: "Delete", + "No community tracks": "No community tracks", + "Community tracks are coming soon": "Community tracks are coming soon", + "No custom tracks": "No custom tracks", + "Create a track using the editor or import a track code": "Create a track using the editor or import a track code", + "Search tracks...": "Search tracks...", + "Invalid replay detected!": "Invalid replay detected!" + }, + oz = { + "Checkpoint order": "Orden de puntos de control", + Height: "Altura", + Exit: "Salir", + Random: "Aleatorio", + Primary: "Primario", + Secondary: "Secundario", + Frame: "Marco", + Rims: "Llantas", + "Are you sure you want to exit without saving?": "¿Estás seguro de que deseas salir sin guardar?", + "All changes will be lost!": "¡Todos los cambios se perderán!", + "Car saved!": "¡Coche guardado!", + Test: "Prueba", + "Starting point is missing!": "¡Falta el punto de inicio!", + Generate: "Generar", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "¿Estás seguro de que deseas generar una nueva pista?\n\n¡Tu pista actual se perderá!", + Load: "Cargar", + Save: "Guardar", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "¿Estás seguro de que deseas cargar una nueva pista?\n\n¡Tu pista actual se perderá!", + "Track saved!": "¡Pista guardada!", + "Failed to save!": "Error al guardar!", + 'Are you sure you want to overwrite "{0}"?': '¿Estás seguro de que deseas sobrescribir "{0}"?', + Export: "Exportar", + Help: "Ayuda", + "Are you sure you want to exit the editor?": "¿Estás seguro de que deseas salir del editor?", + "All unsaved data will be lost!": "¡Se perderán todos los datos no guardados!", + "Track settings": "Configuración de la pista", + "Unnamed Track": "Pista sin nombre", + "Track name": "Nombre de la pista", + Author: "Autor", + Unknown: "Desconocido", + Environment: "Entorno", + Summer: "Verano", + Winter: "Invierno", + Desert: "Desierto", + "Sun direction": "Dirección del sol", + "How to use the editor": "Cómo usar el editor", + "Camera controls": "Controles de la cámara", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "La cámara se puede mover haciendo clic derecho y arrastrando el ratón. Gira la cámara haciendo clic con el botón central del ratón (rueda del ratón) o manteniendo presionada la tecla de control y haciendo clic derecho y arrastrando el ratón. Acércate y aléjate desplazando la rueda del ratón.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Alternativamente, la cámara también se puede controlar usando las siguientes teclas del teclado:", + "Move forwards:": "Mover hacia adelante:", + "Move backwards:": "Mover hacia atrás:", + "Move left:": "Mover a la izquierda:", + "Move right:": "Mover a la derecha:", + "Rotate left:": "Girar a la izquierda:", + "Rotate right:": "Girar a la derecha:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "La altura editada se puede cambiar ya sea usando la selección de altura en la esquina inferior izquierda, o manteniendo presionada la tecla de mayúsculas y desplazando la rueda del ratón. Alternativamente, puedes usar las siguientes teclas del teclado:", + "Move up:": "Mover hacia arriba:", + "Move down:": "Mover hacia abajo:", + Editing: "Edición", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Las partes de la pista se pueden seleccionar en el menú de la derecha, después de lo cual se pueden colocar haciendo clic izquierdo con el ratón.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Alternativamente, la parte de la pista actualmente sobrevolada por el ratón se puede seleccionar con el siguiente atajo de teclado:", + "The selected part can then be rotated using the following keyboard shortcut:": "La parte seleccionada se puede girar usando el siguiente atajo de teclado:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Las partes de la pista se pueden eliminar usando la herramienta de eliminación en el menú del lado derecho o manteniendo presionada la siguiente tecla:", + "Starting points, checkpoints and the finish line": "Puntos de inicio, puntos de control y la línea de meta", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Los puntos de inicio, puntos de control y líneas de meta se pueden seleccionar en la categoría superior del menú del lado derecho.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Cada pista debe tener al menos un punto de inicio. Si hay varios puntos de inicio, se usará el último colocado.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Los puntos de control deben colocarse entre el punto de inicio y la línea de meta. Cuando se selecciona una parte de la pista de punto de control, habrá una herramienta en la parte inferior derecha para seleccionar el orden del punto de control. Esto determina el orden en que se deben pasar los puntos de control antes de conducir hacia la línea de meta. Ten en cuenta que es posible tener varios puntos de control con el mismo orden de punto de control.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "La línea de meta es donde termina la pista, pero solo se activará después de que se hayan pasado todos los puntos de control. También es posible tener varias líneas de meta.", + "Starting point": "Punto de inicio", + Checkpoint: "Punto de control", + "Finish line": "Línea de meta", + "Exporting the track": "Exportando la pista", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Cuando la pista esté terminada, se puede ingresar un nombre para la pista en la parte superior izquierda, después de lo cual se puede exportar la pista usando el botón de exportación. Esto revelará un código de pista que se puede enviar a otros usuarios para que puedan importar y jugar la pista.", + Close: "Cerrar", + "Not set": "No establecido", + or: "o", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "La cámara se puede mover arrastrando con un dedo. Gira la cámara arrastrando con dos dedos. Acércate y aléjate pellizcando.", + "The edited height can be changed by using the height selection in the bottom left corner.": "La altura editada se puede cambiar usando la selección de altura en la esquina inferior izquierda.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Las partes de la pista se pueden seleccionar en el menú de la derecha, después de lo cual se pueden colocar tocando la pantalla.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "La parte seleccionada se puede girar tocando el botón de rotación en la esquina inferior izquierda.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Las partes de la pista se pueden eliminar usando la herramienta de eliminación en el menú del lado derecho.", + Watch: "Ver", + "Loading replay": "Cargando repetición", + "Press {0} to return to the last checkpoint": "Presiona {0} para volver al último punto de control", + "Press {0} to start over": "Presiona {0} para empezar de nuevo", + "Reset once to return to the last checkpoint": "Restablecer una vez para volver al último punto de control", + "Reset again to start over": "Restablecer de nuevo para empezar de nuevo", + Leaderboard: "Tabla de clasificación", + Back: "Volver", + "Error: Failed to load leaderboard": "Error: No se pudo cargar la tabla de clasificación", + Pending: "Pendiente", + Verified: "Verificado", + Invalid: "Inválido", + Duplicate: "Duplicado", + You: "Tú", + "Only verified": "Solo verificados", + Loading: "Cargando", + "Failed to load recordings": "Error al cargar las grabaciones", + "Cannot load recordings due to non-determinism": "No se pueden cargar las grabaciones debido a la no determinismo", + Ok: "Aceptar", + "Track is missing starting point": "Falta el punto de inicio en la pista", + "Some leaderboard features are disabled.": "Algunas funciones de la tabla de clasificación están desactivadas.", + "Please try another browser or device.": "Por favor, prueba otro navegador o dispositivo.", + "You already have another instance of PolyTrack open.": "Ya tienes otra instancia de PolyTrack abierta.", + "Please switch to that tab or window to continue.": "Por favor, cambia a esa pestaña o ventana para continuar.", + "Computer determinism check failed.": "Falló la comprobación de determinismo del ordenador.", + "Non-deterministic game assets found.": "Se encontraron activos de juego no deterministas.", + "Please try clearing your browser cache.": "Por favor, intenta borrar la caché de tu navegador.", + Customize: "Personalizar", + Editor: "Editor", + Settings: "Configuración", + Profile: "Perfil", + Play: "Jugar", + Version: "Versión", + "You cannot have duplicate user profiles": "No puedes tener perfiles de usuario duplicados", + "Failed to create user profile": "No se pudo crear el perfil de usuario", + "This user profile does not exist on the server": "Este perfil de usuario no existe en el servidor", + "Failed to download user profile from the server": "No se pudo descargar el perfil de usuario desde el servidor", + "User token is invalid": "El token de usuario no es válido", + "Are you sure you want to display your private key?": "¿Estás seguro de que quieres mostrar tu clave privada?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "NO COMPARTAS ESTA CLAVE CON NADIE.", + "You need a free user profile slot to import a new user profile": "Necesitas un espacio libre de perfil de usuario para importar un nuevo perfil de usuario", + Quit: "Salir", + Fullscreen: "Pantalla completa", + Windowed: "Ventana", + " ": "Parece que estás jugando una versión no oficial de {0}. Para la versión más actualizada, visita la fuente original:", + Nickname: "Apodo", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Elige un apodo para que aparezca en la tabla de clasificación. Puedes cambiar tu apodo en cualquier momento.", + Cancel: "Cancelar", + Confirm: "Confirmar", + Verifier: "Verificador", + "User ID": "ID de usuario", + Paused: "Pausado", + "Switch car": "Cambiar coche", + Profiles: "Perfiles", + 'Are you sure you would like to delete "{0}"?': '¿Estás seguro de que quieres eliminar "{0}"?', + Empty: "Vacío", + Reset: "Restablecer", + Apply: "Aplicar", + Gameplay: "Jugabilidad", + Units: "Unidades", + Metric: "Métrico", + Imperial: "Imperial", + "Reset hint": "Restablecer pista", + Disabled: "Desactivado", + Enabled: "Activado", + "Ghost car": "Coche fantasma", + "Default camera": "Cámara predeterminada", + Default: "Predeterminado", + Cockpit: "Cabina", + "Cockpit camera mode": "Modo de cámara en la cabina", + Hold: "Mantener", + Toggle: "Alternar", + Checkpoints: "Puntos de control", + Timer: "Temporizador", + Speedometer: "Velocímetro", + Bottom: "Inferior", + Top: "Superior", + Language: "Idioma", + Graphics: "Gráficos", + "Car shadow": "Sombra del coche", + "Track shadow": "Sombra de la pista", + Off: "Apagar", + On: "Encender", + Low: "Bajo", + Medium: "Medio", + High: "Alto", + Clouds: "Nubes", + Particles: "Partículas", + Skidmarks: "Marcas de derrape", + "Render scale": "Escala de renderizado", + "Anti-aliasing (requires restart)": "Anti-aliasing (requiere reinicio)", + Audio: "Audio", + "Sound effect volume": "Volumen de efectos de sonido", + "Music volume": "Volumen de música", + "Checkpoint volume": "Volumen de puntos de control", + Controls: "Controles", + Vehicle: "Vehículo", + Accelerate: "Acelerar", + Brake: "Frenar", + "Turn left": "Girar a la izquierda", + "Turn right": "Girar a la derecha", + "Checkpoint reset": "Restablecer punto de control", + "Start reset": "Restablecer inicio", + "Cockpit camera": "Cámara en la cabina", + "Rotate part": "Girar parte", + "Height modifier": "Modificador de altura", + "Delete part": "Eliminar parte", + "Move forwards": "Mover hacia adelante", + "Move backwards": "Mover hacia atrás", + "Move left": "Mover a la izquierda", + "Move right": "Mover a la derecha", + "Rotate view up": "Girar vista hacia arriba", + "Rotate view down": "Girar vista hacia abajo", + "Rotate view left": "Girar vista a la izquierda", + "Rotate view right": "Girar vista a la derecha", + "Move down": "Mover hacia abajo", + "Move up": "Mover hacia arriba", + "Test track": "Probar pista", + "Pick part": "Seleccionar parte", + Spectator: "Espectador", + "Speed modifier": "Modificador de velocidad", + Other: "Otro", + "Hide UI": "Ocultar IU", + Pause: "Pausa", + "Toggle FPS counter": "Alternar contador de FPS", + "Toggle spectator camera": "Alternar cámara de espectador", + "Press any key...\n\nPress [Escape] to cancel.": "Presiona cualquier tecla...\n\nPresiona [Escape] para cancelar.", + Clear: "Borrar", + "New record": "Nuevo récord", + Record: "Récord", + Current: "Actual", + Difference: "Diferencia", + Copy: "Copiar", + Import: "Importar", + "Failed to import track": "Error al importar la pista", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'La pista "{0}" ya existe. ¿Deseas sobrescribirla?', + Overwrite: "Sobrescribir", + "Paste track data here...": "Pegar datos de la pista aquí...", + Rank: "Rango", + "Personal best": "Mejor marca personal", + Opponents: "Oponentes", + "{0} opponent selected": "{0} oponente seleccionado", + "{0} opponents selected": "{0} oponente seleccionado", + "Select opponents to race against from the leaderboard on the left": "Selecciona oponentes con los que competir en la tabla de clasificación de la izquierda", + "No record": "Sin récord", + "Official tracks": "Pistas oficiales", + "Community tracks": "Pistas de la comunidad", + "Custom tracks": "Pistas personalizadas", + 'Are you sure you want to delete "{0}"?': '¿Estás seguro de que deseas eliminar "{0}"?', + Delete: "Eliminar", + "No community tracks": "No hay pistas de la comunidad", + "Community tracks are coming soon": "Las pistas de la comunidad llegarán pronto", + "No custom tracks": "No hay pistas personalizadas", + "Create a track using the editor or import a track code": "Crea una pista usando el editor o importa un código de pista", + "Search tracks...": "Buscar pistas...", + "Invalid replay detected!": "¡Se detectó una repetición no válida!" + }, + lz = { + "Checkpoint order": "Ordre des points de contrôle", + Height: "Hauteur", + Exit: "Quitter", + Random: "Aléatoire", + Primary: "Principal", + Secondary: "Secondaire", + Frame: "Cadre", + Rims: "Jantes", + "Are you sure you want to exit without saving?": "Êtes-vous sûr de vouloir quitter sans sauvegarder ?", + "All changes will be lost!": "Tous les changements seront perdus !", + "Car saved!": "Voiture sauvegardée !", + Test: "Test", + "Starting point is missing!": "Point de départ manquant !", + Generate: "Générer", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Êtes-vous sûr de vouloir générer une nouvelle piste ?\n\nVotre piste actuelle sera perdue !", + Load: "Charger", + Save: "Enregistrer", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Êtes-vous sûr de vouloir charger une nouvelle piste ?\n\nVotre piste actuelle sera perdue !", + "Track saved!": "Piste enregistrée !", + "Failed to save!": "Échec de l'enregistrement !", + 'Are you sure you want to overwrite "{0}"?': 'Êtes-vous sûr de vouloir écraser "{0}" ?', + Export: "Exporter", + Help: "Aide", + "Are you sure you want to exit the editor?": "Êtes-vous sûr de vouloir quitter l'éditeur ?", + "All unsaved data will be lost!": "Toutes les données non sauvegardées seront perdues !", + "Track settings": "Paramètres de la piste", + "Unnamed Track": "Piste sans nom", + "Track name": "Nom de la piste", + Author: "Auteur", + Unknown: "Inconnu", + Environment: "Environnement", + Summer: "Été", + Winter: "Hiver", + Desert: "Désert", + "Sun direction": "Direction du soleil", + "How to use the editor": "Comment utiliser l'éditeur", + "Camera controls": "Contrôles de la caméra", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "La caméra peut être déplacée en cliquant avec le bouton droit et en faisant glisser la souris. Faites pivoter la caméra en cliquant sur le bouton central de la souris (molette) ou en maintenant la touche de contrôle enfoncée et en cliquant avec le bouton droit et en faisant glisser la souris. Zoomez en avant et en arrière en faisant défiler la molette de la souris.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Alternativement, la caméra peut également être contrôlée en utilisant les touches de clavier suivantes :", + "Move forwards:": "Avancer :", + "Move backwards:": "Reculer :", + "Move left:": "Déplacer à gauche :", + "Move right:": "Déplacer à droite :", + "Rotate left:": "Pivoter à gauche :", + "Rotate right:": "Pivoter à droite :", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "La hauteur modifiée peut être changée en utilisant la sélection de hauteur dans le coin inférieur gauche, ou en maintenant la touche Maj enfoncée et en faisant défiler la molette de la souris. Alternativement, vous pouvez utiliser les touches de clavier suivantes :", + "Move up:": "Monter :", + "Move down:": "Descendre :", + Editing: "Édition", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Les parties de la piste peuvent être sélectionnées dans le menu de droite, après quoi elles peuvent être placées en cliquant avec le bouton gauche de la souris.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Alternativement, la partie de la piste actuellement survolée par la souris peut être sélectionnée avec le raccourci clavier suivant :", + "The selected part can then be rotated using the following keyboard shortcut:": "La partie sélectionnée peut ensuite être pivotée en utilisant le raccourci clavier suivant :", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Les parties de la piste peuvent être supprimées en utilisant l'outil de suppression dans le menu de droite ou en maintenant la touche suivante enfoncée :", + "Starting points, checkpoints and the finish line": "Points de départ, points de contrôle et ligne d'arrivée", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Les points de départ, les points de contrôle et les lignes d'arrivée peuvent tous être sélectionnés dans la catégorie la plus haute du menu de droite.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Chaque piste doit avoir au moins un point de départ. S'il y a plusieurs points de départ, le dernier placé sera utilisé.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Les points de contrôle doivent être placés entre le point de départ et la ligne d'arrivée. Lorsqu'une partie de la piste de point de contrôle est sélectionnée, il y aura un outil en bas à droite pour sélectionner l'ordre du point de contrôle. Cela détermine l'ordre dans lequel les points de contrôle doivent être passés avant de conduire jusqu'à la ligne d'arrivée. Notez qu'il est possible d'avoir plusieurs points de contrôle avec le même ordre de point de contrôle.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "La ligne d'arrivée est l'endroit où la piste se termine mais ne deviendra active qu'après que tous les points de contrôle aient été passés. Il est également possible d'avoir plusieurs lignes d'arrivée.", + "Starting point": "Point de départ", + Checkpoint: "Point de contrôle", + "Finish line": "Ligne d'arrivée", + "Exporting the track": "Exportation de la piste", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Lorsque la piste est terminée, un nom pour la piste peut être entré en haut à gauche, après quoi la piste peut être exportée en utilisant le bouton d'exportation. Cela révélera un code de piste qui peut être envoyé à d'autres utilisateurs afin qu'ils puissent importer et jouer la piste.", + Close: "Fermer", + "Not set": "Non défini", + or: "ou", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "La caméra peut être déplacée en faisant glisser un doigt. Faites pivoter la caméra en faisant glisser deux doigts. Zoomez avant et arrière en pinçant.", + "The edited height can be changed by using the height selection in the bottom left corner.": "La hauteur modifiée peut être changée en utilisant la sélection de hauteur dans le coin inférieur gauche.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Les parties de la piste peuvent être sélectionnées dans le menu de droite, après quoi elles peuvent être placées en tapant sur l'écran.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "La partie sélectionnée peut ensuite être pivotée en tapant sur le bouton de rotation dans le coin inférieur gauche.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Les parties de la piste peuvent être supprimées en utilisant l'outil de suppression dans le menu de droite.", + Watch: "Regarder", + "Loading replay": "Chargement de l'enregistrement", + "Press {0} to return to the last checkpoint": "Appuyez sur {0} pour retourner au dernier point de contrôle", + "Press {0} to start over": "Appuyez sur {0} pour recommencer", + "Reset once to return to the last checkpoint": "Réinitialisez une fois pour retourner au dernier point de contrôle", + "Reset again to start over": "Réinitialisez à nouveau pour recommencer", + Leaderboard: "Classement", + Back: "Retour", + "Error: Failed to load leaderboard": "Erreur : Échec du chargement du classement", + Pending: "En attente", + Verified: "Vérifié", + Invalid: "Invalide", + Duplicate: "Doublon", + You: "Vous", + "Only verified": "Uniquement vérifiés", + Loading: "Chargement", + "Failed to load recordings": "Échec du chargement des enregistrements", + "Cannot load recordings due to non-determinism": "Impossible de charger les enregistrements en raison du non-déterminisme", + Ok: "OK", + "Track is missing starting point": "La piste n'a pas de point de départ", + "Some leaderboard features are disabled.": "Certaines fonctionnalités du classement sont désactivées.", + "Please try another browser or device.": "Veuillez essayer un autre navigateur ou appareil.", + "You already have another instance of PolyTrack open.": "Vous avez déjà une autre instance de PolyTrack ouverte.", + "Please switch to that tab or window to continue.": "Veuillez basculer vers cet onglet ou cette fenêtre pour continuer.", + "Computer determinism check failed.": "Échec de la vérification du déterminisme de l'ordinateur.", + "Non-deterministic game assets found.": "Actifs de jeu non déterministes trouvés.", + "Please try clearing your browser cache.": "Veuillez essayer de vider le cache de votre navigateur.", + Customize: "Personnaliser", + Editor: "Éditeur", + Settings: "Paramètres", + Profile: "Profil", + Play: "Jouer", + Version: "Version", + "You cannot have duplicate user profiles": "Vous ne pouvez pas avoir de profils d'utilisateur en double", + "Failed to create user profile": "Échec de la création du profil utilisateur", + "This user profile does not exist on the server": "Ce profil utilisateur n'existe pas sur le serveur", + "Failed to download user profile from the server": "Échec du téléchargement du profil utilisateur depuis le serveur", + "User token is invalid": "Le jeton utilisateur n'est pas valide", + "Are you sure you want to display your private key?": "Êtes-vous sûr de vouloir afficher votre clé privée ?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "NE PARTAGEZ PAS CETTE CLÉ AVEC PERSONNE.", + "You need a free user profile slot to import a new user profile": "Vous avez besoin d'un emplacement de profil utilisateur libre pour importer un nouveau profil utilisateur", + Quit: "Quitter", + Fullscreen: "Plein écran", + Windowed: "Fenêtré", + " ": "Il semble que vous jouiez à une version non officielle de {0}. Pour la version la plus récente, veuillez visiter la source originale :", + Nickname: "Pseudonyme", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Choisissez un pseudonyme à afficher dans le classement. Vous pouvez changer votre pseudonyme à tout moment.", + Cancel: "Annuler", + Confirm: "Confirmer", + Verifier: "Vérificateur", + "User ID": "ID utilisateur", + Paused: "En pause", + "Switch car": "Changer de voiture", + Profiles: "Profils", + 'Are you sure you would like to delete "{0}"?': 'Êtes-vous sûr de vouloir supprimer "{0}"?', + Empty: "Vide", + Reset: "Réinitialiser", + Apply: "Appliquer", + Gameplay: "Jouabilité", + Units: "Unités", + Metric: "Métrique", + Imperial: "Impérial", + "Reset hint": "Réinitialiser l'astuce", + Disabled: "Désactivé", + Enabled: "Activé", + "Ghost car": "Voiture fantôme", + "Default camera": "Caméra par défaut", + Default: "Défaut", + Cockpit: "Cockpit", + "Cockpit camera mode": "Mode caméra cockpit", + Hold: "Maintenir", + Toggle: "Basculer", + Checkpoints: "Points de contrôle", + Timer: "Minuteur", + Speedometer: "Compteur de vitesse", + Bottom: "Bas", + Top: "Haut", + Language: "Langue", + Graphics: "Graphismes", + "Car shadow": "Ombre de la voiture", + "Track shadow": "Ombre de la piste", + Off: "Désactivé", + On: "Activé", + Low: "Faible", + Medium: "Moyen", + High: "Élevé", + Clouds: "Nuages", + Particles: "Particules", + Skidmarks: "Marques de dérapage", + "Render scale": "Échelle de rendu", + "Anti-aliasing (requires restart)": "Anticrénelage (nécessite un redémarrage)", + Audio: "Audio", + "Sound effect volume": "Volume des effets sonores", + "Music volume": "Volume de la musique", + "Checkpoint volume": "Volume des points de contrôle", + Controls: "Commandes", + Vehicle: "Véhicule", + Accelerate: "Accélérer", + Brake: "Freiner", + "Turn left": "Tourner à gauche", + "Turn right": "Tourner à droite", + "Checkpoint reset": "Réinitialisation du point de contrôle", + "Start reset": "Réinitialisation du départ", + "Cockpit camera": "Caméra cockpit", + "Rotate part": "Pivoter la partie", + "Height modifier": "Modificateur de hauteur", + "Delete part": "Supprimer la partie", + "Move forwards": "Avancer", + "Move backwards": "Reculer", + "Move left": "Déplacer à gauche", + "Move right": "Déplacer à droite", + "Rotate view up": "Pivoter la vue vers le haut", + "Rotate view down": "Pivoter la vue vers le bas", + "Rotate view left": "Pivoter la vue à gauche", + "Rotate view right": "Pivoter la vue à droite", + "Move down": "Descendre", + "Move up": "Monter", + "Test track": "Tester la piste", + "Pick part": "Choisir la partie", + Spectator: "Spectateur", + "Speed modifier": "Modificateur de vitesse", + Other: "Autre", + "Hide UI": "Masquer l'interface utilisateur", + Pause: "Pause", + "Toggle FPS counter": "Basculer le compteur FPS", + "Toggle spectator camera": "Basculer la caméra spectateur", + "Press any key...\n\nPress [Escape] to cancel.": "Appuyez sur n'importe quelle touche...\n\nAppuyez sur [Échap] pour annuler.", + Clear: "Effacer", + "New record": "Nouveau record", + Record: "Record", + Current: "Actuel", + Difference: "Différence", + Copy: "Copier", + Import: "Importer", + "Failed to import track": "Échec de l'importation de la piste", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'La piste "{0}" existe déjà. Souhaitez-vous l\'écraser ?', + Overwrite: "Écraser", + "Paste track data here...": "Collez les données de la piste ici...", + Rank: "Classement", + "Personal best": "Meilleur temps personnel", + Opponents: "Adversaires", + "{0} opponent selected": "{0} adversaire sélectionné", + "{0} opponents selected": "{0} adversaires sélectionnés", + "Select opponents to race against from the leaderboard on the left": "Sélectionnez des adversaires contre lesquels courir dans le classement sur la gauche", + "No record": "Pas de record", + "Official tracks": "Pistes officielles", + "Community tracks": "Pistes communautaires", + "Custom tracks": "Pistes personnalisées", + 'Are you sure you want to delete "{0}"?': 'Êtes-vous sûr de vouloir supprimer "{0}" ?', + Delete: "Supprimer", + "No community tracks": "Pas de pistes communautaires", + "Community tracks are coming soon": "Les pistes communautaires arrivent bientôt", + "No custom tracks": "Pas de pistes personnalisées", + "Create a track using the editor or import a track code": "Créez une piste en utilisant l'éditeur ou importez un code de piste", + "Search tracks...": "Rechercher des pistes...", + "Invalid replay detected!": "Rejouer invalide détecté!" + }, + cz = { + "Checkpoint order": "Ordine dei checkpoint", + Height: "Altezza", + Exit: "Esci", + Random: "Casuale", + Primary: "Primario", + Secondary: "Secondario", + Frame: "Telaio", + Rims: "Cerchioni", + "Are you sure you want to exit without saving?": "Sei sicuro di voler uscire senza salvare?", + "All changes will be lost!": "Tutte le modifiche andranno perse!", + "Car saved!": "Auto salvata!", + Test: "Test", + "Starting point is missing!": "Punto di partenza mancante!", + Generate: "Genera", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Sei sicuro di voler generare un nuovo percorso?\n\nIl tuo percorso attuale verrà perso!", + Load: "Carica", + Save: "Salva", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Sei sicuro di voler caricare un nuovo percorso?\n\nIl tuo percorso attuale verrà perso!", + "Track saved!": "Percorso salvato!", + "Failed to save!": "Salvataggio non riuscito!", + 'Are you sure you want to overwrite "{0}"?': 'Sei sicuro di voler sovrascrivere "{0}"?', + Export: "Esporta", + Help: "Aiuto", + "Are you sure you want to exit the editor?": "Sei sicuro di voler uscire dall'editor?", + "All unsaved data will be lost!": "Tutti i dati non salvati andranno persi!", + "Track settings": "Impostazioni del percorso", + "Unnamed Track": "Percorso senza nome", + "Track name": "Nome del percorso", + Author: "Autore", + Unknown: "Sconosciuto", + Environment: "Ambiente", + Summer: "Estate", + Winter: "Inverno", + Desert: "Deserto", + "Sun direction": "Direzione del sole", + "How to use the editor": "Come usare l'editor", + "Camera controls": "Controlli della telecamera", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "La telecamera può essere spostata facendo clic con il tasto destro del mouse e trascinando. Ruota la telecamera facendo clic con il pulsante centrale del mouse (rotella) o tenendo premuto il tasto di controllo e facendo clic con il tasto destro del mouse e trascinando. Zoom avanti e indietro scorrendo la rotella del mouse.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "In alternativa, la telecamera può essere controllata utilizzando i seguenti tasti della tastiera:", + "Move forwards:": "Muovi avanti:", + "Move backwards:": "Muovi indietro:", + "Move left:": "Muovi a sinistra:", + "Move right:": "Muovi a destra:", + "Rotate left:": "Ruota a sinistra:", + "Rotate right:": "Ruota a destra:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "L'altezza modificata può essere cambiata utilizzando la selezione dell'altezza nell'angolo in basso a sinistra, o tenendo premuto il tasto shift e scorrendo la rotella del mouse. In alternativa, puoi utilizzare i seguenti tasti della tastiera:", + "Move up:": "Muovi su:", + "Move down:": "Muovi giù:", + Editing: "Modifica", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Le parti del percorso possono essere selezionate nel menu a destra, dopodiché possono essere posizionate facendo clic con il tasto sinistro del mouse.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "In alternativa, la parte del percorso attualmente sotto il cursore del mouse può essere selezionata con la seguente scorciatoia da tastiera:", + "The selected part can then be rotated using the following keyboard shortcut:": "La parte selezionata può quindi essere ruotata utilizzando la seguente scorciatoia da tastiera:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Le parti del percorso possono essere eliminate utilizzando lo strumento di eliminazione nel menu a destra o tenendo premuto il seguente tasto:", + "Starting points, checkpoints and the finish line": "Punti di partenza, checkpoint e linea di arrivo", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "I punti di partenza, i checkpoint e le linee di arrivo possono essere selezionati nella categoria più alta nel menu a destra.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Ogni percorso deve avere almeno un punto di partenza. Se ci sono più punti di partenza, verrà utilizzato l'ultimo posizionato.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "I checkpoint devono essere posizionati tra il punto di partenza e la linea di arrivo. Quando viene selezionata una parte del percorso checkpoint, ci sarà uno strumento in basso a destra per selezionare l'ordine del checkpoint. Questo determina l'ordine in cui i checkpoint devono essere superati prima di arrivare alla linea di arrivo. Nota che è possibile avere più checkpoint con lo stesso ordine di checkpoint.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "La linea di arrivo è dove finisce il percorso, ma diventerà attiva solo dopo che tutti i checkpoint sono stati superati. È anche possibile avere più linee di arrivo.", + "Starting point": "Punto di partenza", + Checkpoint: "Checkpoint", + "Finish line": "Linea di arrivo", + "Exporting the track": "Esportazione del percorso", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Quando il percorso è terminato, è possibile inserire un nome per il percorso in alto a sinistra, dopodiché il percorso può essere esportato utilizzando il pulsante di esportazione. Questo rivelerà un codice del percorso che può essere inviato ad altri utenti in modo che possano importare e giocare il percorso.", + Close: "Chiudi", + "Not set": "Non impostato", + or: "o", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "La telecamera può essere spostata trascinando con un dito. Ruota la telecamera trascinando con due dita. Zoom avanti e indietro pizzicando.", + "The edited height can be changed by using the height selection in the bottom left corner.": "L'altezza modificata può essere cambiata utilizzando la selezione dell'altezza nell'angolo in basso a sinistra.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Le parti del percorso possono essere selezionate nel menu a destra, dopodiché possono essere posizionate toccando lo schermo.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "La parte selezionata può quindi essere ruotata toccando il pulsante di rotazione nell'angolo in basso a sinistra.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Le parti del percorso possono essere eliminate utilizzando lo strumento di eliminazione nel menu a destra.", + Watch: "Guarda", + "Loading replay": "Caricamento riproduzione", + "Press {0} to return to the last checkpoint": "Premi {0} per tornare all'ultimo checkpoint", + "Press {0} to start over": "Premi {0} per ricominciare", + "Reset once to return to the last checkpoint": "Resetta una volta per tornare all'ultimo checkpoint", + "Reset again to start over": "Resetta di nuovo per ricominciare", + Leaderboard: "Classifica", + Back: "Indietro", + "Error: Failed to load leaderboard": "Errore: impossibile caricare la classifica", + Pending: "In sospeso", + Verified: "Verificato", + Invalid: "Non valido", + Duplicate: "Duplicato", + You: "Tu", + "Only verified": "Solo verificati", + Loading: "Caricamento", + "Failed to load recordings": "Impossibile caricare le registrazioni", + "Cannot load recordings due to non-determinism": "Impossibile caricare le registrazioni a causa del non determinismo", + Ok: "Ok", + "Track is missing starting point": "Il percorso non ha un punto di partenza", + "Some leaderboard features are disabled.": "Alcune funzionalità della classifica sono disabilitate.", + "Please try another browser or device.": "Si prega di provare un altro browser o dispositivo.", + "You already have another instance of PolyTrack open.": "Hai già un'altra istanza di PolyTrack aperta.", + "Please switch to that tab or window to continue.": "Si prega di passare a quella scheda o finestra per continuare.", + "Computer determinism check failed.": "Verifica del determinismo del computer fallita.", + "Non-deterministic game assets found.": "Asset di gioco non deterministici trovati.", + "Please try clearing your browser cache.": "Si prega di provare a cancellare la cache del browser.", + Customize: "Personalizza", + Editor: "Editor", + Settings: "Impostazioni", + Profile: "Profilo", + Play: "Gioca", + Version: "Versione", + "You cannot have duplicate user profiles": "Non è possibile avere profili utente duplicati", + "Failed to create user profile": "Impossibile creare il profilo utente", + "This user profile does not exist on the server": "Questo profilo utente non esiste sul server", + "Failed to download user profile from the server": "Impossibile scaricare il profilo utente dal server", + "User token is invalid": "Token utente non valido", + "Are you sure you want to display your private key?": "Sei sicuro di voler mostrare la tua chiave privata?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "NON CONDIVIDERE QUESTA CHIAVE CON NESSUNO.", + "You need a free user profile slot to import a new user profile": "Hai bisogno di uno slot di profilo utente libero per importare un nuovo profilo utente", + Quit: "Esci", + Fullscreen: "Schermo intero", + Windowed: "Finestra", + " ": "Sembra che tu stia giocando a una versione non ufficiale di {0}. Per la versione più aggiornata visita la fonte originale:", + Nickname: "Nickname", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Scegli un nickname da mostrare nella classifica. Puoi cambiarlo in qualsiasi momento.", + Cancel: "Annulla", + Confirm: "Conferma", + Verifier: "Verificatore", + "User ID": "ID Utente", + Paused: "In pausa", + "Switch car": "Cambia auto", + Profiles: "Profili", + 'Are you sure you would like to delete "{0}"?': 'Sei sicuro di voler eliminare "{0}"?', + Empty: "Vuoto", + Reset: "Resetta", + Apply: "Applica", + Gameplay: "Modalità di gioco", + Units: "Unità", + Metric: "Metrico", + Imperial: "Imperiale", + "Reset hint": "Resetta suggerimento", + Disabled: "Disattivato", + Enabled: "Attivato", + "Ghost car": "Auto fantasma", + "Default camera": "Telecamera predefinita", + Default: "Predefinita", + Cockpit: "Cabina", + "Cockpit camera mode": "Modalità telecamera cabina", + Hold: "Tieni", + Toggle: "Attiva/Disattiva", + Checkpoints: "Checkpoint", + Timer: "Timer", + Speedometer: "Contachilometri", + Bottom: "In basso", + Top: "In alto", + Language: "Lingua", + Graphics: "Grafica", + "Car shadow": "Ombra dell'auto", + "Track shadow": "Ombra del percorso", + Off: "Disattivato", + On: "Attivato", + Low: "Basso", + Medium: "Medio", + High: "Alto", + Clouds: "Nuvole", + Particles: "Particelle", + Skidmarks: "Segni di frenata", + "Render scale": "Scala di rendering", + "Anti-aliasing (requires restart)": "Anti-aliasing (richiede riavvio)", + Audio: "Audio", + "Sound effect volume": "Volume degli effetti sonori", + "Music volume": "Volume della musica", + "Checkpoint volume": "Volume dei checkpoint", + Controls: "Controlli", + Vehicle: "Veicolo", + Accelerate: "Accelerare", + Brake: "Frenare", + "Turn left": "Svolta a sinistra", + "Turn right": "Svolta a destra", + "Checkpoint reset": "Reset checkpoint", + "Start reset": "Reset partenza", + "Cockpit camera": "Telecamera cabina", + "Rotate part": "Ruota parte", + "Height modifier": "Modificatore altezza", + "Delete part": "Elimina parte", + "Move forwards": "Muovi avanti", + "Move backwards": "Muovi indietro", + "Move left": "Muovi a sinistra", + "Move right": "Muovi a destra", + "Rotate view up": "Ruota vista in alto", + "Rotate view down": "Ruota vista in basso", + "Rotate view left": "Ruota vista a sinistra", + "Rotate view right": "Ruota vista a destra", + "Move down": "Muovi giù", + "Move up": "Muovi su", + "Test track": "Test percorso", + "Pick part": "Seleziona parte", + Spectator: "Spettatore", + "Speed modifier": "Modificatore velocità", + Other: "Altro", + "Hide UI": "Nascondi UI", + Pause: "Pausa", + "Toggle FPS counter": "Attiva/Disattiva contatore FPS", + "Toggle spectator camera": "Attiva/Disattiva telecamera spettatore", + "Press any key...\n\nPress [Escape] to cancel.": "Premi un tasto qualsiasi...\n\nPremi [Esc] per annullare.", + Clear: "Cancella", + "New record": "Nuovo record", + Record: "Record", + Current: "Attuale", + Difference: "Differenza", + Copy: "Copia", + Import: "Importa", + "Failed to import track": "Importazione percorso non riuscita", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'Il percorso "{0}" esiste già. Vuoi sovrascriverlo?', + Overwrite: "Sovrascrivi", + "Paste track data here...": "Incolla dati del percorso qui...", + Rank: "Posizione", + "Personal best": "Miglior tempo personale", + Opponents: "Avversari", + "{0} opponent selected": "{0} avversario selezionato", + "{0} opponents selected": "{0} avversari selezionati", + "Select opponents to race against from the leaderboard on the left": "Seleziona gli avversari con cui gareggiare dalla classifica a sinistra", + "No record": "Nessun record", + "Official tracks": "Percorsi ufficiali", + "Community tracks": "Percorsi della community", + "Custom tracks": "Percorsi personalizzati", + 'Are you sure you want to delete "{0}"?': 'Sei sicuro di voler eliminare "{0}"?', + Delete: "Elimina", + "No community tracks": "Nessun percorso della community", + "Community tracks are coming soon": "I percorsi della community arriveranno presto", + "No custom tracks": "Nessun percorso personalizzato", + "Create a track using the editor or import a track code": "Crea un percorso utilizzando l'editor o importa un codice percorso", + "Search tracks...": "Cerca percorso...", + "Invalid replay detected!": "Riproduzione non valida rilevata!" + }, + hz = { + "Checkpoint order": "チェックポイントの順序", + Height: "高さ", + Exit: "終了", + Random: "ランダム", + Primary: "プライマリ", + Secondary: "セカンダリ", + Frame: "フレーム", + Rims: "リム", + "Are you sure you want to exit without saving?": "保存せずに終了してもよろしいですか?", + "All changes will be lost!": "すべての変更が失われます!", + "Car saved!": "車両が保存されました!", + Test: "テスト", + "Starting point is missing!": "スタート地点がありません!", + Generate: "生成", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "新しいトラックを生成してもよろしいですか?\n\n現在のトラックは失われます!", + Load: "読み込み", + Save: "保存", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "新しいトラックを読み込んでもよろしいですか?\n\n現在のトラックは失われます!", + "Track saved!": "トラックが保存されました!", + "Failed to save!": "保存に失敗しました!", + 'Are you sure you want to overwrite "{0}"?': '"{0}" を上書きしてもよろしいですか?', + Export: "エクスポート", + Help: "ヘルプ", + "Are you sure you want to exit the editor?": "エディタを終了してもよろしいですか?", + "All unsaved data will be lost!": "保存されていないデータはすべて失われます!", + "Track settings": "トラック設定", + "Unnamed Track": "無名のトラック", + "Track name": "トラック名", + Author: "作者", + Unknown: "不明", + Environment: "環境", + Summer: "サマー", + Winter: "ウィンター", + Desert: "デザート", + "Sun direction": "太陽の方向", + "How to use the editor": "エディタの使い方", + "Camera controls": "カメラの操作方法", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "カメラは右クリックしてマウスをドラッグすることで移動できます。カメラを回転させるには、マウスの中ボタン(マウスホイール)をクリックするか、コントロールキーを押しながら右クリックしてマウスをドラッグします。マウスホイールをスクロールすることでズームインとズームアウトができます。", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "また、以下のキーボードのキーを使用してカメラを制御することもできます:", + "Move forwards:": "前に移動:", + "Move backwards:": "後ろに移動:", + "Move left:": "左に移動:", + "Move right:": "右に移動:", + "Rotate left:": "左に回転:", + "Rotate right:": "右に回転:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "編集された高さは、左下隅の高さ選択を使用するか、Shiftキーを押しながらマウスホイールをスクロールすることで変更できます。また、以下のキーボードキーを使用することもできます:", + "Move up:": "上に移動:", + "Move down:": "下に移動:", + Editing: "編集", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "トラックパーツは、右側のメニューで選択してから、マウスで左クリックすることで配置できます。", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "また、マウスで現在ホバーしているトラックパーツは、以下のキーボードショートカットで選択できます:", + "The selected part can then be rotated using the following keyboard shortcut:": "選択したパーツは、以下のキーボードショートカットを使用して回転させることができます:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "トラックパーツは、右側のメニューの削除ツールを使用するか、以下のキーを押しながら削除することができます:", + "Starting points, checkpoints and the finish line": "スタート地点、チェックポイント、フィニッシュライン", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "スタート地点、チェックポイント、フィニッシュラインは、右側のメニューの最上位カテゴリで選択できます。", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "各トラックには少なくとも1つのスタート地点が必要です。複数のスタート地点がある場合は、最後に配置されたものが使用されます。", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "チェックポイントは、スタート地点とフィニッシュラインの間に配置する必要があります。チェックポイントのトラックパーツが選択されると、右下にチェックポイントの順序を選択するためのツールが表示されます。これにより、チェックポイントを通過する順序が決まります。同じチェックポイント順序で複数のチェックポイントを持つことも可能です。", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "フィニッシュラインはトラックの終わりですが、すべてのチェックポイントを通過した後にのみアクティブになります。複数のフィニッシュラインを持つことも可能です。", + "Starting point": "スタート地点", + Checkpoint: "チェックポイント", + "Finish line": "フィニッシュライン", + "Exporting the track": "トラックのエクスポート", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "トラックが完成したら、トップ左にトラックの名前を入力し、エクスポートボタンを使用してトラックをエクスポートできます。これにより、他のユーザーがトラックをインポートして再生できるトラックコードが表示されます。", + Close: "閉じる", + "Not set": "未設定", + or: "または", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "カメラは1本の指でドラッグすることで移動できます。カメラを回転させるには、2本の指でドラッグします。ピンチインとピンチアウトでズームインとズームアウトができます。", + "The edited height can be changed by using the height selection in the bottom left corner.": "編集された高さは、左下隅の高さ選択を使用することで変更できます。", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "トラックパーツは、右側のメニューで選択してから、画面をタップすることで配置できます。", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "選択したパーツは、左下隅の回転ボタンをタップすることで回転させることができます。", + "Track parts can be deleted by using the delete tool in the right side menu.": "トラックパーツは、右側のメニューの削除ツールを使用することで削除できます。", + Watch: "視聴", + "Loading replay": "リプレイを読み込み中", + "Press {0} to return to the last checkpoint": "最後のチェックポイントに戻るには {0} を押してください", + "Press {0} to start over": "最初からやり直すには {0} を押してください", + "Reset once to return to the last checkpoint": "最後のチェックポイントに戻るには1回リセットしてください", + "Reset again to start over": "最初からやり直すにはもう一度リセットしてください", + Leaderboard: "リーダーボード", + Back: "戻る", + "Error: Failed to load leaderboard": "エラー:リーダーボードの読み込みに失敗しました", + Pending: "保留中", + Verified: "検証済み", + Invalid: "無効", + Duplicate: "重複", + You: "あなた", + "Only verified": "検証済みのみ", + Loading: "読み込み中", + "Failed to load recordings": "録画の読み込みに失敗しました", + "Cannot load recordings due to non-determinism": "非決定論により録画を読み込むことができません", + Ok: "OK", + "Track is missing starting point": "トラックにスタート地点がありません", + "Some leaderboard features are disabled.": "一部のリーダーボード機能が無効になっています。", + "Please try another browser or device.": "別のブラウザまたはデバイスをお試しください。", + "You already have another instance of PolyTrack open.": "すでに別のPolyTrackインスタンスが開いています。", + "Please switch to that tab or window to continue.": "続行するには、そのタブまたはウィンドウに切り替えてください。", + "Computer determinism check failed.": "コンピューターの決定論チェックに失敗しました。", + "Non-deterministic game assets found.": "非決定論的なゲームアセットが見つかりました。", + "Please try clearing your browser cache.": "ブラウザのキャッシュをクリアしてみてください。", + Customize: "カスタマイズ", + Editor: "エディタ", + Settings: "設定", + Profile: "プロフィール", + Play: "再生", + Version: "バージョン", + "You cannot have duplicate user profiles": "重複するユーザープロファイルを持つことはできません", + "Failed to create user profile": "ユーザープロファイルの作成に失敗しました", + "This user profile does not exist on the server": "このユーザープロファイルはサーバーに存在しません", + "Failed to download user profile from the server": "サーバーからユーザープロファイルをダウンロードできませんでした", + "User token is invalid": "ユーザートークンが無効です", + "Are you sure you want to display your private key?": "本当に秘密鍵を表示しますか?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "この鍵を誰とも共有しないでください。", + "You need a free user profile slot to import a new user profile": "新しいユーザープロファイルをインポートするには空きユーザープロファイルスロットが必要です", + Quit: "終了", + Fullscreen: "フルスクリーン", + Windowed: "ウィンドウ", + " ": "{0} の非公式バージョンをプレイしているようです。最新バージョンについては、元のソースをご覧ください:", + Nickname: "ニックネーム", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "リーダーボードに表示されるニックネームを選択してください。ニックネームはいつでも変更できます。", + Cancel: "キャンセル", + Confirm: "確認", + Verifier: "検証者", + "User ID": "ユーザーID", + Paused: "一時停止", + "Switch car": "車両を切り替え", + Profiles: "プロフィール", + 'Are you sure you would like to delete "{0}"?': '"{0}"を削除してもよろしいですか?', + Empty: "空", + Reset: "リセット", + Apply: "適用", + Gameplay: "ゲームプレイ", + Units: "単位", + Metric: "メトリック", + Imperial: "インペリアル", + "Reset hint": "ヒントをリセット", + Disabled: "無効", + Enabled: "有効", + "Ghost car": "ゴーストカー", + "Default camera": "デフォルトカメラ", + Default: "デフォルト", + Cockpit: "コクピット", + "Cockpit camera mode": "コクピットカメラモード", + Hold: "押し続ける", + Toggle: "トグル", + Checkpoints: "チェックポイント", + Timer: "タイマー", + Speedometer: "スピードメーター", + Bottom: "下", + Top: "上", + Language: "言語", + Graphics: "グラフィック", + "Car shadow": "車の影", + "Track shadow": "トラックの影", + Off: "オフ", + On: "オン", + Low: "低", + Medium: "中", + High: "高", + Clouds: "雲", + Particles: "パーティクル", + Skidmarks: "スキッドマーク", + "Render scale": "レンダースケール", + "Anti-aliasing (requires restart)": "アンチエイリアシング(再起動が必要)", + Audio: "オーディオ", + "Sound effect volume": "効果音の音量", + "Music volume": "音楽の音量", + "Checkpoint volume": "チェックポイントの音量", + Controls: "コントロール", + Vehicle: "車両", + Accelerate: "アクセル", + Brake: "ブレーキ", + "Turn left": "左に曲がる", + "Turn right": "右に曲がる", + "Checkpoint reset": "チェックポイントリセット", + "Start reset": "スタートリセット", + "Cockpit camera": "コクピットカメラ", + "Rotate part": "パーツを回転", + "Height modifier": "高さ変更", + "Delete part": "パーツを削除", + "Move forwards": "前に移動", + "Move backwards": "後ろに移動", + "Move left": "左に移動", + "Move right": "右に移動", + "Rotate view up": "ビューを上に回転", + "Rotate view down": "ビューを下に回転", + "Rotate view left": "ビューを左に回転", + "Rotate view right": "ビューを右に回転", + "Move down": "下に移動", + "Move up": "上に移動", + "Test track": "トラックをテスト", + "Pick part": "パーツを選択", + Spectator: "スペクテーター", + "Speed modifier": "スピード変更", + Other: "その他", + "Hide UI": "UIを非表示", + Pause: "一時停止", + "Toggle FPS counter": "FPSカウンターを切り替え", + "Toggle spectator camera": "スペクテーターカメラを切り替え", + "Press any key...\n\nPress [Escape] to cancel.": "任意のキーを押してください...\n\n[Escape] を押してキャンセル。", + Clear: "クリア", + "New record": "新記録", + Record: "記録", + Current: "現在", + Difference: "差分", + Copy: "コピー", + Import: "インポート", + "Failed to import track": "トラックのインポートに失敗しました", + 'The track "{0}" already exists. Do you wish to overwrite it?': "トラック「{0}」は既に存在します。上書きしますか?", + Overwrite: "上書き", + "Paste track data here...": "トラックデータをここに貼り付けてください...", + Rank: "ランク", + "Personal best": "個人ベスト", + Opponents: "対戦相手", + "{0} opponent selected": "{0} 人の対戦相手が選択されました", + "{0} opponents selected": "{0} 人の対戦相手が選択されました", + "Select opponents to race against from the leaderboard on the left": "左のリーダーボードから対戦相手を選択してください", + "No record": "記録なし", + "Official tracks": "公式トラック", + "Community tracks": "コミュニティトラック", + "Custom tracks": "カスタムトラック", + 'Are you sure you want to delete "{0}"?': '"{0}" を削除してもよろしいですか?', + Delete: "削除", + "No community tracks": "コミュニティトラックはありません", + "Community tracks are coming soon": "コミュニティトラックは近日公開予定です", + "No custom tracks": "カスタムトラックはありません", + "Create a track using the editor or import a track code": "エディタを使用してトラックを作成するか、トラックコードをインポートしてトラックを作成します", + "Search tracks...": "トラックを検索...", + "Invalid replay detected!": "無効なリプレイが検出されました!" + }, + dz = { + "Checkpoint order": "체크포인트 순서", + Height: "높이", + Exit: "나가기", + Random: "랜덤", + Primary: "기본", + Secondary: "보조", + Frame: "프레임", + Rims: "림", + "Are you sure you want to exit without saving?": "저장하지 않고 나가시겠습니까?", + "All changes will be lost!": "모든 변경 사항이 손실됩니다!", + "Car saved!": "차량이 저장되었습니다!", + Test: "테스트", + "Starting point is missing!": "출발 지점이 없습니다!", + Generate: "생성", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "새로운 트랙을 생성하시겠습니까?\n\n현재 트랙은 손실됩니다!", + Load: "불러오기", + Save: "저장", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "새로운 트랙을 불러오시겠습니까?\n\n현재 트랙은 손실됩니다!", + "Track saved!": "트랙이 저장되었습니다!", + "Failed to save!": "저장 실패!", + 'Are you sure you want to overwrite "{0}"?': '"{0}"을(를) 덮어쓰시겠습니까?', + Export: "내보내기", + Help: "도움말", + "Are you sure you want to exit the editor?": "편집기를 나가시겠습니까?", + "All unsaved data will be lost!": "저장되지 않은 모든 데이터가 손실됩니다!", + "Track settings": "트랙 설정", + "Unnamed Track": "이름 없는 트랙", + "Track name": "트랙 이름", + Author: "제작자", + Unknown: "알 수 없음", + Environment: "환경", + Summer: "여름", + Winter: "겨울", + Desert: "사막", + "Sun direction": "태양 방향", + "How to use the editor": "에디터 사용 방법", + "Camera controls": "카메라 컨트롤", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "카메라는 마우스 오른쪽 버튼을 클릭하고 드래그하여 이동할 수 있습니다. 카메라를 회전하려면 마우스 중간 버튼(휠)을 클릭하거나 컨트롤 키를 누른 상태에서 마우스 오른쪽 버튼을 클릭하고 드래그하면 됩니다. 마우스 휠을 스크롤하여 확대 및 축소할 수 있습니다.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "또는 다음 키보드 키를 사용하여 카메라를 제어할 수도 있습니다.", + "Move forwards:": "앞으로 이동:", + "Move backwards:": "뒤로 이동:", + "Move left:": "왼쪽으로 이동:", + "Move right:": "오른쪽으로 이동:", + "Rotate left:": "왼쪽으로 회전:", + "Rotate right:": "오른쪽으로 회전:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "편집된 높이는 왼쪽 하단 모서리의 높이 선택을 사용하거나 Shift 키를 누른 상태에서 마우스 휠을 스크롤하여 변경할 수 있습니다. 또는 다음 키보드 키를 사용할 수도 있습니다.", + "Move up:": "위로 이동:", + "Move down:": "아래로 이동:", + Editing: "편집", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "트랙 부품은 오른쪽 메뉴에서 선택한 후 마우스로 왼쪽 클릭하여 배치할 수 있습니다.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "또는 현재 마우스로 가리키고 있는 트랙 부품을 다음 키보드 단축키로 선택할 수도 있습니다.", + "The selected part can then be rotated using the following keyboard shortcut:": "선택한 부품은 다음 키보드 단축키를 사용하여 회전할 수 있습니다.", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "트랙 부품은 오른쪽 메뉴의 삭제 도구를 사용하거나 다음 키를 누른 상태에서 삭제할 수 있습니다.", + "Starting points, checkpoints and the finish line": "시작 지점, 체크포인트 및 완주 선", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "시작 지점, 체크포인트 및 완주 선은 모두 오른쪽 메뉴의 가장 상위 카테고리에서 선택할 수 있습니다.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "각 트랙은 최소한 하나의 시작 지점이 있어야 합니다. 여러 개의 시작 지점이 있는 경우 마지막으로 배치된 지점이 사용됩니다.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "체크포인트는 시작 지점과 완주 선 사이에 배치되어야 합니다. 체크포인트 트랙 부품이 선택되면 하단 오른쪽에 체크포인트 순서를 선택할 수 있는 도구가 있습니다. 이는 완주 선으로 이동하기 전에 체크포인트를 통과해야 하는 순서를 결정합니다. 동일한 체크포인트 순서를 가진 여러 개의 체크포인트를 가질 수 있다는 점에 유의하세요.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "완주 선은 트랙이 끝나는 곳이지만 모든 체크포인트를 통과한 후에만 활성화됩니다. 여러 개의 완주 선을 가질 수도 있습니다.", + "Starting point": "시작 지점", + Checkpoint: "체크포인트", + "Finish line": "완주 선", + "Exporting the track": "트랙 내보내기", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "트랙이 완성되면 왼쪽 상단에 트랙 이름을 입력한 후 내보내기 버튼을 사용하여 트랙을 내보낼 수 있습니다. 이렇게 하면 다른 사용자가 트랙을 가져와서 재생할 수 있는 트랙 코드가 표시됩니다.", + Close: "닫기", + "Not set": "설정되지 않음", + or: "또는", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "카메라는 한 손가락으로 드래그하여 이동할 수 있습니다. 카메라를 두 손가락으로 드래그하여 회전할 수 있습니다. 확대 및 축소하려면 핀치 동작을 사용하십시오.", + "The edited height can be changed by using the height selection in the bottom left corner.": "편집된 높이는 왼쪽 하단의 높이 선택을 사용하여 변경할 수 있습니다.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "트랙 부품은 오른쪽 메뉴에서 선택한 후 화면을 탭하여 배치할 수 있습니다.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "선택한 부품은 왼쪽 하단의 회전 버튼을 탭하여 회전할 수 있습니다.", + "Track parts can be deleted by using the delete tool in the right side menu.": "트랙 부품은 오른쪽 메뉴의 삭제 도구를 사용하여 삭제할 수 있습니다.", + Watch: "관전", + "Loading replay": "리플레이 로딩", + "Press {0} to return to the last checkpoint": "마지막 체크포인트로 돌아가려면 {0}을(를) 누르십시오", + "Press {0} to start over": "처음부터 시작하려면 {0}을(를) 누르십시오", + "Reset once to return to the last checkpoint": "한 번 리셋하여 마지막 체크포인트로 돌아가세요", + "Reset again to start over": "다시 리셋하여 처음부터 시작하세요", + Leaderboard: "리더보드", + Back: "뒤로", + "Error: Failed to load leaderboard": "오류: 리더보드 불러오기 실패", + Pending: "대기 중", + Verified: "확인됨", + Invalid: "유효하지 않음", + Duplicate: "중복", + You: "당신", + "Only verified": "확인된 것만", + Loading: "로딩 중", + "Failed to load recordings": "녹화 불러오기 실패", + "Cannot load recordings due to non-determinism": "결정론적이지 않아 녹화를 불러올 수 없습니다", + Ok: "확인", + "Track is missing starting point": "트랙에 출발 지점이 없습니다", + "Some leaderboard features are disabled.": "일부 리더보드 기능이 비활성화되었습니다.", + "Please try another browser or device.": "다른 브라우저나 기기를 시도해보십시오.", + "You already have another instance of PolyTrack open.": "이미 다른 PolyTrack 인스턴스가 열려 있습니다.", + "Please switch to that tab or window to continue.": "계속하려면 해당 탭이나 창으로 전환하십시오.", + "Computer determinism check failed.": "컴퓨터 결정론 검사 실패.", + "Non-deterministic game assets found.": "결정론적이지 않은 게임 자산 발견.", + "Please try clearing your browser cache.": "브라우저 캐시를 지우는 것을 시도해보십시오.", + Customize: "사용자 설정", + Editor: "편집기", + Settings: "설정", + Profile: "프로필", + Play: "재생", + Version: "버전", + "You cannot have duplicate user profiles": "중복 사용자 프로필을 가질 수 없습니다", + "Failed to create user profile": "사용자 프로필 생성에 실패했습니다", + "This user profile does not exist on the server": "이 사용자 프로필은 서버에 존재하지 않습니다", + "Failed to download user profile from the server": "서버에서 사용자 프로필을 다운로드하지 못했습니다", + "User token is invalid": "사용자 토큰이 유효하지 않습니다", + "Are you sure you want to display your private key?": "개인 키를 표시하시겠습니까?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "이 키를 아무와도 공유하지 마십시오.", + "You need a free user profile slot to import a new user profile": "새로운 사용자 프로필을 가져오려면 빈 사용자 프로필 슬롯이 필요합니다", + Quit: "종료", + Fullscreen: "전체 화면", + Windowed: "창 모드", + " ": "{0}의 비공식 버전을 플레이 중인 것 같습니다. 최신 버전은 원본 소스에서 확인하십시오:", + Nickname: "닉네임", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "리더보드에 표시될 닉네임을 선택하십시오. 닉네임은 언제든지 변경할 수 있습니다.", + Cancel: "취소", + Confirm: "확인", + Verifier: "확인자", + "User ID": "사용자 ID", + Paused: "일시 정지", + "Switch car": "차량 전환", + Profiles: "프로필", + 'Are you sure you would like to delete "{0}"?': '"{0}"를 삭제하시겠습니까?', + Empty: "비어 있음", + Reset: "재설정", + Apply: "적용", + Gameplay: "게임 플레이", + Units: "단위", + Metric: "미터법", + Imperial: "영국/미국 단위", + "Reset hint": "힌트 재설정", + Disabled: "비활성화", + Enabled: "활성화", + "Ghost car": "유령 자동차", + "Default camera": "기본 카메라", + Default: "기본", + Cockpit: "콕핏", + "Cockpit camera mode": "콕핏 카메라 모드", + Hold: "유지", + Toggle: "전환", + Checkpoints: "체크포인트", + Timer: "타이머", + Speedometer: "속도계", + Bottom: "하단", + Top: "상단", + Language: "언어", + Graphics: "그래픽", + "Car shadow": "자동차 그림자", + "Track shadow": "트랙 그림자", + Off: "끄기", + On: "켜기", + Low: "낮음", + Medium: "중간", + High: "높음", + Clouds: "구름", + Particles: "파티클", + Skidmarks: "스키드 마크", + "Render scale": "렌더링 스케일", + "Anti-aliasing (requires restart)": "안티 앨리어싱 (재시작 필요)", + Audio: "오디오", + "Sound effect volume": "사운드 효과 볼륨", + "Music volume": "음악 볼륨", + "Checkpoint volume": "체크포인트 볼륨", + Controls: "컨트롤", + Vehicle: "차량", + Accelerate: "가속", + Brake: "브레이크", + "Turn left": "왼쪽으로 회전", + "Turn right": "오른쪽으로 회전", + "Checkpoint reset": "체크포인트 리셋", + "Start reset": "시작 리셋", + "Cockpit camera": "콕핏 카메라", + "Rotate part": "부품 회전", + "Height modifier": "높이 조절", + "Delete part": "부품 삭제", + "Move forwards": "앞으로 이동", + "Move backwards": "뒤로 이동", + "Move left": "왼쪽으로 이동", + "Move right": "오른쪽으로 이동", + "Rotate view up": "뷰 위로 회전", + "Rotate view down": "뷰 아래로 회전", + "Rotate view left": "뷰 왼쪽으로 회전", + "Rotate view right": "뷰 오른쪽으로 회전", + "Move down": "아래로 이동", + "Move up": "위로 이동", + "Test track": "트랙 테스트", + "Pick part": "부품 선택", + Spectator: "관전자", + "Speed modifier": "속도 조절", + Other: "기타", + "Hide UI": "UI 숨기기", + Pause: "일시 정지", + "Toggle FPS counter": "FPS 카운터 전환", + "Toggle spectator camera": "관전 카메라 전환", + "Press any key...\n\nPress [Escape] to cancel.": "아무 키나 누르십시오...\n\n[Escape]를 눌러 취소하십시오.", + Clear: "지우기", + "New record": "새 기록", + Record: "기록", + Current: "현재", + Difference: "차이", + Copy: "복사", + Import: "가져오기", + "Failed to import track": "트랙 가져오기 실패", + 'The track "{0}" already exists. Do you wish to overwrite it?': '"{0}" 트랙이 이미 존재합니다. 덮어쓰시겠습니까?', + Overwrite: "덮어쓰기", + "Paste track data here...": "트랙 데이터를 여기에 붙여넣으십시오...", + Rank: "순위", + "Personal best": "개인 최고 기록", + Opponents: "상대방", + "{0} opponent selected": "{0} 상대방 선택됨", + "{0} opponents selected": "{0} 상대방 선택됨", + "Select opponents to race against from the leaderboard on the left": "왼쪽의 리더보드에서 경주할 상대방을 선택하세요", + "No record": "기록 없음", + "Official tracks": "공식 트랙", + "Community tracks": "커뮤니티 트랙", + "Custom tracks": "사용자 정의 트랙", + 'Are you sure you want to delete "{0}"?': '"{0}"을(를) 삭제하시겠습니까?', + Delete: "삭제", + "No community tracks": "커뮤니티 트랙 없음", + "Community tracks are coming soon": "커뮤니티 트랙이 곧 출시됩니다", + "No custom tracks": "사용자 정의 트랙 없음", + "Create a track using the editor or import a track code": "에디터를 사용하여 트랙을 만들거나 트랙 코드를 가져와서 트랙을 만드세요", + "Search tracks...": "트랙 검색...", + "Invalid replay detected!": "유효하지 않은 리플레이가 감지되었습니다!" + }, + uz = { + "Checkpoint order": "Kolejność punktów kontrolnych", + Height: "Wysokość", + Exit: "Wyjście", + Random: "Losowe", + Primary: "Główny", + Secondary: "Dodatkowy", + Frame: "Rama", + Rims: "Obręcze", + "Are you sure you want to exit without saving?": "Czy na pewno chcesz wyjść bez zapisywania?", + "All changes will be lost!": "Wszystkie zmiany zostaną utracone!", + "Car saved!": "Samochód zapisany!", + Test: "Test", + "Starting point is missing!": "Brak punktu startowego!", + Generate: "Generuj", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Czy na pewno chcesz wygenerować nową trasę?\n\nTwoja obecna trasa zostanie utracona!", + Load: "Wczytaj", + Save: "Zapisz", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Czy na pewno chcesz wczytać nową trasę?\n\nTwoja obecna trasa zostanie utracona!", + "Track saved!": "Trasa została zapisana!", + "Failed to save!": "Nie udało się zapisać!", + 'Are you sure you want to overwrite "{0}"?': "Czy na pewno chcesz nadpisać „{0}”?", + Export: "Eksportuj", + Help: "Pomoc", + "Are you sure you want to exit the editor?": "Czy na pewno chcesz wyjść z edytora?", + "All unsaved data will be lost!": "Wszystkie niezapisane dane zostaną utracone!", + "Track settings": "Ustawienia trasy", + "Unnamed Track": "Bez nazwy", + "Track name": "Nazwa trasy", + Author: "Autor", + Unknown: "Nieznany", + Environment: "Środowisko", + Summer: "Lato", + Winter: "Zima", + Desert: "Pustynia", + "Sun direction": "Kierunek słońca", + "How to use the editor": "Jak korzystać z edytora", + "Camera controls": "Sterowanie kamerą", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "Kamerę można przesuwać, klikając prawym przyciskiem myszy i przeciągając. Obróć kamerę, klikając środkowy przycisk myszy (koło myszy) lub przytrzymując klawisz Ctrl i klikając prawym przyciskiem myszy i przeciągając. Przybliż i oddal obraz, przewijając kółko myszy.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Alternatywnie, kamerą można również sterować za pomocą następujących klawiszy na klawiaturze:", + "Move forwards:": "Poruszaj się do przodu:", + "Move backwards:": "Poruszaj się do tyłu:", + "Move left:": "Poruszaj się w lewo:", + "Move right:": "Poruszaj się w prawo:", + "Rotate left:": "Obróć w lewo:", + "Rotate right:": "Obróć w prawo:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "Edytowaną wysokość można zmienić, korzystając z wyboru wysokości w lewym dolnym rogu lub przytrzymując klawisz Shift i przewijając kółko myszy. Alternatywnie można użyć następujących klawiszy na klawiaturze:", + "Move up:": "Przesuń w górę:", + "Move down:": "Przesuń w dół:", + Editing: "Edycja", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Części toru można wybrać w menu po prawej stronie, a następnie można je umieścić, klikając lewym przyciskiem myszy.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Alternatywnie, aktualnie zaznaczoną część toru można wybrać za pomocą następującego skrótu klawiaturowego:", + "The selected part can then be rotated using the following keyboard shortcut:": "Wybraną część można następnie obrócić za pomocą następującego skrótu klawiaturowego:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Części toru można usunąć, korzystając z narzędzia usuwania w menu po prawej stronie lub przytrzymując następujący klawisz:", + "Starting points, checkpoints and the finish line": "Punkty startowe, punkty kontrolne i linia mety", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Punkty startowe, punkty kontrolne i linie mety można wybrać we wszystkich kategoriach w menu po prawej stronie.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Każda trasa musi mieć co najmniej jeden punkt startowy. Jeśli istnieje wiele punktów startowych, zostanie użyty ostatnio umieszczony.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Punkty kontrolne powinny być umieszczone między punktem startowym a linią mety. Po wybraniu części toru punktu kontrolnego pojawi się narzędzie w prawym dolnym rogu, które pozwoli wybrać kolejność punktu kontrolnego. Określa to kolejność, w jakiej punkty kontrolne muszą być przechodzone przed dojazdem do linii mety. Zauważ, że możliwe jest posiadanie wielu punktów kontrolnych o tej samej kolejności.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "Linia mety to miejsce, gdzie kończy się tor, ale staje się aktywna dopiero po przejściu wszystkich punktów kontrolnych. Możliwe jest również posiadanie wielu linii mety.", + "Starting point": "Punkt startowy", + Checkpoint: "Punkt kontrolny", + "Finish line": "Linia mety", + "Exporting the track": "Eksportowanie trasy", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Po zakończeniu trasy można wprowadzić jej nazwę w lewym górnym rogu, a następnie można ją wyeksportować, korzystając z przycisku eksportu. To ujawni kod trasy, który można przesłać innym użytkownikom, aby mogli zaimportować i odtworzyć trasę.", + Close: "Zamknij", + "Not set": "Nie ustawiono", + or: "lub", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "Kamerę można przesuwać, przeciągając jednym palcem. Obróć kamerę, przeciągając dwoma palcami. Przybliż i oddal obraz, ściskając palcami.", + "The edited height can be changed by using the height selection in the bottom left corner.": "Edytowaną wysokość można zmienić, korzystając z wyboru wysokości w lewym dolnym rogu.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Części toru można wybrać w menu po prawej stronie, a następnie można je umieścić, dotykając ekranu.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "Wybraną część można następnie obrócić, dotykając przycisku obracania w lewym dolnym rogu.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Części toru można usunąć, korzystając z narzędzia usuwania w menu po prawej stronie.", + Watch: "Oglądaj", + "Loading replay": "Wczytywanie nagrania", + "Press {0} to return to the last checkpoint": "Naciśnij {0}, aby wrócić do ostatniego punktu kontrolnego", + "Press {0} to start over": "Naciśnij {0}, aby zacząć od nowa", + "Reset once to return to the last checkpoint": "Resetuj raz, aby wrócić do ostatniego punktu kontrolnego", + "Reset again to start over": "Resetuj ponownie, aby zacząć od nowa", + Leaderboard: "Tabela wyników", + Back: "Powrót", + "Error: Failed to load leaderboard": "Błąd: Nie można wczytać tabeli wyników", + Pending: "Oczekujący", + Verified: "Zweryfikowany", + Invalid: "Nieprawidłowy", + Duplicate: "Duplikat", + You: "Ty", + "Only verified": "Tylko zweryfikowane", + Loading: "Ładowanie", + "Failed to load recordings": "Nie udało się wczytać nagrań", + "Cannot load recordings due to non-determinism": "Nie można wczytać nagrań z powodu nieterminizmu", + Ok: "Ok", + "Track is missing starting point": "Brak punktu startowego na trasie", + "Some leaderboard features are disabled.": "Niektóre funkcje tabeli wyników są wyłączone.", + "Please try another browser or device.": "Proszę spróbować inną przeglądarkę lub urządzenie.", + "You already have another instance of PolyTrack open.": "Masz już otwartą inną instancję PolyTrack.", + "Please switch to that tab or window to continue.": "Proszę przełączyć się na ten kartę lub okno, aby kontynuować.", + "Computer determinism check failed.": "Nie udało się sprawdzić determinizmu komputera.", + "Non-deterministic game assets found.": "Znaleziono nieterministyczne zasoby gry.", + "Please try clearing your browser cache.": "Proszę spróbować wyczyścić pamięć podręczną przeglądarki.", + Customize: "Dostosuj", + Editor: "Edytor", + Settings: "Ustawienia", + Profile: "Profil", + Play: "Graj", + Version: "Wersja", + "You cannot have duplicate user profiles": "Nie możesz mieć zduplikowanych profili użytkownika", + "Failed to create user profile": "Nie udało się utworzyć profilu użytkownika", + "This user profile does not exist on the server": "Ten profil użytkownika nie istnieje na serwerze", + "Failed to download user profile from the server": "Nie udało się pobrać profilu użytkownika z serwera", + "User token is invalid": "Token użytkownika jest nieprawidłowy", + "Are you sure you want to display your private key?": "Czy na pewno chcesz wyświetlić swój klucz prywatny?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "NIE UDOSTĘPNIAJ TEGO KLUCZA NIKOMU.", + "You need a free user profile slot to import a new user profile": "Potrzebujesz wolnego miejsca na profil użytkownika, aby zaimportować nowy profil użytkownika", + Quit: "Wyjdź", + Fullscreen: "Pełny ekran", + Windowed: "Okno", + " ": "Wygląda na to, że grasz w nieoficjalną wersję {0}. Aby uzyskać najnowszą wersję, odwiedź oryginalne źródło:", + Nickname: "Pseudonim", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Wybierz pseudonim, który będzie wyświetlany w tabeli wyników. Możesz go zmieniać w dowolnym momencie.", + Cancel: "Anuluj", + Confirm: "Potwierdź", + Verifier: "Weryfikator", + "User ID": "ID użytkownika", + Paused: "Wstrzymano", + "Switch car": "Zmień samochód", + Profiles: "Profile", + 'Are you sure you would like to delete "{0}"?': 'Czy na pewno chcesz usunąć "{0}"?', + Empty: "Puste", + Reset: "Resetuj", + Apply: "Zastosuj", + Gameplay: "Rozgrywka", + Units: "Jednostki", + Metric: "Metryczne", + Imperial: "Imperialne", + "Reset hint": "Resetuj wskazówkę", + Disabled: "Wyłączone", + Enabled: "Włączone", + "Ghost car": "Duch samochodu", + "Default camera": "Domyślna kamera", + Default: "Domyślny", + Cockpit: "Kokpit", + "Cockpit camera mode": "Tryb kamery kokpitu", + Hold: "Przytrzymaj", + Toggle: "Przełącz", + Checkpoints: "Punkty kontrolne", + Timer: "Stoper", + Speedometer: "Prędkościomierz", + Bottom: "Dół", + Top: "Góra", + Language: "Język", + Graphics: "Grafika", + "Car shadow": "Cień samochodu", + "Track shadow": "Cień trasy", + Off: "Wyłącz", + On: "Włącz", + Low: "Niska", + Medium: "Średnia", + High: "Wysoka", + Clouds: "Chmury", + Particles: "Cząsteczki", + Skidmarks: "Ślady opon", + "Render scale": "Skala renderowania", + "Anti-aliasing (requires restart)": "Anti-aliasing (wymaga restartu)", + Audio: "Dźwięk", + "Sound effect volume": "Głośność efektów dźwiękowych", + "Music volume": "Głośność muzyki", + "Checkpoint volume": "Głośność punktów kontrolnych", + Controls: "Sterowanie", + Vehicle: "Pojazd", + Accelerate: "Przyspiesz", + Brake: "Hamuj", + "Turn left": "Skręć w lewo", + "Turn right": "Skręć w prawo", + "Checkpoint reset": "Reset punktu kontrolnego", + "Start reset": "Reset startu", + "Cockpit camera": "Kamera kokpitu", + "Rotate part": "Obróć część", + "Height modifier": "Modyfikator wysokości", + "Delete part": "Usuń część", + "Move forwards": "Poruszaj się do przodu", + "Move backwards": "Poruszaj się do tyłu", + "Move left": "Poruszaj się w lewo", + "Move right": "Poruszaj się w prawo", + "Rotate view up": "Obróć widok w górę", + "Rotate view down": "Obróć widok w dół", + "Rotate view left": "Obróć widok w lewo", + "Rotate view right": "Obróć widok w prawo", + "Move down": "Przesuń w dół", + "Move up": "Przesuń w górę", + "Test track": "Testuj trasę", + "Pick part": "Wybierz część", + Spectator: "Widz", + "Speed modifier": "Modyfikator prędkości", + Other: "Inne", + "Hide UI": "Ukryj UI", + Pause: "Pauza", + "Toggle FPS counter": "Przełącz licznik FPS", + "Toggle spectator camera": "Przełącz kamerę widza", + "Press any key...\n\nPress [Escape] to cancel.": "Naciśnij dowolny klawisz...\n\nNaciśnij [Escape], aby anulować.", + Clear: "Wyczyść", + "New record": "Nowy rekord", + Record: "Rekord", + Current: "Aktualny", + Difference: "Różnica", + Copy: "Kopiuj", + Import: "Importuj", + "Failed to import track": "Import trasy nie powiódł się", + 'The track "{0}" already exists. Do you wish to overwrite it?': "Trasa „{0}” już istnieje. Czy chcesz ją nadpisać?", + Overwrite: "Nadpisz", + "Paste track data here...": "Wklej dane trasy tutaj...", + Rank: "Ranking", + "Personal best": "Najlepszy wynik", + Opponents: "Przeciwnicy", + "{0} opponent selected": "{0} przeciwnik wybrany", + "{0} opponents selected": "{0} przeciwników wybranych", + "Select opponents to race against from the leaderboard on the left": "Wybierz przeciwników, przeciwko którym chcesz ścigać się z tabeli wyników po lewej stronie", + "No record": "Brak rekordu", + "Official tracks": "Oficjalne trasy", + "Community tracks": "Trasy społeczności", + "Custom tracks": "Niestandardowe trasy", + 'Are you sure you want to delete "{0}"?': "Czy na pewno chcesz usunąć „{0}”?", + Delete: "Usuń", + "No community tracks": "Brak tras społeczności", + "Community tracks are coming soon": "Trasy społeczności wkrótce", + "No custom tracks": "Brak niestandardowych tras", + "Create a track using the editor or import a track code": "Utwórz trasę za pomocą edytora lub zaimportuj kod trasy", + "Search tracks...": "Szukaj tras...", + "Invalid replay detected!": "Wykryto nieprawidłowe nagranie!" + }, + pz = { + "Checkpoint order": "Ordem dos Pontos de Verificação", + Height: "Altura", + Exit: "Sair", + Random: "Aleatório", + Primary: "Principal", + Secondary: "Secundário", + Frame: "Estrutura", + Rims: "Aros", + "Are you sure you want to exit without saving?": "Tem certeza de que deseja sair sem salvar?", + "All changes will be lost!": "Todas as alterações serão perdidas!", + "Car saved!": "Carro salvo!", + Test: "Testar", + "Starting point is missing!": "Ponto de partida está faltando!", + Generate: "Gerar", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Tem certeza de que deseja gerar uma nova pista?\n\nSua pista atual será perdida!", + Load: "Carregar", + Save: "Salvar", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Tem certeza de que deseja carregar uma nova pista?\n\nSua pista atual será perdida!", + "Track saved!": "Pista salva!", + "Failed to save!": "Falha ao salvar!", + 'Are you sure you want to overwrite "{0}"?': 'Tem certeza de que deseja sobrescrever "{0}"?', + Export: "Exportar", + Help: "Ajuda", + "Are you sure you want to exit the editor?": "Tem certeza de que deseja sair do editor?", + "All unsaved data will be lost!": "Todos os dados não salvos serão perdidos!", + "Track settings": "Configurações da pista", + "Unnamed Track": "Pista sem nome", + "Track name": "Nome da pista", + Author: "Autor", + Unknown: "Desconhecido", + Environment: "Ambiente", + Summer: "Verão", + Winter: "Inverno", + Desert: "Deserto", + "Sun direction": "Direção do sol", + "How to use the editor": "Como usar o editor", + "Camera controls": "Controles da câmera", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "A câmera pode ser movida clicando com o botão direito do mouse e arrastando. Gire a câmera clicando no botão do meio do mouse (roda do mouse) ou segurando a tecla de controle e clicando com o botão direito do mouse e arrastando. Amplie e reduza o zoom rolando a roda do mouse.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Alternativamente, a câmera também pode ser controlada usando as seguintes teclas do teclado:", + "Move forwards:": "Mover para frente:", + "Move backwards:": "Mover para trás:", + "Move left:": "Mover para a esquerda:", + "Move right:": "Mover para a direita:", + "Rotate left:": "Girar para a esquerda:", + "Rotate right:": "Girar para a direita:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "A altura editada pode ser alterada usando a seleção de altura no canto inferior esquerdo ou segurando a tecla shift e rolando a roda do mouse. Alternativamente, você pode usar as seguintes teclas do teclado:", + "Move up:": "Mover para cima:", + "Move down:": "Mover para baixo:", + Editing: "Edição", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "As partes da pista podem ser selecionadas no menu à direita e, em seguida, podem ser colocadas clicando com o botão esquerdo do mouse.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Alternativamente, a parte da pista atualmente destacada pelo mouse pode ser selecionada com o seguinte atalho de teclado:", + "The selected part can then be rotated using the following keyboard shortcut:": "A parte selecionada pode então ser girada usando o seguinte atalho de teclado:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "As partes da pista podem ser excluídas usando a ferramenta de exclusão no menu lateral direito ou segurando a seguinte tecla:", + "Starting points, checkpoints and the finish line": "Pontos de partida, checkpoints e linha de chegada", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Pontos de partida, checkpoints e linhas de chegada podem ser selecionados na categoria mais alta do menu lateral direito.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Cada pista deve ter pelo menos um ponto de partida. Se houver vários pontos de partida, o último colocado será usado.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Os checkpoints devem ser colocados entre o ponto de partida e a linha de chegada. Quando uma parte da pista de checkpoint é selecionada, haverá uma ferramenta no canto inferior direito para selecionar a ordem do checkpoint. Isso determina a ordem em que os checkpoints devem ser passados antes de dirigir até a linha de chegada. Observe que é possível ter vários checkpoints com a mesma ordem de checkpoint.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "A linha de chegada é onde a pista termina, mas só se tornará ativa depois que todos os checkpoints forem passados. Também é possível ter várias linhas de chegada.", + "Starting point": "Ponto de partida", + Checkpoint: "Checkpoint", + "Finish line": "Linha de chegada", + "Exporting the track": "Exportando a pista", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Quando a pista estiver pronta, um nome para a pista pode ser inserido no canto superior esquerdo e, em seguida, a pista pode ser exportada usando o botão de exportação. Isso revelará um código de pista que pode ser enviado para outros usuários para que eles possam importar e jogar a pista.", + Close: "Fechar", + "Not set": "Não definido", + or: "ou", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "A câmera pode ser movida arrastando com um dedo. Gire a câmera arrastando com dois dedos. Amplie e reduza o zoom beliscando.", + "The edited height can be changed by using the height selection in the bottom left corner.": "A altura editada pode ser alterada usando a seleção de altura no canto inferior esquerdo.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "As partes da pista podem ser selecionadas no menu à direita e, em seguida, podem ser colocadas tocando na tela.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "A parte selecionada pode então ser girada tocando no botão de rotação no canto inferior esquerdo.", + "Track parts can be deleted by using the delete tool in the right side menu.": "As partes da pista podem ser excluídas usando a ferramenta de exclusão no menu lateral direito.", + Watch: "Assistir", + "Loading replay": "Carregando replay", + "Press {0} to return to the last checkpoint": "Pressione {0} para retornar ao último checkpoint", + "Press {0} to start over": "Pressione {0} para começar de novo", + "Reset once to return to the last checkpoint": "Redefinir uma vez para retornar ao último checkpoint", + "Reset again to start over": "Redefinir novamente para começar de novo", + Leaderboard: "Quadro de Líderes", + Back: "Voltar", + "Error: Failed to load leaderboard": "Erro: Falha ao carregar o quadro de líderes", + Pending: "Pendente", + Verified: "Verificado", + Invalid: "Inválido", + Duplicate: "Duplicado", + You: "Você", + "Only verified": "Apenas verificados", + Loading: "Carregando", + "Failed to load recordings": "Falha ao carregar gravações", + "Cannot load recordings due to non-determinism": "Não é possível carregar gravações devido a não determinismo", + Ok: "Ok", + "Track is missing starting point": "Pista está sem ponto de partida", + "Some leaderboard features are disabled.": "Alguns recursos do quadro de líderes estão desativados.", + "Please try another browser or device.": "Por favor, tente outro navegador ou dispositivo.", + "You already have another instance of PolyTrack open.": "Você já tem outra instância do PolyTrack aberta.", + "Please switch to that tab or window to continue.": "Por favor, mude para aquela guia ou janela para continuar.", + "Computer determinism check failed.": "Falha na verificação de determinismo do computador.", + "Non-deterministic game assets found.": "Assets de jogo não determinísticos encontrados.", + "Please try clearing your browser cache.": "Por favor, tente limpar o cache do seu navegador.", + Customize: "Personalizar", + Editor: "Editor", + Settings: "Configurações", + Profile: "Perfil", + Play: "Jogar", + Version: "Versão", + "You cannot have duplicate user profiles": "Você não pode ter perfis de usuário duplicados", + "Failed to create user profile": "Falha ao criar perfil de usuário", + "This user profile does not exist on the server": "Este perfil de usuário não existe no servidor", + "Failed to download user profile from the server": "Falha ao baixar perfil de usuário do servidor", + "User token is invalid": "Token de usuário inválido", + "Are you sure you want to display your private key?": "Tem certeza de que deseja exibir sua chave privada?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "NÃO COMPARTILHE ESTA CHAVE COM NINGUÉM.", + "You need a free user profile slot to import a new user profile": "Você precisa de um slot de perfil de usuário livre para importar um novo perfil de usuário", + Quit: "Sair", + Fullscreen: "Tela Cheia", + Windowed: "Janela", + " ": "Parece que você está jogando uma versão não oficial de {0}. Para a versão mais atualizada, visite a fonte original:", + Nickname: "Apelido", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Escolha um apelido para ser exibido no quadro de líderes. Seu apelido pode ser alterado a qualquer momento.", + Cancel: "Cancelar", + Confirm: "Confirmar", + Verifier: "Verificador", + "User ID": "ID de Usuário", + Paused: "Pausado", + "Switch car": "Trocar carro", + Profiles: "Perfis", + 'Are you sure you would like to delete "{0}"?': 'Tem certeza de que deseja excluir "{0}"?', + Empty: "Vazio", + Reset: "Redefinir", + Apply: "Aplicar", + Gameplay: "Jogabilidade", + Units: "Unidades", + Metric: "Métrico", + Imperial: "Imperial", + "Reset hint": "Redefinir dica", + Disabled: "Desativado", + Enabled: "Ativado", + "Ghost car": "Carro Fantasma", + "Default camera": "Câmera Padrão", + Default: "Padrão", + Cockpit: "Cockpit", + "Cockpit camera mode": "Modo de câmera do cockpit", + Hold: "Manter", + Toggle: "Alternar", + Checkpoints: "Pontos de Verificação", + Timer: "Temporizador", + Speedometer: "Velocímetro", + Bottom: "Inferior", + Top: "Superior", + Language: "Idioma", + Graphics: "Gráficos", + "Car shadow": "Sombra do Carro", + "Track shadow": "Sombra da Pista", + Off: "Desligado", + On: "Ligado", + Low: "Baixo", + Medium: "Médio", + High: "Alto", + Clouds: "Nuvens", + Particles: "Partículas", + Skidmarks: "Marcas de Derrapagem", + "Render scale": "Escala de Renderização", + "Anti-aliasing (requires restart)": "Anti-aliasing (requer reinício)", + Audio: "Áudio", + "Sound effect volume": "Volume de Efeitos Sonoros", + "Music volume": "Volume de Música", + "Checkpoint volume": "Volume dos Pontos de Verificação", + Controls: "Controles", + Vehicle: "Veículo", + Accelerate: "Acelerar", + Brake: "Freio", + "Turn left": "Virar à Esquerda", + "Turn right": "Virar à Direita", + "Checkpoint reset": "Redefinir Ponto de Verificação", + "Start reset": "Redefinir Início", + "Cockpit camera": "Câmera do Cockpit", + "Rotate part": "Girar Parte", + "Height modifier": "Modificador de Altura", + "Delete part": "Excluir Parte", + "Move forwards": "Mover para Frente", + "Move backwards": "Mover para Trás", + "Move left": "Mover para a Esquerda", + "Move right": "Mover para a Direita", + "Rotate view up": "Girar Visão para Cima", + "Rotate view down": "Girar Visão para Baixo", + "Rotate view left": "Girar Visão para a Esquerda", + "Rotate view right": "Girar Visão para a Direita", + "Move down": "Mover para Baixo", + "Move up": "Mover para Cima", + "Test track": "Testar Pista", + "Pick part": "Escolher Parte", + Spectator: "Espectador", + "Speed modifier": "Modificador de Velocidade", + Other: "Outro", + "Hide UI": "Ocultar UI", + Pause: "Pausar", + "Toggle FPS counter": "Alternar Contador de FPS", + "Toggle spectator camera": "Alternar Câmera de Espectador", + "Press any key...\n\nPress [Escape] to cancel.": "Pressione qualquer tecla...\n\nPressione [Escape] para cancelar.", + Clear: "Limpar", + "New record": "Novo recorde", + Record: "Recorde", + Current: "Atual", + Difference: "Diferença", + Copy: "Copiar", + Import: "Importar", + "Failed to import track": "Falha ao importar a pista", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'A pista "{0}" já existe. Deseja sobrescrevê-la?', + Overwrite: "Sobrescrever", + "Paste track data here...": "Cole os dados da pista aqui...", + Rank: "Classificação", + "Personal best": "Melhor pessoal", + Opponents: "Oponentes", + "{0} opponent selected": "{0} oponente selecionado", + "{0} opponents selected": "{0} oponentes selecionados", + "Select opponents to race against from the leaderboard on the left": "Selecione os oponentes para competir no quadro de líderes à esquerda", + "No record": "Sem recorde", + "Official tracks": "Pistas Oficiais", + "Community tracks": "Pistas Comunitárias", + "Custom tracks": "Pistas Personalizadas", + 'Are you sure you want to delete "{0}"?': 'Tem certeza de que deseja excluir "{0}"?', + Delete: "Excluir", + "No community tracks": "Sem pistas comunitárias", + "Community tracks are coming soon": "Pistas comunitárias em breve", + "No custom tracks": "Sem pistas personalizadas", + "Create a track using the editor or import a track code": "Crie uma pista usando o editor ou importe um código de pista", + "Search tracks...": "Pesquisar pistas...", + "Invalid replay detected!": "Replay inválido detectado!" + }, + fz = { + "Checkpoint order": "Ordem dos Pontos de Verificação", + Height: "Altura", + Exit: "Sair", + Random: "Aleatório", + Primary: "Primário", + Secondary: "Secundário", + Frame: "Estrutura", + Rims: "Aros", + "Are you sure you want to exit without saving?": "Tem a certeza de que deseja sair sem guardar?", + "All changes will be lost!": "Todas as alterações serão perdidas!", + "Car saved!": "Carro guardado!", + Test: "Testar", + "Starting point is missing!": "Ponto de partida em falta!", + Generate: "Gerar", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Tem a certeza de que deseja gerar uma nova pista?\n\nA pista atual será perdida!", + Load: "Carregar", + Save: "Guardar", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Tem a certeza de que deseja carregar uma nova pista?\n\nA pista atual será perdida!", + "Track saved!": "Pista guardada!", + "Failed to save!": "Falha ao guardar!", + 'Are you sure you want to overwrite "{0}"?': 'Tem a certeza de que deseja substituir "{0}"?', + Export: "Exportar", + Help: "Ajuda", + "Are you sure you want to exit the editor?": "Tem a certeza de que deseja sair do editor?", + "All unsaved data will be lost!": "Todos os dados não guardados serão perdidos!", + "Track settings": "Definições da pista", + "Unnamed Track": "Pista sem nome", + "Track name": "Nome da pista", + Author: "Autor", + Unknown: "Desconhecido", + Environment: "Ambiente", + Summer: "Verão", + Winter: "Inverno", + Desert: "Deserto", + "Sun direction": "Direção do sol", + "How to use the editor": "Como usar o editor", + "Camera controls": "Controlos da câmera", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "A câmera pode ser movida clicando com o botão direito do mouse e arrastando. Rode a câmera clicando no botão do meio do mouse (roda do mouse) ou segurando a tecla de controle e clicando com o botão direito do mouse e arrastando. Aproxime e afaste o zoom rolando a roda do mouse.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Alternativamente, a câmera também pode ser controlada usando as seguintes teclas do teclado:", + "Move forwards:": "Mover para a frente:", + "Move backwards:": "Mover para trás:", + "Move left:": "Mover para a esquerda:", + "Move right:": "Mover para a direita:", + "Rotate left:": "Rodar para a esquerda:", + "Rotate right:": "Rodar para a direita:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "A altura editada pode ser alterada usando a seleção de altura no canto inferior esquerdo ou segurando a tecla shift e rolando a roda do mouse. Alternativamente, você pode usar as seguintes teclas do teclado:", + "Move up:": "Mover para cima:", + "Move down:": "Mover para baixo:", + Editing: "Edição", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "As partes da pista podem ser selecionadas no menu à direita e depois podem ser colocadas clicando com o botão esquerdo do mouse.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Alternativamente, a parte da pista atualmente destacada pelo mouse pode ser selecionada com o seguinte atalho de teclado:", + "The selected part can then be rotated using the following keyboard shortcut:": "A parte selecionada pode então ser girada usando o seguinte atalho de teclado:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "As partes da pista podem ser excluídas usando a ferramenta de exclusão no menu lateral direito ou segurando a seguinte tecla:", + "Starting points, checkpoints and the finish line": "Pontos de partida, checkpoints e linha de chegada", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Pontos de partida, checkpoints e linhas de chegada podem ser selecionados na categoria mais alta do menu lateral direito.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Cada pista deve ter pelo menos um ponto de partida. Se houver vários pontos de partida, o último colocado será usado.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Os checkpoints devem ser colocados entre o ponto de partida e a linha de chegada. Quando uma parte da pista de checkpoint é selecionada, haverá uma ferramenta no canto inferior direito para selecionar a ordem do checkpoint. Isso determina a ordem em que os checkpoints devem ser passados antes de dirigir até a linha de chegada. Observe que é possível ter vários checkpoints com a mesma ordem de checkpoint.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "A linha de chegada é onde a pista termina, mas só se tornará ativa depois que todos os checkpoints forem passados. Também é possível ter várias linhas de chegada.", + "Starting point": "Ponto de partida", + Checkpoint: "Checkpoint", + "Finish line": "Linha de chegada", + "Exporting the track": "Exportando a pista", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Quando a pista estiver pronta, um nome para a pista pode ser inserido no canto superior esquerdo, após o qual a pista pode ser exportada usando o botão de exportação. Isso revelará um código de pista que pode ser enviado para outros usuários para que eles possam importar e jogar a pista.", + Close: "Fechar", + "Not set": "Não definido", + or: "ou", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "A câmera pode ser movida arrastando com um dedo. Rode a câmera arrastando com dois dedos. Aproxime e afaste o zoom beliscando.", + "The edited height can be changed by using the height selection in the bottom left corner.": "A altura editada pode ser alterada usando a seleção de altura no canto inferior esquerdo.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "As partes da pista podem ser selecionadas no menu à direita e depois podem ser colocadas tocando na tela.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "A parte selecionada pode então ser girada tocando no botão de rotação no canto inferior esquerdo.", + "Track parts can be deleted by using the delete tool in the right side menu.": "As partes da pista podem ser excluídas usando a ferramenta de exclusão no menu lateral direito.", + Watch: "Ver", + "Loading replay": "A carregar replay", + "Press {0} to return to the last checkpoint": "Pressione {0} para voltar ao último checkpoint", + "Press {0} to start over": "Pressione {0} para começar de novo", + "Reset once to return to the last checkpoint": "Repor uma vez para voltar ao último checkpoint", + "Reset again to start over": "Repor novamente para começar de novo", + Leaderboard: "Tabela de Classificação", + Back: "Voltar", + "Error: Failed to load leaderboard": "Erro: Falha ao carregar a tabela de classificação", + Pending: "Pendente", + Verified: "Verificado", + Invalid: "Inválido", + Duplicate: "Duplicado", + You: "Você", + "Only verified": "Apenas verificados", + Loading: "A Carregar", + "Failed to load recordings": "Falha ao carregar as gravações", + "Cannot load recordings due to non-determinism": "Não é possível carregar as gravações devido ao não determinismo", + Ok: "Ok", + "Track is missing starting point": "A pista não tem ponto de partida", + "Some leaderboard features are disabled.": "Algumas funcionalidades da tabela de classificação estão desativadas.", + "Please try another browser or device.": "Por favor, tente outro navegador ou dispositivo.", + "You already have another instance of PolyTrack open.": "Já tem outra instância do PolyTrack aberta.", + "Please switch to that tab or window to continue.": "Por favor, mude para essa aba ou janela para continuar.", + "Computer determinism check failed.": "Falha na verificação de determinismo do computador.", + "Non-deterministic game assets found.": "Ativos de jogo não determinísticos encontrados.", + "Please try clearing your browser cache.": "Por favor, tente limpar o cache do seu navegador.", + Customize: "Personalizar", + Editor: "Editor", + Settings: "Definições", + Profile: "Perfil", + Play: "Jogar", + Version: "Versão", + "You cannot have duplicate user profiles": "Não pode ter perfis de utilizador duplicados", + "Failed to create user profile": "Falha ao criar o perfil de utilizador", + "This user profile does not exist on the server": "Este perfil de utilizador não existe no servidor", + "Failed to download user profile from the server": "Falha ao descarregar o perfil de utilizador do servidor", + "User token is invalid": "Token de utilizador inválido", + "Are you sure you want to display your private key?": "Tem a certeza de que pretende mostrar a sua chave privada?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "NÃO PARTILHE ESTA CHAVE COM NINGUÉM.", + "You need a free user profile slot to import a new user profile": "Necessita de um slot de perfil de utilizador livre para importar um novo perfil de utilizador", + Quit: "Sair", + Fullscreen: "Ecrã Inteiro", + Windowed: "Janela", + " ": "Parece que está a jogar uma versão não oficial de {0}. Para a versão mais atualizada, visite a fonte original:", + Nickname: "Alcunha", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Escolha uma alcunha para ser exibida na tabela de classificação. A sua alcunha pode ser alterada a qualquer momento.", + Cancel: "Cancelar", + Confirm: "Confirmar", + Verifier: "Verificador", + "User ID": "ID de Utilizador", + Paused: "Pausado", + "Switch car": "Mudar de carro", + Profiles: "Perfis", + 'Are you sure you would like to delete "{0}"?': 'Tem a certeza de que pretende eliminar "{0}"?', + Empty: "Vazio", + Reset: "Repor", + Apply: "Aplicar", + Gameplay: "Jogabilidade", + Units: "Unidades", + Metric: "Métrico", + Imperial: "Imperial", + "Reset hint": "Repor dica", + Disabled: "Desativado", + Enabled: "Ativado", + "Ghost car": "Carro Fantasma", + "Default camera": "Câmera Padrão", + Default: "Padrão", + Cockpit: "Cabine", + "Cockpit camera mode": "Modo da câmera de cabine", + Hold: "Manter", + Toggle: "Alternar", + Checkpoints: "Pontos de Verificação", + Timer: "Temporizador", + Speedometer: "Velocímetro", + Bottom: "Inferior", + Top: "Superior", + Language: "Idioma", + Graphics: "Gráficos", + "Car shadow": "Sombra do Carro", + "Track shadow": "Sombra da Pista", + Off: "Desligado", + On: "Ligado", + Low: "Baixo", + Medium: "Médio", + High: "Alto", + Clouds: "Nuvens", + Particles: "Partículas", + Skidmarks: "Marcas de Derrapagem", + "Render scale": "Escala de Renderização", + "Anti-aliasing (requires restart)": "Anti-aliasing (necessita de reiniciar)", + Audio: "Áudio", + "Sound effect volume": "Volume dos Efeitos Sonoros", + "Music volume": "Volume da Música", + "Checkpoint volume": "Volume dos Pontos de Verificação", + Controls: "Controlos", + Vehicle: "Veículo", + Accelerate: "Acelerar", + Brake: "Travar", + "Turn left": "Virar à Esquerda", + "Turn right": "Virar à Direita", + "Checkpoint reset": "Repor o Ponto de Verificação", + "Start reset": "Repor o Início", + "Cockpit camera": "Câmera de Cabine", + "Rotate part": "Rodar Parte", + "Height modifier": "Modificador de Altura", + "Delete part": "Eliminar Parte", + "Move forwards": "Mover para a frente", + "Move backwards": "Mover para trás", + "Move left": "Mover para a esquerda", + "Move right": "Mover para a direita", + "Rotate view up": "Rodar a vista para cima", + "Rotate view down": "Rodar a vista para baixo", + "Rotate view left": "Rodar a vista para a esquerda", + "Rotate view right": "Rodar a vista para a direita", + "Move down": "Mover para baixo", + "Move up": "Mover para cima", + "Test track": "Testar Pista", + "Pick part": "Escolher Parte", + Spectator: "Espectador", + "Speed modifier": "Modificador de Velocidade", + Other: "Outro", + "Hide UI": "Esconder UI", + Pause: "Pausa", + "Toggle FPS counter": "Alternar Contador de FPS", + "Toggle spectator camera": "Alternar Câmara de Espectador", + "Press any key...\n\nPress [Escape] to cancel.": "Pressione qualquer tecla...\n\nPressione [Escape] para cancelar.", + Clear: "Limpar", + "New record": "Novo Recorde", + Record: "Recorde", + Current: "Atual", + Difference: "Diferença", + Copy: "Copiar", + Import: "Importar", + "Failed to import track": "Falha ao importar a pista", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'A pista "{0}" já existe. Deseja substituí-la?', + Overwrite: "Substituir", + "Paste track data here...": "Cole os dados da pista aqui...", + Rank: "Classificação", + "Personal best": "Melhor Pessoal", + Opponents: "Oponentes", + "{0} opponent selected": "{0} oponente selecionado", + "{0} opponents selected": "{0} oponentes selecionados", + "Select opponents to race against from the leaderboard on the left": "Selecione os oponentes para competir na tabela de classificação à esquerda", + "No record": "Sem Registo", + "Official tracks": "Pistas Oficiais", + "Community tracks": "Pistas da Comunidade", + "Custom tracks": "Pistas Personalizadas", + 'Are you sure you want to delete "{0}"?': 'Tem a certeza de que deseja eliminar "{0}"?', + Delete: "Eliminar", + "No community tracks": "Sem pistas da comunidade", + "Community tracks are coming soon": "Pistas da comunidade em breve", + "No custom tracks": "Sem pistas personalizadas", + "Create a track using the editor or import a track code": "Crie uma pista usando o editor ou importe um código de pista", + "Search tracks...": "Procurar pistas...", + "Invalid replay detected!": "Replay inválido detetado!" + }, + mz = { + "Checkpoint order": "Порядок контрольных точек", + Height: "Высота", + Exit: "Выход", + Random: "Случайный", + Primary: "Основной", + Secondary: "Вторичный", + Frame: "Каркас", + Rims: "Диски", + "Are you sure you want to exit without saving?": "Вы уверены, что хотите выйти без сохранения?", + "All changes will be lost!": "Все изменения будут потеряны!", + "Car saved!": "Автомобиль сохранен!", + Test: "Тест", + "Starting point is missing!": "Отсутствует стартовая точка!", + Generate: "Генерировать", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Вы уверены, что хотите создать новую трассу?\n\nВаша текущая трасса будет потеряна!", + Load: "Загрузить", + Save: "Сохранить", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Вы уверены, что хотите загрузить новую трассу?\n\nВаша текущая трасса будет потеряна!", + "Track saved!": "Трасса сохранена!", + "Failed to save!": "Не удалось сохранить!", + 'Are you sure you want to overwrite "{0}"?': 'Вы уверены, что хотите перезаписать "{0}"?', + Export: "Экспорт", + Help: "Помощь", + "Are you sure you want to exit the editor?": "Вы уверены, что хотите выйти из редактора?", + "All unsaved data will be lost!": "Все несохраненные данные будут потеряны!", + "Track settings": "Настройки трассы", + "Unnamed Track": "Безымянная трасса", + "Track name": "Имя трассы", + Author: "Автор", + Unknown: "Неизвестно", + Environment: "Окружение", + Summer: "Лето", + Winter: "Зима", + Desert: "Пустыня", + "Sun direction": "Направление солнца", + "How to use the editor": "Как использовать редактор", + "Camera controls": "Управление камерой", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "Камеру можно перемещать, щелкая правой кнопкой мыши и перетаскивая мышь. Вращайте камеру, щелкнув средней кнопкой мыши (колесиком) или удерживая клавишу Ctrl и щелкнув правой кнопкой мыши и перетаскивая мышь. Масштабируйте внутрь и наружу, прокручивая колесико мыши.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Кроме того, камеру можно управлять с помощью следующих клавиш клавиатуры:", + "Move forwards:": "Двигаться вперед:", + "Move backwards:": "Двигаться назад:", + "Move left:": "Двигаться влево:", + "Move right:": "Двигаться вправо:", + "Rotate left:": "Повернуть влево:", + "Rotate right:": "Повернуть вправо:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "Изменять высоту редактируемой части можно с помощью выбора высоты в левом нижнем углу или удерживая клавишу Shift и прокручивая колесико мыши. Кроме того, можно использовать следующие клавиши клавиатуры:", + "Move up:": "Двигаться вверх:", + "Move down:": "Двигаться вниз:", + Editing: "Редактирование", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Части трассы можно выбирать в меню справа, после чего их можно размещать, щелкнув левой кнопкой мыши.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Кроме того, текущую часть трассы, на которую указывает мышь, можно выбрать с помощью следующей комбинации клавиш:", + "The selected part can then be rotated using the following keyboard shortcut:": "Выбранную часть можно повернуть с помощью следующей комбинации клавиш:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Части трассы можно удалять с помощью инструмента удаления в правом меню или удерживая следующую клавишу:", + "Starting points, checkpoints and the finish line": "Стартовые точки, контрольные точки и финишная линия", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Стартовые точки, контрольные точки и финишные линии можно выбрать в верхней категории правого меню.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Каждая трасса должна иметь как минимум одну стартовую точку. Если есть несколько стартовых точек, будет использована последняя размещенная.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Контрольные точки следует размещать между стартовой точкой и финишной линией. При выборе части трассы контрольной точки в правом нижнем углу появится инструмент для выбора порядка контрольной точки. Это определяет порядок, в котором контрольные точки должны быть пройдены перед движением к финишной линии. Обратите внимание, что возможно наличие нескольких контрольных точек с одним и тем же порядком контрольных точек.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "Финишная линия - это место, где заканчивается трасса, но она становится активной только после прохождения всех контрольных точек. Также возможно наличие нескольких финишных линий.", + "Starting point": "Стартовая точка", + Checkpoint: "Контрольная точка", + "Finish line": "Финишная линия", + "Exporting the track": "Экспорт трассы", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Когда трасса готова, в верхнем левом углу можно ввести имя трассы, после чего трассу можно экспортировать с помощью кнопки экспорта. Это позволит получить код трассы, который можно отправить другим пользователям, чтобы они могли импортировать и играть на трассе.", + Close: "Закрыть", + "Not set": "Не установлено", + or: "или", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "Камеру можно перемещать, перетаскивая одним пальцем. Вращайте камеру, перетаскивая двумя пальцами. Масштабируйте внутрь и наружу, сжимая и разжимая пальцами.", + "The edited height can be changed by using the height selection in the bottom left corner.": "Изменять высоту редактируемой части можно с помощью выбора высоты в левом нижнем углу.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Части трассы можно выбирать в меню справа, после чего их можно размещать, касаясь экрана.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "Выбранную часть можно повернуть, касаясь кнопки поворота в левом нижнем углу.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Части трассы можно удалять с помощью инструмента удаления в правом меню.", + Watch: "Смотреть", + "Loading replay": "Загрузка записи", + "Press {0} to return to the last checkpoint": "Нажмите {0}, чтобы вернуться к последней контрольной точке", + "Press {0} to start over": "Нажмите {0}, чтобы начать заново", + "Reset once to return to the last checkpoint": "Сбросьте один раз, чтобы вернуться к последней контрольной точке", + "Reset again to start over": "Сбросьте еще раз, чтобы начать заново", + Leaderboard: "Таблица лидеров", + Back: "Назад", + "Error: Failed to load leaderboard": "Ошибка: не удалось загрузить таблицу лидеров", + Pending: "В ожидании", + Verified: "Подтверждено", + Invalid: "Недействительно", + Duplicate: "Дубликат", + You: "Вы", + "Only verified": "Только подтвержденные", + Loading: "Загрузка", + "Failed to load recordings": "Не удалось загрузить записи", + "Cannot load recordings due to non-determinism": "Невозможно загрузить записи из-за недетерминизма", + Ok: "Ок", + "Track is missing starting point": "Отсутствует стартовая точка на трассе", + "Some leaderboard features are disabled.": "Некоторые функции таблицы лидеров отключены.", + "Please try another browser or device.": "Пожалуйста, попробуйте другой браузер или устройство.", + "You already have another instance of PolyTrack open.": "У вас уже открыт другой экземпляр PolyTrack.", + "Please switch to that tab or window to continue.": "Пожалуйста, переключитесь на эту вкладку или окно, чтобы продолжить.", + "Computer determinism check failed.": "Проверка детерминизма компьютера не удалась.", + "Non-deterministic game assets found.": "Недетерминированные игровые ресурсы найдены.", + "Please try clearing your browser cache.": "Пожалуйста, попробуйте очистить кеш браузера.", + Customize: "Настройка", + Editor: "Редактор", + Settings: "Настройки", + Profile: "Профиль", + Play: "Играть", + Version: "Версия", + "You cannot have duplicate user profiles": "Нельзя иметь дублирующиеся профили пользователей", + "Failed to create user profile": "Не удалось создать профиль пользователя", + "This user profile does not exist on the server": "Этот профиль пользователя не существует на сервере", + "Failed to download user profile from the server": "Не удалось загрузить профиль пользователя с сервера", + "User token is invalid": "Недействительный токен пользователя", + "Are you sure you want to display your private key?": "Вы уверены, что хотите отобразить свой личный ключ?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "НЕ ДЕЛИТЕСЬ ЭТИМ КЛЮЧОМ НИ С КЕМ.", + "You need a free user profile slot to import a new user profile": "Вам нужен свободный слот профиля пользователя для импорта нового профиля пользователя", + Quit: "Выйти", + Fullscreen: "Полноэкранный", + Windowed: "Оконный", + " ": "Похоже, вы играете в неофициальную версию {0}. Для самой актуальной версии посетите оригинальный источник:", + Nickname: "Никнейм", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Выберите никнейм, который будет отображаться в таблице лидеров. Вы можете изменить никнейм в любое время.", + Cancel: "Отмена", + Confirm: "Подтвердить", + Verifier: "Подтверждающий", + "User ID": "Идентификатор пользователя", + Paused: "Пауза", + "Switch car": "Сменить автомобиль", + Profiles: "Профили", + 'Are you sure you would like to delete "{0}"?': 'Вы уверены, что хотите удалить "{0}"?', + Empty: "Пусто", + Reset: "Сброс", + Apply: "Применить", + Gameplay: "Игровой процесс", + Units: "Единицы измерения", + Metric: "Метрическая", + Imperial: "Имперская", + "Reset hint": "Сбросить подсказку", + Disabled: "Выключено", + Enabled: "Включено", + "Ghost car": "Призрачная машина", + "Default camera": "Камера по умолчанию", + Default: "По умолчанию", + Cockpit: "Кабина", + "Cockpit camera mode": "Режим кабины", + Hold: "Удерживать", + Toggle: "Переключить", + Checkpoints: "Контрольные точки", + Timer: "Таймер", + Speedometer: "Спидометр", + Bottom: "Снизу", + Top: "Сверху", + Language: "Язык", + Graphics: "Графика", + "Car shadow": "Тень автомобиля", + "Track shadow": "Тень трассы", + Off: "Выключено", + On: "Включено", + Low: "Низкая", + Medium: "Средняя", + High: "Высокая", + Clouds: "Облака", + Particles: "Частицы", + Skidmarks: "Отметины от скольжения", + "Render scale": "Масштаб рендера", + "Anti-aliasing (requires restart)": "Сглаживание (требуется перезапуск)", + Audio: "Звук", + "Sound effect volume": "Громкость звуковых эффектов", + "Music volume": "Громкость музыки", + "Checkpoint volume": "Громкость контрольных точек", + Controls: "Управление", + Vehicle: "Транспорт", + Accelerate: "Ускорить", + Brake: "Тормоз", + "Turn left": "Повернуть налево", + "Turn right": "Повернуть направо", + "Checkpoint reset": "Сброс контрольной точки", + "Start reset": "Сброс старта", + "Cockpit camera": "Камера кабины", + "Rotate part": "Повернуть часть", + "Height modifier": "Модификатор высоты", + "Delete part": "Удалить часть", + "Move forwards": "Двигаться вперед", + "Move backwards": "Двигаться назад", + "Move left": "Двигаться влево", + "Move right": "Двигаться вправо", + "Rotate view up": "Повернуть вид вверх", + "Rotate view down": "Повернуть вид вниз", + "Rotate view left": "Повернуть вид влево", + "Rotate view right": "Повернуть вид вправо", + "Move down": "Двигаться вниз", + "Move up": "Двигаться вверх", + "Test track": "Тестировать трассу", + "Pick part": "Выбрать часть", + Spectator: "Наблюдатель", + "Speed modifier": "Модификатор скорости", + Other: "Другое", + "Hide UI": "Скрыть интерфейс", + Pause: "Пауза", + "Toggle FPS counter": "Переключить счетчик FPS", + "Toggle spectator camera": "Переключить камеру наблюдателя", + "Press any key...\n\nPress [Escape] to cancel.": "Нажмите любую клавишу...\n\nНажмите [Escape], чтобы отменить.", + Clear: "Очистить", + "New record": "Новый рекорд", + Record: "Рекорд", + Current: "Текущее", + Difference: "Разница", + Copy: "Копировать", + Import: "Импортировать", + "Failed to import track": "Не удалось импортировать трассу", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'Трасса "{0}" уже существует. Хотите перезаписать её?', + Overwrite: "Перезаписать", + "Paste track data here...": "Вставьте данные трассы сюда...", + Rank: "Ранг", + "Personal best": "Личный рекорд", + Opponents: "Противники", + "{0} opponent selected": "{0} противник выбран", + "{0} opponents selected": "{0} противников выбрано", + "Select opponents to race against from the leaderboard on the left": "Выберите противников для гонки из таблицы лидеров слева", + "No record": "Нет рекорда", + "Official tracks": "Официальные трассы", + "Community tracks": "Трассы сообщества", + "Custom tracks": "Пользовательские трассы", + 'Are you sure you want to delete "{0}"?': 'Вы уверены, что хотите удалить "{0}"?', + Delete: "Удалить", + "No community tracks": "Нет трасс сообщества", + "Community tracks are coming soon": "Трассы сообщества скоро появятся", + "No custom tracks": "Нет пользовательских трасс", + "Create a track using the editor or import a track code": "Создайте трассу с помощью редактора или импортируйте код трассы", + "Search tracks...": "Поиск трасс...", + "Invalid replay detected!": "Обнаружена недействительная запись!" + }, + gz = { + "Checkpoint order": "Kontrol noktası sırası", + Height: "Yükseklik", + Exit: "Çıkış", + Random: "Rastgele", + Primary: "Birincil", + Secondary: "İkincil", + Frame: "Çerçeve", + Rims: "Jantlar", + "Are you sure you want to exit without saving?": "Kaydetmeden çıkmak istediğinizden emin misiniz?", + "All changes will be lost!": "Tüm değişiklikler kaybolacak!", + "Car saved!": "Araba kaydedildi!", + Test: "Test", + "Starting point is missing!": "Başlangıç noktası eksik!", + Generate: "Oluştur", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Yeni bir rota oluşturmak istediğinizden emin misiniz?\n\nMevcut rotanız kaybolacak!", + Load: "Yükle", + Save: "Kaydet", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Yeni bir rota yüklemek istediğinizden emin misiniz?\n\nMevcut rotanız kaybolacak!", + "Track saved!": "Rota kaydedildi!", + "Failed to save!": "Kaydetme başarısız!", + 'Are you sure you want to overwrite "{0}"?': '"{0}" üzerine yazmak istediğinizden emin misiniz?', + Export: "Dışa Aktar", + Help: "Yardım", + "Are you sure you want to exit the editor?": "Editörden çıkmak istediğinizden emin misiniz?", + "All unsaved data will be lost!": "Tüm kaydedilmemiş veriler kaybolacak!", + "Track settings": "Rota ayarları", + "Unnamed Track": "Adsız Rota", + "Track name": "Rota adı", + Author: "Yazar", + Unknown: "Bilinmiyor", + Environment: "Çevre", + Summer: "Yaz", + Winter: "Kış", + Desert: "Çöl", + "Sun direction": "Güneş yönü", + "How to use the editor": "Editörü nasıl kullanılır", + "Camera controls": "Kamera kontrolleri", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "Kamerayı sağ tıklayarak ve fareyi sürükleyerek hareket ettirebilirsiniz. Kamerayı orta fare düğmesine (fare tekerleği) tıklayarak veya kontrol tuşunu basılı tutarak sağ tıklayarak ve fareyi sürükleyerek döndürebilirsiniz. Fare tekerleği ile yakınlaştırma ve uzaklaştırma yapabilirsiniz.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Alternatif olarak, kamera aşağıdaki klavye tuşları kullanılarak da kontrol edilebilir:", + "Move forwards:": "İleri hareket et:", + "Move backwards:": "Geri hareket et:", + "Move left:": "Sola hareket et:", + "Move right:": "Sağa hareket et:", + "Rotate left:": "Sola döndür:", + "Rotate right:": "Sağa döndür:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "Düzenlenen yükseklik, sol alt köşedeki yükseklik seçimini kullanarak veya Shift tuşunu basılı tutarak ve fare tekerleğini kaydırarak değiştirilebilir. Alternatif olarak, aşağıdaki klavye tuşlarını kullanabilirsiniz:", + "Move up:": "Yukarı hareket et:", + "Move down:": "Aşağı hareket et:", + Editing: "Düzenleme", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Parçalar, fareyle sol tıklayarak yerleştirilebilecekleri sağ taraftaki menüden seçilebilir.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Alternatif olarak, fare tarafından üzerine gelinen rota parçası aşağıdaki klavye kısayoluyla seçilebilir:", + "The selected part can then be rotated using the following keyboard shortcut:": "Seçilen parça aşağıdaki klavye kısayoluyla döndürülebilir:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Rota parçaları, sağ taraftaki menüdeki silme aracı kullanılarak veya aşağıdaki tuşa basılı tutarak silinebilir:", + "Starting points, checkpoints and the finish line": "Başlangıç noktaları, kontrol noktaları ve bitiş çizgisi", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Başlangıç noktaları, kontrol noktaları ve bitiş çizgileri, sağ taraftaki menünün en üst kategorisinde seçilebilir.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Her rota en az bir başlangıç noktasına sahip olmalıdır. Birden fazla başlangıç noktası varsa, en son yerleştirilen kullanılacaktır.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Kontrol noktaları, başlangıç noktası ile bitiş çizgisi arasına yerleştirilmelidir. Bir kontrol noktası rota parçası seçildiğinde, kontrol noktasının sırasını seçmek için sağ alt köşede bir araç bulunur. Bu, kontrol noktalarının bitiş çizgisine gitmeden önce geçilmesi gereken sırayı belirler. Aynı kontrol noktası sırasına sahip birden fazla kontrol noktası olabileceğine dikkat edin.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "Bitiş çizgisi, rotanın bittiği yerdir, ancak tüm kontrol noktaları geçildikten sonra aktif hale gelir. Birden fazla bitiş çizgisi de olabilir.", + "Starting point": "Başlangıç noktası", + Checkpoint: "Kontrol noktası", + "Finish line": "Bitiş çizgisi", + "Exporting the track": "Rotanın dışa aktarılması", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Rota tamamlandığında, rota için bir ad girilebilir ve ardından rota düğmesini kullanarak rota dışa aktarılabilir. Bu, diğer kullanıcılara gönderilebilecek bir rota kodunu ortaya çıkarır, böylece rota içe aktarılabilir ve oynanabilir.", + Close: "Kapat", + "Not set": "Ayarlanmadı", + or: "veya", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "Kamerayı bir parmakla sürükleyerek hareket ettirebilirsiniz. Kamerayı iki parmakla sürükleyerek döndürebilirsiniz. Yakınlaştırmak ve uzaklaştırmak için sıkıştırabilirsiniz.", + "The edited height can be changed by using the height selection in the bottom left corner.": "Düzenlenen yükseklik, sol alt köşedeki yükseklik seçimi kullanılarak değiştirilebilir.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Parçalar, ekrana dokunarak yerleştirilebilecekleri sağ taraftaki menüden seçilebilir.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "Seçilen parça, sol alt köşedeki döndür düğmesine dokunarak döndürülebilir.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Parçalar, sağ taraftaki menüdeki silme aracı kullanılarak silinebilir.", + Watch: "İzle", + "Loading replay": "Tekrar yükleniyor", + "Press {0} to return to the last checkpoint": "Son kontrol noktasına dönmek için {0} tuşuna basın", + "Press {0} to start over": "Baştan başlamak için {0} tuşuna basın", + "Reset once to return to the last checkpoint": "Son kontrol noktasına dönmek için bir kez sıfırlayın", + "Reset again to start over": "Baştan başlamak için tekrar sıfırlayın", + Leaderboard: "Liderlik Tablosu", + Back: "Geri", + "Error: Failed to load leaderboard": "Hata: Liderlik tablosu yüklenemedi", + Pending: "Beklemede", + Verified: "Doğrulandı", + Invalid: "Geçersiz", + Duplicate: "Çift", + You: "Sen", + "Only verified": "Sadece doğrulanmış", + Loading: "Yükleniyor", + "Failed to load recordings": "Kayıtlar yüklenemedi", + "Cannot load recordings due to non-determinism": "Belirlenim dışılıktan dolayı kayıtlar yüklenemiyor", + Ok: "Tamam", + "Track is missing starting point": "Rota başlangıç noktası eksik", + "Some leaderboard features are disabled.": "Bazı liderlik tablosu özellikleri devre dışı bırakıldı.", + "Please try another browser or device.": "Lütfen başka bir tarayıcı veya cihaz deneyin.", + "You already have another instance of PolyTrack open.": "Zaten PolyTrack'in başka bir örneğini açtınız.", + "Please switch to that tab or window to continue.": "Devam etmek için lütfen o sekmeye veya pencereye geçin.", + "Computer determinism check failed.": "Bilgisayar belirlenim kontrolü başarısız oldu.", + "Non-deterministic game assets found.": "Belirlenim dışı oyun varlıkları bulundu.", + "Please try clearing your browser cache.": "Lütfen tarayıcı önbelleğinizi temizlemeyi deneyin.", + Customize: "Özelleştir", + Editor: "Editör", + Settings: "Ayarlar", + Profile: "Profil", + Play: "Oyna", + Version: "Sürüm", + "You cannot have duplicate user profiles": "Çift kullanıcı profili oluşturamazsınız", + "Failed to create user profile": "Kullanıcı profili oluşturulamadı", + "This user profile does not exist on the server": "Bu kullanıcı profili sunucuda mevcut değil", + "Failed to download user profile from the server": "Kullanıcı profili sunucudan indirilemedi", + "User token is invalid": "Kullanıcı belirteci geçersiz", + "Are you sure you want to display your private key?": "Gizli anahtarınızı göstermek istediğinizden emin misiniz?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "BU ANAHTARI KİMSEYLE PAYLAŞMAYIN.", + "You need a free user profile slot to import a new user profile": "Yeni bir kullanıcı profili eklemek için boş bir kullanıcı profili yuvasına ihtiyacınız var", + Quit: "Çıkış", + Fullscreen: "Tam Ekran", + Windowed: "Pencere Modu", + " ": "{0} adlı resmi olmayan bir sürüm oynuyor gibi görünüyorsunuz. En güncel sürüm için lütfen orijinal kaynağı ziyaret edin:", + Nickname: "Kullanıcı Adı", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Liderlik tablosunda gösterilecek bir kullanıcı adı seçin. Kullanıcı adınızı istediğiniz zaman değiştirebilirsiniz.", + Cancel: "İptal", + Confirm: "Onayla", + Verifier: "Doğrulayıcı", + "User ID": "Kullanıcı Kimliği", + Paused: "Duraklatıldı", + "Switch car": "Araba değiştir", + Profiles: "Profiller", + 'Are you sure you would like to delete "{0}"?': '"{0}" silmek istediğinizden emin misiniz?', + Empty: "Boş", + Reset: "Sıfırla", + Apply: "Uygula", + Gameplay: "Oynanış", + Units: "Birimler", + Metric: "Metrik", + Imperial: "İngiliz", + "Reset hint": "İpucunu sıfırla", + Disabled: "Devre Dışı", + Enabled: "Etkin", + "Ghost car": "Hayalet araba", + "Default camera": "Varsayılan kamera", + Default: "Varsayılan", + Cockpit: "Kokpit", + "Cockpit camera mode": "Kokpit kamera modu", + Hold: "Basılı Tut", + Toggle: "Değiştir", + Checkpoints: "Kontrol Noktaları", + Timer: "Zamanlayıcı", + Speedometer: "Hızölçer", + Bottom: "Alt", + Top: "Üst", + Language: "Dil", + Graphics: "Grafikler", + "Car shadow": "Araba gölgesi", + "Track shadow": "Rota gölgesi", + Off: "Kapalı", + On: "Açık", + Low: "Düşük", + Medium: "Orta", + High: "Yüksek", + Clouds: "Bulutlar", + Particles: "Partiküller", + Skidmarks: "Lastik izleri", + "Render scale": "Görüntü ölçeği", + "Anti-aliasing (requires restart)": "Kenar yumuşatma (yeniden başlatma gerektirir)", + Audio: "Ses", + "Sound effect volume": "Ses efekti ses seviyesi", + "Music volume": "Müzik ses seviyesi", + "Checkpoint volume": "Kontrol noktası ses seviyesi", + Controls: "Kontroller", + Vehicle: "Araç", + Accelerate: "Hızlan", + Brake: "Fren", + "Turn left": "Sola dön", + "Turn right": "Sağa dön", + "Checkpoint reset": "Kontrol noktası sıfırla", + "Start reset": "Başlangıç sıfırla", + "Cockpit camera": "Kokpit kamera", + "Rotate part": "Parçayı döndür", + "Height modifier": "Yükseklik değiştir", + "Delete part": "Parçayı sil", + "Move forwards": "İleri git", + "Move backwards": "Geri git", + "Move left": "Sola git", + "Move right": "Sağa git", + "Rotate view up": "Görünümü yukarı döndür", + "Rotate view down": "Görünümü aşağı döndür", + "Rotate view left": "Görünümü sola döndür", + "Rotate view right": "Görünümü sağa döndür", + "Move down": "Aşağı git", + "Move up": "Yukarı git", + "Test track": "Rota test et", + "Pick part": "Parça seç", + Spectator: "Seyirci", + "Speed modifier": "Hız değiştir", + Other: "Diğer", + "Hide UI": "UI'yi gizle", + Pause: "Duraklat", + "Toggle FPS counter": "FPS sayacını değiştir", + "Toggle spectator camera": "Seyirci kamerasını değiştir", + "Press any key...\n\nPress [Escape] to cancel.": "Herhangi bir tuşa basın...\n\nİptal etmek için [Escape] tuşuna basın", + Clear: "Temizle", + "New record": "Yeni kayıt", + Record: "Kayıt", + Current: "Mevcut", + Difference: "Fark", + Copy: "Kopyala", + Import: "İçe Aktar", + "Failed to import track": "Rota içe aktarma başarısız oldu", + 'The track "{0}" already exists. Do you wish to overwrite it?': '"{0}" rota zaten var. Üzerine yazmak istiyor musunuz?', + Overwrite: "Üzerine yaz", + "Paste track data here...": "Rota verilerini buraya yapıştır...", + Rank: "Sıra", + "Personal best": "Kişisel en iyi", + Opponents: "Rakipler", + "{0} opponent selected": "{0} rakip seçildi", + "{0} opponents selected": "{0} rakip seçildi", + "Select opponents to race against from the leaderboard on the left": "Soldaki liderlik tablosundan yarışmak için rakipleri seçin", + "No record": "Kayıt yok", + "Official tracks": "Resmi rotalar", + "Community tracks": "Topluluk rotaları", + "Custom tracks": "Özel rotalar", + 'Are you sure you want to delete "{0}"?': '"{0}" silmek istediğinizden emin misiniz?', + Delete: "Sil", + "No community tracks": "Topluluk rotası yok", + "Community tracks are coming soon": "Topluluk rotaları yakında gelecek", + "No custom tracks": "Özel rotalar yok", + "Create a track using the editor or import a track code": "Editörü kullanarak bir rota oluşturun veya bir rota kodu içe aktarın", + "Search tracks...": "Rotayı ara...", + "Invalid replay detected!": "Geçersiz tekrar algılandı!" + }, + vz = { + "Checkpoint order": "Порядок пунктів контролю", + Height: "Висота", + Exit: "Вихід", + Random: "Випадково", + Primary: "Основний", + Secondary: "Додатковий", + Frame: "Рама", + Rims: "Дисків", + "Are you sure you want to exit without saving?": "Ви впевнені, що хочете вийти без збереження?", + "All changes will be lost!": "Всі зміни будуть втрачені!", + "Car saved!": "Автомобіль збережено!", + Test: "Тест", + "Starting point is missing!": "Відсутня стартова точка!", + Generate: "Генерувати", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "Ви впевнені, що хочете згенерувати новий трек?\n\nВаш поточний трек буде втрачено!", + Load: "Завантажити", + Save: "Зберегти", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "Ви впевнені, що хочете завантажити новий трек?\n\nВаш поточний трек буде втрачено!", + "Track saved!": "Трек збережено!", + "Failed to save!": "Не вдалося зберегти!", + 'Are you sure you want to overwrite "{0}"?': 'Ви впевнені, що хочете перезаписати "{0}"?', + Export: "Експорт", + Help: "Довідка", + "Are you sure you want to exit the editor?": "Ви впевнені, що хочете вийти з редактора?", + "All unsaved data will be lost!": "Всі не збережені дані будуть втрачені!", + "Track settings": "Налаштування треку", + "Unnamed Track": "Безіменний трек", + "Track name": "Назва треку", + Author: "Автор", + Unknown: "Невідомий", + Environment: "Середовище", + Summer: "Літо", + Winter: "Зима", + Desert: "Пустеля", + "Sun direction": "Напрямок сонця", + "How to use the editor": "Як користуватися редактором", + "Camera controls": "Управління камерою", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "Камеру можна переміщувати, натискаючи праву кнопку миші і перетягуючи її. Повертайте камеру, натискаючи середню кнопку миші (колесо миші) або утримуючи клавішу Control і натискаючи праву кнопку миші і перетягуючи її. Збільшуйте та зменшуйте масштаб, прокручуючи колесо миші.", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "Також камеру можна керувати за допомогою наступних клавіш на клавіатурі:", + "Move forwards:": "Рухатися вперед:", + "Move backwards:": "Рухатися назад:", + "Move left:": "Рухатися вліво:", + "Move right:": "Рухатися вправо:", + "Rotate left:": "Повернути вліво:", + "Rotate right:": "Повернути вправо:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "Редаговану висоту можна змінити, використовуючи вибір висоти в нижньому лівому куті або утримуючи клавішу Shift і прокручуючи колесо миші. Альтернативно, ви можете використовувати наступні клавіші на клавіатурі:", + "Move up:": "Рухатися вгору:", + "Move down:": "Рухатися вниз:", + Editing: "Редагування", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "Частини треку можна вибрати в меню справа, після чого їх можна розмістити, натиснувши ліву кнопку миші.", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "Альтернативно, частину треку, над якою зараз знаходиться курсор миші, можна вибрати за допомогою наступної комбінації клавіш на клавіатурі:", + "The selected part can then be rotated using the following keyboard shortcut:": "Вибрану частину можна повернути за допомогою наступної комбінації клавіш на клавіатурі:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "Частини треку можна видалити, використовуючи інструмент видалення в бічному меню справа або утримуючи наступну клавішу:", + "Starting points, checkpoints and the finish line": "Стартові точки, контрольні пункти та фінішна лінія", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "Стартові точки, контрольні пункти та фінішна лінія можуть бути вибрані в найвищій категорії в бічному меню справа.", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "Кожен трек повинен мати принаймні одну стартову точку. Якщо є кілька стартових точок, буде використана остання розміщена.", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "Контрольні пункти слід розміщувати між стартовою точкою та фінішною лінією. Коли вибрана частина треку контрольного пункту, внизу справа з'явиться інструмент для вибору порядку контрольного пункту. Це визначає порядок, в якому контрольні пункти повинні бути пройдені перед рухом до фінішної лінії. Зверніть увагу, що можливо мати кілька контрольних пунктів з однаковим порядком контрольних пунктів.", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "Фінішна лінія - це місце, де закінчується трек, але вона стане активною лише після проходження всіх контрольних пунктів. Також можливо мати кілька фінішних ліній.", + "Starting point": "Стартова точка", + Checkpoint: "Контрольний пункт", + "Finish line": "Фінішна лінія", + "Exporting the track": "Експорт треку", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "Коли трек готовий, вгорі зліва можна ввести назву треку, після чого трек можна експортувати, використовуючи кнопку експорту. Це розкриє код треку, який можна надіслати іншим користувачам, щоб вони могли імпортувати й грати трек.", + Close: "Закрити", + "Not set": "Не встановлено", + or: "або", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "Камеру можна переміщувати, перетягуючи одним пальцем. Повертайте камеру, перетягуючи двома пальцями. Збільшуйте та зменшуйте масштаб, стискаючи пальці.", + "The edited height can be changed by using the height selection in the bottom left corner.": "Редаговану висоту можна змінити, використовуючи вибір висоти в нижньому лівому куті.", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "Частини треку можна вибрати в меню справа, після чого їх можна розмістити, натиснувши на екран.", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "Вибрану частину можна повернути, натиснувши кнопку повороту в нижньому лівому куті.", + "Track parts can be deleted by using the delete tool in the right side menu.": "Частини треку можна видалити, використовуючи інструмент видалення в бічному меню справа.", + Watch: "Перегляд", + "Loading replay": "Завантаження повтору", + "Press {0} to return to the last checkpoint": "Натисніть {0}, щоб повернутися до останнього контрольного пункту", + "Press {0} to start over": "Натисніть {0}, щоб почати спочатку", + "Reset once to return to the last checkpoint": "Скинути один раз, щоб повернутися до останнього контрольного пункту", + "Reset again to start over": "Скинути ще раз, щоб почати спочатку", + Leaderboard: "Таблиця лідерів", + Back: "Назад", + "Error: Failed to load leaderboard": "Помилка: не вдалося завантажити таблицю лідерів", + Pending: "Очікує на підтвердження", + Verified: "Підтверджено", + Invalid: "Недійсний", + Duplicate: "Дубльований", + You: "Ви", + "Only verified": "Тільки підтверджені", + Loading: "Завантаження", + "Failed to load recordings": "Не вдалося завантажити записи", + "Cannot load recordings due to non-determinism": "Не вдається завантажити записи через недетермінізм", + Ok: "Ок", + "Track is missing starting point": "В треку відсутня стартова точка", + "Some leaderboard features are disabled.": "Деякі функції таблиці лідерів вимкнені.", + "Please try another browser or device.": "Будь ласка, спробуйте інший браузер або пристрій.", + "You already have another instance of PolyTrack open.": "У вас вже є інший екземпляр PolyTrack відкритий.", + "Please switch to that tab or window to continue.": "Будь ласка, перейдіть на ту вкладку або вікно, щоб продовжити.", + "Computer determinism check failed.": "Перевірка детермінізму комп'ютера не вдалася.", + "Non-deterministic game assets found.": "Знайдено недетерміністичні ігрові ресурси.", + "Please try clearing your browser cache.": "Спробуйте очистити кеш браузера.", + Customize: "Налаштувати", + Editor: "Редактор", + Settings: "Налаштування", + Profile: "Профіль", + Play: "Грати", + Version: "Версія", + "You cannot have duplicate user profiles": "Ви не можете мати дубльовані профілі користувачів", + "Failed to create user profile": "Не вдалося створити профіль користувача", + "This user profile does not exist on the server": "Цей профіль користувача не існує на сервері", + "Failed to download user profile from the server": "Не вдалося завантажити профіль користувача з сервера", + "User token is invalid": "Недійсний токен користувача", + "Are you sure you want to display your private key?": "Ви впевнені, що хочете відобразити свій приватний ключ?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "НЕ ДІЛІТЬСЯ ЦИМ КЛЮЧЕМ З КИМБУДЬ.", + "You need a free user profile slot to import a new user profile": "Вам потрібен вільний слот профілю користувача для імпорту нового профілю користувача", + Quit: "Вийти", + Fullscreen: "Повноекранний", + Windowed: "У вікні", + " ": "Здається, ви граєте в неофіційну версію {0}. Для найновішої версії відвідайте оригінальне джерело:", + Nickname: "Псевдонім", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "Виберіть псевдонім для відображення в таблиці лідерів. Ви можете змінити псевдонім в будь-який час.", + Cancel: "Скасувати", + Confirm: "Підтвердити", + Verifier: "Підтверджувач", + "User ID": "ID користувача", + Paused: "Пауза", + "Switch car": "Перемикання автомобіля", + Profiles: "Профілі", + 'Are you sure you would like to delete "{0}"?': 'Ви впевнені, що хочете видалити "{0}"?', + Empty: "Порожній", + Reset: "Скинути", + Apply: "Застосувати", + Gameplay: "Ігровий процес", + Units: "Одиниці вимірювання", + Metric: "Метричні", + Imperial: "Імперські", + "Reset hint": "Скинути підказку", + Disabled: "Вимкнено", + Enabled: "Увімкнено", + "Ghost car": "Привид автомобіля", + "Default camera": "Камера за замовчуванням", + Default: "За замовчуванням", + Cockpit: "Кабіна кокпіту", + "Cockpit camera mode": "Режим кабіни кокпіту", + Hold: "Тримати", + Toggle: "Перемикання", + Checkpoints: "Контрольні пункти", + Timer: "Таймер", + Speedometer: "Спідометр", + Bottom: "Знизу", + Top: "Зверху", + Language: "Мова", + Graphics: "Графіка", + "Car shadow": "Тінь автомобіля", + "Track shadow": "Тінь треку", + Off: "Вимкнено", + On: "Увімкнено", + Low: "Низькі", + Medium: "Середні", + High: "Високі", + Clouds: "Хмари", + Particles: "Частинки", + Skidmarks: "Сліди", + "Render scale": "Масштаб рендерингу", + "Anti-aliasing (requires restart)": "Антиаліасинг (потребує перезапуску)", + Audio: "Звук", + "Sound effect volume": "Гучність звукових ефектів", + "Music volume": "Гучність музики", + "Checkpoint volume": "Гучність пунктів контролю", + Controls: "Управління", + Vehicle: "Транспортний засіб", + Accelerate: "Прискорити", + Brake: "Гальмо", + "Turn left": "Повернути ліворуч", + "Turn right": "Повернути праворуч", + "Checkpoint reset": "Скидання контрольної точки", + "Start reset": "Скидання старту", + "Cockpit camera": "Камера кабіни кокпіту", + "Rotate part": "Повернути частину", + "Height modifier": "Модифікатор висоти", + "Delete part": "Видалити частину", + "Move forwards": "Рухатися вперед", + "Move backwards": "Рухатися назад", + "Move left": "Рухатися вліво", + "Move right": "Рухатися вправо", + "Rotate view up": "Повернути вид вгору", + "Rotate view down": "Повернути вид вниз", + "Rotate view left": "Повернути вид вліво", + "Rotate view right": "Повернути вид вправо", + "Move down": "Рухатися вниз", + "Move up": "Рухатися вгору", + "Test track": "Тестовий трек", + "Pick part": "Вибрати частину", + Spectator: "Спостерігач", + "Speed modifier": "Модифікатор швидкості", + Other: "Інше", + "Hide UI": "Приховати інтерфейс", + Pause: "Пауза", + "Toggle FPS counter": "Перемикання лічильника FPS", + "Toggle spectator camera": "Перемикання камери спостерігача", + "Press any key...\n\nPress [Escape] to cancel.": "Натисніть будь-яку клавішу...\n\nНатисніть [Escape], щоб скасувати.", + Clear: "Очистити", + "New record": "Новий рекорд", + Record: "Рекорд", + Current: "Поточний", + Difference: "Різниця", + Copy: "Копіювати", + Import: "Імпортувати", + "Failed to import track": "Не вдалося імпортувати трек", + 'The track "{0}" already exists. Do you wish to overwrite it?': 'Трек "{0}" вже існує. Бажаєте перезаписати його?', + Overwrite: "Перезаписати", + "Paste track data here...": "Вставте дані треку сюди...", + Rank: "Ранг", + "Personal best": "Особистий рекорд", + Opponents: "Супротивники", + "{0} opponent selected": "{0} супротивник вибраний", + "{0} opponents selected": "{0} супротивників вибрано", + "Select opponents to race against from the leaderboard on the left": "Виберіть супротивників для гонки з таблиці лідерів зліва", + "No record": "Немає записів", + "Official tracks": "Офіційні треки", + "Community tracks": "Спільнота треків", + "Custom tracks": "Власні треки", + 'Are you sure you want to delete "{0}"?': 'Ви впевнені, що хочете видалити "{0}"?', + Delete: "Видалити", + "No community tracks": "Спільнота треків відсутня", + "Community tracks are coming soon": "Спільнота треків незабаром", + "No custom tracks": "Власні треки відсутні", + "Create a track using the editor or import a track code": "Створіть трек за допомогою редактора або імпортуйте код треку", + "Search tracks...": "Пошук треків...", + "Invalid replay detected!": "Виявлено недійсний повтор!" + }, + wz = { + "Checkpoint order": "检查点顺序", + Height: "高度", + Exit: "退出", + Random: "随机", + Primary: "主要", + Secondary: "次要", + Frame: "框架", + Rims: "轮辋", + "Are you sure you want to exit without saving?": "确定要退出而不保存吗?", + "All changes will be lost!": "所有更改将丢失!", + "Car saved!": "车辆已保存!", + Test: "测试", + "Starting point is missing!": "起点缺失!", + Generate: "生成", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "确定要生成新赛道吗?\n\n当前赛道将丢失!", + Load: "加载", + Save: "保存", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "确定要加载新赛道吗?\n\n当前赛道将丢失!", + "Track saved!": "赛道已保存!", + "Failed to save!": "保存失败!", + 'Are you sure you want to overwrite "{0}"?': '确定要覆盖 "{0}" 吗?', + Export: "导出", + Help: "帮助", + "Are you sure you want to exit the editor?": "确定要退出编辑器吗?", + "All unsaved data will be lost!": "所有未保存的数据将丢失!", + "Track settings": "赛道设置", + "Unnamed Track": "未命名赛道", + "Track name": "赛道名称", + Author: "作者", + Unknown: "未知", + Environment: "环境", + Summer: "夏季", + Winter: "冬季", + Desert: "沙漠", + "Sun direction": "太阳方向", + "How to use the editor": "如何使用编辑器", + "Camera controls": "相机控制", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "可以通过右键单击并拖动鼠标来移动相机。通过单击中间鼠标按钮(鼠标滚轮)或按住Ctrl键并右键单击并拖动鼠标来旋转相机。通过滚动鼠标滚轮进行缩放。", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "或者,还可以使用以下键盘按键来控制相机:", + "Move forwards:": "向前移动:", + "Move backwards:": "向后移动:", + "Move left:": "向左移动:", + "Move right:": "向右移动:", + "Rotate left:": "向左旋转:", + "Rotate right:": "向右旋转:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "可以通过使用左下角的高度选择器来更改编辑的高度,也可以按住Shift键并滚动鼠标滚轮。或者,您可以使用以下键盘按键:", + "Move up:": "向上移动:", + "Move down:": "向下移动:", + Editing: "编辑", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "可以在右侧菜单中选择轨道部件,然后可以使用鼠标左键单击放置。", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "或者,可以使用以下键盘快捷键选择当前鼠标悬停的轨道部件:", + "The selected part can then be rotated using the following keyboard shortcut:": "然后可以使用以下键盘快捷键旋转所选部件:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "可以使用右侧菜单中的删除工具或按住以下键来删除轨道部件:", + "Starting points, checkpoints and the finish line": "起点、检查点和终点", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "起点、检查点和终点都可以在右侧菜单的最上方类别中选择。", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "每个赛道必须至少有一个起点。如果有多个起点,则将使用最后放置的起点。", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "检查点应该放置在起点和终点之间。当选择检查点轨道部件时,底部右侧将有一个工具来选择检查点的顺序。这决定了在驶向终点之前必须通过检查点的顺序。请注意,可以有多个具有相同检查点顺序的检查点。", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "终点是赛道结束的地方,但只有在通过所有检查点后才会变为活动状态。也可以有多个终点。", + "Starting point": "起点", + Checkpoint: "检查点", + "Finish line": "终点", + "Exporting the track": "导出赛道", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "当赛道完成后,可以在左上角输入赛道名称,然后可以使用导出按钮导出赛道。这将显示一个赛道代码,可以将其发送给其他用户,以便他们可以导入和播放赛道。", + Close: "关闭", + "Not set": "未设置", + or: "或", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "相机可以通过用一根手指拖动来移动。通过用两根手指拖动来旋转相机。通过捏合来放大和缩小。", + "The edited height can be changed by using the height selection in the bottom left corner.": "可以通过使用左下角的高度选择器来更改编辑的高度。", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "可以在右侧菜单中选择轨道部件,然后可以通过点击屏幕来放置。", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "然后可以通过点击左下角的旋转按钮来旋转所选部件。", + "Track parts can be deleted by using the delete tool in the right side menu.": "可以使用右侧菜单中的删除工具来删除轨道部件。", + Watch: "观看", + "Loading replay": "加载录像", + "Press {0} to return to the last checkpoint": "按 {0} 返回到上一个检查点", + "Press {0} to start over": "按 {0} 重新开始", + "Reset once to return to the last checkpoint": "重置一次返回到上一个检查点", + "Reset again to start over": "再次重置重新开始", + Leaderboard: "排行榜", + Back: "返回", + "Error: Failed to load leaderboard": "错误:加载排行榜失败", + Pending: "待处理", + Verified: "已验证", + Invalid: "无效", + Duplicate: "重复", + You: "您", + "Only verified": "仅验证", + Loading: "加载中", + "Failed to load recordings": "加载录像失败", + "Cannot load recordings due to non-determinism": "由于非确定性无法加载录像", + Ok: "确定", + "Track is missing starting point": "赛道缺失起点", + "Some leaderboard features are disabled.": "一些排行榜功能已禁用。", + "Please try another browser or device.": "请尝试其他浏览器或设备。", + "You already have another instance of PolyTrack open.": "您已经打开了另一个PolyTrack实例。", + "Please switch to that tab or window to continue.": "请切换到该选项卡或窗口继续。", + "Computer determinism check failed.": "计算机确定性检查失败。", + "Non-deterministic game assets found.": "发现非确定性游戏资源。", + "Please try clearing your browser cache.": "请尝试清除浏览器缓存。", + Customize: "自定义", + Editor: "编辑器", + Settings: "设置", + Profile: "个人资料", + Play: "游戏", + Version: "版本", + "You cannot have duplicate user profiles": "您不能拥有重复的用户配置文件", + "Failed to create user profile": "创建用户配置文件失败", + "This user profile does not exist on the server": "服务器上不存在此用户配置文件", + "Failed to download user profile from the server": "无法从服务器下载用户配置文件", + "User token is invalid": "用户令牌无效", + "Are you sure you want to display your private key?": "确定要显示您的私钥吗?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "请勿与任何人分享此密钥。", + "You need a free user profile slot to import a new user profile": "您需要一个空闲的用户配置文件槽来导入新的用户配置文件", + Quit: "退出", + Fullscreen: "全屏", + Windowed: "窗口", + " ": "您似乎正在玩 {0} 的非官方版本。请访问原始来源获取最新版本:", + Nickname: "昵称", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "选择在排行榜中显示的昵称。您可以随时更改昵称。", + Cancel: "取消", + Confirm: "确认", + Verifier: "验证器", + "User ID": "用户ID", + Paused: "暂停", + "Switch car": "切换车辆", + Profiles: "配置文件", + 'Are you sure you would like to delete "{0}"?': '您确定要删除 "{0}" 吗?', + Empty: "空", + Reset: "重置", + Apply: "应用", + Gameplay: "游戏方式", + Units: "单位", + Metric: "公制", + Imperial: "英制", + "Reset hint": "重置提示", + Disabled: "禁用", + Enabled: "启用", + "Ghost car": "幽灵车", + "Default camera": "默认摄像头", + Default: "默认", + Cockpit: "座舱", + "Cockpit camera mode": "座舱摄像头模式", + Hold: "按住", + Toggle: "切换", + Checkpoints: "检查点", + Timer: "计时器", + Speedometer: "速度计", + Bottom: "底部", + Top: "顶部", + Language: "语言", + Graphics: "图形", + "Car shadow": "车辆阴影", + "Track shadow": "赛道阴影", + Off: "关闭", + On: "打开", + Low: "低", + Medium: "中", + High: "高", + Clouds: "云", + Particles: "粒子", + Skidmarks: "打滑痕迹", + "Render scale": "渲染比例", + "Anti-aliasing (requires restart)": "抗锯齿(需要重启)", + Audio: "音频", + "Sound effect volume": "音效音量", + "Music volume": "音乐音量", + "Checkpoint volume": "检查点音量", + Controls: "控制", + Vehicle: "车辆", + Accelerate: "加速", + Brake: "刹车", + "Turn left": "左转", + "Turn right": "右转", + "Checkpoint reset": "检查点重置", + "Start reset": "起点重置", + "Cockpit camera": "座舱摄像头", + "Rotate part": "旋转部件", + "Height modifier": "高度调整", + "Delete part": "删除部件", + "Move forwards": "向前移动", + "Move backwards": "向后移动", + "Move left": "向左移动", + "Move right": "向右移动", + "Rotate view up": "向上旋转视图", + "Rotate view down": "向下旋转视图", + "Rotate view left": "向左旋转视图", + "Rotate view right": "向右旋转视图", + "Move down": "向下移动", + "Move up": "向上移动", + "Test track": "测试赛道", + "Pick part": "选择部件", + Spectator: "观众", + "Speed modifier": "速度调整", + Other: "其他", + "Hide UI": "隐藏UI", + Pause: "暂停", + "Toggle FPS counter": "切换FPS计数器", + "Toggle spectator camera": "切换观众摄像头", + "Press any key...\n\nPress [Escape] to cancel.": "按任意键...\n\n按 [Escape] 取消。", + Clear: "清除", + "New record": "新记录", + Record: "记录", + Current: "当前", + Difference: "差异", + Copy: "复制", + Import: "导入", + "Failed to import track": "导入赛道失败", + 'The track "{0}" already exists. Do you wish to overwrite it?': '赛道 "{0}" 已存在。您是否要覆盖它?', + Overwrite: "覆盖", + "Paste track data here...": "在此粘贴赛道数据...", + Rank: "排名", + "Personal best": "个人最佳", + Opponents: "对手", + "{0} opponent selected": "{0} 个对手已选择", + "{0} opponents selected": "{0} 个对手已选择", + "Select opponents to race against from the leaderboard on the left": "从左侧的排行榜中选择对手进行比赛", + "No record": "无记录", + "Official tracks": "官方赛道", + "Community tracks": "社区赛道", + "Custom tracks": "自定义赛道", + 'Are you sure you want to delete "{0}"?': '确定要删除 "{0}" 吗?', + Delete: "删除", + "No community tracks": "没有社区赛道", + "Community tracks are coming soon": "社区赛道即将推出", + "No custom tracks": "没有自定义赛道", + "Create a track using the editor or import a track code": "使用编辑器创建赛道或导入赛道代码", + "Search tracks...": "搜索赛道...", + "Invalid replay detected!": "检测到无效的重放!" + }, + yz = { + "Checkpoint order": "檢查點順序", + Height: "高度", + Exit: "退出", + Random: "隨機", + Primary: "主要", + Secondary: "次要", + Frame: "框架", + Rims: "輪框", + "Are you sure you want to exit without saving?": "您確定要退出而不保存嗎?", + "All changes will be lost!": "所有更改將遺失!", + "Car saved!": "車輛已保存!", + Test: "測試", + "Starting point is missing!": "起點缺失!", + Generate: "生成", + "Are you sure you want to generate a new track?\n\nYour current track will be lost!": "您確定要生成新賽道嗎?\n\n您當前的賽道將會丟失!", + Load: "載入", + Save: "保存", + "Are you sure you want to load a new track?\n\nYour current track will be lost!": "您確定要載入新賽道嗎?\n\n您當前的賽道將會丟失!", + "Track saved!": "賽道已保存!", + "Failed to save!": "保存失敗!", + 'Are you sure you want to overwrite "{0}"?': '您確定要覆蓋 "{0}" 嗎?', + Export: "匯出", + Help: "幫助", + "Are you sure you want to exit the editor?": "您確定要退出編輯器嗎?", + "All unsaved data will be lost!": "所有未儲存的資料將遺失!", + "Track settings": "賽道設定", + "Unnamed Track": "未命名賽道", + "Track name": "賽道名稱", + Author: "作者", + Unknown: "未知", + Environment: "環境", + Summer: "夏季", + Winter: "冬季", + Desert: "沙漠", + "Sun direction": "太陽方向", + "How to use the editor": "如何使用編輯器", + "Camera controls": "攝影機控制", + "The camera can be moved by right clicking and dragging the mouse. Rotate the camera by clicking the middle mouse button (mouse wheel) or holding the control key and right clicking and dragging the mouse. Zoom in and out by scrolling the mouse wheel.": "攝影機可以通過右鍵點擊並拖動鼠標來移動。通過點擊中間的鼠標按鈕(滾輪)或按住Ctrl鍵並右鍵點擊並拖動鼠標來旋轉攝影機。通過滾動鼠標滾輪來放大和縮小。", + "Alternatively, the camera can also be controlled using the following keyboard keys:": "或者,攝影機也可以使用以下鍵盤按鍵進行控制:", + "Move forwards:": "向前移動:", + "Move backwards:": "向後移動:", + "Move left:": "向左移動:", + "Move right:": "向右移動:", + "Rotate left:": "向左旋轉:", + "Rotate right:": "向右旋轉:", + "The edited height can be changed either by using the height selection in the bottom left corner, or holding the shift key and scrolling the mouse wheel. Alternatively, you can use the following keyboard keys:": "可以通過使用左下角的高度選擇器來更改編輯的高度,也可以按住Shift鍵並滾動鼠標滾輪。或者,您可以使用以下鍵盤按鍵:", + "Move up:": "向上移動:", + "Move down:": "向下移動:", + Editing: "編輯", + "Track parts can be selected in the menu on the right after which they can be placed by left clicking with the mouse.": "可以在右側的菜單中選擇軌道部件,然後可以使用鼠標左鍵點擊放置。", + "Alternatively, the track part currently hovered by the mouse can be selected with the following keyboard shortcut:": "或者,可以使用以下鍵盤快捷鍵選擇當前鼠標懸停的軌道部件:", + "The selected part can then be rotated using the following keyboard shortcut:": "然後可以使用以下鍵盤快捷鍵旋轉所選部分:", + "Track parts can be deleted by using the delete tool in the right side menu or by holding the following key:": "可以使用右側菜單中的刪除工具或按住以下鍵來刪除軌道部件:", + "Starting points, checkpoints and the finish line": "起點、檢查點和終點", + "Starting points, checkpoints and finish lines can all be selected in the uppermost category in the right side menu.": "起點、檢查點和終點都可以在右側菜單的最上方類別中選擇。", + "Each track must have at least one starting point. If there are multiple starting points, the last placed one will be used.": "每個賽道必須至少有一個起點。如果有多個起點,則使用最後放置的起點。", + "Checkpoints should be placed between the starting point and the finish line. When a checkpoint track part is selected there will be a tool in the bottom right to select the order of the checkpoint. This determines the order in which the checkpoints must be passed before driving to the finish line. Notice that it is possible to have multiple checkpoints with the same checkpoint order.": "檢查點應該放置在起點和終點之間。當選擇檢查點軌道部件時,底部右側將有一個工具來選擇檢查點的順序。這決定了在開始行駛到終點之前必須通過檢查點的順序。請注意,可以有多個具有相同檢查點順序的檢查點。", + "The finish line is where the track ends but will only become active after all checkpoints have been passed. It is also possible to have multiple finish lines.": "終點是賽道結束的地方,但只有在通過所有檢查點後才會變為活動狀態。也可以有多個終點。", + "Starting point": "起點", + Checkpoint: "檢查點", + "Finish line": "終點", + "Exporting the track": "導出賽道", + "When the track is finished, a name for the track can be entered in top left after which the track can be exported using the export button. This will reveal a track code which can be sent to other users so they can import and play the track.": "完成賽道後,可以在左上角輸入賽道名稱,然後使用導出按鈕導出賽道。這將顯示一個賽道代碼,可以將其發送給其他用戶,以便他們可以導入並播放賽道。", + Close: "關閉", + "Not set": "未設置", + or: "或", + "The camera can be moved by dragging with one finger. Rotate the camera by dragging with two fingers. Zoom in and out by pinching.": "攝影機可以通過用一根手指拖動來移動。通過用兩根手指拖動來旋轉攝影機。通過捏合來放大和縮小。", + "The edited height can be changed by using the height selection in the bottom left corner.": "可以通過使用左下角的高度選擇器來更改編輯的高度。", + "Track parts can be selected in the menu on the right after which they can be placed by tapping on the screen.": "可以在右側的菜單中選擇軌道部件,然後可以通過點擊屏幕來放置。", + "The selected part can then be rotated by tapping the rotate button in the bottom left corner.": "然後可以通過點擊左下角的旋轉按鈕來旋轉所選部分。", + "Track parts can be deleted by using the delete tool in the right side menu.": "可以使用右側菜單中的刪除工具來刪除軌道部件。", + Watch: "觀看", + "Loading replay": "載入錄影", + "Press {0} to return to the last checkpoint": "按 {0} 返回到上一個檢查點", + "Press {0} to start over": "按 {0} 重新開始", + "Reset once to return to the last checkpoint": "重設一次返回到上一個檢查點", + "Reset again to start over": "再次重設重新開始", + Leaderboard: "排行榜", + Back: "返回", + "Error: Failed to load leaderboard": "錯誤:無法載入排行榜", + Pending: "待定", + Verified: "已驗證", + Invalid: "無效", + Duplicate: "重複", + You: "您", + "Only verified": "僅驗證", + Loading: "載入中", + "Failed to load recordings": "無法載入錄影", + "Cannot load recordings due to non-determinism": "由於非確定性,無法載入錄影", + Ok: "確定", + "Track is missing starting point": "賽道缺少起點", + "Some leaderboard features are disabled.": "一些排行榜功能已禁用。", + "Please try another browser or device.": "請嘗試其他瀏覽器或設備。", + "You already have another instance of PolyTrack open.": "您已經打開了另一個 PolyTrack 實例。", + "Please switch to that tab or window to continue.": "請切換到該標籤或窗口以繼續。", + "Computer determinism check failed.": "電腦確定性檢查失敗。", + "Non-deterministic game assets found.": "發現非確定性遊戲資產。", + "Please try clearing your browser cache.": "請嘗試清除瀏覽器快取。", + Customize: "自訂", + Editor: "編輯器", + Settings: "設定", + Profile: "個人資料", + Play: "遊玩", + Version: "版本", + "You cannot have duplicate user profiles": "您不能擁有重複的使用者檔案", + "Failed to create user profile": "無法建立使用者檔案", + "This user profile does not exist on the server": "此使用者檔案不存在於伺服器上", + "Failed to download user profile from the server": "無法從伺服器下載使用者檔案", + "User token is invalid": "使用者令牌無效", + "Are you sure you want to display your private key?": "確定要顯示您的私密金鑰嗎?", + "DO NOT SHARE THIS KEY WITH ANYONE.": "請勿與任何人分享此金鑰。", + "You need a free user profile slot to import a new user profile": "您需要一個空閒的使用者檔案插槽以匯入新的使用者檔案", + Quit: "退出", + Fullscreen: "全螢幕", + Windowed: "視窗", + " ": "您似乎正在玩非官方版本的 {0}。請訪問原始來源以獲取最新版本:", + Nickname: "暱稱", + "Choose a nickname to be shown in the leaderboard. Your nickname can be changed at any time.": "選擇一個在排行榜中顯示的暱稱。您隨時可以更改您的暱稱。", + Cancel: "取消", + Confirm: "確認", + Verifier: "驗證者", + "User ID": "使用者 ID", + Paused: "暫停", + "Switch car": "切換車輛", + Profiles: "配置檔", + 'Are you sure you would like to delete "{0}"?': '您確定要刪除 "{0}" 嗎?', + Empty: "空", + Reset: "重設", + Apply: "套用", + Gameplay: "遊戲玩法", + Units: "單位", + Metric: "公制", + Imperial: "英制", + "Reset hint": "重設提示", + Disabled: "禁用", + Enabled: "啟用", + "Ghost car": "鬼車", + "Default camera": "預設攝影機", + Default: "預設", + Cockpit: "座艙", + "Cockpit camera mode": "座艙攝影機模式", + Hold: "按住", + Toggle: "切換", + Checkpoints: "檢查點", + Timer: "計時器", + Speedometer: "速度計", + Bottom: "底部", + Top: "頂部", + Language: "語言", + Graphics: "圖形", + "Car shadow": "車影", + "Track shadow": "賽道影子", + Off: "關", + On: "開", + Low: "低", + Medium: "中", + High: "高", + Clouds: "雲彩", + Particles: "粒子", + Skidmarks: "滑胎痕跡", + "Render scale": "渲染比例", + "Anti-aliasing (requires restart)": "抗鋸齒 (需要重新啟動)", + Audio: "音效", + "Sound effect volume": "音效音量", + "Music volume": "音樂音量", + "Checkpoint volume": "檢查點音量", + Controls: "控制", + Vehicle: "車輛", + Accelerate: "加速", + Brake: "剎車", + "Turn left": "左轉", + "Turn right": "右轉", + "Checkpoint reset": "檢查點重設", + "Start reset": "起點重設", + "Cockpit camera": "座艙攝影機", + "Rotate part": "旋轉部件", + "Height modifier": "高度調整", + "Delete part": "刪除部件", + "Move forwards": "前進", + "Move backwards": "後退", + "Move left": "左移", + "Move right": "右移", + "Rotate view up": "向上旋轉視圖", + "Rotate view down": "向下旋轉視圖", + "Rotate view left": "向左旋轉視圖", + "Rotate view right": "向右旋轉視圖", + "Move down": "向下移動", + "Move up": "向上移動", + "Test track": "測試賽道", + "Pick part": "選擇部件", + Spectator: "觀眾", + "Speed modifier": "速度調整", + Other: "其他", + "Hide UI": "隱藏 UI", + Pause: "暫停", + "Toggle FPS counter": "切換 FPS 計數器", + "Toggle spectator camera": "切換觀眾攝影機", + "Press any key...\n\nPress [Escape] to cancel.": "按下任意鍵...\n\n按 [Escape] 取消。", + Clear: "清除", + "New record": "新紀錄", + Record: "紀錄", + Current: "目前", + Difference: "差異", + Copy: "複製", + Import: "匯入", + "Failed to import track": "匯入賽道失敗", + 'The track "{0}" already exists. Do you wish to overwrite it?': '賽道 "{0}" 已存在。您要覆蓋它嗎?', + Overwrite: "覆蓋", + "Paste track data here...": "在此粘貼賽道數據...", + Rank: "排名", + "Personal best": "個人最佳", + Opponents: "對手", + "{0} opponent selected": "{0} 對手已選擇", + "{0} opponents selected": "{0} 對手已選擇", + "Select opponents to race against from the leaderboard on the left": "從左側的排行榜中選擇對手進行比賽", + "No record": "無紀錄", + "Official tracks": "官方賽道", + "Community tracks": "社區賽道", + "Custom tracks": "自訂賽道", + 'Are you sure you want to delete "{0}"?': '您確定要刪除 "{0}" 嗎?', + Delete: "刪除", + "No community tracks": "沒有社區賽道", + "Community tracks are coming soon": "社區賽道即將推出", + "No custom tracks": "沒有自訂賽道", + "Create a track using the editor or import a track code": "使用編輯器創建賽道或匯入賽道代碼", + "Search tracks...": "搜索賽道...", + "Invalid replay detected!": "檢測到無效的重播!" + }; + var Az, bz, xz, kz, Ez = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }, + Sz = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }; + bz = new WeakMap, xz = new WeakMap, Az = new WeakSet, kz = function(e) { + const t = Ez(this, xz, "f").get(e); + return null != t ? t : sz + }; + const Mz = class { + constructor(e) { + Az.add(this), bz.set(this, void 0), xz.set(this, new Map([ + ["ar", rz], + ["de-DE", az], + ["es-ES", oz], + ["fr-FR", lz], + ["it-IT", cz], + ["ja-JP", hz], + ["ko-KR", dz], + ["pl-PL", uz], + ["pt-BR", pz], + ["pt-PT", fz], + ["ru-RU", mz], + ["tr-TR", gz], + ["uk-UA", vz], + ["zh-CN", wz], + ["zh-TW", yz] + ])), Sz(this, bz, Ez(this, Az, "m", kz).call(this, e), "f") + } + set language(e) { + Sz(this, bz, Ez(this, Az, "m", kz).call(this, e), "f") + } + get(e, t) { + let n; + if (n = e in Ez(this, bz, "f") ? Ez(this, bz, "f")[e] : e, null != t) + for (const [e, i] of t.entries()) n = n.replace(new RegExp("\\{" + e.toString() + "\\}", "g"), i); + return n + } + }; + var Tz = n(1465), + _z = {}; + _z.styleTagTransform = u(), _z.setAttributes = l(), _z.insert = s().bind(null, "head"), _z.domAPI = r(), _z.insertStyleElement = h(); + t()(Tz.A, _z); + Tz.A && Tz.A.locals && Tz.A.locals; + var Cz, Pz, Iz, Rz, Lz, Dz, Nz = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Bz = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + Cz = new WeakMap, Pz = new WeakMap, Iz = new WeakMap, Rz = new WeakMap, Lz = new WeakMap, Dz = new WeakMap; + const Uz = class { + constructor() { + Cz.set(this, void 0), Pz.set(this, void 0), Iz.set(this, void 0), Rz.set(this, void 0), Lz.set(this, void 0), Dz.set(this, void 0); + const e = document.getElementById("ui"); + if (null == e) throw new Error("UI element not found"); + Nz(this, Cz, e, "f"), Nz(this, Pz, document.createElement("div"), "f"), Bz(this, Pz, "f").className = "input-visualizer", Bz(this, Cz, "f").appendChild(Bz(this, Pz, "f")), Nz(this, Iz, document.createElement("div"), "f"), Bz(this, Iz, "f").className = "arrow-up", Bz(this, Iz, "f").innerHTML = '', Bz(this, Pz, "f").appendChild(Bz(this, Iz, "f")), Nz(this, Rz, document.createElement("div"), "f"), Bz(this, Rz, "f").className = "arrow-right", Bz(this, Rz, "f").innerHTML = '', Bz(this, Pz, "f").appendChild(Bz(this, Rz, "f")), Nz(this, Lz, document.createElement("div"), "f"), Bz(this, Lz, "f").className = "arrow-down", Bz(this, Lz, "f").innerHTML = '', Bz(this, Pz, "f").appendChild(Bz(this, Lz, "f")), Nz(this, Dz, document.createElement("div"), "f"), Bz(this, Dz, "f").className = "arrow-left", Bz(this, Dz, "f").innerHTML = '', Bz(this, Pz, "f").appendChild(Bz(this, Dz, "f")) + } + dispose() { + Bz(this, Cz, "f").removeChild(Bz(this, Pz, "f")) + } + update(e) { + Bz(this, Iz, "f").className = e.up ? "active arrow-up" : "arrow-up", Bz(this, Rz, "f").className = e.right ? "active arrow-right" : "arrow-right", Bz(this, Lz, "f").className = e.down ? "active arrow-down" : "arrow-down", Bz(this, Dz, "f").className = e.left ? "active arrow-left" : "arrow-left" + } + }; + var zz = n(4543), + Oz = {}; + Oz.styleTagTransform = u(), Oz.setAttributes = l(), Oz.insert = s().bind(null, "head"), Oz.domAPI = r(), Oz.insertStyleElement = h(); + t()(zz.A, Oz); + zz.A && zz.A.locals && zz.A.locals; + var Fz, Wz, Vz, Hz, Gz, jz, Qz, Yz, Kz, qz, Xz, Zz, Jz, $z, eO, tO, nO, iO, rO = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + aO = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + Wz = new WeakMap, Vz = new WeakMap, Hz = new WeakMap, Gz = new WeakMap, jz = new WeakMap, Qz = new WeakMap, Yz = new WeakMap, Kz = new WeakMap, qz = new WeakMap, Xz = new WeakMap, Zz = new WeakMap, Jz = new WeakMap, $z = new WeakMap, eO = new WeakMap, Fz = new WeakSet, tO = function(e) { + const t = aO(this, jz, "f").getBoundingClientRect(), + n = (e.clientX - t.left) / (t.width - 8), + i = new xp(Math.max(0, Math.min(aO(this, Zz, "f").numberOfFrames, Math.floor(n * aO(this, Zz, "f").numberOfFrames)))); + aO(this, Vz, "f").call(this, i) + }, nO = function() { + aO(this, Xz, "f") ? aO(this, Gz, "f").innerHTML = '' : aO(this, qz, "f") ? aO(this, Gz, "f").innerHTML = '' : aO(this, Gz, "f").innerHTML = '' + }, iO = function() { + if (aO(this, Kz, "f").innerHTML = "", aO(this, Zz, "f").time < 1e4) { + let e, t; + aO(this, Zz, "f").time > 2e3 ? (e = 60, t = 600) : aO(this, Zz, "f").time > 200 ? (e = 10, t = 60) : (e = 1, t = 10); + for (let n = e; n < aO(this, Zz, "f").time; n += e) { + const e = document.createElement("div"); + e.className = n % t == 0 ? "dash long" : "dash", e.style.left = "calc(" + (n / aO(this, Zz, "f").time * 100).toString() + "% - 1px)", aO(this, Kz, "f").appendChild(e) + } + } + }; + const sO = class { + constructor(e, t, n, i) { + Fz.add(this), Wz.set(this, void 0), Vz.set(this, void 0), Hz.set(this, void 0), Gz.set(this, void 0), jz.set(this, void 0), Qz.set(this, void 0), Yz.set(this, void 0), Kz.set(this, void 0), qz.set(this, void 0), Xz.set(this, !1), Zz.set(this, void 0), Jz.set(this, !1), $z.set(this, void 0), eO.set(this, void 0), rO(this, qz, i, "f"); + const r = document.getElementById("ui"); + if (null == r) throw new Error("UI element not found"); + rO(this, Wz, r, "f"), rO(this, Vz, n, "f"), rO(this, Zz, t, "f"), rO(this, Hz, document.createElement("div"), "f"), aO(this, Hz, "f").className = "time-bar", aO(this, Wz, "f").appendChild(aO(this, Hz, "f")), rO(this, Gz, document.createElement("button"), "f"), aO(this, Gz, "f").className = "button", aO(this, Gz, "f").addEventListener("click", (() => { + e.playUIClick(), aO(this, Xz, "f") ? (aO(this, Vz, "f").call(this, new xp(0)), this.isPaused = !1) : this.isPaused = !this.isPaused + })), aO(this, Hz, "f").appendChild(aO(this, Gz, "f")), aO(this, Fz, "m", nO).call(this), rO(this, jz, document.createElement("div"), "f"), aO(this, jz, "f").className = "bar", aO(this, jz, "f").addEventListener("pointerdown", (e => { + rO(this, Jz, !0, "f"), aO(this, Fz, "m", tO).call(this, e) + })), window.addEventListener("pointermove", rO(this, $z, (e => { + aO(this, Jz, "f") && aO(this, Fz, "m", tO).call(this, e) + }), "f")), window.addEventListener("pointerup", rO(this, eO, (e => { + aO(this, Jz, "f") && (rO(this, Jz, !1, "f"), aO(this, Fz, "m", tO).call(this, e)) + }), "f")), aO(this, Hz, "f").appendChild(aO(this, jz, "f")); + const a = document.createElement("div"); + aO(this, jz, "f").appendChild(a), rO(this, Qz, document.createElement("div"), "f"), aO(this, Qz, "f").className = "unloaded-fill", a.appendChild(aO(this, Qz, "f")), rO(this, Yz, document.createElement("div"), "f"), aO(this, Yz, "f").className = "fill", a.appendChild(aO(this, Yz, "f")), rO(this, Kz, document.createElement("div"), "f"), aO(this, Kz, "f").className = "dash-container", a.appendChild(aO(this, Kz, "f")), aO(this, Fz, "m", iO).call(this) + } + dispose() { + aO(this, Wz, "f").removeChild(aO(this, Hz, "f")), window.removeEventListener("pointermove", aO(this, $z, "f")), window.removeEventListener("pointerup", aO(this, eO, "f")) + } + get isDragging() { + return aO(this, Jz, "f") + } + get isPaused() { + return aO(this, qz, "f") + } + set isPaused(e) { + rO(this, qz, e, "f"), aO(this, Fz, "m", nO).call(this) + } + set time(e) { + const t = e.numberOfFrames >= aO(this, Zz, "f").numberOfFrames; + aO(this, Yz, "f").style.width = "calc(8px + " + (e.numberOfFrames / aO(this, Zz, "f").numberOfFrames * 100).toString() + "%)", 0 == e.numberOfFrames ? aO(this, Yz, "f").style.visibility = "hidden" : aO(this, Yz, "f").style.visibility = "visible", aO(this, Xz, "f") != t && (rO(this, Xz, t, "f"), aO(this, Fz, "m", nO).call(this)) + } + set loadedTime(e) { + aO(this, Qz, "f").style.width = "calc(8px + " + (100 * (1 - e.numberOfFrames / aO(this, Zz, "f").numberOfFrames)).toString() + "%)", e.numberOfFrames >= aO(this, Zz, "f").numberOfFrames ? aO(this, Qz, "f").style.visibility = "hidden" : aO(this, Qz, "f").style.visibility = "visible" + } + set totalTime(e) { + aO(this, Zz, "f").equals(e) || (rO(this, Zz, e.clone(), "f"), aO(this, Fz, "m", iO).call(this)) + } + }; + var oO = n(8768), + lO = {}; + lO.styleTagTransform = u(), lO.setAttributes = l(), lO.insert = s().bind(null, "head"), lO.domAPI = r(), lO.insertStyleElement = h(); + t()(oO.A, lO); + oO.A && oO.A.locals && oO.A.locals; + var cO, hO, dO = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + uO = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + cO = new WeakMap, hO = new WeakMap; + const pO = class { + constructor(e, t, n, i) { + cO.set(this, void 0), hO.set(this, void 0); + const r = document.getElementById("ui"); + if (null == r) throw new Error("UI element not found"); + dO(this, cO, r, "f"), dO(this, hO, document.createElement("div"), "f"), uO(this, hO, "f").className = "preview-toolbar"; + const a = document.createElement("button"); + if (a.className = "button", a.innerHTML = ' ', a.append(document.createTextNode(t.get("Back"))), a.addEventListener("click", (() => { + e.playUIClick(), n() + })), uO(this, hO, "f").appendChild(a), null != i) { + const n = document.createElement("button"); + n.className = "button", n.innerHTML = ' ', n.append(document.createTextNode(t.get("Switch car"))), n.addEventListener("click", (() => { + e.playUIClick(), i() + })), uO(this, hO, "f").appendChild(n) + } + uO(this, cO, "f").appendChild(uO(this, hO, "f")) + } + dispose() { + uO(this, cO, "f").removeChild(uO(this, hO, "f")) + } + }; + var fO, mO, gO, vO, wO, yO, AO, bO, xO, kO, EO, SO, MO, TO, _O, CO, PO, IO, RO, LO, DO, NO, BO, UO, zO, OO, FO, WO, VO, HO, GO, jO = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + QO = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + mO = new WeakMap, gO = new WeakMap, vO = new WeakMap, wO = new WeakMap, yO = new WeakMap, AO = new WeakMap, bO = new WeakMap, xO = new WeakMap, kO = new WeakMap, EO = new WeakMap, SO = new WeakMap, MO = new WeakMap, TO = new WeakMap, _O = new WeakMap, CO = new WeakMap, PO = new WeakMap, IO = new WeakMap, RO = new WeakMap, LO = new WeakMap, DO = new WeakMap, NO = new WeakMap, BO = new WeakMap, UO = new WeakMap, zO = new WeakMap, OO = new WeakMap, FO = new WeakMap, WO = new WeakMap, VO = new WeakMap, fO = new WeakSet, HO = function(e) { + var t, n, i, r, a; + if (e) { + const e = QO(this, _O, "f")[QO(this, TO, "f")].settings.time; + let t; + jO(this, DO, new sO(QO(this, kO, "f"), e, (e => { + var t, n, i; + jO(this, PO, Math.max(0, Math.min(QO(this, IO, "f"), e.time)), "f"); + const r = Math.round(1e3 * QO(this, PO, "f")); + QO(this, fO, "m", GO).call(this, r); + for (const e of QO(this, _O, "f")) e.car.update(0); + const a = QO(this, _O, "f")[QO(this, TO, "f")].car; + null != QO(this, DO, "f") && (QO(this, DO, "f").time = new xp(r)), null === (t = QO(this, BO, "f")) || void 0 === t || t.update(a.getControls()), null === (n = QO(this, UO, "f")) || void 0 === n || n.update(a), null === (i = QO(this, zO, "f")) || void 0 === i || i.update(a) + }), QO(this, CO, "f")), "f"), t = QO(this, _O, "f").length > 1 ? () => { + jO(this, TO, (QO(this, TO, "f") + 1) % QO(this, _O, "f").length, "f"); + for (let e = 0; e < QO(this, _O, "f").length; e++) QO(this, _O, "f")[e].car.notificationAudioEnabled = e == QO(this, TO, "f"); + QO(this, RO, "f").isEnabled || (QO(this, SO, "f").getSettingBoolean($o.DefaultCameraMode) ? QO(this, xO, "f").setCamera(QO(this, _O, "f")[QO(this, TO, "f")].car.cameraCockpit) : QO(this, xO, "f").setCamera(QO(this, _O, "f")[QO(this, TO, "f")].car.cameraOrbit)), null != QO(this, DO, "f") && (QO(this, DO, "f").totalTime = QO(this, _O, "f")[QO(this, TO, "f")].settings.time), null != QO(this, zO, "f") && (QO(this, zO, "f").nickname = QO(this, _O, "f")[QO(this, TO, "f")].settings.name) + } : null, jO(this, NO, new pO(QO(this, kO, "f"), QO(this, EO, "f"), (() => { + QO(this, MO, "f").call(this, QO(this, vO, "f"), QO(this, wO, "f"), QO(this, yO, "f"), QO(this, _O, "f").map((e => e.settings))) + }), t), "f"), jO(this, BO, new Uz, "f"), jO(this, UO, new TT(QO(this, SO, "f")), "f"), QO(this, UO, "f").setOverridePosition(!1), jO(this, zO, new fk(QO(this, EO, "f"), QO(this, SO, "f"), !0), "f"), QO(this, zO, "f").nickname = QO(this, _O, "f")[QO(this, TO, "f")].settings.name, QO(this, zO, "f").setOverridePosition(!1) + } else null === (t = QO(this, DO, "f")) || void 0 === t || t.dispose(), jO(this, DO, null, "f"), null === (n = QO(this, NO, "f")) || void 0 === n || n.dispose(), jO(this, NO, null, "f"), null === (i = QO(this, BO, "f")) || void 0 === i || i.dispose(), jO(this, BO, null, "f"), null === (r = QO(this, UO, "f")) || void 0 === r || r.dispose(), jO(this, UO, null, "f"), null === (a = QO(this, zO, "f")) || void 0 === a || a.dispose(), jO(this, zO, null, "f") + }, GO = function(e) { + for (const t of QO(this, _O, "f")) + if (t.car.getTime().numberOfFrames != e) { + const n = t.replay.getFrame(e); + null != n && t.car.setCarState(n) + } + }; + const YO = class { + constructor(e, t, n, i, r, a, s, o, l, c, h, d, u) { + fO.add(this), mO.set(this, void 0), gO.set(this, void 0), vO.set(this, void 0), wO.set(this, void 0), yO.set(this, void 0), AO.set(this, void 0), bO.set(this, void 0), xO.set(this, void 0), kO.set(this, void 0), EO.set(this, void 0), SO.set(this, void 0), MO.set(this, void 0), TO.set(this, 0), _O.set(this, void 0), CO.set(this, !1), PO.set(this, 0), IO.set(this, 0), RO.set(this, void 0), LO.set(this, !0), DO.set(this, null), NO.set(this, null), BO.set(this, null), UO.set(this, null), zO.set(this, null), OO.set(this, null), FO.set(this, void 0), WO.set(this, void 0), VO.set(this, 1e4), jO(this, mO, e, "f"), jO(this, gO, t, "f"), jO(this, vO, n, "f"), jO(this, wO, i, "f"), jO(this, yO, r, "f"), jO(this, AO, a, "f"), jO(this, bO, s, "f"), jO(this, xO, o, "f"), jO(this, kO, l, "f"), jO(this, EO, c, "f"), jO(this, SO, h, "f"), jO(this, MO, u, "f"), t.loadTrackData(i), t.generateMeshes(), a.generateMountains(t.getBounds()); + const p = t.getStartTransform(); + if (null == p) throw new Error("Track has no starting point"); + const f = new xp(d.reduce(((e, t) => Math.max(e, t.time.numberOfFrames + QO(this, VO, "f"))), 0)); + jO(this, IO, f.time, "f"), jO(this, _O, d.map(((n, i) => { + const r = new Aw(null, p, n.recording, null, o, l, a, t, h); + r.notificationAudioEnabled = QO(this, TO, "f") == i, r.setColors(n.carColors); + const s = { + replay: new __, + carId: null, + car: r, + settings: n + }, + c = e.createCar(p, a.getMountainVertices(), a.getMountainOffset(), t.getTrackData(), n.recording, (t => { + s.replay.push(t), null != s.carId && t.frames >= f.numberOfFrames && (e.deleteCar(s.carId), s.carId = null) + })); + return s.replay.push(c), e.startCar(c.id, f.clone()), s.carId = c.id, s + })), "f"), h.getSettingBoolean($o.DefaultCameraMode) ? o.setCamera(QO(this, _O, "f")[QO(this, TO, "f")].car.cameraCockpit) : o.setCamera(QO(this, _O, "f")[QO(this, TO, "f")].car.cameraOrbit), jO(this, RO, new s_(o, h), "f"), QO(this, RO, "f").addToggleListener((e => { + e ? o.setCamera(QO(this, RO, "f").camera) : QO(this, SO, "f").getSettingBoolean($o.DefaultCameraMode) ? QO(this, xO, "f").setCamera(QO(this, _O, "f")[QO(this, TO, "f")].car.cameraCockpit) : QO(this, xO, "f").setCamera(QO(this, _O, "f")[QO(this, TO, "f")].car.cameraOrbit) + })), QO(this, fO, "m", HO).call(this, !0), window.addEventListener("keydown", jO(this, FO, (e => { + if (QO(this, RO, "f").isEnabled) "Escape" == e.code && (QO(this, RO, "f").isEnabled = !1, e.preventDefault()); + else if ("Escape" == e.code) u(n, i, r, QO(this, _O, "f").map((e => e.settings))), e.preventDefault(); + else if (h.checkKeyBinding(e, Ix.VehicleCheckpointReset) || h.checkKeyBinding(e, Ix.VehicleStartReset)) e.repeat || jO(this, PO, 0, "f"), e.preventDefault(); + else if (QO(this, SO, "f").checkKeyBinding(e, Ix.VehicleCockpitCamera)) { + if (!e.repeat) { + const e = QO(this, _O, "f")[QO(this, TO, "f")].car; + e.hasFinished() || (QO(this, SO, "f").getSettingBoolean($o.CockpitCameraToggle) ? QO(this, xO, "f").camera == e.cameraOrbit ? QO(this, xO, "f").setCamera(e.cameraCockpit) : QO(this, xO, "f").setCamera(e.cameraOrbit) : QO(this, SO, "f").getSettingBoolean($o.DefaultCameraMode) ? QO(this, xO, "f").setCamera(e.cameraOrbit) : QO(this, xO, "f").setCamera(e.cameraCockpit)) + } + e.preventDefault() + } + if (h.checkKeyBinding(e, Ix.ToggleUI) && (jO(this, LO, !QO(this, LO, "f"), "f"), QO(this, fO, "m", HO).call(this, QO(this, LO, "f")), e.preventDefault()), h.checkKeyBinding(e, Ix.ToggleSpectatorCamera)) { + QO(this, RO, "f").camera.position.copy(QO(this, xO, "f").camera.position); + const t = new ai(0, 0, 0, "YXZ").setFromQuaternion(QO(this, xO, "f").camera.quaternion); + t.z = 0, QO(this, RO, "f").camera.quaternion.setFromEuler(t), QO(this, RO, "f").toggle(), e.preventDefault() + } + "Space" == e.code && (jO(this, CO, !QO(this, CO, "f"), "f"), null != QO(this, DO, "f") && (QO(this, DO, "f").isPaused = QO(this, CO, "f")), e.preventDefault()) + }), "f")), window.addEventListener("keyup", jO(this, WO, (e => { + if (!QO(this, RO, "f").isEnabled && QO(this, SO, "f").checkKeyBinding(e, Ix.VehicleCockpitCamera)) { + const e = QO(this, _O, "f")[QO(this, TO, "f")].car; + e.hasFinished() || QO(this, SO, "f").getSettingBoolean($o.CockpitCameraToggle) || (QO(this, SO, "f").getSettingBoolean($o.DefaultCameraMode) ? QO(this, xO, "f").setCamera(e.cameraCockpit) : QO(this, xO, "f").setCamera(e.cameraOrbit)) + } + }), "f")) + } + dispose() { + var e; + QO(this, gO, "f").clear(), QO(this, AO, "f").clearMountains(); + for (const e of QO(this, _O, "f")) null != e.carId && (QO(this, mO, "f").deleteCar(e.carId), e.carId = null), e.car.dispose(); + QO(this, RO, "f").dispose(), QO(this, fO, "m", HO).call(this, !1), window.removeEventListener("keydown", QO(this, FO, "f")), window.removeEventListener("keyup", QO(this, WO, "f")), null === (e = QO(this, OO, "f")) || void 0 === e || e.dispose() + } + update(e) { + var t, n, i, r, a, s; + null != QO(this, DO, "f") && jO(this, CO, QO(this, DO, "f").isPaused, "f"); + let o = 1 / 0; + for (const e of QO(this, _O, "f")) o = Math.min(o, e.replay.getLastFrame().numberOfFrames); + const l = new xp(o); + let c; + if (QO(this, CO, "f") || (null === (t = QO(this, DO, "f")) || void 0 === t ? void 0 : t.isDragging)) { + c = 0; + for (const e of QO(this, _O, "f")) e.car.audioVolume = 0 + } else { + const t = Math.min(QO(this, IO, "f"), QO(this, PO, "f") + e); + if (l.time >= t) { + jO(this, PO, t, "f"), QO(this, PO, "f") == QO(this, IO, "f") && (null != QO(this, DO, "f") && (QO(this, DO, "f").isPaused = !0), jO(this, CO, !0, "f")), c = e; + for (const e of QO(this, _O, "f")) e.car.audioVolume = 1 + } else { + c = 0; + for (const e of QO(this, _O, "f")) e.car.audioVolume = 0 + } + } + const h = Math.round(1e3 * QO(this, PO, "f")), + d = Math.min(h, l.numberOfFrames); + if ((null === (n = QO(this, DO, "f")) || void 0 === n ? void 0 : n.isDragging) || d < QO(this, _O, "f")[QO(this, TO, "f")].car.getTime().numberOfFrames || d > QO(this, _O, "f")[QO(this, TO, "f")].car.getTime().numberOfFrames + 1e3) QO(this, fO, "m", GO).call(this, d); + else { + for (let e = QO(this, _O, "f")[QO(this, TO, "f")].car.getTime().numberOfFrames + 1; e <= d; e++) QO(this, fO, "m", GO).call(this, e) + } + null != QO(this, DO, "f") && (QO(this, DO, "f").time = QO(this, _O, "f")[QO(this, TO, "f")].car.getTime(), QO(this, DO, "f").loadedTime = l), null === (i = QO(this, BO, "f")) || void 0 === i || i.update(QO(this, _O, "f")[QO(this, TO, "f")].car.getControls()), null === (r = QO(this, UO, "f")) || void 0 === r || r.update(QO(this, _O, "f")[QO(this, TO, "f")].car), null === (a = QO(this, zO, "f")) || void 0 === a || a.update(QO(this, _O, "f")[QO(this, TO, "f")].car); + for (const e of QO(this, _O, "f")) e.car.update(c), e.car.updateCameras(c); + null === (s = QO(this, OO, "f")) || void 0 === s || s.updateCar(QO(this, _O, "f")[QO(this, TO, "f")].car), QO(this, RO, "f").update(e), QO(this, AO, "f").update(QO(this, gO, "f")), QO(this, bO, "f").update(c, QO(this, xO, "f").camera, QO(this, gO, "f").sunDirection), QO(this, kO, "f").update(e, !1, QO(this, xO, "f"), QO(this, SO, "f")), QO(this, xO, "f").update(QO(this, _O, "f")[QO(this, TO, "f")].car.getPosition(), QO(this, gO, "f").sunDirection) + } + }; + var KO, qO, XO = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }, + ZO = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }; + KO = new WeakMap, qO = new WeakMap; + const JO = class { + constructor() { + KO.set(this, !1), qO.set(this, []), window.addEventListener("touchstart", (() => { + if (!XO(this, KO, "f")) { + ZO(this, KO, !0, "f"); + for (const e of XO(this, qO, "f")) e(XO(this, KO, "f")) + } + })), window.addEventListener("keydown", (() => { + if (XO(this, KO, "f")) { + ZO(this, KO, !1, "f"); + for (const e of XO(this, qO, "f")) e(XO(this, KO, "f")) + } + })) + } + get touchEnabled() { + return XO(this, KO, "f") + } + addChangeListener(e) { + XO(this, qO, "f").push(e), e(XO(this, KO, "f")) + } + removeChangeListener(e) { + const t = XO(this, qO, "f").indexOf(e); + t >= 0 && XO(this, qO, "f").splice(t, 1) + } + }; + /** + * @license + * Copyright 2025 Kodub.com + */ + nn.enabled = !1, + function() { + const e = new oN; + e.addResource(), K_().then((() => { + e.loadedResource() + })).catch((e => { + console.error(e) + })), e.addCompleteListener((() => { + $_() + })); + const t = n(7780); + for (const n of t.keys()) e.preloadImage("images/" + n.substring(2)); + const i = new ZN, + r = new OB, + a = new ul(e); + a.load("music", ["audio/music.mp3", "audio/music.flac"]), a.load("click", ["audio/click.flac"]), a.load("engine", ["audio/engine.flac"]), a.load("suspension", ["audio/suspension.flac"]), a.load("tires", ["audio/tires.flac"]), a.load("collision", ["audio/collision.flac"]), a.load("skidding", ["audio/skidding.flac"]), a.load("editor_edit", ["audio/editor_edit.flac"]), a.load("checkpoint", ["audio/checkpoint.flac"]), a.load("finish", ["audio/checkpoint.flac"]), $u.initResources(e); + const s = Aw.initResources(); + ex.initResources(e); + const o = new GN, + l = o.init(e), + c = new _B; + c.migrate(); + const h = new cU(!0, o, e), + d = new cU(!1, o, e), + u = h.testDeterminism(); + e.addResource(), e.addResource(), e.addResource(), s.then((t => { + e.loadedResource(), l.then((n => { + e.loadedResource(), u.then((i => { + e.loadedResource(), g.determinismState = i ? n && t ? VI.Ok : VI.AssetsFailed : VI.TestFailed + })).catch((e => { + console.error(e) + })) + })).catch((e => { + console.error(e) + })) + })).catch((e => { + console.error(e) + })); + const p = new ZB(c), + f = new Mz(p.getSetting($o.Language)), + m = new gL(c), + g = new HB; + m.syncUserProfile(g); + const v = new yN(c, g, m), + w = document.getElementById("screen"), + y = new Au(w, p), + A = new rB(y, p, e), + b = new VP(y), + x = new jb(y, p, o), + k = new LN(e, c), + E = new SA, + S = new eN(a), + M = new JO, + T = t => { + i.trigger((() => { + X_(), Z_(), L.dispose(), L = new BD(h, x, b, A, k, f, S, m, v, y, a, c, p, g, e, t, _, C, P, I, R), J_() + })) + }, + _ = () => { + i.trigger((() => { + X_(), Z_(), L.dispose(), L = new pA(f, x, b, A, y, a, m, p, g, S, (() => { + T(!1) + })), J_() + })) + }, + C = () => { + i.trigger((() => { + Z_(), L.dispose(); + const t = L = new FM(x, o, c, b, A, f, a, y, p, i, m, v, k, S, M, (() => { + X_(), Z_(), L.dispose(), L = new BD(h, x, b, A, k, f, S, m, v, y, a, c, p, g, e, !1, _, C, P, I, R), J_() + }), ((e, n, i) => { + const s = L = new AP(h, d, x, b, A, f, y, a, m, p, r, S, M, e, n, "custom", [], null, (() => {}), (() => { + q_(), s.dispose(!1), L = t, i() + }), null) + })); + return J_(), t.isPaused = !0, eC((() => { + a.mute() + }), "start-editor").finally((() => { + q_(), a.unmute(), t.isPaused = !1 + })) + })) + }, + P = (e, t, n, s) => { + i.trigger((() => { + Z_(), L.dispose(); + const i = m.profileSlot, + o = v.getRecordTime(i, t.getId()), + l = L = new AP(h, d, x, b, A, f, y, a, m, p, r, S, M, e, t, n, s, o, ((e, t, n) => { + if (null != e) { + const r = v.getRecordTime(i, e); + (null == r || n.lessThan(r)) && v.setRecord(i, e, n, t) + } + }), (() => { + T(!0) + }), I); + return J_(), l.isPaused = !0, eC((() => { + a.mute() + }), "start-game").finally((() => { + a.unmute(), l.isPaused = !1 + })) + })) + }, + I = (e, t, n, r) => { + i.trigger((() => { + Z_(), L.dispose(), L = new YO(d, x, e, t, n, b, A, y, a, f, p, r, P), J_(), q_() + })) + }, + R = t => { + i.trigger((() => { + Z_(), L.dispose(), L = new iz(a, y, g, k, o, p, e, t, (() => { + T(!1) + })), J_(), q_() + })) + }; + let L = new BD(h, x, b, A, k, f, S, m, v, y, a, c, p, g, e, !1, _, C, P, I, R), + D = 0; + y.setAnimationLoop((function(e) { + const t = Math.max(e - D, 0) / 1e3; + D = e, L.update(t), E.update(t) + })), window.addEventListener("keyup", (e => { + p.checkKeyBinding(e, Ix.ToggleFpsCounter) && E.toggle() + })) + }() + })() +})(); \ No newline at end of file diff --git a/public/assets/g/polytrack/models/block.glb b/public/assets/g/polytrack/models/block.glb deleted file mode 100644 index b4c2ee80d3af67c92f44513a1819489f62fb594c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32336 zcmeHPO^h7JbuRvs5=kvd{gRfn9GMa&4%gGuJu^F`rQIbhg%p1!O0*@J0hZ*DT4cG) z%r0d)0&V7&OMn1@VGB8gIRrs2LC!&9YIBK!*q7uSKna4Ja!W1_a>)1U_f>aSb@#5| z1c)2x>ep58r`}J!uGc-gw-?`gYqJpI@(+aA{kjluU%7Pgv)25|%4oH9;`DnXiv9? z?F5}kJL$HQw4G$v?q750pSA9cRz8-@IY)>!BMFd|tTXeAx1>Ba+O?za+?yY-j>dU} z)FQ}{D~ro_M>pTU%UEP(7~fj{-V(#GGvlo z&U-q9Ue0}3f)3@|t<~}T(#qoes&q7*1`l%{8#-pChw<=*(#{EZPzcK7=D!f17VadF|syUX`(f4npTKP<27^DCp% z%Ztn7x8`riMfOo=s@oY1lYW*?_XfjWZvP>V4P;f%47X#1wJjyih7ekbc^ zz5C?83T;j;udXiNX{bzRnDx88>FMrtCrgLvU;t(6^=(8MX@`}MWm56e4NZT%aA#q4 z;S)VNzq&eJxQ_KD9dh~7m9y`iy>wA#m5Z0&y)bvabt1XnZY?a`T)06vh(HqrKq9+^ zI3NfOhm3PTLU0_C`*P_N(p2qvB4ZdS11<%t-AReg6ARsNNPy^6MdD>V{F!wrOMA_Ug|zWpSH&ahukU z+mzWhZEV|qgV{3Mrk-un`nJuOZ8OidS&c{-)Sqp};x_Z*HuExNG>2s@4Q5^*%)CVC zud>UF^GhSSKY9Odv(%8mkY-i)yrkLla!_>AJr-3xFRFT8RD~u@o2q8h?y(T;c_G+C z%+$gTg*md~cWd^YVx6V3KoyET6UyS=e z?())TY4yGD-$frbP%G9Lwlcir%{lK6&L1#b= z$JE0*D^ff4z$dPq6cpBuHkTW7AA+?wL8l%Gi0OwEP$YNybrBtL1+gTG44izhvihyd zeTd>J0Wtlks3^|QDF`U8AJq^=22Mfe!S${`IhlBfL^Ui8aHnCl3rU5Tir}Sus9(M` zU4co(B5*z^Pf%4M&Qk=vz@v=UFb9?{1Low4EI}nt(Sptg3HZmujPiJqgPQ@@aa}4> z7*q&|MH$s&MRKPhW?G@3#EpbG*KmDa?1Dvcj?RWjg%`UO>)+Y%n8*if!>J}IkVW{MMZapuSadw+TvQ)J*Y#PZp&iluA87ZKI5bR{?)tJe~}EQ%?K;f=bn zVl_ZQRK?OrcPcvakQ+-wU8*gM)FIE=y>?-L)~%{hdlf5z1jIC?w`4^ZI1Q5_OrRMA zbfmXuMHWs+TF%yu*eK`spw&87tOb@YO7ji9#4AqF>DaGyBfYLGa&RhoZp^EAyw^Tn zt)pZX-v3nku{6+~j&=N48thI<&yP^bcVs;+E0#l*C+WRr(GO0`YEROu%pwP-q|K|H zso`LVqnCBNX+P~wC%LysB?xuiD)p6d0ydJA5(pj(G*2N-y0(2MUP2Np!(D8SYS>#VWY2Nmm%HX|{w(+m0H zjGfNYF787*S1cTFPv^URy*gK{HIf+BSvn;DRB}4Ad>zucbgei)t1nd>c}qX2SW6@! zs$=O=a5^R(1de79P?A1r6hp%)=@q_Zj;;I@frn3}gqV`_X{9(rr)0^;2qaPWF@%48 zkzZb}e}8p!ezbIZ6~FuIQaMH)mu}sXKUXA+&yR1@FBj8nNM8)`3oH5MrkYkVt4mG3 z<$^Qv1SiJF+@NUsAkB$;qy{IB&AUK6O)0ac(i9I|a$i1i7;$Xc3F+uj(_Ctc&Qs$T zVfCr0tmUGUPA5kln>lIeQ&Z_scjiUvCMM5|PGss@ugQ~y-gVWTdBI~zDr;jVJsN6x zqi4gM@J2@O<%2CIyI}MlJw|IQPT$czkN5NO5)+;j$OrU6yRP)Y+=m%GqM6lWcFQkt z6i^#T58Y0aWtPtm_$6vi@7T->X6tsEtdt^ox0jP1b6VbR-7LS-no&22x59&{+mmnQ znag9si{t~jd8kRA*E~g0vi^8WJ5ADhQTDKb&k|Y~e4VDUhcA_w-HPPhCILtB;R(<3 z$u$=31xxf3>*TE- z)4V{PG_hMgzhz0I{6=fqn|jhD+>!!$+T@{>kJc>9XZA)`&zb~G!RoyxxwT+*{Lz6Q zZLygr3F+yXz1hROK;IiQ+KJF)x%mDxy@=wAB{qGTkvRFF+a$La$$L%Gv)nFv(x>yf z$0lF2{b1N6QxxfkoxJa3t3A!z9yM`3@?!HZSTE`H8$Fn5eRK0AonezTTQGl;BzgU# z^UoK!wEu6AsS6v6B-zg`}M(<(u44c*aBR*ueKC^!+Az|Vjq8H*I-vZ$Zr;stlwm_QKZLPrUvfo(n9mx-!Hg7YX1Dr zKIx}<_r;>Ou(ih@MCSKuG5Y)qx};x7{3-p)TfH6BZyDLEMc_|&@I&y)$)j^ZoH~0E ze<3}&hK8=_@nGCPoYnmy*wEr?X$dy?6|j{Hd<%od$_>E=ALArT(h`hQ(ner~EyRNv zoR7?%yHY8T#gK=-;Ap~pLL}zIU2EOEts|RDu@~na}PCU!vN^yst@EzBi_YMhxM`KRirJ-;y7ERr+2{SyATJvz;7oaVh`FqVyoDMDA|j4 zuk^msn`BBq!v+#2d(3HAU%Bo@*myX=PxB!AiU*2s8SMELbD+cY$(skVRSjV4Gw`p3 z!O!A&F!Mo)j|;Y*VfaBGGaL_JPu;`_yKrjk&&O&uBuqhk z4rQ?Mg%>Midz^I0eh$OVvL9DVOE7Q@j~Hxefp1|$PuBn}#MCcu&P@ICU*F(1BMz)z z+Fr7?4e8AFHUp}!25o?+Cl@l*@fcR*7C~8iJKF8=CuL{y>}L3M6ISas+*`ZB24pKb zjO`?>ZD3%!avkFEX3T)r?j|C0_9R)Fuk{c0g*xPMEme`DpLA$s; zdKb3?d%WFZEBd^6Fm}e(_G=r{>`WimzX~=qCJrPY;?HGq81f_zu9lWygOi8#J>kj| zcrn=Xk+mC1ERO*>88p%_9=;lRAlIJrDaQ}-bT->6{X|b=%Bi#$r@hx^oK|&V`GLMS30C0Ic#X@8h{lg^q=u6@=`%FuYQ`lk%!XHP> zOyJy!c%j|gCamavX!l{|EBg>v>l4_q0KpRHtV7fQwnwf*bQSX83CiKL{)QhmyY#4^anH!9*c( zpu5G7z=Z$h7c~E${rqb)RWM;|oHd3Ygcbe- zz&{Q%{56Ijgcbf}$v;bX%;LW^Mq!4(#_)r%!oMqd3Xy?-6-*Qo2Q(Hx0u%o4N&Y9& z+p|?LVQZW$5Ay%fcwy$mi1}^+@08i(R)wYchPqZ z+KD}mz0QQ(QBPoWCo1AyVjJ3R*lp7rwgYGnU{C$5cm`O{;+zl%vAf=bc8_=(BL~DG zw1>o#Vp6;atVx{Dik5gzJcaft@d8E;iI>p6B)%q&idTSj6z8OPO&k`_qkUeyjFFeb zF|^0T*F{Hs16UoLM@3h>DvqE%BBn5MOr&U2(H7HU0IX@89dSY=;yBvlqK}bOoJ4z4 zWMWp#0BaWKv^XV(qKCF8-oVI7aT@Ju@lA0?{06Yj;G7k2i#hQ++SkQf7&$G@p*<(Q zB`%9gz`Bg{jCfa^6>p+_Q(VNzIdKK;6>(mCD82)%4{=@=?}?AZRkT;d2jaWp9dQBe z1@UcQT@lyNUK8)b2j=-A_m*?Yr+lBO_K?ok27mSo+S{mp39l(w?!k1wgmwRy3}3>! ze*#y-N5Z~QOIY`t=PZp7Ob34s{Tk*r z;qRZRTA}yh^u=&HRx!Q%+J^g`Sj)7gci{dptmR#3cj10FR_^0yAIJS(tmr*x_uzg4 z>zda06S&`xb-fSmKHNWvReS*L0o*^0)%_IOr*N-gm}1Sut%c{*Tnn+y`{854S8QITSvpqC9Hit2#r0)nQEg>p1z{y?7W0#J*59x?s}yGVR9hLGAgu6dPP7Ie z{#4yZVc<%9vYWw=!NC7g@<-i-XFwcQyd@6RRt7%^EBpz_mvt8K<1oXg+RESuVTIq3 z{82XnKMpf|s;vxu5LWn?C4baSuu~jn_*7dN{2;9G?@Iotn}A;hlW!#sXe@pNCVX3G zRl;gMDi5R1GWb+ymBI?&)>goY!wjElD}x_|6~4^*(2;a8`M(Sn`k?&|e-7||Tl>)3 z2A(;5d|kg_eTMKY9m!&Rc)v&c$c*Ii1F|?igKh02=jLen95@`rXFPq~b?t-P!D%^9 z4%<2_k00c(Yafa4WO1Gxwslq>KgeI#J`&%_;ygKQ>#RI}kiV{dB)*fyd2-m+S$X^* ze_i`Xd?$EY6d|w$94q2l?xIN8&qK zoF|8Ejg!Y`{5g)l7Mv`{b1(KrTV>tz7FTPMs-6q(DT5f z%IFZpuGS*s*cW~J%_sJZH#_^_5;*W zR0~~2-SlnLMjzt*F8V$|{iOD9^eiy@I)cfEa*t&C=hU-9_Uq@!EXE9ugmpjBn|=xF z{x4a-gmwP}t_EMiy1&EvC9L}|vwjKd{=2MS!n)toM>H2x9}#ToBMWQ%{PR)Z;4%Gc zm@Hy!!hb*M>Z46qpTD~LX!f6fN9Ur+xg0!$xSgf=LVpN0v}=r(V1r))lPwH?3xlVX z8-l@K;%ojEHu!ozl8*-~I%+AW@^~~OCfDY#W?a%jPAM(=4Stv_ZQe`y<% zi#b@i9LAi5ID>IBw-Q*+U-#$WhqJD~2$K%PU-8bvYCZ}l1gp6jJ|xTF$6=C62gMQh zt?E_%W}IIoEOj)P>T2RKf8|(G7UboRJWXgm2G7u&`%-*1M>B5lEj@6|nCYXd=`;A| z-ot?&W<1|7d1yULaY(Kn_h`{yPWy!1?>!;5;yqZM{oYe@|3>e^=>53a<2?=99oY5J zd$MP7?!Z3oNt`Y0<_?KTw3FDWZO0z*Alid+?{`4&{a!51A$%QC+^IOWYf9?q;@^)| z9`hB|FLmKCbSceUykFvLn{Zg-=>7;y zIy)O`7<{bU5DcEa&D|VIbDHGi=F>F4{a?ys^sKVEF#_8h3mgtBU0`cTt8-=!ws9+I zU91u(TF0UMV8;2CU~_DkR{Gs=Q&*E$>=nMwA5!jmX&FDGw~=M!n0~r9Z~+JM^L-Lu z&&!ONtKn^UhWg8Rc(i%`Odo?syv@8#pX94?jqDJP>*s&BRp)QD=zApPZu(|H-!a>0 z+o+rOBmX~*_G#4ORK-7!HlMfY@4*fti&5UD?;wZK9+qD)Uq)?x6z6f|zI~|Hx8ZyR z+@3?Fy&vb1(!9s>1J6smzkY64drG2JYt5`FZr5KOT<2LpzkQ^?s-kaGn78)*|JUb2 z1=6UpoU=vr0kIv^3zXD!kJR`838*n(hzUPS2 zlQ>QCT1><8xgUc~OcG8GwzTLk!X!~0!CW`v#tAYxPxZPnm+Rb!!OdSChT><&^Zj&h z#zOqfcw<`Fqm)+L&y1O?$De35UcR614NWP|j2ri8(NBk^)%U7bwZzYi=lkj2jG3#4 zljjd!`Ge?6=d5uJ-w;l)U(4q546fxFz%h7HT0K8}(M66ne;-}vIeQRK&y#pkp2U0S zLwF8$(01^Ar0482XrI9|^cld1(H_Qo>=vG*Uq?&NO?uA0fR?JIC-EFUg7%1f!~GiG zWVdl9f}XQS(b7|QKX^@{ox*c`fOpp!+6?cnNkR{85AUhzsh^@v>0P&5%X0>%JVB?j thN}^Hzss?H4pekrKFsAVo2w0fFP|ux+#mnDaMNcuy;G&%j?r&O{s&}#tE2z` diff --git a/public/assets/g/polytrack/models/blocks.glb b/public/assets/g/polytrack/models/blocks.glb new file mode 100644 index 0000000000000000000000000000000000000000..1729f5353aa65c246182431e1e7810d654600bf1 GIT binary patch literal 30932 zcmeHud3;UR_x6b~h7wauL8SDjM0#_F45-|LnupX-YA6vwl!PSamP9FSsiB5YL#k>> zQPf=Avr9`=Yp9v3nu?mLl&ax823P-}QVub8-)gs7zWgn(KB&3Y%q$Hgc5_d*x{ zdVOQ!dc-97H+iX*{~&viEyx}k5Ew8hCLu94J`TdxAWOj8fdMf?l49c6l-MpYrbj@n zP65ptx9-{_Au2k)YrmMp-d&^P`}I$VNt9k)%<`>c1`Lc%$WEWcXeb#_%MutMC=s&^ z4~UEEhqi!vedD9wOoV1}@jYUA#}XJEXbrRl+5;VdA%UTRVS(X+!DtK)47LUa+X92_ zfx(Wz;E=%J(7@oZz~Jyet0mAH+~sX3=NV&o09BV6&C|eM&z)chyA^00)wic8VY+M0 zy!-0FsDz}LghvHznF4aBP2c$bF+JM#Hw|Hbl0<{}!Eq)T$CG5*^=}dfm)4I@!2eCc zAx{==H4y4OCLH=CVb1>KvBUmN{K=z-KP+A^A+|@a7?Y}Smxo=U$1U)fl5pu0#G1sx zpv0KyB*bJ}^PpKyF%4>#uAdN}m}u_tBrm-dlaLe}9n}{Rmxv2OuoEIH$P#R`Tf)Ob zt-;}zFb5(F(Ug=B6_?mIii${FA_y&AOd<3n7kh?x8(S|vDJi~Rj;8{DkIwa^P-z?Q znGG}iCuN@$KJEH9kB{s15A!1{r`nu~{kNAPz`^L11 z?ZL{JlrS*n5mg2z^o)v*!Fc_Cw;?pc9gc9DEik)n4CH&!9Y1%BJ!t zQ~y!u-Ms{ZVfJ7xkBt9b~ZtXFqZr&!9Xg&8G6Gi~o^)kMh>+D=YeO z-1Fd&&2k_7EF}lqgzT!1Fv~Xkwj8J*@(iJmfX=S^InX{V2iiYN)#0W+yXwPH*=9dH z2l|IU1N%(KZ0gVLVRrQowq##_Yw)w^pZx{b3eo?pKemxL*5qKpwc4IV{p>HfRxEJY zRNs<=%4vO;4FjGkWIKAYwPkR#pM&JJK2!2$f7!KWCwVhYJv`rG)0TsMkM)^SIQz@5 zEjuZkdF;!%9kypm%o|3c7|EdmnFOowY{yz_o)DBBfcxX62 z4!hNA3$aCe&YoGPU`vi8)_sb2ic&c)^TFJVvsmG*KwD5)NNA`HtCb_%8fv#$V`^GL;J=JQ8Xm-u3lGQhcbnA_0#5}8 z*}|+=dsuL=!x9>1bvW1|u%f9ndXBgbJz=XsVX zw=JO|)^J<6-C+xc;)ocVHQW&rf_FpsKUB?PJlOJBhnmt95^Ax8TWrChq1KRKglS++ zJG*7Xf425Th=|M%+1waC)slZx>_3>}HWAj_L*W)Y@(BHZV~hLTzzD+@%gwSS+!I8B z8JQ3ghGY&8u~}@7MAYLE7#!rO=vZwe0{@##M~LUtDGsYVi#O+rEi4#nBQ!$z^9oN8 zWwn|Ej47StVv9V>aqyT^8k4dHX6-<0X1KtV896UB|3z*-q?F?krT%Z$3|OD_vebPl za(|aMpxuWi#WatJ>y?C`!N|hKhE_d$%Fl-Iip2A#^>JYf_JU?%^v;R6)t;l#v4hFU z=ynI5(Eq#c+^Lv#cZA@5#J`G%W9My_#)A74>EK5P$D;le@ka*_w>(YyF&Bl0Kh01p z*JiWo!NJz2@o2?%hA#5m72F()$ThR6te?6f`aB%q3Lf`(VPQlpuJk5xZ5IYL(LrS5;)BNz5 z*}>uV;HT;Igbs|P%vzCACrrh`YH=WryS&{aQq$@+X{j}6t=DgrE0>oSeskzuSSzGy zx#QOq^z!oYdZ1}uT7leX*ED}67tLRH<20xHn%R!~yqDST!De}4{P82>c(5|-kk4Do z@1^A$S@JOzATGmm7-gEugEQJQhex|$TuswvYcBTVTv~F@=Rz;{C;1_6J$5~jTA_n_ znsxSI{UQCcY@vL{J@k8$T{)U7b1cu8=6U~puKWeH0$y6~t8KK$9Omi7EB^S&G*r)0 z-rO$O(~mM4*xhcnF>gLCucqbt0+IXlP&E&kITeP^Z1+s}Fo(}>S0x+n@l4n(PYfBc%Zwk&aUVae zd@e2jgEq~UwX60>khIb-O5YWVp<1^}{$r6OqZn zZVmBWta}0j!bXOMf~mDzKGSOHo7J8*X+5Pg|5ncwdt5s~>@;~W%D~?%zO-1LqX5|I@){JnDYVe|>%sVmN zoqK)=Q5=8#^P`=Aov1G|tvjbWd&ftL%*NfzoVNybmiC45+nirt?j`c|YaVwt-j$&8 zqHn&xZ#cUbdRyeXN9EV6wth$Op-mK9PG$RB`o8tE1uy%1j9&47=E|54&QH)6 z)STxY^VBr`>z(sN=Kim9^!pFyse9m@*u(!B$ZUhm1GKa6LiD9yIHo_wq`W`o+K;)| z{sDA24jm|e3c7_rH@3Hg&UK(O+iA;C*h1U|Hs*qjG7fC71KTO@;p8r`hby+{28U7L zknK)z+X&pU-NQM@@%V!69v@NO<2%ZDd`cM~_&No?W_xYKz!}5<+qY-L2JtM!Ohv>D zWnvIZPQ()12O`F*BgWW10?JPkPl|md;Pz19C~P+s^$RAfqLH`R{jDr?+kQxmzH;Rl9a;GGKc8owjRC zw|LKV6L;|~t7p30Hw#eW5fQh{Lqa0;s91*F!-8%}iXLbKRWd&{wKNoifbXMy6OGy}<_T_ks;#l*)?&dOKCv6E@^2G)pNX#;zfU_M<6ODk z&p7=0MHzqQ^w|dIqYf_2|7O%xqXc4+*EL%Y3Lbtqmr5zQNpSk+!m9g+OGSQfB`-A# z{mIEejF$(tQO_XQ8Vmc$1NoRfbgbyZYZI>_#stJ@XyF zc*Qm8aYm9jg93+Smu3XiF4y zq~5e;HSBn8)PC9JJRTbN&GyX)k&02_Mtm5%75o{6W9aKS{^Ci!HofsnN)2ikw`R^t^Gg z_G^O2RxN6*s~s))@Wtz{CWYbze{K85b#LMz!9%A{bKOjtDdWtpztI)iew~azanK2u z&+7d$@0W$VjJu=%5PfQoEpF_z=2FzN{`&UD6zEM(X21^mkDMgKpR}Jm#DkB1$pxi0 z@w$HWZG&~nJGQhs`RNhCuOAOk1Jl(j&))NYQX|A){QPHh=(lXcl_il;K_y64H8hb3C zaNB+U^9F4rw<};PV};z#MC|;9cp|sg5MShxe69npySkT<^?=u-wekp#s#IC+n)#c- zbz(!yn(DVv+XR2VFI2rdcAnrRlb!1Gya|H88Q4f&iHjEge~PcIjCyT_|8-Y_)N>y+ z5dPEdR959%+lBwUvrDRI=t};ndmY3F`DeV8LoShj=2l143-Z4i^&<*7N&ed-N7o}> z8MlmIuObD6Ltfvr?QrG6eyDJZ1+Jv_hXns~YNBgk?=yls1SYv&Yj{<#3TxGq#R{~FDLTn}peBX<4$+bgaep#{Z9Rj(g&(SG`<9Qa^d(nk#tr}vQO z^iewUz9ZtBK01MTr$6Y6Bk)hRGv#G1=QZVcA;A~ktghzXx?ymQZ_+AMH9fjp@P@d0 zYV@YXf`44zObxy_(%pW$wfe4Lpx~5R9n{=K0piDsam`iQkuu`PVdb65zNm=!@#Cg8 zmAiBv@#Cr7FQ`jhue+%KgH~l!Anc(Zx5K_XH@3Ox$4?NOtC9coBkKWcCH=_S`2h8l zeq?C?8Q{x3&hkm=|)C)rdx0^71%b|871W)VSbjwNa6u}MJf4_MR_RbvB5?I$Zn|o*Y zy62V6wsP2yP=|q4irC9zpF-W5->75Pv45e?og2StuYr9HZONT7-p;)f$0tQg^&}hP4qQuRaMk4`Z^KyY$NiGzTS!aqhIOM zWcYddgXd*G$Lp&BB?Q0M*ru8t)dUYcjXLE zx{-o4mE3ZTJ%;s$oUg_D^F3-Peeo@7>T}3v`iS}cQI}Bh9j|{}>yLk@t!eIS8cu8S zN#@ywI*eZRqn$dD|0>Y&G-8)JKk&_Cur|?_EvQvoGiW2%kX@*8wEYZf9&?GD%t3CE zYjPC{?)|^0q3U6u&Fk3wpWmxW zJ$cr0RgSMp{dopEb+ma^+QqZk_&ghz&|aR|if{BvmpH^ee!)v)myjRwG-&1cCG-*F zHxM<8K4J}f2kVX0UaUWJu*TCzT=TbLA3z^*UoaVK8-2vJ?k?&qeUym0I~cjj{9^8I zMXnMjA$K<+SBcjkcWua3V&?8^$W>zI?rh{L@j>M7E67!1=5EujE0z#5cRhaRdCdJs zzo+5sgmW0qX>Tp<PMe{l6SNivr2Dj~J;aB>%&$p-T%t^MV zAxBxeDgP2`IoD>6a~W$j*KdwL2J87otP`BK5!Q`is3X*;De4MintHyA7{7MeD*E&K z@mPPs&wpHBjhu$(1hA`A&(><{ zk9{8T7ufd&VLw64{l!u2CpbR$7kv|^E%u!4wa>;a_MG|4r+t^s7-OvMUbiuwvBwzf zQEFH^W0J9%kl;#ZtTJW?>~*Cxh8fFW`xxnrZN~Vy$y?GH^NjtmQ(fuI1?I$uPFFf} zgt@Y-w=12w!yIaIYD7A7in+xcJDc$wWNR&VuBBYMak0sX+2Ohjni__Cu0`*dKAfOZjx{ zf4Q&XIPYMe^$*rvjvs_|xG2^D&RY{}0`r9W%tGGOSr;yP@~Y2$L2$=>&D8LV#ROmJ z)=^!ZbIV{1_)wyLvZgW!gKGu6?HHw2g4_mSFr*jMWI+vO*y zRy%?P-}fG)MtU_9oU6-V71Xf1U|#v1V~*f`$Pu?hzY*w9yc^?jT;d~`hw~BF#{ATS z_(kYtAP1;($sR+EMHOdD-2NOl#0aeLvBd532L>4z*UWUs?aU zk&m|Eg|Qb3p4Ndc#-0WIT>_7cy;s2Nc<{^Ey8*t3fp^9p{ZJkLVC>O9XW%D!_6on1 zhyUnD`m^u*8w9tzkgB@Oydn7aw2#y$3w_1cA6y!*UYrmt_^aci)s4+f1+OVMSe?BS zC74%!=a_%uKIMq3p&$Db&%<~em$)&@0Fb> z{*5bh*=SpEg828+@(V`4x$ldA4}N~usCQ_r`1ieHzZ%Bc(c)jn>0<`@B3EO;A9IZS z??BFR4WM88VNKw^ivGHXeO84}dP(~wtQ$>{tCXLP+@)_gP6zm^*$d5Ne7V*O5gb+O z4dpwhlHjW+<5aV_{DLQReOrY<5Bi9Dy$}89BkFqydecX=<1*}_k7!?i*hwGJ?iR40 zJ|Z7p;DtUSPxs4}60VYleV~5b_>$n=Bi~VDmNXW8H6=;KFX<|nSAJ*T(YU_{a>OUm zkNt`7VZ7MT_l5J%R0*|r<~ZRzC4X@>e*U|{dGh6=>W9{&h4TwZb)rwHdS%`2!r zgq^gp3GDt2@k*|SB7WDS#*xFFsCl&!(`+A$7$;wp?*jgoTx})e@VaqAEx~_AMyn%T zpBKCbx?3;@dE=ZHF*kYJ1zko#C-O!e-=VJHZ4Y!`1RKa(Z`kz9^Fe|mT8&cM4mT7$ zzgdFn^Jy2syz)Ecx8gqKh)bp_|W)k{@Jf73T&&j z$)%O@yc?1iux&Ig@8j=Vz3`rK_l!Bt>2oW{J2JeIU88Bq4z}}(zcqXp=59|DnVpcI z3i*7HxjlQSbJms`DoZ|1-Vb6=tb5)M61&f!l~l>xse0gC_d7wW?E0*Y?*t>KChJ!h&64+POG_u{18&U_nfE(K>pvczD(%1BYpbtlJ6Z5Gt&x5u0s9;1 z`Qn@5dav;Jq&=cup#Iy^(V}zg_)7Y?`6H$Mo5&J+={5sJe(H?;x}$#|!QBqrcBb5W zL-3Skr=6GYwuasQ%D!*6bIO2*^8WFI-kY5bJBJJY6Sk+qcJkn9=X+a^Jl_#}#v%5M z&-cQfdD-sKhwXi!=X=nT?~$Du`g2T=U2MM&doRIW;`88PIe4JV2jFKH_~Dq#z*{_c zBYqWpUIw4UIPKEQr%eA*khjNn7ly?{#!PPuc#scAlf*VOzCxUk?>+m8Ty z3vRJ}7jPcIt7;m+n&5Ztdjn4hWC30wIPc9$z>5XS^;BkTrUHlR_S@7Ytvw`~yu2W$wa5urDYV`z;6uhFJ4(t@{yT1~!MR0mQ zFJOPcmy&kX1&4xfB+Ula1b?wM2Kc1-y?taQU_)?Rzwcj$&Vr9GiUv*=|C+H$MmP1< zO=Ie&xpb2bx=AZt{_C@||w-sc!PM zZi)fj6dSrJW^_|5>82RdO|hq&Vp2E7D&#X`7~^Edwr+}f-INQuDM$20S-GQ|a!NPl zn(oO#^Y4HDwRUJ-vnt8JE?!#OLK*`1iM7Lj>#460PZBGpdSR{|`j%X%EAE=2%-G!5 zyXn47o;qU2RjS5r_QYTDz#oAnF7+i}_;1OGSKZ6E7w}1m(b-kz084!9Q>**{EOD=o z_{PhXkq`RC8vekNC;G5&bYRIJz4?@$z>&-i{e>oDfx8L*`qXUT{(^6oS`C~mc-yI6 zz>>Fm^(MaoPm=bj3;1gg$#XqwfDdq*wEt7kA6V)F+AY8(B4Or@|{&wD*z*2wp4zs=BN2$wt)eGLhQm^%@u|B|3$Mp_= zWq_r=XZYP+_uYPXW0Q5JPAOBaDNhcXYe$s^T769`mbrg@vyfI$Yy0TG0N^t;P18d7 zoR!aDbKw_>L-2mX{XA9+@nE(yODIoFc|Pl6Uq0*d$WsPw8fDnVXLZD$XLZD$XLZD$ zXLZD$XLZD$XLZD$XLZD$XLZD$XLZD$XLZD$XLZD$XLZD$XLZD$XLZEXpL)<1wo?yc z%JZ2YF~^}E#2lY`5OZGYLCh$dy8Ss>%5awd@snTLctKd3W{dE_1z^hiF^Dths!cfO>C zA7{HIxwOw7`Ns;MCjVn3e&wq#z;#*c-;C$21@z?bTSm)@H>Lg3D_-i?IVYt(FhEn5 z#e0kg`fX?DSvQTkZygpKR`_?L?5QgvQwG=H(T8J3VvHki=TpU2SJCfY)YKc3a|`D6 z9=@~vDDI~wU6r{Smd>jp_8*mTUid4IT5#?=8UJ>?rq2Jg&ZtoN7w4IfTSn!%F2S2Z zFB&Ho>=5iz_=J(%>Q|BHH3c@%mZh+%5yquHoF{Zi0hxD5z&+!e{m-ep#clfaAM>c6 zorMHFQ5wMIVf}OEL>1EXuM5yn9?nu z>h=0c(alK8rS8<9V|W$c?mRx@u5oA40>R^NT{3RJzfAD$=T8^~53LiNrtdLM?%gMS zc?|)-m+=_xoH=5SyJdZv1?C>zl|Z&d_?C-)pDyhzAd5p{HW_E{0pe} zW)u^=FTS7(A751PwLc4~p-Y|+rO+k>7{ zmBaUm?c-lBs?HvDiJl!M6;`Qrmx})9rWa5z4VWQz1;*!7?UPfCK2=sYo#k^YOQ~^! z7w`Sk7#u&zjjNq9rVpDXSnIXd*jZtr8?RNyu7s^J4zESvZ^i@t&sZcsj7`Q3`EeqS zZb3ita}D|)nC&C{dk-3ehrTN~u)sEBgq9Po3STR%YHu#DqV3)EkQ>ERf$rr5C-g6_R+KC& zxLlDEs^{U-f|q|^LWQjG72IJ_Np*K_DZ#wHj_)!K?w^LA=!>K9+b@WF`hs~tf72I1 z@P7>Sqc5nhaqpz~LYsgk?7$D=i!I&CsRLha6klA5FRRYHworK37gt6tTs=wnDfvce zwfNga;jM37U$yCUec^M8Pbqc&mtscXg)z>S2TCYQzOsU6@5rx8{#-?HovV1o*vKLH z{QZ;0Y`><0_uSrT^nEc}u(QNkqd=Kt!Ru4z8{y&eW&AK)HRJ>Hi1~37wS)d*En$76 zzgRCPqXyAmtVtgrKj|-jO7{Q5STnb*@M9c#VC=Y7PIwzNDW9rb z!B6;17*tqY38)}E&z)6FP4}v(j_!=t@BUp%jq|P`_>C}MwbR#6@QDw7)ykmqf*0KN zRYO{r6Ffh;w5mJ0tl+6-%P6mJ%LvYe>ok1ln7mJa)2H-5^N>DeUNTqd(+*HqDBq)lsGwVt!rIej2o}}%C#Q2?}Xy2_n7Ym=c z-RJgIqu2L-!r_AR_l^lvNwvt|0Bb|0t^toc9yFA2ncNCpS*UPsAD= zDlhGGuar}@y0|f~{Lb-t|5L;bV}o&29(94S!8*Zu&Ddc5W_@97u->>3$Bd2Di0dM- zld(|*b~`KoVkCeE`qBNT;p4CT8<%vwv6&CV{FTqyO0KTJ+ro<}=e&A?Z_LQ0{42jD zxbfTPjUiV)6Wn|LF5}v}hXvn0z0z2*yr99pC*MgmPF$`jc(sviB>g#D{LAY)+sWIYl7$76&pxe-2`0~Lx0e!3{ud4?EBNDY#_Dxj z`l%M5R#L>fTKlOHjoi3TH$OG#az$ysJqSOmo$khUru(VDdTxAiv!9xLy@JThzwD>- zEOz5dRVpZFv>WsKJHB&#-e-JJhYt}itRvKI1?mdd3F_>Pb%SdOZCQ@ENm~sQq&ilkQAkTip^doB(G5yP0MNGf5RuMBEq*ehl zPFSnh&iG-iB4%8%RuQx2uvQT>CK=Ox$DB z1H<^a%ogH3-A)?L<#z;Ye<;Iw;Y}CYZ?9Wmq{gimyzSmNWBW8z^~Zjs9`=rmG43U~UuW!b|IR%KKH4NRqk6aW6#7G-j6-h zUhJ9J&OKBq?3pOfJrws$9EW=-?wL3~_fXt3abE7BxTZ=BV~u4kW(>17(|+ntK4vBq zkr?)0H96v{_MF6Ul@Ym}0b>hE45#&raMs9IP%(z9B){b>Fw$Ewh9@K@EF3}H(z3zX<7_S`ank40oSpSff_de4ws*t*NXQXe z&~GvN6Zgh=9GAF1=HYzAoPP@RAdZAy)Q_0@Qg7pJI+#5&&{xg>dk+`10isB<^i+B@ooK_1R8z7{b&<%&UmuEp4#-eb-icO2?mKend$msfsg`+3~22svV{LFA?r z=uf-?<8fT#WX!|)h}&ZR!q9`b4D|Abe$;a`^c@7fssCu$u>$tcuEMad4(z18g<-7!#^%nu#x^byc;C=V59epW0`tWAKEc{^S9#bGQ%o4dmY#;zTRQ$=uF?S zT6|sY>if>9IiHKK{a#$+obmd6@%7;^w>ww8)=hAC*BYnx*8>;1J%4kqb5clg!KoA9 zabAmP5W)7l^BOsgf|~HpE5Eb-B<|0G9B~@@T||FkZ;Z!riC1GD&PSYz`Kbqe*ByFM zKl*Md^rhbPU2oVyd+0mbXE~Nz@Tw|l#`;+*g6(^13^J~L+);3~BQF`6w((`QFTQuo z)ggVI_>0&3)53)}=Cs1PLO#>5&fLO2m^|OczL;ko@*jyaP%QS!Z0Fwj-ZdriT(26T zUP!K?elS+ZKVxSlbmF|!@r#~Qh5xrE)Nzg;GEVq!UTu&waN7{!|J!=0&KHVT6kKu7 zDCZ>aNiOnGxNvLy^Tq;oiTxY*oNU>?p# zJ~==2AfGFs*ISo-1(&J&x}kOYDT3`j>N%so)=uyq{|{Zp-3Bh&!YgB)HZu0FqbAb! zlcZZH}|itFV*$Y=hkerdN_Z|D>Ch)RY-+T-;IC#p^_T1$c+zgtE5(fH_9Y!s-)Jgc4J=oo$ae| zpK`?Pw;TP5%V0bm;}WM~p3<0)nDbK)V(LZxhzmmBU~om@H~k8@cGa`cpk)dJ|E(<0Lt^(0MCaUX9UiRUEzC<&sd=Ei5Ux#@I5hO z;TC*P%vj(Vl6{NgO!+&WDR9hPc*bxG=S;Tq+^IeMyCVKRP18zczW3p8i#qZ5Y0h?~ z9{zXy+*o_#t-Sl)oWI_)=Oo}%9?EocyN}3d$!t%ZnF5(flu;&mWs;#n{3KIePzE-3 zHQxm2Vmt6=+%t%id!7S!3P$@D$OwjBz|_xQ@6hucupxNIELmj1eh#=Pp0sZi4@LU<2+ic*m~hz{!GZ*m?nv zBUWY}%2`%4k0Z?K#2>lQqkB#QcE^#q9lVElWWXO}CJC1&d3?{3fxmI+ zbjJ~N#Gx}Yc5vv_49*3+ft`XOQ`Zzbz-b;CU_&rCi}1wG?p@7+HPLzM%oJcB!RQC< zFBm=nwg~Rk^Bk~Ku+_$g1(AY(*yRV@O|Yiff%^-FuYi*?M# LJ$^x7kH7v8Q$PP> literal 0 HcmV?d00001 diff --git a/public/assets/g/polytrack/models/car.glb b/public/assets/g/polytrack/models/car.glb index 6229c54a44604e61ef4d090645e6216deb304548..731b3b03980bb0ab77cd82e1f546d0eda8415bee 100644 GIT binary patch literal 100052 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 G^#1}0JzaC>zWDzCz4tTFb-p@%>eQ)I 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 Hx&8YFZ6Whr diff --git a/public/assets/g/polytrack/models/pillar.glb b/public/assets/g/polytrack/models/pillar.glb index 77f684e1a32a23bfc09d7e5ee805ae059ada05df..91cb80c95651087696b8e74545be8840f3a40210 100644 GIT binary patch literal 23492 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 diff --git a/public/assets/g/polytrack/models/plane.glb b/public/assets/g/polytrack/models/plane.glb deleted file mode 100644 index 7e3266b390f7e41a724d7eac6bb99e2c7a4fcb86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78404 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 diff --git a/public/assets/g/polytrack/models/planes.glb b/public/assets/g/polytrack/models/planes.glb new file mode 100644 index 0000000000000000000000000000000000000000..a5a2731a0f56d7aa1c19161fce7b762ff3bb178c GIT binary patch literal 53164 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 G#{UNh$c;Gw literal 0 HcmV?d00001 diff --git a/public/assets/g/polytrack/models/road.glb b/public/assets/g/polytrack/models/road.glb index 8528f954cb6a1e507ce6b7e227608ede737111f2..6b79dd254d554182cc4175cd7054976be9e8ce01 100644 GIT binary patch literal 228612 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 t&AIEhDFXe_vi~ojjL&KB-fp^?!1#9 z?=emmxUO{EpGF!rz8;99cj=RW-X(_^C08zs%M3Zquu5Wv1;=1kxLLz!muI@t*C!?V zWMz7jS0F_j8s~^-N6sJW^TNKX!uq6V!tetg6Or$p6*~HA*efmC!>|0XxDgl&`Yh~o z$RUpq=>LiF5{NS2pv;HB`mBxK+ZgYC1i3!T(`SX{QU3tc{~mPonPXr4-ZJ>T_aU#0 zHmQX+Asv0z`2_8D8trx$a($Mn&ua6c{XNkBcc7!se9Pc_&BynmXZz!uzQ#ADcj>cc z`tCRI-RZshESvfX&&s*~+=7libLaj>@8v#8nENEn#HXU)?nJ+(XSqMq?4J8Mttz&)o9o&l9Nr#44ZZtSYI_R zf!%Y4-6Ofa%G6h-w;s(CZsYq{z0g0ugwGX48h5aI0!QBp7xh{;v-$#;yfRZ9TwUMl z4LoDyG_l9Gs*<~$3>Kn(DQf`a!)8nnEu#up{eX`@9U;bd%BJK#(F4SLmoH`?$j`m( zF7k{>GD&~ca({9E)FpEeu*0e5BE%IrX21)E39(|qW`$?3uO;TXEi#8f9^0pasF@OK z4go$ZT||?_ehPOvmP@ha1y&p&Nu*#7}=w2(1p3VPukg+XrlfqL!R5#ArEr_FX4i--FDbpo1ZX~epuS0wq zxdg=p0hjWN63;@TtggUk;d6uGbH~M=G|1=1!e8g~K5Tr1PtOaVJ|6N~@VR~Ab0+|| zgD)NjUz`g%`b4KR{QeF2{Tz^&f?rF4UvmP!1OINqzf<|F^Thk|-|u<~%w;|UE{(b+ zqi&O+{{jAbF#L61l%r3c^vRYU;U+&$5$-(DKLI~Zn93m?j(n3(r|A1jyo<{xOyzSV zp3A35iA@A0J;F_q75a@Y@f(xztR9u&i6%v8s1N5xA0{2@=iiP8SdW3JpL5hlj|Sz# zxEPLcK{}f-c9vr7(6cnAII5&ao)RzyH(?Bt{(g+pBN(Siz%))dYDNBCw2guuJD*mta?o zmhjy_!FLnZqk4MeFBCR#BWxh)%z^K21m6ui`S${hqK0}j(FcCKApH1k===!ZJq5m- zupX7vBbQxa!%xD7Q=kLJI!lkk9yKBVQ2($^BwG(mbVd2= zP(J2q##Fr59=;p%Jwp#<=m85?)ZYX3C!KegliWwdnt}`6@f$P1cViA|6KJT2_Q{9# zA^pc_w+(2wG+;e2p$8yxq5bot{iz(!{ z!gt4f&(H%6dO(5u59!m+Nn6YbX~9o@tPuK`J)Y(0HOXhE_fIO5`z_{ae+L5eU;zaP zsQ|HoYP?=eCPcpf8|6aGDpNPaJUd|{4f>`Nbagn2wtAV6R6)A${Q@k=_qb45C1 zF~(10jFX%f@U&1T`*0NYAsggmH#Wm=U`}Z03wwP5Pxfay>`!*+@Xi}8?8!!rgpDG( zzVK%IMsl`$WdGS7(jr`6kaLup7Rltt%fgS7k03vuAAWo+@Imk$GgFgW6oeagdeXCKi(hs5d3&B{5a+t#x(fx?(pM;bHb0$ zfFCEF$?)Tw;m1jS0De3p{5avt@Z;}`1jS)aV%WqDdLrhT1u@TmJM5zl=G4+-o_cIk zpYrR=0)3NAk8SFkVfv<;Zcg-ArM_g*mo@s5<-a!k^i4tC{OEC1-Tde=Pd(15$13$D zn!b$FmuUaB!KrV8>gGz1qw3~Lk9q3mN{?0QOHy7Uz?|5`QAy|DHgxq(U){VB=8az6 zyy-Dd-MsPAfnt^V5}f67NN190sFA z5IvNohr4KM%n2fFwyFNQIcLntACw3}rk$4voGe0#BP8c(J0+UvQ+vk$OkT0G`#;39 BI{g3u literal 780236 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 &6_3FS(5M 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

cL|pAR%2-;wXY2lClLv-7R^ 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

bAOA$_4{^4`kYip zS4rlqiFG&PJg%Q7HM1X7pJ(^++*@VvFNm)wb3mi13c%eYry>7ML2U`2~l##Yj`{_t|x}4 ze*e{trJK|~9TR%)#WMJ3#Cwg~sOC=Q>%8+dL^0w#u3slz0ZY`<2NQVido=jph@UvU zNF7=?sdMl95XFe|_!a02znG(DFQ343Uz5T0`vyn#nyof_n8aBjiA^!$Jg#4VF85li z-b|jub8qCiiYrvdmf{wk51R1iE7fT!Bb=*tg(!xG$1mLuQ4CLgT|zI-Rclwt?zuN| z$;jzyySs{o>-QqgyfH%!DOuRL&K05<8XjMY*Q4S28_zdyl4g^Gd=e|~hzd-!NxS?v0Ut;Hgv^K?v^Y~5ZFU0gw_q-LIEPsIb zlHNVkdP5R9BNEsYL&M|xy5}!HPEBv~clv{0yE;r=u%VcR>-T4dw;Q1jO&jjayEjBJ zG&~-3FGMjs^>t}9si!*sWmeC$Ac2>vO)x<18+Q2`PGbMcd_NP*_+ruqfUw36( zdiDIi5a-jgA&Q~larJG8VtDHLERZft9b4zO%5wca}8_%Od~o| z1=--0m<@)<|&!rn2&zAmDlV`Lkx~4WXJbniH zPfHd$PHuVUxu4wN#}I!}dWs`apC4+Id^Y9pcny#1*U3!F_c;1gP3O#n{1p5=*wH+l z&BFEl8VNp(ca&Zc8XnL4cZgzm>hH4!j+AgTyPYa-UqFt&_J+;!TeyDi`Tp8!cl{1@ zzQSih8n5B;5#R7#Cf@TFjy<<`sN?L^H!92TBEIu{Ye$RdZ|b(pxUR-)c>K6N&lc$% zIb)xD?yEQWImGMUcx&&_`jfgXH`YB~!{ct~d!0XMkMV!1vRuD6J4vdc_OA!uV{ea5 z=@YNv@sH5woktuAcBl00H*sG~aWH3KJ`2~clb6z-jH+`qm$TO;d`FAd@OZ8d_*@k4 zso!tE>q^$BfULi;qI8Pa@c6qwAxi6bPyO|HZg~!S zvSE)@mh0>2@JSuzO7~X%h}Ws1;qm>@?ptmvo^;(i_FN4OwkiAK zH9W3CAKK!xtLFAwo_oIyei-q^!CBo(uBYmm^ftwa^Y~lngL_YrnmS8M7%g?(81ca|Q1V%?LXb6B|k z*{NZVP43*OvN*e8-3<+oJ4Bmec+9~DaiaTo|BIe=H@N;fUEhAOTlwp@Iwstv7;zqtgX>x)MfXSVOQ0L*=>p*C(!V??(=oYXZO|*M?F3U*Vis%-2_@qpYxvUvk}*? z&;J+S3VnriiL^S+4te%{7+m-NUL&uYEXiT-6HL zl&SF=9@noM8#{z(Z};x;TsI895%KNO#k6$TE0n*mO)=s;zEhu1k>XmkZKuj|{d&^0 zY8mbF*I2btj7>2#Jg$GX{MD+Awll$7RexQ#`OsVYnK^}%<@XT()W4%vB6|{Nn%^Oc zq2ciX_+Ddp>hE6>-}@po4#Z=s$7tIc?^mbdeOZrZf`-S}LVsXL6D@G@T9xIC5x-ls zgC-W;u1>0DQw$A{&xc;pI%vfguJr8VGq`>on6R;rRz7gE>RZgF7;zrgUoV{}4%CWn zzpLu`X)}JVmj7PdZ@&h=fq0om)3rvD=&UN+6eG^#B0k?5p8EA?*Prp4Bh^(^_et(r zt!-4}_W2t865_ueEY$|R_^u|$d#e%W@hDu!3{U+$e>s1ernxS7z8}@Nx=Abh;E#pt z&oSlwHCmB+pVha%Hl=2~hR1K^w<(6_3LHzMzS`CWOFerA4ZaQW<5P!etJADk$41)} zBhKUc`er{mM%%u4u4iwi!IvWbDDh-%-p6I?kQz3{KVHM*Q=va{Xp$Dwex}NDeShNb z>@&5p8yBfr8`~6JQv(_v*WX|Ki_X=Yo$z-H@YpvywF~wi7OuY+^t`iKyLIfndJb!9 zXn6b}em5{Y^=r}SE~~UsCy#i3_jsG>uy*lJHvgS!`<*_^JDZKX?8XkX!bum2G;n-A1UE01!+dQ8?GgQ8-mE3XL!u4yyh85Se zn`d~5hV(MnIbX5spIWv_Twdp+l@+632m zL&M|Coi@er)L%z6Uar^5cOK-~^J{SZwRZRLHf?3*G3v_}@PwuUG(0{O`Vkd&YeDbZ zd-n4hd^+NFYs6}{b_3OQWo(KO=kZCK%y>sF+hXRoxuhag`6uYj@GY_d%2V{bTLxs1xdRJZ9ngx|DhTL2LWXr549|WoUT(VL5zXj`y6a`%k)~37O}4KHq*0 z!k*boai4V!uAf(>3VzdGcHO7$#+n*&9#4bow&B?u$381hwZcQ{s4UlCU-^a~*K(|B ztM2S$Qw$A{FND5l<z*EQ9HxXu_F9v=q%g>x6QGHr{iEZ5Jg zY0)>dWoas@?t%Dx60hO$MbMua^hk5xnW5_Id!w#ITMj&E;reHruKlo=^Z5?7uwqjT z4Udm0Z&M6U{aSRY(K{`w)i||3c&a^#=?nWd3!i{^kerZCyu4NotBcoiyoSf0*0d>x zr+)15DxWoyZ=|{!yvY+^+Hmm(3)i0)$&;9dR9K;I#e1ls;c>qPHpTGN_YqGna!uRW zFU+&2-r!RZPk8#SR_ME`UKwChj5v?ignrea2b$75i)T-|!FwTo#qmPxySRYb2P%R3;Re85}n;inwx(qUMmcny#1*NxOUerj#!4ffQRsE{BfO>ujb zh3l`!$%-$nx^R(N8m~1&!{dwaxzzB~&&eMPC3@mp8&9o+!zt^D&seqcnyz_YHm{uPrdfS_7(~0z_krM=YQWXe)Q*t85XWzOB*LmN0V-zpw7T+ z+0gL#x3+kHjQ6aHW5aO`Of}F)WqDo1L-u^qGFHl z2g_R^o~_Uy?bRPaZ8^%O=$e$!@OTaA^M3!K1*bdfV0lx-|D+LV+a<3Z=ZD)AL&M|x z^`T?_#58~1>Yn-%?)RDL@_CaiT>owA(Dw|~fBPu4ULm}{$7^_e3*PSx&z?B;&Yt9S z+MeQ`+78nn<)D+g4YTkO&;(!0N{e>wsXni6Qw$A{&+Tec4A0Iuc3!BhgXNbZ}tRq)c)}fmN!5=yjEg5HUC;i`B^w8<25|4pL^$r`Ox)C+j;6j7`!6l zlW9`Ap~*DIk(oBdi1T<4=o`LDLm$zco?0T=`sbmaBidWIp0_h~bJFzL8>o-)S~fI1 z9^Bog7@m559;e7i*G);Pjs~yxrvRN+vYLhK*QnXY^U?|9o$BA6Y>J`b@ySDMis9J= z$F5tNnWlgH+o7MsBiuH+u1u-8&rb1Ne~w3n$TI~@2NrEA>K@OTyIdv{JwqbgEQ%?E?GL%iRq)O7MUKSz&x zHbsvs(C~OJ=uVRJ@r_e3?l6z{o7+imj zwH_3vW4{n}c~6^iC0@hhhw!>HJWJr%s>f5)StCg#%S$0%pjZaFDScD>wcR#F*UW>4 z$HSoC6PSUPm-l&Ul^DD@;tyA6rhc_@xRj0f{s>K3Xn0(|<~*vAk^a@k*UfVM^)BAa zO0$G-b-lp48yX(h*F`*)ho0^~)S>5R=a~|;+z+C%yfNa}8Wp97FFkQQACK<{@fsfg zFx93Qp8A?*9bAAqJ7n?HQ5k+sr8QokuyFmns#7bH%ComPdL!qChR2UBwkd|E9mlS_ z7DDZnFW4)CcWY3J%FQ=BSnfbP=DeM*?mp8IyUC^)8Xn)a3a|Hg&mbI|r)6e3zEY%{ z<$;K&`{qw8MJ93YT47TR4UZRq{$y2udUeGVH_P?c>6^cE(nNPUyZd8qhK9$pL%*PG z4!U>IS~ttHA|CK}AbnGPs=L8ayzj(ocw9ekSEml6L*7@j>*r5icNw}WV7lkM%-~MM zl>$zhETX$30BdT*dHnZMn__tC&+AZhVR|HaLzh0*fhrYgC0fwIa{byecWoKErk3Ey zG6KI<#%p-I_!j&=AMa_yu~j=2p|#82aOv}uXI7>~UcI-oTtD{)J}pO+9-LyIx5K9B zn!?cVcwPPV8}FGA$7Z(Yq*-TDH_JbvUdR1Ud1%HR>)es2@!d0C!{fQ&v&@!62$%cl<_3Q1O z3B~AYDW_XsizPRr>6Y;W>@3%>2{&?8q&brJit@vItD)iX{oC-lE8bIoUGzO3NlUgE z?bfeF(amensokr)Sgs)6XJIsz8y|6Hm|;_N%|vK;{JR^Uf8sr};n>)9cA9^{a!)Oz zS#4|4R%`CN{17*I8t}LCtI?mn+1!V(+Y~+C1{xkOdknux#(V0oqibvO(Xr8KHI^qr zJpUjY%~dq9mhrGn(KX|s;qesEU(OXmm)8&R)FWbfvc!ex^=&z|f-h}~5$Eyb@Ok*q zMw>P+uCY8N;x*5P(-v<+waA+`#nAA$UMEVNpi*gu%dNjx7U*1uK1~&D;Q@$Wn;S#> zcdqO1jy2Ua&!FM)tA}u%kM~TEW5-n~O|?T`JlD6VJ`HH(xoH-jADV_yxRqvVt6LQv1e^%>800+J$0-0_iscee%<0ujkv*cfR~$6myW%0#65JEO)=s; z?!viYcz(m{dd2cEI;UwljpaV@%r`57?#>&fmAhn93=NO#b*0q9;dDcu=AJrE2G`fF z-{E5PL*u&Id@)op;yf-upS5fR4PVtoW4V6a_`7m(IxItL?G&!_hK9%W*Fx%4<*EBy z22UNZA%mLGb2-m?YK0j*Gc@1F*Qe8GK6HoS+&1DoUiC6QPsV#nICfIEN_6$raP1eK z`_1ev=+e;%EnJ`Tvh0m%{pgh1`CB%{(C~QRBb#D)>T7W{Z567tD5;$V@ARN0jS5I_ z;d-5}SvQ-|_gnn6bzkwBGhV~vbMU$|Jbf{@?I()R<~avxEPnw{=~@XYoav$c{)F%Q z@fsd~4}Ho@3cWpHg2wWU@W1iePG4jmqc#3uQ&PlhczgqV7F8`lD^{DXv0Sf_)vk+5 z+y9!R&2WY)hK9%gK>vGJG`;k$nx^N!{PNbcRBWJy>(BS=%w}{|8k;r(??Hx!$E!cJ zDTe1q_;>zMoeD`hYx}^@1hl8+zL&Cay{4I*xD~bCs;ns)Llr~Afy(U|y z88v9JRRcBswI6k@1HHMnhK1|TtJ|K|bbhslS|(g83=NO({DpHP-cvuXZp@0L7fR0a zyxtA2*LE9nz)ABYo29k-8^4dmYk2%2^y2~@G-;kS8q4*1U+rp@rup-)(8gp5RSXS} zAAw%%q|(zFHft=`YmSv%QHBmHwqCmy8mbr?9@p#6HTqnWeuy6B@p(|Q6Aj$c!osgX zQzEo2?H|}t%aAWrF*H0r^_xvGJn!IGWnUdSv;0g=KgV8H=}L2S7-r!Q5Koe=10`)n zX=zf0Du#x~U5P>!!&9##moG~_+TrK|?FxAH6Wyq9&v6$11o2ceI?`G(leB3mLls?< z6dE3{0gd6Q*Pv5&JLwOfU7mV$2G_4G+dq`0Ey`}w^5Xhz#ChBe{kn9eX-40}8q4+9 zf?xd#G-|Y4Yn(MyF*H1`zsB=qFGG9eIq7-58+-@iHQH6AOWl8ICo+dBdb~R{JboSe zjDzaasFEu@H4ML&>OqGLnr7jbp&636Gxf92(x&3IW@vak#5YtiJWt}-9Z4I}$Y$F$ z7r0C4O`GmnX5o6hzN!bh(&CY;wAFa685$n%j^|}~>gV~20*&bz)IZg059TP=hvt2^ z&cgLtf1loTqu*<7(hgy6hK9#;=L}U0&!ITBRsOQHlJkPba=iv%o_>|+!f$7^!c9UI zL&M{Xp)XjfJe}X`p2qUch%cF6g$`_YTRUDkR53I>z6g3(wF)%-l&2cYmmywiV>E5C z?2%TeP^e;Pc>Eaj(<(Qi^>$KEy~^0meQBG#+bx{nI{7Pm59-%-mv;9HKI_J7csz@L zsA72Tf`6CE&1mmL7qofcn{M={G4l>t_!{dWOLKVYP&s(D{ z&8fWYx~BX5PCk%+xOmdS^%{(QxA&$iv@_by!l8>Ra#4}8T=(pkEQbF6O=#;zp^Bm5@tx53UDJY&?RsC+uNAv84x*oPUb67Lh&%W7 zp@AQ-X!np4L&M`muy%&0KA#t@ThZf5-fJtseSZ$7ZSOv^@a2drGyBo#u1~emVWEnl z;qkxJP{r_EfMb`HZB5%;{iOO*%QL zFI`tER53I>u8-SiWL4V1oszO#zZPBkQIqaFoPy428>$!@9$yN5y*zDbg6f3M24D7i z2(7c=Z;j>pxqYDH0J`$s7p-%C4Kd&oOYS9w|)6mEDLlr~A6HhJH6}D9#4a4w%MVIq2cj5(6^~jgWk*?LRnrF@o(qq(x^4T z^zqbC#nAA0Kj=Hu?MR>B@~5-FN9`I;d#=i2;rjJ$_1{Bit{PeC@SdTHq2cih9YPhu zvmK6Yk-ihXaxo8W0-hl22>K)}(860H-m~6NTGSm#AB+iA3=NOZ9T2J*p3QLV-5#B2 zrL*~IUGVkMBj~~2K^EQ(@n#c-(t4kR=z}StilO20{v&X`WjyaLt3mHw4fA*!ydFGv z=Br14wh5ypW{U^EdUU8_Xn4FL^yy01q-)>d zJ3PZx@cn1&(crBm=#H(SilO0g{WVhmVkdg^gpJk*e>rpnU3W0p!u7Qyu|w(P0wMJK zFnrI7*YNnVA)$)lSrf<3YTlVnJY0mvfZskdg5ItaVd1qAf1P+3Ewmtl4jvw=7#bdL zgS9g}E8*C?!#dMshl|tF;5F`zpxtIG7Ov-6$UKa`zM{~At3wq-!{b%vU>)N5GmD;<>OWe`95svhmw(?Ngq3RMgZkB38lYe7vKo2(pVd2z%~G8 z?C7%eGR|Q`!{ZfJger!oo=<^v@jQ2y>v;%rOM{!7S%Zb>31-54BSTYbnsae1d4Irny4+|;o3^mGS9Z;hLJi{>A1 zJ<9R7Xa*hqU83^6xH*`5>sTC(#ph_7FD0@(i1RV^Rv(VW;=_Bs|L<`^9=-l_VEco? z9zT|2J_qm|5x36g|C^_=4ti#-V=?}`=fcEUAM1QfA3{bwlny4i<2`4N=3n`no`m!c z@;MlN%iEu$;rJ86u4#__vm#4Y(a!n=8jH_`f`=og zU(k=``*1Xjk9GcLt_b;gf5ySN)xGn^(XgH@_smb9qyEqIB&2LTda%T`LC{*~z|pXt zEVuZZo`l@{edu7Ji{Abm4eQBpLb{IAB6r+~%d?qJ>zp|nu221De&ip zj1y9BNbab+vj@2TH-{Vz<71t_nJYrd*pD78e#$#<91ZKqa?Hv6XL=H{Ix~sQ`fDJx z);VxAtS8GY{-!4($Ft{*O}&4Bmp@0tdNQ1l6a@mKF0Isa%g-}MWATZ-nloy{_BbC? zZ+-3@jm2l`^MI(z2jhH9z14@KVSKE5GgpMntDh^j`X=wZaWt$a%U$NGvz~;k>=PKf zb(y!nIj%*+da~T&Z+a54t5EJ(dA_$lN5gtDoDepLjdRwHDqp@I#*qp|py#}cyi zW}B#_75jSma5NU5oQc~+RjaKZ%lF}E7$58W&0G;uX@1SvvW@yd`>!;tC(B*zx|^Pa z%#COrJGOaWFMp1P^<=rl-}EG;)VtQPw2rqwN5gtDoRBU%T1BO9AD3q{pVpjkG+dvI z?S@1}p6`vh^L-eN#m9^zv&&~iHCx}q%ZH<3e5~V|xgw-?vbM3g%6aFFqhUQ+jyakC zOiw~ezZ??V*WDXh>l`>5)|2HHf76qYJP&8Y-hbP}%b%lRJsD2OBzacU?n8QR@sE>d zj>h7Xvfj+7qqpOHOuhBFb2Jv8+;3+@C4Up=W9qFw91Y`R)tk8@WM|Krv6HWR=Z&Lb zJz4HDSDp3r;B;-)zS+RR}di!%UtS7?>VRLwBzp|ni;sCMAun(4j@tgJla~)iWASO$eRtF`(iz9{eK;D%$2xyASA>i&vNl#( z*cIA;rC~i;?qb*7^dzL$!CkQnb9VOf=V(|@mRtNyPeSbJcgHSE?d{Leu$~Mjq~@hv zQBnSJc{cND%?U?i@tIz1SJaUbaXzNr>ci1+eR6fU6xHr^8`uA?5$nTf7$57nX08ZH zJa2bwgKwRn{Z|^+ljSaU-AzwI!h-h1p1!K-n0o7cI2y*s zsyA~*2#$?~KeYc!!+NsZ#jd;QNyzoa*JAU^-u@g7>&bG9zv)Scy6;+Sinpzywa%ZT zVLch{$-_T+ZrSl})QMWHFs9X$%`>C1_?U4*s*e8_^?giZFCUJ^;*-$!Eo$d7{aC&a zN5lA7=WpgpH@z3T-M%gz$Vg8jDZ!zmwYM z*NgKp_15`tG>nf`Z{~^+X?9XqmN~Vc{Z|^+ljSaB&GrA9o>=$$NnImbd;4=VtS8GY z{-!5B&nNSBZLZ+$&(W}+3@4=hwxss5qvG;x=F^%Jj)vYCYnJYrll=pSr&FP&tj)wJQIp$>kGd&3zkt2=k^`L6dTIayg zu%0Zp_?w=D_-@POs`#y84`;xZW1niG!3;$t35NX5lL_CW{j zUOpU+#V296Ap4NV`muZ;j)w8E&fm-xAzx?Za1EbS2HJn6VLe&yV%OdDBxGRXAlCxb z;pNZKu%0Zp_?w=DJhlb7&iZ@%b2O|c!wI<(5oF(*(cu}#%%?Rc9F4_i<)^&%S21xu zrrzqq(QtjXsKNG5y-Hwid>=-`_*nI3uJAi&iy&9*dporMO2c}x+{LcD=}E}K`S5pp z`*Sp`C(AAVrY9kh^MYM>bCrPBI)9Fa^<+3c-~N+ZLdpw8?BB&g7}M&>(O7(59gVP0 ziPDed`*1WCpYMw!?2cA(KBnF}AC89cvFgoS5%Q~jge%MZLeTyz4eQBr7rXAJCn1=d z3-kB#=V(|@mRtNyPy9XZP=xD>>g~_bu$~MjWI)RZ`>v&Nc{cND%?U@t_1U%5Zr>0a zgt_y57>&ipj1zLHWl4MamVsVA91Y`R9oNhiK5u`CaNYOy&KpO=da@jIGXI&LgdC}1 zcQr|u4_fOSI2zWIbd3TnWM4zxW75= z%O1t~n0o7T=V&ZGH7`5uty1Ln%*WJQeK;D%$Er7TMaZ56C0&!R1Va0-G^{7fUFNE@ zp7LT`U_T#JVFWVyxP^d#g}Oi5R#e%}5Z4eQBp{65d*`R>T__CI&CVoYmJ zI2wzOc`PB#)>g4g=`(owa5NSlzcE$pLrUt$@_jfO#>YB;GgtUKZ13`}aUZfm`>!;t zC(B*zx|^PaWGY$3HF9YNFMp1P^<=rl-}EFTS>r0MzWu%ZIU3fJ;e-sWRmGldbX=az zd|GqD(O7(PCVski!YG+dv+G&Ssfo2PL7?;5c_jE3>Cj%((M5Ijd0&MRpD zm4@|Xxr<$Q)02>ATdTNgC-L^@Xjo5{Tl`H=_$R30^6i}hTI>8d8rGBHgqV3FWX!EP z_U=g%VN9zhM`Q6xx4Dk}Y<2xuz7I!Z@%c2Zj=lfjI3H7QoexLD_*nI3t_X4Ut>fyl zIuW%0O2c}x+{LcD>51RHm(_8dZsqOI(XgH@xA>c$xPNbd9oN|?Z-0)4^<+39pS#wv zAKo69XEUGHoNzQ;pJm^g+E34ZhyUj)--ppyeA3=&YA^mrKb8&bE#J0H`NkXt>Px>Ah!5cR+Q91ZKqa*My|NyxgfOxZ)|_xO7N6Nun%XaA|KRa4^;RE_#^Qtd+mSbqkEyr%a5RjM zRd41B_c?E9>YA|kz1O;MG^{7fUF^D>o`hsP)zme`>Fv+au%0Zp_?w=De0kK=)#ULz zulaK{tS7@g=jT6p*8i@n|IPA$&s8?hjK<<)#&K`|(zf=t(dWHcwuX08aiysx#Z^xW%SdE;nUPnNsbbvHc;3Fy++l|BCjFMp1P^<=rl-}Jd%L#wi={7k@@(eQnm3My>yx}`JNw$Vr{T%>VKf#WGfv3p zT3ze~YHjiI;b<5i>$qmFJm-=N=cHHOI2zWI__>$&CUnWM4z^vTl2-eu}mkB_Oh=AWan z`1mC5V(;}m&d1bSeK;D%$Er7Tg*^i4y0|Lt+3J-yj)wJQxr<$Q)02?c;4ZFLg}nVa z8rGBL7Jt(d_i;saaV@*C#cTc?4eQBpLf9OJjqGNR`nVixXU!W&WAQPM#cyI8d)jBb zob2Vp(O7)$FYIY|)tZ81`92&C<71t_nJYs2OzGz8vt_wg-Z&c8ljSaU-AzwI`uFYW zT2*2?M{i)mso_rrh!}wVBX0GtN&Agtj2c5k0#?i2zEO)W%Zh8{Z zXmd~3(7Thp)`g>CJy~w?H$4gIQMHfjqfcKie~yOrWH`PL{*zlmirnpM&$_FTSDrZ< zi_f^zeeFFzG{&)fACAW2vqS4^uX?13$H&xL*O8-Pe5`siSNJ<-Y+qO5FHOAi#?i2z zEO)W%ZhGQ<^GsjY;OmXO{5cxdljRnF)02=I*ZaDr_YB;GgtWDO8dF8<*eeh zE*uT($#NIF?xrU)cWr=cr6aqSKS#rQvfSctdJ=Nr?f}<}vHo8E91ZKqa6;&V0ro2; z{5^R#^J&c+M`Q7+ba{Zi?bPfZA5(Aj;b^!%k8%yNm(Kh7;QyY7tPi7Me5~V|xgsR< z%K@%{Hrc%L#?i2zEO)W%ZhGQ=+P??5inqw><x7h3Pc94DXjD22t=4dQFi=SeRA`jwNz7I!Z@!9)ekp1KRSdWjXx2_{c z!}wVBX08ay`e2ajbvl<<-Z&c8ljSaU-AzyYP4n3xSCz{Ly!<&D)|2HHf76qYbgu`w z=Cs)F<t1<7ikH$8Fh+?~O$(GJnepQB+tS#I$+ zJ@I!m)HwO}=~s#W%`Hd6dNLfZ_q&7bhr$Wg8lL~;+?qFz#^TfbHhi)s@c5W|s}DzG z@rlbPdt4l6k2N){E-q^1!_@QZlbAUq1a($isIlUePmYF}GvD9z#C;Br2D{R|e(B}U z(Qy3P=g5EVW`5Xl|J||7JefIIj{PT|nfQZV^w(62iAwGI;l$<02`2+=xqeoT4=SQXhNC;n?u!zw8A)z&>E9^q$z0uY(W}A zQHitzwj=#WTT+2k2395=NJq@6HLx`qik^0)3$P0rM%s|}q${v1>4e^)WGrwj>5iT* zq!+Lk8HYz>$yDG}(wB55-AHd>Z_)#!^dkd-12LoiWDscyY)P7tA@FGpY>heggU3kV zNT>#o;batW6d8=(F>oD%HWZ3+WFl}PRAa~#j57vpEEz$@lS#lyWHc1L$PC~NvVu$} zJxL#6A2N%~#+;@Cr;_#PnL*|O=V7PeG%}Mc04^YN(Yu~(2W}?|(KC-M0WKjs@Mt^P z58O|dlR0EQSq5B27GsnZWHoR#X0(#5A(MfV$po?vK2w2HF~=3~*bLkZ)he=)YyoZ| zYtg$6uItd&L$QPG2JVJx8`+0(wxMk&o5)VG2e^l9g<=Vb1;&yyeQU3^@-xj~SgM7sy`VUb2f^g3o^7e$4Rwe1X0~0w_L_)WFn2fRIY~NIsKP!e^3JNQXJ40HzRv(34v51NsU1 zgp@)WArml@kO93xLKrYi$c!F8AsaB8P!Ny8gkr#ALJlFlkWt7E%r0cbC;>tsFc34! zDdZNC0h0+yguL)c0Zf582EZd27z|Y|A-@m;3=#66Hx#aU(So2TC=>=3hALDjig7~G z!h`}sAt3@7A=seECX@h{5Go0ZkVWtZ`U{bQ9djxMEGERDr-a}HI)xfSaUn`52`ni% z&>JJv2i6x#qsJ+f1C|pS;8A^{Ik34tRiOy5h!8GR zhfgtJG0d?NJZb}LLsdnnDbxYh5vrlL9$c%V#X!+OXbfx&RXw2@#;J!^U#KNC6q*2= z2z8+-C$s{#5_$C-2eSv*3quxS4p((Jb&`1~npXR{k zm}4(^3EFc&?u zgayC_!WKN*EbIpE78VOLgxSI(;38o@Mp+^(2QJ5qmI^C`@xbxI7-1EBCITm7j!WRN z9=IN=Wx`rv18{?|61|(?x(aPI6kCMt!0k|N5_VynO=z2ib;4F*2XKe55sC%EKHxs# zgs?}LCoBXm6!r@TF{j=WETw{St&D;y9speDqk_q=c&cwIPz9=C85cvQH7 zN7se>!27~+!6i`P81R^I1f!e~P6JP4Mkj?c!cO2$VViIcKD&XtF~<||xD31u)hXek za0PfpIE&tEa6N~19*P^nZQyOFt_k-r&NZ~_!X@FRa0hrtxC+Hl;SunW@JVJL2$J{|?KOH{2=9RJ1R0McF)1*q z_)&N!yc9kFKL~Fz$|vCq@C#=2xA0ZC3%o1b628OdKJY%~_z50=fPbL+Ec_CP_!;dR zdPPwZzr*5;%q=DpQ;O+<>BThY4HScc!D0sVq!lv(Gl?O16f71778bLL zsl{|+7GM@JBSy(4<^blvto+3QF)=W)m{80GpQON~m}5401ObDf$}Z*+^8xdTIni4H zuDQ?xp$HMffMHM-5W_J}0kmK-uV@ns0t<@yp~xf_1r`;{iA6*|F*7i;sEEZer^3L( zVl;Y+ic!EQv8os$78C72yI2Cf(PC|2ZBa!}lvoN_O00uNwZ+E3#$s79Qgn!=fu%(! zMkyy&1Xje1%8Ql6Lcl^|s8|I)g@J`J$8zw90meX8L98a$0M-yIqqi1ZtDr?gQAex~ ztPfQ!u@T0pg;ravF4h$r02_!kp(rIb12z-8iA}|lVi{l=v4z+Yb7~B1EcQiDGqDY@ zjo43YA~qM>0o#eK(c4!X3LGl7M^78E6R?vw43CD2V}WDEu3{^(t=I+FMeK-Cx`{o3 zJu##1VlS~Fu%TE_>;s?1z{Z$kH+T#L4uq8hqLVlQI6+(>juShGoq?UjiQ;6;X)JK8xEwtb#A(23;tFxR zI7yrioGwm5?{aZHaJ@JaJ=4TFz&YXuJX$Yq2W}VVi&MoJ;ymCyaW+O-AT9)^T!Z8;Ph#Ld9XP^}ZUVVren z>%~>#MsW*pi?|kwIpQwhF7c?iQ=BEv1p>Nu^Z4R8n&E=8%Gb zK~fs@q?FPF(@XjAC`bwehDjNv6jEv_12BV>7Nca6vI4VWR+*)2QUYKCNtCj~#|P*m zC4?eC3Iqm1l|{-a^AdC`KTTvC211Q;Uafg-&W z4h)w{Nrj|zk{{4dijaz6PGP_>sUmv9B?YKRm861FVW|YLgj5W@6{Q$pj1-9;MREWg zQVl$ck?I5MOC_bEQgO)%bV_!NQc5ZdEQ=YHmdZ&spiL?uRe(!qsWp09NbP{_q(OKzP#Osw zDRq>ZORc01zz$MdjM7Q!3has*b(XqGb%AxIT2c@A)Cbnb96Q0IFR(9EU8LSpKVUzp zJ9-DewFg>HC9BH)FMrsdiFO8GN zV@@N1Bc;XY86!;sPLh^LqolFY6yOwTB6=4~tAVSfspy#`%>d4j*5J`Yz5;ziboCA;Lz~xZQla@*=fGebh=v@WZ zMQDqmSR<_mu7_%sv5g<4bGi<^E`3DLE$IR9 zf%HkbA>Ec90v}5E(ECyP0sJ97M$ZH38St6(6OVpKlKdF$rF36ke*_cSJGSH zTg>RS^iH}8yeeIiKEUTX@H*!B3Lam8U!Zy;{Vjb3ewE&%_d8rapnZhmr}PK-2deK9 zE`RcOjP*nMEd7#*{2A>V6wjoD@=vt%asv5@^ju0HKbI28i7_V$D9KsTlTh{r`pVg4 zS@w~W1Cz^1(VJBc1P00}(Bmto2BwyC<58d-3=Edj$w}m7a#~bN> z<4XF&TcWr2?*XF(G&N;WwMFb9-=vcDVv43IOUHy2#9pk;+3w;Tivf-09>0ORCB z3zW0VdE|V+d~!}GQp=&hP}w1e$SLJCz%+80TnKXt1_sMz(Gx0103+mbvP~{17XcQL z!_iw-js`}{#n2NWmjITKtKw0#TpL(hw#$X(qH+{4N-mC39CAruNz6!?R+zQxA?uSQx<)Of#a$C8v+)Qo_Y%RCIDDC8qz>b(vd%2Tb6IfHOE_Z=XZD4K8 zu^l{m0((N$LGCX10``(Sqqh%SyP$Q2qMtkvI1s8n@(_&E2d%H%L+&pR0uGXUL(xhe z0UROEkcZ1HoCqTwB_<5d8NDtxJF(I#T0oHaFZM> zZ;&U+Q-M?E&GJ^vX+3bgd;~q42r@=2#@&Vuhc`rtZl{KJ-8M$OCuLZ7^SILLrvmUq}bBu+@ao};N-11-Y z3E&C&5PDC+^)T8ID9*^|f#;z*C11igr_fHz$KgnwBozDPYrt#rGx@5#N8S(I zFW-=FVosNVm*uzUxhCHM-jUzQSLEyRJ>Wh0HhSO6Uw~ia`{=nNKLS3Izv9ss`48}q z{8YXr-<2N&AIlFg$}{;T@FiySTz(~A1YVTS$#39u8F(3UdohAd+!+*#nSbA zlNu1ggeYc25kbrmftjf>XC;{3=A1B~h@u3;Hs_obF@RZ&Ff+AO%sC!ZQ=Bk$QXDW(5v4SyrIp#hN{;Ra&gQ<^_U$IwmDfuwX zr?}uz3Mg)vx+y>GT$Mt~FHC>geYbPRabN*zq=D9!O-&6E&KLzDoe zs!~I#i)me@HXbEV(POGdML~)|@y66!DXSQ<93M=5P-7sL(FoH7#@xwG@9${gw7g z2heDSu)5m(mG89jruP8liN>PdY0-Fzum?!hc05(U?Xn zy_Jqi7o{hrJ(X^Fls-y-O#7pvzRCcl4W@0BmdYS3Cj`?F)Yu2h7>4OE%+*gBstm_; zxH1qw9f_q5!fi0-7^RHCbPVPisf@$pjKnQM30FodQJ6+4BQQq~B?i+NWsWjl>8|v` zw3iaA#G|HYOrw>>_(_a18Pmzi5@muCr~HlS-^wKXbg{A;)78pU{A98+1JfDG8vNI4 zWh15=mD$QfWr{Kj(^<-NJjxtpKBn_g(OhMLG8WUZN~E#~%ZbJ`8a2+rGL~by9COW6 zmMSYSU7;+*Pgh~7i*Q?vIo2raFioK?83R+cGil>|%^l$DrchO!0IEy_V< zlQK=2iRnxwN!f~;He$L_q4>!bWe27^6i_xR$;wVlcPiWPQ>vW6^n|h-KiQ$|#dNQ7 z6908Vxq#^f<$$tX*`@5qbia~(jZVVZ`D4k;#O1Ew34b&3Vc*@)>z)OZlfIEv{} z%$2GfR?;y|SIqe7aV*t>8^s(al{1*0!Cc3c^LU)&xSddrD5sROn4VRRVUE4ZWlS$C zkCjWx9%Ub<`;@E7HPmzg(+kQg{N%EdiD{HtnF{%_DIQ4ZYU2ieW={UqdZogVfqXeJyD)3=P*5|oK{|9ITtX!fEpiT z8SgNChq<0AZz|V2)trrQk$smxCAHFBjJJ`;zqn4We#&jk zKpu4AIw>&K#ps>8ohfni6LM{izp)~6yIoI6|6jF@g^;s;UL`GB`Wu~*^B2BG@*k>g zWaWRXc8Y8}l-p>9_DK$>$dr~Y#z$!H7@tZCRn2Yuf}GGWm2^DpY^;QNrnF8cpB(*- zHIP4#O((@i)#k@qwLOI-53XY@hW5~xDWva>TE?HaZ}*I?Byp@0Kh~&eTS++=XX6XB z-}75dz8=qI{Dge+%qkMwA-6FQ_if^~f#hFT+vtm2qvr-PFJCQV8RQ9L7m$6IY8mq* zFU(v(D%GoLypQ{~UowX@Ip}D7iR@W^4oPm}WPFEQz&VbTnC4)7&dQ$_OMKjO89i~| z-{0cN!}T?d?yUR)6G?2r8b%M~C3byDkrp+K<&eue^dou9)r@a&-^;)HkfhG`#_P!X z>%B>(XAZ_!$g3+fB@52m8J{5gK59(5cCzR7{IyU+viL(aUMDjG8j%8hs~QVpnNbm5 z#Hv$n#S2k*FwZ;|=7i74nh> z*0#J(9=^3BdxI+*i({Ft9qh@a6BUh)$nm$18x9VtXtY88{`QpN&7%suopjyu)X?Vb zZ^GJ1<qQ zk@LtMGT-P2_5Da#+gLGVrq0x$oY4*Wa=}x&_UUDfS(xY6r3|x2d>NxP+PC*QZk}oH z$%wupUpfkI@A^VXnRtLd*m)7w^_>NFK%Sz*pF*snd^Ix0P>}pA(nah9+K0@ z(_1aGw0@dN(vgz}uC~-Yc8jn+*eCU^16Ge2w;Z zT@AKZ(~q2gnG=+%lqb_maS={3VFExJbjDP?zYFsQQX%)xDRY(?JP%AdN;2g1Iumwm#i?Zn*1yT~8M4yJ(~PDb_}{k%GvMh{p>R?Y((F*@GMs971<>Jwy_btA6Z9uT0xPSe`p|22q zEJ0q^bSB->VGUV}{4m#Sy6nR`@)WuA?45M}ppS(4z=+%1>CNNs$XVpUi_G+P;0tm9 z+4ou+eZB4}S%#dfUrH}8UQ8As7j#)pw|XxlbCErrH_-CSW|4Wwqn{+wWu@lw?|qBs z89Jf;J^p>w3p+(O9KX%kDkhV*sC$ z7kWxRmMBj~Azw8-r(;(8@qX8+i3hsC z&HLlw?}ee%?#W~t=BfFuB!pYWkcr3@GfF_6VG*Pya=!MqaHZQ>Lto@qh?iMd(w{NAOd61K(7IKR%o)DTC&H44GGT?Z7sDb%qP5&7OnZz!^7 zizP4SKe)yh2HkpKDU3YkQw2y5zhzE`%7@C}9 zW_1<0vK82MJ!*DAF6vbYvRXM)N8}3QD?`~jxu`4hm87b0BdHu^$8yP49j@;xLs`8& zdmjp}`C3?5nHft%VC>Kimh#BDckSU!<#m<{$o31`!MW0#EMHOc#~L*u-iA;IwEHfq z1^deD=nu3H?^*|{6zxp&pgrn{KfLeSffhrq{HinjxOdCK`1|xuFn{3#OHt%4le$64 zg)Wqx?>djJ(5Y2E`Wnj#8yWze`i-W~k!>>q!TRh-%HH9=Ggb#b+fSuMkTYND;d!yY zsXg+>-#wxE7(eQa{B>auNOY}CU*WzLBl<$F9?j?_WV>8_pz_TY)Ee_Rwjl7$e=+@x z_Lx*7c)Kj3w~)_2s0WK1ZJ;LP0c{&Vg$fDu4Dz1U1K`@J0Wou4@LQa@7 z7#1{}MDHUzl^g_C{U+0E$X?M6p;5?gdJcK_`$o{K(JsF4k^7BdOdO>L(eB=1c1AIt&7W68Zbb{j-`vzK7@N7PNau zHHVeo&eA00h9z5obN$;tQDlT{LuP`i1LJ z-|Iaa?Q0Szz{!ucFdtccA2-|A(<6_`= zJ7*BzA03VM5?-;OJ5&(F_dc_CEBDZ~gA$88L43C|dv|mCt9Ia(7yB@>`mW?D$aN3K zLQ0tu{5|aIdx}HR9$P97rY!LS@%_S`(0+4udw4dbDv0m!W$#UX?A-wzZT)%q>N|O( z&^|am4%WF;0`Yyg_0YclTpYMgt_9+IY}xyWzjx~Zd*TcrzAH8u?Wb3CfaW%hfxVwp zefKMSkL{LsanRRJ&-1JAS7qV)x{E*Pts2h%(l*O?#VGz(x_0OK>=Fe0)LriCy*vIs_K7R9tEkJ2oKzsr@ttvE(s zdhke0PyD^k3*$4(VOkF3H+?XE)0f9(R=|kN${3Bw;xhd(BC`s{YgWarI!0vH#;C}e zxYfYO$T}F8>5p3g#zX2c8Z!vDK#a&VVB{sitsX{GHo|Dj2DsJ7D9gqe-Pi=TW*Fbt z3gawW;MN=?D_djaWEyF=9dPS}QIcITatm@fh7W1!Es4;WiPY8~?@#!>PDU$0)iiF2&fyWtc9*IK`D1qqqvwRT$m47UKukVY&|E1vl_m z#0?mUn1GRpn=lHI#UmzRbmDf5Hr$F^GDaNkz$nC>JW4SI;{f+!EaF~_2|R$&hzBuc zQHp6+W{fyY!z~q~3oSg-5HN=DD8>|~W15b!h9@wl?I269eZly^A4c!x z$ITTZ^$KGoo*QljF)Gg;WB7{TRtzKaN@28I3EYZXzsC7Pe9{kT8SKn|w^Et?F0B6U zEb_DL{Q2~bMv?EKJ>=k1vb2;V|4mTkOWy2Vwr|Py#!kkZ_zLDJwEZcm;^So0!cO)b zc$u^II~sFhXUvnb?S)x$xiJ5j#HXbBf!szdoI6{?`HbAgoS6MSrT#`QGOM>I zl`@IX0|#D*Dzo~j=8{P!yv)VxO2+KmUA!~N!p?u{LB{O7+JCrC`j7i_jxuI#gUr52 z`r|o@%=DLfc9B#}|D#{!3#h+J>P6D@TrQ&)wn06cZeJubuq|m}1@j+RdXePnn%k&_ z*;)u|Y+4)-@2{QgCSDgQZ*eCq4t9%#FmzBBwV1O|vevEng zuX;j;EDJDd;bM4>tjzOGgN*+#KDqD-ndj3Tq^LdJzul2twzzedQ| z9`(57Nh7(JIT*FD1Lj}1FqM4R=Va8vZ2iy6iYdhYsuN!eq%vDm;d3vAoJhCl>nl`d z^*?P2u8BJ9$bGwv9Z^q{(<$Vf-odDaS^b|jrjV@8PW*Z#V{sjq$gIuRx_gwYE&8YZ ztIYarSNC*sD*vDUD`V!nn!P$og4YIeKPF?=e}~sgC-vk0^j{gXwQcHpGm)#IeSLux zk`Wzf6q)Jw=$=9#qAvG8GA@LAUX)ECDRzNIE$oK*+pbI@XCK!wYGTyctH)MS%MtSn z%+{xQZ%-y83J3DFYAQ4TbJTGwxstaozt+gOAnLI{l1v7#3NUJ6SIj@L#a0p&TgRw{ z#dUomvvpjVYqyce!S;Mjm&)f+f61V2WcEl$qZVfVr{}b7r0ZjQK7Nxi8xLH2vz3@_ zocP#4#^U-zk=Z!M?74f zNvGDi`1n)CY~5g`+lxt`kX(EXp~_d$Ui0}9;?YDgihLIJSM9Zg)Nkov)WXc?WSv|> z=2C_G9~m>B+3VM0@-fqq`%f8*>pVrSitYb=vjk$;5nvRV_1_sg5{S=cf8Kv(?2dXG z^-LfgY6lp#Fzd6IekG8vMgR0)8H?*tMXrMS*G!sE2HdG@6!{kFpKY~(%(-62sD(?S z9^<HsMlD7;i^9itX5fO>+POeb!4{f%0f)&Gk^Ge}B$E$%;Md>`Any6#tGHkKHFa4wm< z(~hr`RQW3EALuieyh^b*YGKwNcQ2Vsu3$ih7H0Qio(Jb(fX1JDF&VRQnz}w&WVTMV zbH{jcYoaY*v#K)lKeczqk?1K3_dhbWMLmP7$CHCUF(g?7v;J;XJ&qU({26b^I0JRo znjS%1KG^g1=PKVo`^At*vj2?@U%RU^yC0nRW)$i14%aqoVCK)SSVfY~eQmivmoXdT zRlglU`j55e<2@OR>%c`Wh3!A%S{zxC>~9qL5o&(XFP<1S)i!EjcHgw_TO4Uu!=K+n z$(W6oYGlNd^2M<~YG84_y2xz(wr#&&q+@U$qsVtqe~Z1n$$?h2j9Qr8v)oDPMWQon z^ZOSWvoXe@y?w~%BQ^MVL&k+s=d_t^$+k7sjUtyt``aTSL`kS^6gd<12l|AO_UmdI zwJ_8Fs&FXj?)OK(jM+Wc%(`t!8}}Og{!7MUT!6@IZF$%C{Yke@Hhi7A%I8pjk;r~T z>1=1z!Y-(%{<8ig{i2Og3$yXk>#)A0{v(Btmt@TDU)1;ok=gyrkyTt*B1|KGxvl9~rYT{NGXaNK`bIqk;LD!PJ2K8c_Yu_(8&A zJd4OIHYd!-lU%P>lgH_(d=vHeJ6DDbs!`pjg_%D|nC?lw9Qxx=WX$@zpQ{(SpInvu zD;cx#&x2}iWPAN8eEg$wKD4_Z%1=D>=m!L5W47O;T**^XjgQ}C%=C}-EI=k7ug?9U zj9LB1oGM6~9;(9YU&dnGkjQMF+0U&incDt0kB?CKGU|`5SDE;iw>D~F)_?bIszSUQ zWDzaQ#z;+XS0s0~+VJs`j4z;0HNHvY(`etay&(CJ_s5@D43$y;s$B)hNSiEjS_8BG zSk%8DY4zg=(ZY6^-_tKYIc;Zc)WU51Qz_hr9G_{$$3H5w*qNw>_9QIu8xi>!YQ7w2 zN8VTXMYJ%h&-+E}iQ@g8Xkq5B(qGt+aQ8p{O2#ag7wy-8^npWrIAC(`V ze*aRoB&lUpqZVfE-}az2X>++6Z~ro80x77xm}c^h{I8Sa`jD!US)l$joORDLqEtrAGzs zKUKbl`afQpt$!WvW7NWI%-P)~Rv-J?mybVX%+7c6vQ_$yAH2DK8ME~UYTU8NH_?9n zK&;{1+}A{8*5>m>k1yfcF=C8BL#!ztTTcU-J zpw5;y^Yo{Wy(S{F*w|4Q()1yvp71zXl~17lyU#Z2XMcE3v@r7_z4q!TmM;`(JQ#-WSM?qw{O@}`yX^5rr6DziD0Zcjf44Xat6&!5Pc`4cOvMRm9B z^x^(Q#_ay3b!vpJ`hjx%{zb;@cNR5XUSu{FYQNdqQmvCWkJDF~{eINQ^|iVDP%r-b zk&IdYJ=*oRdGXV7y#LCW_1~lEx6B7VmErwY#_X97nYVl`RTWSE{0EhPqkZsEgJtk_ zFQdq8&NksfO-rjcW%&H9jM;dscO9LjL0>OE9+NSfV|h5BqNV+4Pd?uwV>ZvJK9@jb z_M6N3^`-SLaS!=(6;x(phSs^C>DmTA<>Ln#v+;aF>B9P9y&n-R%*GFmFRj-F=wI;h zgN*m1PWAZ-A|FEg{>D?y`J3P2G3hF^K5Htw)?B3E1KxjS%=C1;Hp~2X#k*XOjQKs+ z@ZIL5?~k~@@|18o>Kwn@)pD-xL;idQl_}b*^!jWL+kKOW%=Dic?qJD3`YzWmW9ENC zi~Ka7o_~w`9~rZ2#Pf`NmUbN<@au()#phJ~Czrl8!Sc9mS^k_Bm2ac|#S2GTV2Gzt z3$x$676nFIYCI~#fB%v(8!s(>J+{_?l`NvvI!qT%-TwuH{7=IcXDxQ;FLD1P;~l79eg2Zj>|DOC`E1$wKAr3TKaBbfw|-fC7oH>* z4b1vr&(>cp{ZAd^{ZYnjjwMfuHGTQl89v`4<1MJO@tC~y@rsi~gGt>_c%;M zK7yK?9Lr5tXQdM@{0;T5e&Eg$`>%}I@1do=0_d}`h4}BGGG_ffpx}8`fuoj4peud0PnwAIP!f69ha4t=a(__ zlaaJLy*u57`$?7AoXIG!{?ywizfoki{&v)e-gIKeynOwwj9Gv5Xwr}NNz2E7Kb0|C zzj|h654!e?3tzt~V>aedpL-_qKD5udQIHP9=bnko=6_nPb*KFY9_I5uGG^^LCe@AZ z+ic*IYp*Q7=(Gw<&*PC=cXb?VW=x>WL?Jg0U5ZB-f9&a&?!n{-!_cS^!Pab*Cq0xSS*00K#jsNM6x%B&FN4|bc z#_Ts%r`5A))`dUo{balvb*j%r6gd&?dF&d~B8fZs^Y>IvNBt`cH>W1=6rzP$8!qvs zF|9Cq7jMrpX5)tvbz0GojD39kAY-OeeSV|Jo6(*c(~Wwq-b_SheRkBrUi4SNt-Sxr z_$TV$KCU|*J$MVz!pukMzV@YYsoS}~l5rC1Go3452OBd zF2ksu%Vwg5nLq4I2h*|x61hK=G4oMRJB*|cw2%xA6+{cO{(H9hR2tB4 z8SlR`{)+iO9G*c-&&6j_Yv7rvbA8A8w7vTZ{_Ing=c4`S;aN0f;6nZkSd|Z<{u+7b z(kpZc(ZU~4!{X+%X~$}dh!$pbe&NDA8r)_%uYVb{*gEw&y8p?h*D3U({s({7uF7Xn zzl(V{t$y_j(ZXy#yvLvv+J5ABJ|C`y_vhb5UFv+|`DM)3IjGP375O&W-xNJUuY7*T z*T1RE=HIquP@1{)HJ^WzG3$?H!C~6G(mUQCWz5Du#Y` zF%g;Fvn1y_MF+dT;`c8qvoS-E={S8spYid7jG6w-n3J?mo0nX_jM;qSnjh(OXtgJN zzEQ@@n9l6yDvP`g?TZ&JpkKbs;m;ygnfV;g7mMiQMhm$AkukfT{#|+@jYylzuctC* zeKvK^6596SBHn*x%=)SN{AZCTp*^>L4Xx_-H-Bcb%B;^W-ms1)x0}xUuZ&rrt#oz` zoptSR-hXBM3G-V;C(zT^W)dwt9(B(Du!a6EK8=Vx5AC}PCemXY;`wu}RW_skG7~q^ z9`_~_E&LJnJl&8;r}mjhwD4QZ|5uMKG@$cTqJ{Z7&+O-Hi_CnH<-l>%*OMd(r(iy?{4z(ycRB#_Xgec?i$Z8yjM;WvJ zzOeBQdhFgr-rr@+e2)5jc#&h#KC$UO>ho?Oe>S_y`%!=8%LnMkpy5Odzd$`#?(L(e z`wb>q_&w&Intq5Da~(~z@MP3k`!%IMb`K#U&qDj26RC7~?H)vArulOxGu<1}kL#E5 zYt&=cGmY*}>PfWlE6o2ml+pwG!9)wQ-x<~C@Qci@ze`TOq~8Wy;@4l5+5BO<;ODem zt@C{TP{wTjp>6G#^jgwI{`;ehS$}Uo_$ke>{F(okG1IKRFF@qAXfO8R8-0~>oWD0g zW%m0^c>gbS%Iu^3_ZJzn{&=#}H(KobG2S0#%;r1`js8SGmOaepKV{737W!5GL6w`S ze4at&ooN5;V+Bo%{`vhvWmf-N=r8L1!_4bn#!S!hgIUz48*n``X6Jk0_zzlcQ5rvA z88bhlzL!Dd(P)3#1Zd5e_C(|Zs6YAP5qfz0UqlNte^TQS&|L32aDO7>FPPu!VLBZ< zq$knB^HHbz{s@s*qCKL;8Cs@D10pi>|2E&w(OtgHxc`?itIsVj&(QC24S9Xam}%~$ zT%`Rjw&MC_%*Hv9bu#GX!HxJhN98!QUp#-2HtZk3-|3)o3hLi5@d}+WkPt1*e9p&V zm*}i>f!zPd_zmW7yZ9QN;n0w1VKz=y-_s%TL9}Ofu!Y{yY5e^lDzpAO+SvwH_ddw` zuZ-DzS`BAg_=Yr?@T|{Iy{%_jD z5z5rw&d2{UX4l`*{c^$YX*>D#SH`TrlsB>BevmQiFVmfG(Jj9M zcz==cU#L@kzl_LXXipq}pVl2+oQS*|^`C6|h%RpGNwn}&)HB@c0bO{p1ku9JFn{Ur zCv+*4BU(5Db=ow4MbjpfAR@Oyd*=El)aF}$BJwWO|9bRu+BLN>(Za0$Cp3Rb*SB`% z^)KVcn7{M-m$Z2K;zSFx-%Qo__=vm)?M;<@koQ(15t*%dXtFU6BtBTr*FVUZwg02L z^TPfLf9B6+%;v97FLQwf%h&SxD;cx-H}!o(BJV}}dVHTwMbk1OGSfeIQ9+n+c`?^7 zV|G0X+Uy1s@-5@nBN;P)^(fvI#xGgO{gsTDqt4!C3c>1Uv-s~6Dzod?m@n?|GkF2O zeyPm-=g^sjq2;N$+<(fL)qlD5?%-#=fcqaAv-;mZx)2OqIGfkMjK%jliQF3X*TC^} z{%8jx@^;kknfQj*ui`?q@B`GdZR9KZ`n)62!nZL0qHFKylG*u*7VeHZ)%Q<{JPz$4 zMZeIz?vD&2Z$i4jpE}m8M867dkIe%ID7~nKg+l!>QvwRCNjI`uIOR~2`l#-MBah= zuVz|9;Do~lE&K%a^xbO(!^#~pXyNCWzd@D_#t$)nnR5=1J9?Et3)e%PwdOm)^#;=nA~TP$T)&K&KRKV^2c;cabAKXZ=KnXg_Jwoz z8xbu$1a+3$;Rima{fWrzUS^`DGHhvB|IhqqHt$9KZR%8l{<-u-3p0OGp?76ykf$E^ zCo*Q5BXd`TnRWqOzl{5#PW8QzA`eCTkw>|}bUDZ%GOPb7!*YWqKG>jz+5Oae;si>f z(V&Hy{^Dz$VO;kf{Q4_ncF&@|zfxr8OGgjQ1G;9Q7kLZnuWgeL2G4x1*TSsNHawFD zl9Nv9wJ`IsKDG11vVC^k-^#cN>Kt&~73joWdXdYby}*imuutDmFEaBvx@rZW*~Mvk zEzEpi^7nkODy_X<3*W^2=li?D=?0tiTA2As^*x~?vulBSY&F=`s5TLq`Tw?`s=)hV z)rb~mnqQQy2Hjn25iQKdc$TA;A--%Se*Y-rx~NlqpQ*^z(cTVfL&3=6MC1*qe@W$9 zaAs&>qJ=Y2&(vPE!M=GhqJ`NxCVsC03+KD?^ObQ=)H$JeZE!tnM?`Lq_G^vn!j6M^ zh{$ZtA!%0~=y4<$pMQ`sn{xTM+)4>$4 zgFL^Cna|wiMnJcHg+b&NXdm9WKG^l#ZV)*U^%po`1dm*a1}%IY^&k0O4@T77YS7AE z@qEwST*dRtxE$(K-zzP$58AzZ7lY}|gDfJiMg4nnmw*Kid@Wk|HtL^utQcIi@waGU z*2k~5Dha_yid(dBEz~K#|5|0{i%#Kv^tFUJ7LnJZ{u#eKz$SHyMGLbrz@|N=VENox z7A?%aqwt2F(C2ZCMGIFzofS5gh4>;%`1`C?_CWiJMy27vs?8RWndY8fJfY;xHC(@p znTCqVrJ*;*vT9*=jb3If3)jjlvuNQqs8fBtWEsY&>)4c~iKuyb`}3m+@W9U#LT47|_7gpoN>F&XF~nLdR=KdXbH2w_Df( zYQKD^7kLxv4}8=Nj@>(}*TPK0@G33fE;}q1D5#~ix$3&`8(>%f$^{17A>3?bsk)U@7BKcz#=lc zXIWR-8{DEkT0~xo`YSyx50(lqEn4^z>d`IohO5)wTeR?b%wMvuFC?FSWYNNG%(=RU z9~3wIwul^p_D3(uL&-)CRAlD!jT?PoVRc)og;|>^AL0Y~LhY#*W(F%^m4AN_1cK_Qw zvpHP9Y@^r0o~X0-`_?ctIms+?Gqktr847bp1e-->_gsg!1VhOY)680!T|;;O41rm% zy7Td~jM+8%Qu{VA{LOl^7G{0+=KEk69-iMKvODTu)W0qC*>uk=@-o!#zbzDkJ*_QT z_%!MXv1tqE4bRM4nDudwjv=5=aN+%3#xAI{s8=P(YUNBtE`j!pO};R-RY5B98r1)- zj~^Uqm5*xSi>SwvuL2bA?n<>V^Ep-1D#9?G3)RA|sPjrvRk)E+<@PG5e0f?5jh|{WbXaC1W-<)=~h2Qyt`1no68K|e8LwneLs)|JmvwQrD9mAk; z+a?w*Tpo4m-nEA_mDgEBX6L1g>M|yFt+y^ix&1mos-^lgbfZBi^v7gerW7pF!SpUi^%MnwI-!A6p7i-?_Xqm z4fTA<{};p@*k#eeY>eHcLnqkP(8R~vGX9GG^J9&g5N|`M$luVOu)ZoR>E4)%yb$#_ zA5p`_J8}q#RP#Z?P>`b*V^O{2_z(=l)Y= zYqXbWR10b(hEtK5<|2jbfPIa@T)&K2eOB6C3sN(N^7_=mc4Pga&Fld@zl@8a&dRSk z!;gEnEFu>{d(8N5aK6kri^#0cUQ7849>rbd{a40p3{a+EHwe3Np5MRAnDvnv?YcmO z?@iucWLy+=Zkf~#N-lJvBLBknbHk$-tes*{MP~JH4Cw(~^EmPPmoaPe?NfTfgANY7 z{mYn*AN<~RgB##XweV}yIoj9*mfM%0BA-M1ko&zs=UIq~ya4r&D9{TAFDOE_@DbG0 zWmIq2_ofil!e=r6-`jdX8UNx`3p34OLj#~wztLR3%IsRa`($nCS!O)HE~~s4_1mrV zhdW23s1`nsdRo=40|z@sQ!RW3^B=GY0NbjOR0~_7&YiJ3_}P9c75N>WSH8=2;ns{9 zRAlBe?`{c%m+z->|0!cOe%Ma}phv|SeEc9|Hb!zRsDsh_r}FWVjMGu)0viMLs5Xa+ zoQ(EWtplN1oB34aNvMCRj}ETVxl{`uLOsV#fj~aaqgt4?u>lM8FmU!9-ri))?#(y; z?g`Du_)(DyqrJ)czEI!fMMY-)_v`uIaJ-lg@4qr;{WrN*UwApW9Phs}W@FBJ1AD>x z9ToWaQ^v2bo-0Q5gd(% zweU&IfAxM}a9!V&YGE6!=f>sw!?q_KsmSbJMwc-NZfp+a_cbc7LjCo!2EdWy?Wh)J z*U*9k2Em)2Vf=b3V>bR7wxB;OtJslhVRmhGY(e0g|6+cfRhf->G8YBG#d^#5_($c{ zsQ=wCJv=rop<0+-kKz;^1U_3zwJ__y-ESLU_JYN{|H}9l>OB9T9xQIOfr|V9?bEyr zklT9`6?q!!-)d)sHv1B(7Cwx6JQo_E_l1pA3tKRMossn*Xypc~g)gH{-zp7YTZ?2W z@=>(g3?Xo)@OCQlRMcOnRXs@CwUugN*5>ovCa~_vHs1baoR0ZRSn9*IHOW*9pFy2_ zRu6z{rv^}wndbXpL%?f)FRou@cFjE%H3)vwzWn+tW2T|*lflq>aBr?h#_Sr`DbGMi zDl~v!?_~T4btcRi3=5h~q9SLZ{YA@RPwJ`G`!FR&p7>(op zM8?eD23ie)H=ibQe=Fn1sMFVRDER7UQjxEsJ^18saE_QpMV^cLb%wIclC|JFmLACHT)ae!75E_N-rXsVxP&a<5Xle z=JEDu2qV2u@$rw!Q&9f^$Hox(>IBuoY|L|aZbJyZeUguVWNgCxAICR=l|PSDEzHIY zE)&9`M)ie!{Gjq%w12HX5@N>Bqax2k{kA=ZLuST&s)bLWo^h8)fZw@!R133va z!mQ8sJ2o1c`X}-JD`R%e4b2=0zl(0=*IyYYpicj+rjYO9IVy52+WS;!1kH^XsmK#h ze`~iUP|5WI)xx__PwdJ@u=~das)hGp{*p7B!e-y|R0}7e&W0shfOGxZROHoYuU5Ya zEFX23iX4af1FJTJkS=$q7H0j|abFW~uX&gEUm2%j{_v#cFniK%s)e_s&h$zxVf2Vc zROD4?H@9gDh2}h=B1fZsqoFw*i+xPB@B!5G@<>xC-R23^!t8vP9BKiBcRk|gD`N*7 zKfhQW0SS{+sL0PyziH?g=vRI>6?qBjzdUI)Olr4>YGF1WUjHi+tcULA<6#*y|6`wL z6gU}Dxc`wc^DWD)BH_X5qukG^ybSHzGRH#5vcpv5$*4c!)fia5`v}#-6!m2E9ShfP z9Hv^BU30@nL_*i;s7C{{d&AFF$H1JoXZU@h%7@VYJ5MyczjTU>6}_`8aq|;55G;$(XhIvKz2|cAnwwU&e<~XVJo~V8Z^FRAkm?gK9T};^x=9|EkP1 z`+2v3GlyPr{W50y&0Ctm-niFXzl>QQS+c$*JpA~Q_ZJx_vijfO8qzxbp#RCoFEt0> zTEDnm<#^QJHN7Q#Z2XgI;WX6qtWgVi{`)7@%2(>QhF|l3@cc4fjQa0QYXigDT7$?- z&|YVK3z%KU21JfT{Vt1JLCi60(8A1zuP@vZ>Xx(tExZ@=k1Es#(!;Gm3-3go8U9hQ z!1pQ@c@Nt678wtp%Uq@+vwOy4KI5Q)_Z5EsC}Y-sswYN6r*4;d`;js0vmLiaL8aGM zc>k60denKR&^Wkq;4u}MU5lN6PJsS*9`ft5%FO4C$~7KVpMJ#skBnJ=d^u$TY%cVO z_eUAC?68ydX6-+6 zQfnAw$p<1c&0C^_A-Q)xu3yGGQO}d_t)WR$KG4FuG5;W|P{`wv547+CR{!s!p+nOz zRAlB$*S(5?_A5S7kz-K5@$m%cFyb@S!mR$A?v8F;ePrx{P>8zZ%KM9qr=hl8HQK__^2I>p$!NFN2gCf-Vj%J;)O^!F6q1J* z11-D*^%O`6hR#XFKnrij{E4P8_~Bm+wD1(v`Tb;DsCcU+h|I2KCoTm;O7Bu2G8?n? zI2Q`TN|ypH%-Xzd(-1fpR*JWO8MFRNL)(JutCFCF=b_H~<6_`=J7*A?wHdonaWG+P zZr*Q*BWz5=J%Dx!*SkIZaHyKBx&Jtd+pgU9$ zL}qgiA4&3@It6)qmNC0Vm+ck{j#~=y>$Qx# zq0WPmu~71rJBZu|?I9!MVPP+K5P1mdpMu{@<|cR0!W&ReE&q5JJJKDr@Mg?^ZFelx zzU2;Dcs%Otp=$>v7J0&d^2r7v(8;w7x2rrH^%pXRLE2?c(88?#E2W0OQM)p{{$-qm z`Lm9-h206BpoP1j{`6Pvz$>pWh}<3RruQL`9^nfj4@3RNw_y-r^u@L%=WVEGK>tv< z)ZZ7hF!NDGN4Ep_V!qs8$+$J@jB3~(W}d1DBDY6-zowyZqg*8rc_eBc*0?QH|5g#_ zrscc|^;D;!;9tBFXyHW6zx`Z0sC=~|Xkq3v>mH1Slrkl_|5SMq+9&Ughls@DATrb3 zZGRlNJu1%i%b2yFu(9!wJEb^pKQd-Mf6%8`DCJgy`+pgSqR!Y-aWG|x7l_RIvQlCq zJg(}+`?bpKnpLl4Jk;v##jjs7X8O0^i-+q$UR=M7nf_}X<6!;_FRow4tZlDr69-P0 ze0V!oxdYmhT1|ws(LNwD^ErvF-!?P(>L1d=+&bm;zd#x(huQD6||FyO)JlbBBkN;)75%r`O34=LjtAZA0 zKK66@_TWFaD)+ZCW_|XtcL#8^_2>Op4@X%Zrv~Um9 z|GirW*b|3q-~_IZ{CD>-$i2Y;BKKqU-@P5&oo@gw%=+xU3@m4@f%jh-Gyi$=8LqdV zY~cP=#=)rb^okD9+@>*zTm$VlSA>Ddr7?)y3-w=K(GC>+4OTezc?EG z9y>0}^H1CyHEeko2Yv1IAaWD5_k1@I^555i$n4rW`CU8&e$er2tBhISJe7jwJl65P zDP!i_jTNzPTIsoOmoe*)!3A*a5!Z}h;GE&hK$*F zopf~~q((O4-?fZcJ-=%a5Am^$c%93bwGB_tc>W!U%rtv?PU3cvS$pvGoXG7tG1CzD z_)ngkcrE6EE`N@j6I=2BV)X2Pk1Ge5%7A@Z!t}9vk>58BFf}GNX)t3f&u3-zC;wo~ z-{q%6koEMjW|2=}e#b2~K{IEJHH+oX&Wtoi53vrsP%7M%&8f(`ob1(ZMw$yaeG91M z5N^umL&!R@O!2s4Iig+EBjypy&*^+cojGX`_Z9QsYZPFbI`&6uwb^6!VjVg(4lp@v z`5xGN_E@v1P1GYEs~y(EvYKxKg0UX5`4F;BOF81cIqCU_WAXCE{7+ExTg#`^xpT(q z#p8xG2{8TD{6nDE+_C1j`2EgId>T;MBixkDhmdumhMe^0RF1fBPI~^~SX{r@PJUxs zjcxHEFnHcrv&iDPi1`Op2{1j$c$@lQ-dMfJ+4)oPyZaw~K|J@LSPyAkA04WT=bn>Y zJTI|Ma?&7{nUfwdk630-=PPOx^@tk8eZ~A@y&0MXn2rv$4)UEj)-2Xf5wuUvuul7o zenV_ydTh^z!=C~I{%?EEscrLm&Z!*n9COl>)3GWtAJxJx=pgzoQNKOfkEhtBO+p_i z9=9B7e%ShFfG29s=0nK3oX$&9&VTKjlOFN7;<@a>{`fH8f;11SvHB-M-|UE-yTO8> zO<7UqocdJu_sIL^mm87hulr{P-j5$@%H~vLotARMeRIRXe((@0;;`%3HI|+Gd zNy|MsN}rSd>^wo3$DEV?P&_Yavp;YEo>w-fBI`u`Ih7;so0A?*yJ`Nu<*p8rfg0{)=A3Y?O)8FlOFN7;<1L{b>~lF51ty;?R0}lwQ=o66<;Dw!MKnu%5Fy6b&0)l!)y_JZ`o<4ek0dsJ~pyzQCENKbupLbz=GAc}dC<_vPo3lOFN7;<1Kc zKQ$+t(u&TC(u-{`xLSbeRDDxWv)NH*vE7PoRcwbAJg=8GQvxsId1Z4dvQA4m;=VcQ z`G;fi^3PNXFx4#hBkk_~F?w;|YUyn3*b15D)y4+w> zHm4!$wCK;NoSgKFdU86J4% zzjlcEbJ8OoS3H)Oe-!rLn@@fO>Gq5#P32< z4%aW{&q)4!^*QMe!8)HkplDD}tn+M6L)J;k z;q70{pOYT(xZ<%y&F9eP6kFw~o6nCHzz&+a4cSLtx#t*uU;lg*$BP3Z?;{BcC)Avx@DCk zaGm@AJ(rCIQGakxQ&yD-y{JLdzX8uB%e6z$vWf#t*_?)~6U+Z!l*9MUNso9ev3xOq zSJdCwxtGqXT!dLXZnoWocD-1Rs99_S;`b{lhiew|=cGqGu6Qi5yWwtP{%=^=K(a+&3pZ|8Okczow$*N>j#} zekY93i~7G8z`60*ak>>7MwmtYi?2nRH`E&zbog*TQ#Pj|>vB3TE#-*&=A`Ezj>YS( z_qV$EzKQuJ#|7bfabGjqO(hoSUd;?QiyH1+jx+~MoS8P{S8rYOtC8m1lV%1@eb`$) zm;XAioXW{*-<9q^hJqNqfPA>jLlkcvHAuY`2$x)-^qfo3ER- zA>1ss!^+tHcRraBwBdJeQ#Pj||Brr=Q#s$Cnr5({fOm@n%|;+ z@2T@lhfam-{l3>V%^o~YXL~-}ENT$-$Ktto7n%`Nz6iFZKb(fF6U+bKmXnj7oXU5{ z_U~XdUpMcZVcCp?NBV(_`MXnIN$Ww(r~?a+*aswTw2czy85fPDVx)fbz=GAc}dC< z_Z9miuTN2rcwF&VtMAk`MITi0i|s$#u0y+7Y{NZJ|BbNKLEDs`rfg0_*5%X} zw3H+6o0Fb@I2P|~V*VR<(NAvMW4iuofL=WA?R#}ig-`C$&3!t+yzEk>`CUeGP}$Ah zOxc`nCHzz%!ezE*7sO@pzMBVQhgUw=l%eI@)t{2;IB{ad!yr?(X{4 zJMZlK6^Ham{=27tr?$_ns;6#0wV|=QP7S6?eJ!=T8F>xKN{~XM9y4+gF*aIy{BX~xZxYi{eY+)o*$E_c)x6_0B z;$GNqdF}_1O6Ru_#jB$k19Oerzr`q)t)qqg|NeZObwpU}`gWs*fooz9V}IJ!vCFm7 zgZtw8zm5ix^0l^*MkPC%Sbxx=AW|>y7Grx*M+x0Nr>nu5?MVmNxIoz*u?X0m~h_Y+pQNl6_%i=7_3UWx01$mF4CjK=k%Eu7nbO%S=+;|!4+ zMw?i}gR^ng!&QeJ3%fTVp4bJkVK-MYb^gk=(}VlsSt3B^s62^et{i1z@6Cn#>5N39 z4I5=)58L_wEzFho=Ltuqz{bQAyC61FQU~YS>B0WT_3`>5aAvnHxk#$#k1}yz&wT^# zTh~Bm>8U3i0d*S_Pwax&z#4G4+Pwax&u$wC-b#Shoo+Ns?_sz530R0yB9t-}7tZOprjC1dyxvX^?u&cj^*zBqCb?*M<%+U!-@foHypCNYYqCd~xK0v#@|UlY zse_;0U;Bym;J)~I;Wf23z&l4zH2S29vasfG@Yq(bM51a@=5+Y{5`Ua`!-@R85DI4|CxOcpXg*9A10e_w#%X7!2 zh2g{#yC62~=1NH&oNK2iiC*q~8wNTXz4|~Bo;NXZF78`DE{I(I`N63BxQS(_pE((4 z`D}XTD!M1!2tO5PHQxNpk$!PFNl6{N-cAqJk9&=SGds7>4I`pzD+~L->*^r#Y5Wb+ zph7Ft&i_BbOYQStaGajnka%Jj#Q%O4xZlrqb?nyL>B0WTeanG=R@{1T@cxk&&Rq-l z*+cJ179-Nc8n%Ofwyu8am?YOFp4bJkfoo!I$<)EQ?%D11;J&!mquxPeeBlqq@m!G> z&c%I;_6;I2xjvA-c_U3+2kWm6{#k$fsq5a74(n1lNv4ilKhCw&gZtw8 z*l*{-=hZuZApWT%P3(EkeFN@W*n9Ut^NI}59JxTJCw4*nhyU&B;9NWZV?9aqb@w_B zn!~=lC+~_!ns`0djGqhci!}?d=dag1b@YA{PCT&-Vk0GWaIT%6Bzn2)uZ#>LxmUa= z4=P8RI5)C6yqAW&H^DE~ zdHWe3j9qM`g+1@NPvE|Zz1kc0d~wxhj`j)R#1p$9{=@(OhdSbO6<@p?NwxG(N?v3w9I_ffWrOb9oz_vVBK zkBl$hz+}Qk&-$%*G^9oz1-(+4Cvo{O19Fj3O8{s z?(11&!Wzp?f8bI0b7dttqpBQ6JTZaTNJ$->Yo`b6$My00Qx$_q|3$KO=}@?dHGA%x zaNokcaGiOe-}=QG=kkORPfQ>-Qc?%!+UZH6m%DxuC!Et-vN`2@xP|>63H~WnUbgzO zbxrL5@t`yPM%F0RFpPL&0K?wcy;^vl8-AHe6Hm_TgcnpjUVb#ShGUOPRwFYXlvnsc?0t*I}HGZHtgm~NgbSPrzeSC?tSzA7)Ttay{sH*s+c(U#-~7X z?1q>5h^t~@4XgLZS;1G*8Ai4cGUWjLnPHNSyw4V5*v*xaIyl!(PZGV{`=)?@_@}a& zbw;>_{f|Eju>V)W`=>(<&WL$km3U$Tv4Q=G&qXqIaIX6-*y+K2ajy=AgUFgSY0Sk; zO$+CG?ptvGkI%Kc;GaU*6yw*zio_EWhz(pH&y`Faoa>&&P7m&jdre6NzfWG!%S;?o z#lpD*(*zM`b}y^<)G8*{kQzMmIcGX!!Tb>7i3!98u8-$RrVh?^&tj(s_r<-i-`1xM zB7W1ntnYzUOzhjsFk|~!UgpcPRV+LImpK?`4H%uySY9@Scwz#vk&-$%*G>=iKdv7J z+P*jSvdTnNF|mHEIS0&THS#i@ZL3(g7p^k~^y|UtjD{UUh$kix8!4%SbM5pb(aT*Q zuWtsPX&T^Vtr}Rx#Lp4ycY@9}xzZUC!$RQaNxEYKv4J&U{VAz~bM5pb(aWvhu0Hmy zN52L8Z(<)}|6>hUe=>F4{>SU>^x(d@*9qA3C*!=#sb&=m@AC&8eqB7-%NibB#l-q? zF7BKCP@HwXYdWKee+co!1Y#qZI_^Eh>+SU5zPJ}&KLC90+~8$q_pM^#zANF3^xfiR zrOi{t41@Pi(WU8(w`D?zCngXZxF*(sH1Xus6;+>YLN>YE*`#qz+zhrw8lDy|%v# zByaC$H#1i#Z(;v??ptu*#Qq<#FU~r?&dYc?vmEin1Y!gG6Q7G@>fl`WS+LWC`{G{t zz(0uij;)J3Y8Bu8%!G2=xEc(bsD7FxbSNp9T82we>XzJ_)w4_i!CgOhEG={j16@-_SCbXZvbMext{gdE1(Yh}ns*z;+w z9Ax~yKldEZl9D=j7CSvj^!iJGp8bKOOH3iFNcBJy_q_pUWI=QxvwL`;h4tTuSvn`? zF=`erNjx!u*ucI1uXV6~tjDf?|0{vy(Ij7U{DEK#`~TPVK%!3bwI=QjHnIP)S3S?v zfOjTI;`zG$|9`0Ce)rnx!M*VF^1N?N`24bPZaa7u@^N1)d`hs1H6-)?|7(_H>bO7q z@a%Saa9=#jdhkZJt%b~DN}z>vhYT^W-%ueJVjbF@e~?_3>v- zGIemSdloxAxG(M%IxdjJJ}+gx&FW`jzxlxZ4qr-{n{_`6`~T~%IIB!(QKM>HLE?!C z#D?8jNJ$->Yo{lPUhcDo*Y5$%A}M86tm z3B*Q9>fl^EJxTO(*UvU4kVJPcWpxm$Hg4@H4T8)9sG4N?ApWj^7Is zPfQ>-us`v+NTv?Xb)N-0J-9FKh1Yxb--P|Q4vr2at!J0A4t4S~u?AcR>&JVD_dl6B zZvA+@ogUm5_v!^YukS8p?x^l(+3Cm6^#AG~tUrl5?lXe*+v&l5v3~4%yw9QFt9#8$ znE|W(EbM>0=b6Auzn2yTsu9uFP=Alw?Oi;Yp~V(6MWr?Jik9S zkfiS&Y)*I$UmKxWhHZ!MQ!t?nsdXo(F?2_qHF{zh!*w|4A7=q;v#W!1@p?NwxG$b1 zOT$2NI%kNreS2;b=Pq}^uepkbm~B_(wy=gTTjQ*DMxe3tus6v8v*`KY^W%uOf$L*! zDXD|k+v&0Eh5c3!-v1vTlrksg^0Quy3M28ff&Gc!b#`@<$aS9uJ3Y8B?)4M=6YLjk)-v;3SbvM|;GaUlmVc%ECe~14 zCw!kYM;T*5+FZmF6Nn95A8Sjdjyo5xx6_0B;$ABv0!i(ars=AX$HKYA>Iae*KkSse^Ofv)JjueQ_`Bw_9))_PjT(bI)^|*tfM| z##x_CbJLUDmYx6O;4IvI6JU7#@Ft#^Ky0L>4$igHgZ+=|W6d)f1(Ml^P3vCHJSNth zy>TF!xz{uw=g(uU-WF%2xfDP+KOY14#Wl~tEL#%-4C3cQ?CRiLyxvYv5`EqK<9S{d z_{YThw}OAF%{9%#;dv~qA3sOzA6y^nNl6{N-cFBQFYLDw;Ga3?P4jZPJQntC>i;~K zlcseeOCB>B{RTW2f@evlj@$ouy`3K1*R$T;D*`m{`f8dd9^|&Le$Rai?weSDIQYk* z1RBl0dlOGgAU1GKtS6Z|IM?k-J3Y8B?uFMEhkd?~A;dg&KE`=G-W(~23E4P^s z^w-TBXsCC+i6!z*MnvG+XpO}KAi4-4@A ze4gGk>Tk3IREH&}O1Y*N(u9VclxpsPz=;huwyuL@?KvKY`npNz01{3$~mIuyt z?rP@Q{TZyU8{zK>elKtA7@wMWVgj*YH&;sP;9NUBN%V5>+XnbLZDZa_rgwvE7WTjA zz6JM9?EfrV;MecqpI@gl5>HGZHn2bOxk#oC&UK#!J3Y8B?$s$be9d+{%(Q$mS~xcb z_WYk~VOG|B8BMI=9r)+vy7I=eo2iK>CJ-CAKAtO?Iyl!oi=7_a7x%*JKY->d-^0um zpEFpv?|bl7t50DT`#XcV0QBEGQr;MPAT{yC1Y!f%$8#l92j{wHvD1V5;$9_T|C_!K zvl_A)P3(W{`48|l{>wLEW-}q9t^aX-JXcEU;9NUB*#EeGRXLFKITdDI2*_yS+zM(S z8M!~q99cP|h4mlZ5NEaARNlCkAq`mvXF22M@}&6p)CSgo>!+j+&b8B%L@)QV!|T_; zEIlXIwuYzD%@}yE&Yf1<7YHtgm~NgbSPrw8}KvtZAA z{A0rV)ABrb3*MO~_P^cx6YnA3|77a8-@SOfogUm5_Zp)Fl5-WRnZKrGu(1A-@GL^Z zs#%N1XE6WJ0REX?x`NTCX=?KRzcGQ>!1b|Llc|Gq-Lu%~@$_={#l32QPnwUcZO+W9 zTR7Kq--7!l)?nu!Tp!PsOdYrPl34$j9^4oAnsgz6L|2HgT-SLM`+v&C0OC_U!fbYi zx3Gt`wea`XgqrZ93~A#U#G8bghHnu4?^*ckT-epI%eB*k`{J{J*H?KJKvwufSeY^l zChqIGZ^C^G*TEWo!z``O*D!95q=_dc5F2)N>~ih&;J&y%)?DCq0O`g>SgI+QYhMJA z>2!p7qP$>X{dPLz*2P&9ch)fKE}@AhCJ-Abse^Ov^kB`ne#yiDlHqMV^LKN>!e?O_ z{2I69i+a}Vwt|U0d}9rK|Fj)7jAxf<;)w~w2KFa@zRA?Vx$d)Irw8}Nz3}?dZv)7) z^buxlU%|qCcY&``rH!!C78Xog2kW&JU*rw8}Ny)L~BAZDQmGaD;dSik4K z1@}#?e+2lv?28(tZD-oRb+Cq0;3fS+4I^zAn*1N?xX+879^4Dp$NPi*pA+6oGw#+i zx5fz;_AuTDy#Lt4*qgLCclB+<)#zN#z?Aic^pvtm!aFmP_d;sElcLNl}c$`=G{ z*tG(Fw$7XS#>dYOT%MRf?68|FC3SGFot`9mxxI(iPg)W{O66;2RnPI#Sg|O8^eEWO zOi2BbU=2$^fB8%GiL1p!hutiVR>oO(F4Z?a6?y2gtAlg#dOJNy^mXss6nOufuNz^0 z-_KjvdsE>3GqOp9HETO>Vh>M-_s^9aHI4W{ns{OYv4PJ8_GdD6{>rt}gZtw8hZY2o zt|ywBrMtW$IJXJxfAHR>*3_A=46LCs?0@qS^$l&#Bi9Dl=bD}ClPYr`IdFYEmtCDC za^17o>A`(*FT8##c>cxpre^gLuShF67geq{wI-E&Wnc}sPFm3a6K1L0_L0jI6NnvH zn_V5d^>%vf`eM%y-4j5z(ao&h3;y(f#~lGAf^BA&oc)quA7bC$g;^diu5Y-GKXiFw z0ltv<=W}Neeo>V^U|&WQs_%lbNYdofB4^X--7#wo#+49!~c58y+7Fh zNz`$l7wiW+J-9FK#lSm1CUY~BtNW5*{aN6-tk2fW>QVlsf&1cI-1jSJF6F9kd};a6 z<%tQzj%4cm*8~5}b+5P6gZtuM_%vfdg1kz{xi$5Xsh_QQwHvPX;=V}&P1E>w@<~LsBLc|J?a@|P*l7c6_S`q&zODW|@LV?4XlC?Zd&K35 z3B-<+)WNxSda!<6zX0qx_qMfphrI+pBk2Es%~lNjGv!rlYh$WQ2KMby(7AYGq|sJ8 z}ZQQaoWKC$DTh8`#*4cw7L7*X@cvdM1M-^q(n~= zz1+{v=m`3!w6Pv^J#OGx4#54;ac#_XV~!K7pDcl&p%u`aZ2f+~kqf*Om7}?F^2dRH zz4Vu_?CRL%+Udc4@$)L@A3*B0j03IGJaq z%M%lb9k@Q$mXbPny`3JrUY_@r3GaM@{r_f209kV~+KPL2%E11&d;i<{Dw#U&&yGL5 z@!!v&zx3d~xYuCtiImvJ+*$q@!Lxko5I`PXYhyhvaLm9O=D_FI#7@nP^ZWL@JTZaT zf$QUUbux8uu6q_cJ-9FK#nufVTQbF%cgt)bICofh02z`x#@Z9P!N3|eEQ+&^t%@>? zqpMt=m_Y2n_3>QE)WNy#S?u)SzPK0m+wVH?Yx$}%*2-M#4eVR9RsgwLJ;wZyc0IB4 z|8JOU(5)!r&bXB>PfQ?oq@)hcwbO(BkLzR24d7YSD-mPS%hwxNv**4E_sJE|>3cBB zNL_f9%M%lb9asadpOQL%lV7=Gtc3UL4ZI#}9t3mU^@%b0)Emfg zc>feT5JgH)S>>>srR?H3tJ3NyqsY`%F1tE77q7R|lSE(lzTE)*g$l)(w@U>GH$`Vn;G{-1?JP|Cb)z7x%*YuhtGAk88%5 zO@#FX_w5eP=u_<&>)^L_#vfk&@0oS`5Z6pXk9!}IsDpFyyl(wi5AKV5#e(Kc6FOV1 zD=jjx_dNGaxKHf-e-X}tZ}zrE!}4=oo|r)Fz<#!?gL9Ku|Cb)@f86VNX?W)>kF}<6 zA7|iM3T6)=H&@4+(t>dWYxp)V&hoC(fmH7>%F%9qoHevc2gAGUsDJhUHH%#xyIeax zxUZf5?_~nWyxFmqB8)e1-)jH)8fk8<`R?mDg6m)n%z`-URMqm0i3nI|2=sB%!HpeSnld*R~_&Y4L`3>T{hZ*HQ@Rw zse^Ov^d!;C{e1EIMWESLw}<7$_b_nZz3?tA7tzCP_M$tn)87DQIes~YOmW3HwnCie zN{o>%BF2@HI(WUE9;_et!k#}1@5$cNW6d?W#*-Z2`C>C;t;re38`%F-KwB?(PsU&P z^F4|85bwWT9XmhR>A`(*uj}3cB>$>dGxwTt1na*P0JE%#wJJ>>XJ8HZz3qt!e117_ zeXK2+I__M&-cAqhi+kbq3&1}MEA=o>UFt#pfw^*4>|qUg-NV2dW`qATU5+uPj_>61 z#026$K8x{O$<)EQ?pf^g;J$bk?D<~c^LEF3TE*e#DSUu)J?~Uc^N`SlVE?zD8)tQj z?riwZsOR#;1Y!sFB=&Pk>frTudhB|&fjz&wr>B*se57Hgza>12;k$d9sUstao&JX~ z*Scz*jr`{$T%MRf?7;f%>fl^EJy<`kkJs1F5kMk0^|bE)h%|7oI`CYmjXlkK8Jm)c zptA|++!a*c<%tQz4y*y!Pe~n|Yo{lPUhe&=0sFsfeNXdFv8Dw3zbfo`)pb3sTa}v{ z*u&*OzXJMeEUEAE!~|jo_9s3U$<)EQ?z3R02lvIj@OsbeCU}Y9zIab?9jw0`oa^5( z*Oc}VE>BD#b|h2Btsk$q)AL7P)C+5V4?Y=qu&23TMHA8$&Tq5BJ*|LIO$@9*J?y_X zoZnr)>;0?qFU=F6e(ma=$!{vcVOIxh#_R3$*!JZDi1*xHR%E8?2KIk7Hh^54-OC(V zygI@D=Rp6VvR#bxmn*tFF@e}&cP>&=2j`Zv(UU|k_qoIC_d@RXOYl9-6SEpK=>Ssk zYMfbbepZ4tjF=r~rS26=^tzcG`ysB{E7qw0EaShk{56+d9lKmRJ-9EPB?2_xgzv*X zacnljPQS(nkc(&I%#Yo&5nKmrI57vluW8d*V|_v<=V`ybb_TW_bwu5T;Y z|4IpQ=B9sq2+n=Y1d!VB_p9%1@-cAVdEl8>O=6AEqh2mgOdxjH&5}$Voa>(5P7m&j zd*ucF1NX<7rQq*#;auD|2F~(-zGu+MZ{7y3gY{p7xe7$a8e^J!xjZp}*pW;fw|>0d zP7m&jd+mmEdg2g#@4|`R2KF8U_s<`UGqbMtCfK)`!RJw+^Wvw>E>BD#cG&qpC3SGF zot`9mxz86~kM|1qjfYtp?TjZ05ux}@TudafxqVr{Td13;wBbhqxGlJLK z>A`(*FTB1k>~reGICH6#jo`lcbHVc-HsJHih2P1zCf1Wo9rx!TUT>!d_r<-i<|z1_ zI{d4T+34{*7uM{#Z^3;>ckoF=@JaNm=Lw#eKpc$g@1?VkIS^2hs{V+QYVVgE0g6=zjw+uc|`ZF7PrCJ+Z>4`Y9(qz=xt)00Fm z_xZx>!{D>v;l93Bi%+{8xbIEyRqcI!&E|!6yX^Geg69%iv%B#naBG4mCJ+awqz=xt z(}VTn`u!gJlcuDvRb<8<2iCs^_J6ReuX+2-9v9X>19X0`(cLI@b6bKZCJ+Z>4Y+fl^EJxTO(?@ubwe;9NYJh8`x{T~eapC|OSuCob_l=%NY{=8D7J2|_4doZ3cnL2L& z<6JvE*#EdbUf&orFFMfIEO%g+3-{d#zUs3de6@d<`}`)Q6YnA3|CH3h>+SSl&A3-*#)^Dc=_r<+N!a41}Bi>AP^=ksw@40Wm{oo|}{-wVq%=H%L$`t=@ zk0&M&mrJIOTYnPk|I&l?<6f;mf5?t_YvSr}!Pt8axUa)p>H2+7z#gs(I`4zdd;32A zq0{bMq@)hcwbO%V#AgAoZv#HLur=N~b%l1|zVG2&l-(L{rcKYffrxlb-t) zyeEUPukeic`Qm4nOdYrXlUVQeHr9jt;$C=75%5NuJ@MwJYR~@lvs-g4-0!j{-ny~! zNifdEedmB@3c)*H%yMs!CngY=!?Pz*$NjmG#CrE<3f6=B;$HX};q~}F?u+l^I#>f< zgLCcH;J&z~O374ON`)%}m5xe7@j#vuC@;#JQh*AjQJE-)qJcD(jnb)%RDNK7Di_64 znW;j+LR5At3zdq>4a`jyrqWX)l@pkg@}=@n1*iaE09A_0N9CZ31B+8-C?BdI6$lKZ zic&?Wyi{pmX)2hiO4Xri0&7y0sajNdDijz>)u1A%DpVz4C8`lsmug5EK!Y-=YE(-q z8W>H5Qz2AistvFWRgbDqwWnGDTTo$CZK@R&35=vFP|c{WR8L?}DvD}Nb*DN3J5f!k zCR9hNH?TL=mTE`!p<;otRCDSdss!Z^^rwbWL#VQpAJC8LPmQF?Q6+&TsR7goDxN9^ zEJg)U1F2!uG~hI9BGs1~PE7|+r$$qws6o^u;3R4mHJIv0jRTIOrcmRlsnk;7QffXm znHo#Y1p>R4`2_f3$>YAOT_?VsBY9wYCY8% z*qMr>wo|>R4!{o7YHAa;k2(ZAL~WziPKv5_Or#D{`>FHPN#IE;f!a+Sr!E06QHQCc)K%&%@GM2BThu~o8E_f(fVxjDq2>YS zQ8%e4)GBHba1nKzdQ4rXW&>wa%c(omL+S(Y1NDl!Mm?fF13y#Gsi)Lk>NW5+^@X}e z-Jo6qUsCU>x70_9r{BUw)9ICovrP8VC9CTh_UOEG<&{=6;pf8HKs-I*|4Q`q4RQ zgZ@QvK#s0Jm#10!CsiIU2VI4h=-*ToxJF$=xAUx-IA_L*PtVTk#s9MjIK|&0k)wV(~aob zbPHe$x;@>6?m?FZmZpo--RKy)2(SoUl8&Q0)5U3Q@jx*gpd*qmNOub}79O@K}4 zw)A{@DZLH2jowJlrkB$@fIH|l^h$aGy$QI9-bF8_=hEwd>*y`?dU`8;5O|O#^k#Z3 z?E<>!1N3ToJADLrgx*8%q&LtO(4vphXX!+GDsU=2fxbYWqQ?Tq(v#^c^ci|Qa6CPe zzD!T2M*~OGC+O4kE&2iQ0ez7^PG6@V10U0u=&STo`Y!M;eU3g)-=}W^Z_+2}JM?S% z1Mma=kiJL1qhA1D&^PF7^fUSs@Du%renNktUjbjyw`q#mOCJIrqIrg4_R|S8!z9o@ zXqh=i?*s0mX+~ha(YtAZ*-am&f6*M1k@-buWYRF-X_3hc%*?2a#Qdhy0@E^C7?$}- z>p-1J&!l29F!_M_n4C;HMq_+{K1?1)VKOoKf%%zij2Dxd$py^C6l6*;Wtfk23Aoiox=&!Ut^O=4Qd`=f;iZf28BCsM;nkmEtF_nOon6gX&Qna)fPW+-qd^AFRFiDCK!`!hqBj!bW6IB+=Am+8aA zGJ}AFm{H6GW-3z;SdXd2Oku_`)q&NSaAqbmo~a3}$uwkUF!h-*U>GxonZzt&mI0SB z)0olB9A*V@1v8zQ#jIi$0v9q9naRvzW-f3pGnQGvY+|+nw=qkZCCnCP9dI2pkD1M^ zX0`*jGs~Hk%r0gla3eFH*~<)Ih5?5$hnNG*V5T3iALC+~>+nRyI+%v@)#FlU(Cz}w6d<}LG)*$UjsY+&9qFPXK#wajMbEAxg~4_wde zWIi)Hm^HvP%yZ^7L$f^ln&H_G%roXYBeKun`ow%;WR_yTFckZWdB?EqPvB4H1@oIp z&1PVKGZ|QpW!QAA2GrOe%r{15Gqc~A%&fpltQVUKn2P^pvTS8wWwsm}$ojEPpp&i2)?p*q zjKGX+S~i@m&gwv&P0u!DYqDv8Y1k}meKr%T02MZjtO#gl!9K%Qj#e zvF+Iwz!q#Rwl3S6Z3=A4)?k~lUD=+%o@^A`itWyJ0(N2}*~V-~wl}ah+lFn&_F-dz zv21hpAJ$+i04uOV*&%Ew8w?C)`?Dk2Dy#`K*#YbbHl7Uv2C>zd$a1uL<9nAJ)#{$Q)liBg?RCXC~8M~03!j5C-0q3zx*fH!3b_H++ zJBOXgPGA=S7qP3@P3$(d2e1d*h26rgV`G3ZY&UinyOHe-?99foJJ?=q2Ve(w4ZDH0 z*n_}>>{fO)yPG`>Jj`xqcd|!W0wnBub~C%5O#mjaYuSD5S@t6EB72BEz@BGM0#C9o zb`N`;y#&0(9$}BMSJ^YbGwfdW4m+P+3S7!QWbd`nG5yOLc1T)^ICAFTq^D~ z@HBgc&CFe9PXJG_Dwl@K#pMI$<1%mxmyOF0%+F=wvTy~toWPu1YAzj@hw}mYa2l6` zE6$Y$mge$uxw(>D5nvI{o6E`-=KO*FoG({^3*d?Yi*eaGCr5KUkmo9Lp&ZNoWJBQ! z=BjWqM*%6$;3{!J+&8uoTmolu6}Wo9dR$Ge99NlZ0BpcjRb8yvx z)wyu4HW$G~1EaYXTwSgP*A&>4Yt4mm^|`jdwp-Hgg-fZQMcNL5^@+xOH3tFoE08t>(6Khk=K=-P|s2 z6K4S}?kIPTOXQ{kr*adx3*0Gg9B>>rg}cg~<;DZYb2GWi+zf6Ea13{XJHy@P9snP3 z7rEoyHSQ7c5qF8Z!ad<`0dH}qx%1pT?gsD%capoyz2!avKXMPb``kP31@HxTle^A6 z<30gDagVvD+*j@m@C|o|qxiktA>bj7=UM&$=i*r2#r@=D{us9pxR0ZGk^j!^;Y5B9 zcZB=JaePMp7nhMw!++xhJ~J>guksTAn@bB!%V*&k{s*T6bv`|xiqF931Los%^67Yu z_W}Cwd3c4-#ODX*=d0wD zaQ^&f?m6%|SC}u(JNb&hihOCl5MPe346MwTuXl z7{OQIL;1RV4PXsEm=EHs@eP0t_)2^gz7by=SerNaW_)%&FEB43#kb;f^WH#jK9X<8 z7vOUMbMVdiHhg0~D=;hX%eUa8`5wR?d}qE1- z_-=exz9&BnIE)|2cjr6t{ek`YA$$kE7e5?0obSu`;bZwhz(M>degZ$0uLrEh*WxGh zWBKa9>U=mqlONC51lHsm^3(bHd>Al{AI(qV7w}7gOZjR17=8}F0=R;o!O!AX^7Dc7 z`HB1#ehEJhIFBF4FXA`x+ko5nW&C1(GrtzNmY>Vd=2!FEf!q1z{3?DIzY(~RU&!y} z|KW!Mhw_K`1N>mVAFvI-{Q~nC;1z|8~i=~IDd(M1boC_Gc+{$m@-}5i|b-;D}7XB;$hF=d{&+p_v^E>!8z%~4H{xwevyzrXm zg%A8Q{yQ%U&*1vRf8k|;628E1)x6^0@vQI@_>+IZ|K?K*8HC?_27wb8A)TNBHQ@*U zjaP(B!Z$vXAPAD+C8PqT5`OWyguDDh;6py2kXyLV-{f-(H+gTNfbf*R!xs?l@Yw}l zA**nm_l4^*pF_wilo4{klDHIWcfx$wkP)H~%R038Kf`kB}xZngjg{neLp`MTtm{CY0)D>z7I#3tV3yp+2 zLRw&2A&byJ$SkNpRj4M^7Fr6?z-S>t2ostJZGmlt`a(mYz0d;KLZ~H#3$2Bwz@|cV zp}7z%^aS=4qJ&mLccBxolMpF17CH*OfxU$`LOY?4&=uHKXeJC4OravMqA*MtB9s># zK!?y@7$sB@LVzK{AYp_MFO&n86DkY;2t$Rbz^TG`p|3Dpm=2sSj21=;1B3~{3BpWa zu+UE!3mhv<7A6YQgr&fx!hB(hFiw~YoGUCA#t1Wn<-p~_Y+;r#Nmu|}AgmNN3EPAo zz#c*uVT-U%hylh3-Gp7jMxisXvk)ij5PAt6fE|Q2!Un+-4gwDfTZPraZs9QSu&`a& zDI66DkO=FA&B6h}1#}5(g?+*~ArY7;91`{m=Y^BNlR|>9M>ru|23{792*-r0!dc*1 zVXtsUSSTz5E)yOK_k|_GJm5Uxrtnl)B`g9i67C9*globa;2dFva9emFd<1?J-U`=+ z$HHgeXW_ZUTW)M{|o0uP%U(76ei3P=+z?@<#F`bx4^a1*anwUc@A(jD_5%Y?<#ZqEXU{TRq z%qkWZ{ek|XuUJ3~6#amHVs_CGe+e9r6Dx?JA|w6~Lg5M)tB8{LTc`q;DOM7L#BV|+ zxCAjotSHt4))Q-q<;2QjePDetOspz8#oEByVk5D<=n$&|tBc`c9Wg?T21bi5#kyh* zu_>^r*jlV6HW1qa+lo!ZhGI>z1+azKUhE?F5K99~i^aumVvJY>SVSx-#)+N9V!&cz zfY?hcD;5G45<7^o;vjJtaG2Or>?p>IBY-2s-eMndlsFJLQ0yvp7l(-bf&Il!;s9}y zI1M;W94ZbLCyQf&W5s@AUvacJ9XMSaE{+sui4%bn#ec+wVly!c7$q(fmx!&zNMNKm zPh2Io6Pp8@i;Kh+;vBItu(8-ioG&gFw*j|_8^zh;a&ZT6hqy*uDJ~E<0XK=e#Kq!V zaUF1-xJ6tqZWRv!4~cul&Ei@y0hl1}7gvkh#lyhE;%;%LxIx?p+$SCr&xwiRRNz!` zf_OnZC5{7*6Q_t*#k1mg;COMScv+kwjscDlPl#v4yW&IOL-C?`T)Zwm20j)qiC4s@ z;vL`}@w9keyf5Aa-V{%Yx5c;ON8m^Cfp|}RC%yo_5O0Xr#Ao6s;3x5s_(c3Fz5%`w zZ;8J|A|3=D6gi2J4u~$1kzC>rQId{|7SIxZi=y;h+ymSr9uX;tmoiEeTxq0lq9A1k zW|mY*mS`z0Fs+nDVx^y=4%DUeQYtBflng!&UMe8v0OpWdN^PYkQZ`^VDZkWQ zijsN&dq`cR#!?%p7qFMqL24&8lR5)COL0;wDN>37#z@_yu2N5FC~&CskJMf2B=raO zmxf3krQXtT;Bcw0)JKYy1^@?0Bc(~wG^rl2o>WVkB8`)(1FK8n(kyABR1;WJYADT+ z>Pun3Flmf5L0TX!1um7QN~5LO(sJN(X}UC1S}Dy3&X>kZlcmMdT;N=3th7klC~X67 zla@(Kq%G1q;5uoZG)Gz^?EvnOR!FO)oze#225F(RR~je{0}hi8Ne86CQa@ln$t4|= zMoEK!gQR`Z5owPU4~&;aNJKg)B?1$rv(j$quyh%CSvnydl`QET@SJp2+Ak$Yr+}xV z3({%nqVxdxK)NlRmrhDIfj6c5(sAjM^a%J!x+Yzb&PaEFcciD%8|kC86}VMeFTIyu zN^5~@rOnb;>8%9+{~xYh(r0PAv>LctdM>?|XqlH^OT7F+dM16BMEMz9pQJC6EK~9q ziIQJQ?<7|K3H&L&kbX;P<&5%gDWlBEjGSK9fx7%d`X(uICi$C`Nfu;D_L5TpQ^~)i z9P(Z1A@HG;SI#ZplWs`4TtI#z-I5B(x1{W{ubfrBF8RXsSjs8qlgr3C;qsHS z$@yh}pub#LE-2@cO8`sAfpQ+%M=k;^BA1kl$))9rz>0E+TuLq~JAe+kyj(~wD^~_q zmdnWja&g%SbjnrbT5>%(12BV}Mh=&&%NkIV)5#6xnsRDjYB`HsU(PJ6KvfQt>&VUJ zC}5NvAy<=|$Zdgbm6rmS%JbzZ z@;G@eaIU;q9wX0?mjjo}v*nrc1bG2)fxJ@QByW>@0DH(?gKTqNI?AIsO}Ilwvc3i*!wQ2q$~D8G@f$&cjEz|Zn?`Kf$YehYjnf0ggc zH|3YWm-2i0wfsTmmDh05$~*am{8N4h7ppvzKgl9cRKCk!dPsyMtN;V}wFu#&X@lpyZ zIe|HqR7yG}kKzOLQ8XooQbH*METiOAax0~jqQIhxw~|#UtoQ@{6o$b1S#L-N^l8Eh*D9B07fXam2ygDr9QB} z5~fsDoJt*F9i@>{UU4YZfz_38rKVC(i2_C`&6T=J4J8s7skBn6DGijiz_v;grJ+(w zX#s4Zv{z!4o=Rz8X{ET*UFoD00Txk8Dt(l$N-a81=(`UCqbG0Grik}?fAO&O*PRwgTBfn$|^N?&EP zG95Tw8Lo^{W+@Ya6P1C=BBiAg4UATnDNB^rN>gA{WuCH9X{R&;HdE#+E0j4(V_;*Y zjj}*ls%!&pQ#LBImF3C~;0|StvPxN~Yyxglb}5UMxym}=I%SKpLD{Mt1Rhi@WwWwY zNdP7&`<2zocI7beu(Dg(sjOEBkSIr$b4sEz6*yIypqy7uD&v6Tlqt$p<*YIuI9{2l zTvBEzV}N6n;vvoek-E-UD*TNqa0Bvl~*&W6kKW4Z;GI124+@ORaR*=EikQ`MP=2WiVoD( z^lB5D4xmFVqMB+QH3Ar+R!~FLx@rwz4K-K|Qp42x!1`(>wTjwEtqrWL8fr^5mzocl zPmNYvt9eu(ppV*AZLbzoa{_a!Ez~w@V>KHvo0?y3rbekffIZaCY7@1s+8fwg?Wnd> zo2y-bUDPL_)RI!&zytf$ser>Nu9>cHx1xH?OnsMZA5R2!-@)COubU^R7&Ize5aE(I=Cr>djX z+3IrOa&@{oQ(dXf2hLZ=tCQ8m>RjMlb*#Eb-KcH_ZdI45OVlmuI^a5Wo;pWet!@Wy zS68U3)LrTZ;0AS}x>x;29SR((9#RjeL)8Aj{;EqorjAqx00*f1)FbL1H69qRj!=nu zP)!6Ts%O>R>S6T~@RE95J*ryjIp8_P7Vd@PT?;J+GcrZvbzo z_tX>WW%V)ev3gy-qMlZ70dJ{K)VJzKbsKP-x=DSfzEIZ!*Q%Sy!Fbl{HHHs#4l(^}Wh!KY>5hm+EgdwU$Bq zt!B_TjnUF+8c@@IsNYmo%dCA~Q&MSv6m+EU>IrNGqV_&`JPHXn|U8 z&08x1ETWavifN^_3cw1Qp_S5#YQex@EmSM4`D>Mdm9=tOfL2^Hfu>ePtEJV`G6FMd zX|=jq4NV8?T6(RaR#Qs@OrvGd8fcj`1*mA%v^rW#EgBfDMQCAKW33IajaFZ4q_x*t z09$CawQ#MK772{hs%y=)Sgj|prxvBP*1Bmiz!g zPz%v20xN36v>{q~%>i_1{k2hARm}->YJ;>9TD%qn4ALrT|7b(Cslch)c&)ECT$>J@ zu8r14Y6G+hzzNz+ZLro)8w(t(P1YuA)3jy4W!ge*iZ)K02b`xZ(Z*;qv=zV=+8k|` zHc49qT%@hiHfUS59>5-27j28SPU{5hq;=PJYU{Pmz|LBnwnOW!bp&?Q)@U0wq8$Vt z)V67>wcXlb;9+gMwo5yzSwKtMq;1yrYYD&vZLPLXJEtWA6SYIy0qufz3V2F$X?wI2 z+GXHn?TB_vyQ-Z9p4IkhceMH1Qs7eUp>|(etjz_^)oyA}wUyce-~#Qg_DH*?%?8fa zmTR}P2iiyAN9~PvU3;v30)En-X-~A<+FRgT?W=ZAyP>@RzR=!jue1*uufKwe(%)+@ zwV&F1xLEzU_E{5wqW)d`qP^B={R>>Oo?6eKU(`~=bw*3C>-tIHN$tGmrKi$Q15ayL zv`qRX?Ktqbrs!$)TzWoWK0TwZ>REMPps$`;&!QL9a{_bfY4mh@ZrvN`t!sJ?y|`W) zSX$4k=g~{)MS(?iA3d91Soa6|>-qHpdVpRGSWM5Zhv>gF4#?>h_3}ES|Io_A<8*jS_2znAy@uWt*i>(&SJNBl(ZFcEiQZ7JrMCdK(A(%SdaPasSVk|QchTGH zMSw;0l6p_QqwWXv(*yPHdRe^?u#nzX@2vOJ2LT7^-Sl>PZ+!@Gh~7i*r4Q5Nf$@4L zy{kSz?*r_kchLXQ$LSM+6ZOIRKz)Kf8aP_-tH; zzgcU$UcTzF^YX;N(4ug^ z!RE)#_CNhY^Lf_H@d*gc1o7`5mz*_f28L=7r_FrXnRbtVs4v8OmY;ThD;yY_7vg@$ zPCK8>^ml9iQ1XOx{T?-xg8Re76V4Ge_0Wf)q4AIeXQmQr=x2zRR!VR-KA?rZg!o0# zZBF5m68ae8IZw7aU$xaji$U&)+J~JVrNGeA5Pyn4?DX#C@76hg!#3yIP646W;C{Uq z+njB$mkrGbaa5~y&a%>f?{8bN&RMfp+0Y+Qv*nd_&gJonTU)Qu>zuy27Wy3S-z~Dh z`Q@k_`Vr#er{+5cHBv+GLtO0E3}>6Va_A|DhxeM{Y;|7=4TkzvGcI$cUF;uP2;$PM zmpLb=DI1yx;sNnfojWd+4NVL2v};qH#mbj)Ys+1BtTVJ`*-#qpAD=hYS&@_uy$3ZL z&YbA1x?2i;0dejE6P;_TDxq&7PNxla`ivGspFwIHG>4nv)TGL#O@3Gqy>tusrF((Y$eKy2qsWt9xg4EINm ztM6RDu#|hRaxQA%Y>~cX=xgY8@n;+7nn)q^D#Yg1XlJpfqWiflC>-XTdX{rPmqHJ# zIGZ;SLNCG^?o2tS@{M(SZ(Z*o=c6IK+b3T#RdUXFU()@I#+Iw>OxLzVXa?xpw`V>l zRknnC&6_>G&N6F?yZ7gQ$&Aho75v)xMYT^Z-mag)n(5w*On7A_Je)A%sX&_EGv?iqNwLG33m=Z_Z0_zvrU0Ax{?lbnb_^J5c0~hGBs8g0p-4nZ$y7QGQW+ZPG@+tFsnewFbvI8s73FB2 zPlKd1(DeSFb*}5Z-mmX>AO83CyVklr&)RFR{qSM?{mPcDnE#bs1iv1(R;IDw8#Bi> zYx4h)U9xwStAg8nSS1@)*j=s;PKeZ(EL$)ZKSb^l4))Z$gjj3~PnyN=xxxysuj0zSa6IyM%FB+YauPh7If(7~jjSw7&O3 zj2p&ZseE+tl~}`)as$P6w`XE)TYH)-+-zPl>Di(^Izq7}!&0sV-jNfk(9!84e}?PC z>X$2)EjO2c08fhBujr=VS@51AHx(*vJIlXfd~?P%h0l6ZxpZIk#Um8!93G4J;#Plu z#rpQo*j0?L^4+ZP`?pT4p>+0Eh1-Su>@vm+&5kGxF5O`jV4LwL6uyOZOnTnVtaz_D z>tiZ!0jE5Cqc~G%ES_D;M>_Eh=R1jKY-6{M+k7ltYH_bKLu(Xk)9$b`jGtMp!ixr0vD09a;5K|*+Z(I|Jba-Ze^GFmNk7{X z(1EWDzs98JRY2SR{Ka4caj!4IeR=mA`r@-mrvBVATTeV=BS-sjFGpSR+*`n>@<*$5 zO&=DH>~#X3Dk zJ>>Npud^(S*WNATueL1{Yj}9}5HB+OLvY=s3SPN#0n0{DaKLHqG%JZ^fCs+g{9E}P zmI9ve<_z!k$2@VC4C`L0jPtZqMd} zZ_8fug zh`N+#u$36^-)up16${x?aL-zEa*2s&Y2Y5`tjO3QN{sj4Zb=tkhO^NaZy%&eHKA3q zFmU}6HJWkdw#*A$)LnyKf7&LS2<{iCN$VW<$cBIiWNXns!&b^hfwQO`?G0Tolg@c* ziVaN~7b>n_72K6NSxyx9?e@7lg%*2?{oHWLo>s4tvpMMRQr3gIUv*`1;BzUCRC&5T z3kQ$46pKgR{%4UHRuXdoUW@Fh1@T`jl#FrlO7y!;z zF{JjcH$40#j&P#B?|ZN@;Dmv_Xv}+i<_4}U=ts-LIxtUgzzkasooPyoj3-tO0zchlM#h0wmC}88 z=69w9>#9m=e^efsQ|EpMD`UW0@?Gig8Si9Mz_pWI=xp^1@t(SDbSJ-tqcUloL4m)K z+J-Wjw9Z3@jNA_t$Yfyu8y>W4UaqVgm>sg9f<$A5E!eQR3wi&hrI22`Pl+`J6ekIO z_o*vsJcw2}V%%|;4W*lGRG5RUKiSf|vFjAly>#adp|ayCGCA0-hn#c<%##I4{K<Dy|=Vd+LHxad`WG}xk~B2_dblJ*tz-&1B^H1kD>3{7787( zsckR%<*Us#z>Z6t$i_vJOFcEEedum!H!iJBN7I@9In7l$x_S?K zZT1I0kDeSA8BOcEmfr-=n#*YRk2PE!J-dGXPTmW9h&}w8JB^ABoOnHYdd7#5=Co1# z7FbPlCOO^n;VS4K-YtUmzYG!Uj6D`c`C}$=WsGb1Flu()z(1our9w`2I(hs)`0uAf zXoFV~KMkH0IE)+}3wbrzq4zM_@3WVm1rI6oq%_x3ehqwh>nyr+Wfrdm5AGd7i)^F# zb8z9>D9RbNj6VTuSwxajcm{s~cF>3>2aim_`Z-Y)=)Z>F!MJUbCwcjo^XuU94_-9g z>yWtS*(bwkVH)QrFm60yB)KnF@T1^;??=$$@{9a1IAGQ&+OD`D_CY6kF7j z(TpZzk34bx!hZ8eNnRxO)~_Ol2K`nn)?W}FM_s1xnZ}Q`* zFyn}LuYXv^k#Wplyb?W|l@`#`tLOMhFiW3LvBl@bYy8}2A+3FXO}xg1T&~^0Bvk54bGPkKQ%B;l<$3$NcEjgm1hEyxDCm4J~Zp8^DiOj-i-9Ws-Ulb^Ph) zPbE4Cu60eM9EaQdI9PsS0oi`M&3A$yc3Mm|$6p9`%S|NTn3v+UOjk>y2IU5^Czn$f zQFU1Z--Q17Nn`23Pc@SE>gywaI$o+q>%g)n{?sv0n^uG4!p2cnJ8jAZ-;EETw_5Ef z6$e|V-f|A{32dgMbu&{djExIVSHP0GF@&`rEGAN)e`dcP@_M=L+n$? zwVQ^xSLWpP92Hd>(0cUTUK>c4lMHAj_)xzENRk96l^v%g~FOT zQYiSuf>g4oH>OG8$ipf0#>#}2fTy{SC-XdOngd>OA&B&KI=9-h${e~=JN zaWA`*A2`u7h%&GA6x{rGFuCvUDc0$BB9)GGHK+OL+4U)fYy!+F0G!$-jh1h;r5WJ( zkW_L}*wR$+jxlMZb*nqYf~T!cr4albFadmTYY@F!-iJcKM;t=vdw3sluNQW~q@n66 z)-$F&g#LZ&BKl2+2Ge62Obq=euZK|2gM%p%9F?9%J9K){EU?n)RLbhni-v%AUQZ)~ zi~%$rT(6l%&IJQ#82IL+G;%%XM!sNWvoxx|?MBnUEuq15I88>L;PY=oC@Nk?W5HJo zg2`KDI1K_{wx2)`e|U-OpE?;#9cUCeV_e}iL9jQtq%n=c)I7v>&N`;i0euf~-?1Ii z>7O(&8jK!)?=)Jp-+0 zp!E#2o`Kdg(0T@1&p_)LXgve1XQ1^Aw4Q<1GthblTF*f18TkL50aa|6GF*#Lfx*wH z21BD{X>1E~qZSN~lEqO2Rz^Ko7?)%yfkD(GW3*rO^WJ#x95zI=aH?Xoi@=+-L`*qb*{C8B3TQt&r|8K03hO=!o=0 zhZ8)Ac1Smv6P@8l?1S_cmdAdm{osBa2#=x*stfFo&hRL@p}L{#H~1XgQQhHzbj7R; zRfg|?N*2hWs6+8xP!D(^JyAW;H3Htpk*Fi#h8%`jZ}Htx9~dJ?!}jQlj6sJ#%#fpy zk+4UOhY@ld5`Y;$SR}_F!LUAtzzsP8nS_ohutSbV0%4Z?9p=cXNGN6|!WcOTnE^xO zOxPhMPhqbA}e5tTnTgJDkKvf zS+GeiM>61=%!W;J9kLcPt6`eVL~>!4%!5sG1F{Jn`S3DkBkSR9+zJcj7Nh_(8)0_b zglvb^afebNY9TC-TVbRuMlD9y9=Ie+P)p#YEW+$w)V**>9)OFo47Cj2$x?VF51}4H z*AaLp|3du>4$Fg>J%)M=4$718N>-p&z(9FasS;MnqsU({SDt}=k|PStRKQ4i3ONUV zrR1QzfLuby6__c{Af$8+&c`a$Di|v-2|wi}I4WlFmoQd7N1kEk5$u+akyo%+zJ{6d z4N{Me2AC~hA}`>s{0LiRBk~?IZ{fVGM?S%K`5BhWFGw>wzA3e!wxH{W(l4c-s6S!2 zY{u+=PD^E2BURv!R7Kjr7ui->9aSA(NloQ;uvKaz8kkXoow5z01DmBTY?pe7J~|9w zu55>B!Hj7Hv!x-@5i{*!x70^WV68M22FuPcTpGcLX@P2iE-QF1tx>Jvu{1}A4XO>i zmv%5@+N0XTaoH8#O9xa3boGQ&vKMME7$v)7_CE(^A6PQ`!Z+!R^hd`)*d?8iUa({i zg5A;;aluSKSS|Y_zbSjbmnlP)!Ff3d)=W9799_d;%Jf9_giDiQb~x&AI59`TbLoxh z4gaMV44I=*N26;DT$qv}b1eLqK9~(a4S+9mJlvQ;s6lXI`ok(2f*OLZNw7^$Mx6|U zW-w;|b7oG3m2w*Vl)oc0&=Cfw<`iTyY?`xS$c#Y3F*6-D%^64(?3#06#f(N`&@m5& z&DqE-7&H@L)r?2tFf$jn%@|}MteA;#XD&jL(2)!)W&$!F7R_{+HB*rk%q)h3GYMG+ zgJuTonUY6y1v*y2Lz#}G!LykKKV>Ge8Z(k#a|N;v7S8qXS!N@-=-2>zWfrmq7S4Rw zGdCd{F_QypW-hV?Ce1%#H1mHn$^tVBai(S+f+` WhmHfVZSF#f;o>ZZZSx>fru;vCD)pfN diff --git a/public/assets/g/polytrack/models/road_wide.glb b/public/assets/g/polytrack/models/road_wide.glb index 5c989739842e920a9b82f770808dc90dd9b5c73a..64e9e53090a17f00f0fb6abde7edbc8cb8e3a074 100644 GIT binary patch literal 130544 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%0A;CsE*6X!8nLZOb5 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 s*#BLj41eKG{PH|zIKhTylXQ}6hH00x|yQUCw| literal 161336 zcmeFa34k5NbuQcz5&{V!v4~Yjqmh6Cjih_$-kG^0q?tSHJ6K@$MKW5D5fVsZF*0Us zFvbQO;vL5hG8kLf4qmY_MzcA#lNfJu9OwO6tgKG_^1uB5|B^q?$$RnpzN)USQ{7eF zeFfrSG9z{0@1A?A`qb&FQ&p!hYhSfx&DtwBu3d+8o42f8 z$KNWQ)y}TYT4%kpyR)aWx3kgN*I5Oz+F9-DtkycK_0DSd_4i(HQ|xHJb=|g`)fM7w zFWbI#&BhHkZ;!Lax6Ru&t=X=`!UdSy_4js~bX8=f#W`;?ih9PDtvIWsmZvM>xop#x z+t#hh$z2I6vah*G-*{VI;*@B0H|?2Q?%JG}y4x*Sx10Knw_Uhyz1E2>SdYuYD|oni zT`mttBjLE@j_m;@_9Z-*Z=rrK+PHS@rgf+z$(=wYiEoAG;DzMx_EzcNl`k@sirJ$AE_NJ{Dt=qn4)259#t=e+OhMPC9+lG`o z+TXNh+qyHhY}&H*>@_#3rh08 z^@{%M?(3=4d+Ocy@=oR#;jFbA)}6lT4mS9fic+oi^i+Ghdn&a?PfvGmFUtbhTdVi* ze{ZAK)dN~X3)EZf?&|LDt@U>9*TS5>X6x3C>$bL7mP&88lCrC>QR%96b=4tvIof_L z4DZa9H*ehD+O2_A=D+<_Wo#pEQOTK#P+8jD*IViB>TOi2PvE*iYB zeR=iX&i0L)*KWLtJm{KDX9p&B6`>r^6Pq0BG6!^|HV5P#&H}$5JnbO*j$BGp_xS59w!rw+-xSf zI;%oCNhW;QP+D!a{Tg_2ht-RXMcP479?W5Xi zLTz@%h$JFQQsO)eQT7jZw;ZhM$3Aum)BcE=&j-C4WnSu z#B%FfL+GvH=&b=|*d95zo%V_P*5}l>J}ARxlG`ox3A5AZn4Lby?D*ShcX_?_3DeZ) zn5I6bs^sdePgIp^#i=XRic?u~HCL^O+JZTZ?4+s{$3EpMuUZktr&@8W4`zSzCiwN& z!c?JJ5jLt?ag0~fk-waaNY`8tFnPUPdXifWhBEb?_I z2i8@0WLrV*81ctvL+i)&22y&I@^5m6@FDaMc|J!x1FQRd;5^+UsOI8s$cgRXJF$x})VP z2fOnZ?d>XAH+rOn>2WO#N4@r1`E{d5 z_Po8|wcd(qZwo!I9N$*m0WKY-LZ1AF+AHfuuUj`bDz)Wmcy-u{vFnw_rPnns4ad0T z>yX3Q#JDtE9Liqf`p)(>H^Do(ZOc}@ z0QaUl)~{c;^@@$_?oy7-o3`9~+m_AiHgCWDEw^F4y1UBG?WQevY{tqs&GW5m?#7aJ z&(iK5{MG3oul4o97Gia((x?7v^?I$|=)=HiNflSSbt6{BuU&$%%@TN*E0vz!N~Ny? ze|m3MPqhXkv!sh`+tuaTuQ=A|4Y+YXCc818V9e0loeY$TiBDoE%z zP=mNCkj=qrNRM1tg{sPoz>@TJ*Lr&EHOx|cg|4#A6dNDKmRq!f)=$B5(|g;dRgId( z=2sprcI4?MG0S~kP4p#-C}(cm8dYFeqynzu0gIx`d7rW~i`Bb{ASRPxFH!xb# z7bocJ!DzWw!Nr#pj*IAhDUvW(M+I&5l^ochfW1m1vVcY78V=3!3Me{W@6eiVrEGdp z32fU6*kAgPvN_nc@yZQt_Dw;$yWro(AL45;SL(%N z#}3?H)|7}Iw?eUU%T>_&yBgMfgzo&yX#Vx3y^KAoAU3Vi=&56pncMhbED$ybYtcZQ zBLX}TrBtHz(*ouxsc2fn75lvO@ig5(ujyW@hZZ%2qjuM@8YgbO88Q@1p9_cWbi)-2 zm{$wvD9vVIn|~J<_JY5u-xiKqq2 z0CX##NDul!^nwW1>_)vVGWzwG+xY3b&T2*8_QJ+bZ*?{caobTfL$|%MwA!abf-!@u z*Q<>Ry+Ap$lqL10=hiR_uy9e_G}u5p(bT%W3|VxcQfLYoLg&_x^PC z=aot|er59a6-9nu`U(m~%+nHMnz9*KEtMDmaLp{6h3E-T+jUQ1YLamd)f5Eo2~sH_?~0X( zoKb}F{o#=thA>i#&dg|+|Ho6cd)mPMb zHM?=8(EV4`cv*rX`Eo0ELF2dHKTrRUil7_-l}2x0H=gChx@LYwNLQS4t(TDtd1Vy6 zlh*;rXohThQ47$xV;u#0H@XP2Ifz;i?Eeeeigy6uw5^gVdYSE?ff{)Qv>rh1$8TwA zGRGjK!X#qO?w)#I9RXNa>@65UHwp{{<<6`A3_{74+g6PdE0>H-$!1~e2A#)xY*@5( z>1ko!A#+@5TF_E~k)VjVTJjnRt0kf3Km%d~c%G6NU7(eO{>9^0C^ReCL37J>sn2UB z?2Qx=5MDFGSoUlgt(H_MYQCLejC(c<|l>4nV^%dBPB6G}e{cItvp6EI# zP?NXSS~bbqMBige*2-hx_Sp;4S6~|otCY9lT2-m&-2z>C+pg7>4uGeBztBAS8C)NB zfxSl8=DYc>IC-W>Jv@XV2hMZ&t@THuro4GWhk&t-W1t}YC8VX5f$(sdseG*)l(J&Fu9jLTQCqToLf?&WWw{s=v*xhj2dMXD?4tL50sqq?k#m!_?3 zrP~MH6&My_n*zG?wr{Ju;^A18{bgRQv&PM1seFx3s?MlH#KOLE#;qt!u+X^iS-fn~ zt@g?oH$J16&BJHhN>(G`BKD8j5N4!C#pRnQ`^X|0bB&unl+P-vgmKf4X{4k1te&iK z^H#H5hi$tqURLSG@>z1+}0^+;*9 z+*Wrbj9XFgA6J=mm)ezaIe25$Wq3@SLOf&?vTcPCGu2vw8KI!LP1GL;XqBa&lPc&% zi-Pv}xM{2{UDJB38_TaP8#Ghaqfr<#TV-|6RtsxMC}qB?yp7tbN=)oSGlHVXz4)qwg7;&cEeR!Io2cfW@ zDuw+OF+Gf*FiNLD9G_QJ)v8LBUoE^oKzmCmXnqFX7HpMO9QvXjM$c209Zq=KpTFc* zS+AsFXU!=RG+$ZXW^9$!#bC*TMpzVw$DXvcMz}u=dr`2T=nRsLu|+c=9=MV~;nMpzS3N>xQB z0sTjWU&ZAb$J`Py=8Xw#_u*N;a4iMR7Jsp;->pMXn!c5)r0VNhSb1;bhZIo zHQ-?l)B3#C<`r@z6{@PpMo`S$O6QO2v$`q~yo&Al^Oa>iM_yg!yTwZ;DGn5@`Xl}9 zJr&g=P_MiV)apu%9E0_$pciJn(?-2yx%Znj;zpKvEkH~){o3+}o#xLj#nzxIVmFHlJ)D=>!8?=tl7GOZ-%PX`+C$~Tsp7fv?{Z*sjKNL_oCwWgR7tbW`!Z^LW z?8+R=tK%6{$RmrMC%hUbILUjIWfW!4RXm%6le~{x*UGEsC8wk^bq#JyH+7!unA4<^ zcX8%Y_Tt&(cn+t0a@;2O>UHck=O)h+p0fg3^m=bAde5Y8q_3T)_O#yWed!9DCwVVD zxQ^)90?sXX-o-P?;iqmPxvC-Z>ez-Sl{`=QOmpEPRe9mF$$QhP%PTu=yCZueUGzNJ zGsYdR{T3>0COM+SS}A(kz~jwKDLa)Xe8xoMxe{ojY-7zNZ&cO1x}=@T7}-W$^|Sk& zywOVcl&Lj+wU$(uHnM%#WT^$!Ws>){(q0jGn5wmi^i_*EC6(vNfXh07cP*&2u@&`Lk# z$)FdDdaed?OOURD^}eoF#!{Ioh;_wuKbCj>%p{`T*Jz~|$fWPaYdl-9K^Zqwcje{v z!`+p>mbyVQ%aK$!UKi6s3&>1Fx~tefy!`$5q|eMD^X^|}DuN9O)Av8O1*Yp?cUQfY z`rd#ScEitwcGZsq=EyguD^RVB;z;WaATsXwia13l?`TNz2G9Y+X2 zNZ-D^+poGSM|{+u7R*;RJ$$7tG=JsbbFPm~C|l?Pv(2Zss};YSCw)&VLn!qEEl2(a zHW783e{1^3&Ot5cFRTB)N?Lz;<|EsDu>nd89eCDz2UkK1^~aOG)=KxsdnMK1Q^Ahs z<<$@CnKJ)9m7Z1{NuCU_nNv!Ec{d=_{;@r4D>oo>1A8zAPF29X>u1wr1I&~L^U|k> zun1^M7eBB5D_iH>z}BV^+4S9AtxO^__6IxTr0;*8{I!e+xF_QZ%u}ByeM|K(-TUAj z@#)c9p7>QY-*EKbTWMtq?8%_f)yf<;tAM_YA0@8@83W$ahkvdG$h!fV^u3rtwov~w z9RT&0YJYk1XDTqJ53RVOv+3asO?9Ao<r@c^u6ip=gFUL z0KK)A9HH6z+lzNWwNQUN8K6qFP=T@vfDfgG3Y4wD-HmhylBd9IdaR?iAb++2p#HWX ze^0sx>4gudh3jY2*tlfi^C;p0ec(zL15uU%xeJMyxDGg)u+n|MBep1=`)cQ zdFe9~z+QObQ{~T-ACEwwx;q7E&4ZB5pn=zCr6kBJfvWCOfJRrw4Vzbj%oMOuQ%?<+ zz5{IU&h_!`uNF*b<__Q;GU*zeCx6C?)qoeQh3k9Lt42|_{Ao9E0}m^vE}tiU)&e4f z^dKbf{(Ca$skSl+h082;1F>^`%7*8aK+X7^3IHc&D<&vC3u!d!t(f494+3v)O8XG= zl)Sr; zwMm%ZrF}ekMet?NNSpS&3^FzeD@{Lp_*EomRPfg7wzjsn z{@JAH^z$x`=CyyhxpMlI{ZTYDGOvA)7f%|0I;KaXQG$m?Bxc&^nPo4Se05x4yUHUhf&nt!1HDWmomU)xLKk8Y13LU8L zhHgGnzsocxUz3;0Fg~S!^YWywk;`LvrYXb zXl~RVorv>^(fsJ}=!ocO{972cMRV}&Xq=A*o*Eqx9gOqA(e!9RbUe^u(NRFN@wov1 zrYidMXht*(v<1f>}(lV+f99D>@x8ZrwtX*O!yVX6*_I)Hve_9+HOxbMaer~8`m z=BH1-9c_|yKc0K@51M~5^=icv!fk){T*4E=LN-wk-8yM`+`4D!ZXL69w=P*a`w^oD zw-2&9A>EWcjBVL>jfJo+`>wGN)^%Ig>2v>h$H*^!*^4ni6iJ-o88AGOe&em%`yYS& zZrqnB0vA~m=4#Y7R?QibHU;tJXXdt#u(R_)Hu}q1{dfnx)$COnje%Z*$Pw z%m!_yYSH9B61@srHZjrB=nsy^zj^4Lj>mCyWa~5Atf|{>zu=A!4bSVVkFaHT$B??t zyuSO3ms7?Aka!YmF?*X<`x@3)*4(3+2lKTY>z zP0fx4Wm_jt=zEYJ&jHfE%e>5Q-Z_QpgE@xM5}Hr_&7~#z#A&=dCLh6L(mDM2Jx!P2 z4K|Vy>#Bg|2#lNM|NjRT`@14;CHD>6-sDUGg&S)Aw7hqJ3=Ww6!f-ewu>tDmy2%Kpn> zqg$pegRP$THp^nIXU(6F*tDQZBdM zOL~F_(mb52Qby(z9l`7C=^ZDf4$0sZ`xI>h&Zm`*(> zI(%;Y*8a91+&;ihsY84pj_JcvCn5fv{Jr^v+PeM<-4CiH0uj-q7aPEn^&^NcE$Lzqd z9KGSG(P=oJhCVqvub+dy_;CE2g?{{S9CHHwOR5h={}<0G25Fy-oj3idwm<&4fV8o% zg?^TGz-?o)y=AeSOR_(nihIL3rSw~}j6Zv7?ilh_>s&s}vj6O976lK(LDOx!{@GI+lP=r1!KBOfZZPSx?Hf$Gv;zi{E^UIrq)Yo?FzM1(7)-jc z8!VT>ytDQ`zWy=wU~F0z>-$dIXn7ApHcy031KZt4KBvBNIjBj^&FdDg4DR<-FT_l!)b_V%B4!Pi$xY^~GK0O$jT zN78TolWY4gd-BGC%bxssKk%@@A)cIklC)BWR}%}FN91)=be|qZO6bAi3Fv`5UOi;T zv@d6^iYrrxVkFGfW_tdQz`w(RXM@W1DXs(@fp5e_{~Yi=ViN= zV?x%M|4jD3)$&@s=`p{ylUaQ5&u-#)Q;qX|n03sgmDrBMb)I_Mo5htqgDaRn`9t`t z^PYwbdfwr~Oncz8zg4^#gm8s>YhIXPgCXN!%X}1{bPzJ5C8P3Bb#Q9=EF?e z(=ko)_@?wT$;d3=~Ud12m1kk3w44}F+C|8@0aiYJ7b|IO<)Paei~kdKKS z_2X5~e>&j_VIwE66~d-IkSByqJtt2Hn>IxrAEr$V~fZW!p82ACxnfSB~J(&drqDZPWl({gs|zGn2#Sv@t^cP5U0Nzz9_ok+4~0G zyXHdJjwt%8f4gtszkgrZBPX96`Uv=6bn{nvjv&w7ah@I?DNhuQzwow!-~RpYDH)_Z zppSsA@&P^0Q>K+Tiq2Ym@4!d?{Al*&PM)BTfIb}4<2+?riKFNv({>De^84qid}N-W zkASZ7v3bh05=YU~*WNvF%p31k`N%v$9|2wEWAl`0C61z>)bAMBe%uFCJ~B_xM?hEk z*gR!giKFO$K5_fNcTavs;AqTTOV8=OP6iO<&pK@ zwkelK%51T#A4`uSDSwI{>(EVWuPbeiD}%Hf))u)umM(3n%OmZfwc9R_rOW=s<%!ER zz)#!1xID5i@bMgg^}Oj=iJJ}&!lC%&nb9jp;*;kiupW3EK6ySinjf{{ljr&HSD%DW zo=-&FO(#BiUW~QGE`0J_#X8_1K6&nq&c=#gJ=%)%)@XaQKDsx$F?w(Gp6EQB&x@MT zTcdT+%{bp2-4opv-3`Rgw?=P|?u_1u^Bbd8(SgzXuyS}BB77#H%m*q=bTU>U@4)$v z=)UN-=+wSV!%MhHxH=-Vt3N z?T9wwyfL~(t;f9|=l4gC!bdYVdJyLaqld5>dPcMb=Pl9g(dp3*(I%WXMVqne*&f}G z^Zn5~qsJiEa-5e(E8z(`Dtb50?~WdhroiX(2+og0zlC+!gQFE#ryYQ2s6RRvzM@0$ zy$@@#M@Q#iJ@qiq4oB2d1K%zH_5A2!tm2-E)!T~@*>nQFT@<|m-!F|W$9irLR&OuE z`tT|Ec3E^KzF!etgEiyT(V5ZJ(OE#(;PWPYe-rNEjcR??jH5WtG?-&lGfpGjVA9PP zk931cH{(On4JO@;ElD?+bTdXJ-C)wqn3;5gNjKwd(hVlvjMYgum~=DFC*5GSHQA=h zVABFS_MVK<5dFauKzYM0#hQAD^{IY+sc#oh< zJl;I+-ZLQ2Y9)UWrp&vxuT=bHFl9FUWiaKJ{h-D0C&#{7+G>l(o4-8oHpnxi6tEB-Q=G8_IfnDWd1+G6XcrTmsY-h6cUw;&InRV>Do`HC0br})cY%53<{V9IaC z6)v_uQp#_6#+%na{4C_zspK!hlzGv+KBxH0V9IRx%V5fEe2gyk`y{FJe_1pPdGxxu z4^z$;+rFuILYT4{o)C_bzoCIP#K`_3Vr7>vn|<2nezIfa*MHyJ|Lpc7R!Dln4nH60 z1A>1*@F#T1{}-FL_rL#xcMtsQz}YK+hYh}E?)LsuFS&c*n@^v;Qu2U4Ea(Y;C{HO* zC{L8jD`)6hW%MA+B6ao2@9h}*`(O0-|8Uy}R>*un9}x6Jp3k4Rt^a~8cMW`O+ILn; z`9U8R^h75i{+#^1`Gn+LHN0cwTaf>!*Z$cG$piX;peJRS`DeHHe|gfK1Mhh65&cp& z(1!&*ks-vNlfO5gker|R{Em@d{h+u1-)9`LQu2U4Am~Y1{^OTh`j4Hyec)SXozX94 z1ASP~6B$DMIr)3@3CVf!2X~BI|D)di5B;)trQ`v9K+u!2Tzc27{kMPk_JO~C^!9!! z8|cG=p2!g5&&l7LPe{(Q?%px7=c~Q_zjOU{Dba++TZk^T3lmkM>L1 zKpz(LM1~N5PX69}LUR7?6+1>w`50{A%|k0C59kAeo|NTFn>Y0T`;E5@-1mE*>X)*C zJ}l^o3?crU{Jr^vCNtd!o`9nNX<`hpNvy_3}yxH*J&4%Z74t#f0 zab`^a(eMaP$9X#Zvd6+tI|=7WDt34VynF39PJ;jONccoMaPaxXqu|Fq6~`iYW9Pxk z+lk{Ccw-m9U)zPF2Ohzb;m2*@sKCQ`3Os_#an#{GTnfM73LJ~!ldQt$cRG%<;YaL+ zcko;sO?VOe;JZ8@$C>bz_QR`tA&%4FAsvL5a21X#;2}K+UdgL)Tnew@dGL2$gX41e zOfQB%^EwD|>_)*`4V?8{-SHiz~Gmh2pyQJOD51+u-MY1ji0|Y2OaN>-%whIQl3&!S~^OU-Ve?G5B5Y$NB!~gVD#~g}xW( zd*O+F5+2wO;ryZK)6uTzBk=L=!m%^@Z1gyMx1YuFsp#|3@4(0Wc^tnTeL4DM^fb;- zN6$rHi#`)Qf%6m57o+E+XQHQYek%G(^o{7*=o2`9BKjPBytCl#J_ufS?vKQ0Fn>4t zdh{jy`)c$BoWFqY9D7S2o$;;FZ)va_b7lQb(3$G`g5$GgmmjCvHl0rt^dK! z>q)osdOKex-OiWoJd|`h-?Z~P((OFX&YMWL^CLSSA>GVP*zWAwM>#ClU&>&)?o$TK z^`u?KKg|*#gm7Rd*^=#&uW#A z4>N6N|Flu<%L?P`9z6*>Lnpdn0nd!5@TfWY+4S+?_a^Sl#W99y7hmj z>IU=iVao7Z<5%N4`dKp{CQqe*gW?HcbuS}bfATQm`XFyKMxGExTwh!!731f{i0cEr zsqzV7#Pvbu)ru#C5!VNvA;lBIi0e~jr_4S~ogDQnpXuAF?z<0@=WlO$O!0&;^GA%I z;>p9f4tSCnKQDgvoW~P-2pc(htq?Z#fjl8>>N$Br*t99~_%LmO64z zyZtp@=Y{P^#t*bd@t;l?k1>37#$T;)^G{;@Rx%T$_3%h}l6X8NgOms36UI}id_ZT6 zAFxa-aT1rJVvXXljmk5Q(PAIZ*uOYWnO5Q?#!uxFuWKue@ekv;R6aIOnO5Q?-o~V5 z+@Qj7te48i<|)%koW%HZpr94T@p1PLhcX_P-CBMsKb(_TaWv*q*lEnCBcmib? z<#P29kGF?;r=&hXXY83Om(4Si*2g2RW$wQ&tIg9byXH!G26Swp%j1{R<&pBo^A42D z<*{_xc3hq~E=B1ip6_JxkuqEC>c`TP7(bO~iXQ9GO>3_!ZH_Bv9B-rYMBR&Rk;`N0 z(w4eB(jHnH>+)E75>o^_?DE9r8sMkxUtAv97x;KysTe;U@uj1`WW1k_6VvfyI&w@$ zl<8P99X}>x0(Bgkj!)B(X*yy}$ExZ0G#NK2BjR-2pp4B6#SO|hz);+vjK|Y)bTS%H zMi1)9IvKAhWAkL(po|Zcaf34EP{-ZLh(sM(C*uiaOrVSvEE8uKiWSsRd^+||M-0m7 zN*SLiBPux-HRC8b_b1(q(?~a%bpMkpB?tQ)OpKqm|gTH0GS%euIU}Ea>@aOitQRPXVBFtCF^tuKdkyioXn|%!a=Vrp(eFTD(WlB_40C zzV0!MBifYwMVK;Q`dkObJ8f!D^&(7}4Nn+|_suvwrWa$% zf5nnh6@M8_nGJs#O!;O1V(}h9ml$zndp-ntRxAA%VamMiuRp2y%V5fE_{(6*FZ)4@ z_XxVgqWj^fQe^>lvFl9FUWiaKJ{k6r`Ps{pa>Eq1{|KZe86XREe zDf96ETT%RFFl9FUWiaJ8;|dpBA1URxJmby3d&gSHvs3B62vg>(9)7dpFM}zw;V*+J zv+*&y*zc31&7bk7Z-+cO#?OZ-=b1l$K=FhyWivb>93_8FjNdm!OxlYgZta^1yBp(2 zeiN%keiP&8@Qe7p7e!p$iz1$Fx8xCVcchybKgTyH`Q>#(d4}W+U8{^9q-;`GA};Pl znU9FUBR$cZh>P1T2 z_>rE-5aQ3t-^ABB`Gn*YadEpPkBGq|-Ng94DB|LVrEDU`kMu-_5PweoCce(eCnTqc zi`y-EL<}D3CdO~Kh>IJRvWXZ!(i0g%{5koX_&O(_kenheZnxwSF?gh#7{A>jE^b)L zCSv?ZPh<%3=j3nV>zsT-a*DXP-I7Pd;E`@({C11DxM3-qi18ymks-vNlfQ|tbMgtv zDdOUGOCAw}N4kme+b!bahNWyG#*g$wh7f;F{wBW8$tNVIh>P1Tc|;5z=_bZ+w}^`y zma>T$KhhH!Li{=ToA^2>pOBm)CT+Lm5%FxKn;5^{|7v6WhNWzvn>aVp6B$DMIr)3@ z3CSt?dKu%V*17a=L!_G+KZh=5lk&?vB~MO1iOfn0j zmyCQa;H^9#($CH%bj5Dcc>&GsKr7yhheDpqSJDYh}$1XNiK0eH}dQY~d$|r<%tmDuCu?>OI-i^VC7CV=0@X%*ThBkKU853BOzz>)6YkDjy$aTD>RRPL+=j!cG?vW>ijg2Kw2pfA&o)9+u6nR3} z^iAaP<0$@<>-ofT9bDpM{ca@_#$yS@UztChPY&I?UsfEGqsEFz>)~-_h{qvHhIkE8 zVbJ6KuacM?%_m;3G-(+lp)lya zJ=uct#N#NFmhoB&gYMgtEtpTd9%|AuUQ1!neS5M6^NGi4CN1N&6b9Y5C!5Ge-bYp6 zOx+kTcfx)qb@+Cyu%T^>u9{fo;JmrLD$+rPLxvM=!Qa2GbcC);GT3!C1P?Etk4o8FV{P_+x2 z-jnUfh`X@qJ=u;^yRhj!+1k`DYD zxjDTj+fudLn%c&pN&%(tEOXsHXw-o@_htJmsT! z#*cfl@%hS!@N6LWWSfhp8E=pGWIF@TJZ_HnWV->+UcNKlldU~^49_jDTAf`EQ6)pF2a0wG~dcL z8Rh1)!F=o2fvA56qdrZ?c{OG!8toLxE?`V9q2xEt_3q9>OgRmI8BFQHrVajZH%3#VbZK=h31YP3s zQN5oVeT>DJ^6UNCh6c)D%53<{V9GCTzQub4UE=Xky@#9H`>_yHX1za~+SjoVQ)a_o z22+07H(9(#&?O!p)qA+nr&^3Dzuup%Ia&r&X2V|wQ-0ZpS`1&b+Rsh}xE2d{pn}wpYntgekw?pKY&_zX(%i!&3%R zelsRTS7P7^i_zsrc(RAiMXs+az8f{1Lo{I zCt{+wM_j@qVy@Es-aX~Y=s}iC>Po~xaX+_2pCWF`+2>8fN39gGUMod>6zL|`D@boO z|B##_4vPD^nV7B>B5umr=S{>%mEF(H#7&Xk#DF<_ugS86@(;-=;-HwPiRoG);-;Ky ziTJ2~c`XqiMS3E0h~8@cAvr}H6!&v8F2mf)lh+dQQDygYGjUVoPs$?VvK(E7@(;-=;-DzAiRp6oMw8bP@lj>> zb2D*MxBoBJH4HcqYwVp)8hTy`r&iD0v^W8ah!pj+%APbll!@y1D_*zdbZi1Kj zws=3c4e&N|r?-1>Y=qDGmUut6&Cvt!)82ve9q<=F1mCXS&+RVwkh#;_dvLr3Uf3P+ zer|7zK8StX-ib5)w;zS?R`2KbF6`vSo!&l%Gjd@RjN5>iZ zFw_2W^~V)Y9$xi4d32ni4{Mn}q(}eLLH-b~*YtfSPYBm)`ks;}gn#&wzF*`C;V3#p-3#)B@P{AQWhajh zQzw@`+6DdSI71&M&ld-Oh4Gh;GxTBRKlHff$-|NQ(=mi0+?;+TuBCZG*vQFig|Mj) zSE-gpEBXPY5Udi^_-nk#6sjZu%zv=Eu60(B2xPv5ZTRI9YezP5yXH;ymM7KxYgX z_k|m=*Gpo_R>o;PJT8Aco>4NyYu^fk?%NkmT+7WTUI!oMb!DEQ$NO}J_Vse}iN{MS zADJiUj59=gOJd1@Wm<{l9!>6Eb8(!Z%E#s@(@Na(zHmYP#OwH~T=5uBVbB?8sN?}X z-fK?EAaTq4!U=hTbz^`!b^ml7Mx8YE$KeUo4Z-8e9LFT6^2Xy;g+cf23+Kojs6XOb zN!*~)q2-tDFo`o%JmS7P`B?o+em9@M{c`d_84LI53zS{t7iWMAOp zd8OhEb<~-TK;xTVP0XQ=RnswSI(kh50tTs ze2cA#QIxTZe4DI^d(^RiGAdF>_sN(>8J8&I70bjrhT;`EAkNH^m{(hb)6XXn49n=vZ+4JO@;nMpU8bTi&2 z-C)wqSe6+TKKN7EB-Q=vKjs|Sl0*LmR-y`VCWL_{(cqm=vcubtncHO z6n`14b*uTyV9G4*jKzBdUE=Z4YajkB;58@>`zq(fYrA4dZ*U)ZkB$}eVamC8>eY%TgejZh3E?RDb7BQc?eivL1<5}Wzx$Q@!i~i5 zgnc#kg)?!0&UHmhowKK0NKO%(=j=@v4Y$e&cxR_^j7l^$tmLNoc-TKtRU$l@q29dWnVZGcUNkkHxa)_{{HxVxX#{g zvMeIL&fyX9b)=8P@3GyNec?=e-LQxu9BwuLkenjE&e{J>#MhBN62HfGU-pGF@pYy4 zc@wdMd^YJ%VFtD zFN38IzYLaZ2W7Ba6Dfn`T1*iZdQdc*TyBUUj;mp}i<+IrX~ZfjQs#^5`koEoA%-@E$K_K88nP@(=#6`AJ$IW;}o?dmc7= zAWsMz8ORgDMh5cuaTNc_^&Db%-D>Ht)($NF)!+0RZt9shhdu&+*sE|pGVT7rT2^^| zV)@;aM$@DWGA-!dvcxY*WS# zu)P>ex@^}5lP=r1!KBOfZZPSx?Hf$Gv;zi{E^UIrq)Yo?FzM1(7)-jc8!VT>@jZ&~ zquWMg9ecfC>cQBwG`9CT@zpqe1bsC-wXX(rKNkKOwYC!bWE?E~GivR_@JKpk^VKoZ zeRYX+U!5V{S2svEb%5B|WEcDU6qfy-!14Q%?! zJp)s!z5SrP_MJPjOjc+iewmD(;27BFBUSYMZ2Wcv{v8SGLi{!xn24VXRnKuW zZ2GaV{YT?CUfFZm-c1{qw%r}$*>*=BUmGO-H_gt=c1`(BduN?_z1a5sQI<& z*L3h~m3A`ZGW?V=jiX)5UeIYV7w}^2!<*3kn0k)XU)x|1C;HKID6K0!x6)Y0(rCQ5 z$@v&DderR&r(ok=S{HJ8obq&J_*@8TL!l)YB^I_ero@4(}bI?c5K`(beGzC5F z4D_mznnTUNc?K|_hULuYc=U~j;Ttj0LFkPq;UAx9n}p*e%)t%1O z)fek_r=N*4m_8R`ZI`T_vF+4tSV@-GLiLxy*UD%c(h2wk@I|I9o)kAQmSA!$nIXKTzqg{?_kHT?` z@^s9_d9G?>$D`dJhhtu3>j3u{H1$DZ{Z0y9hxI!wvRIE9G@ZEIzJ+>kL&+b;oDZ6P z0*kTUQ%m!QG3Sqlr#0NB=HNyin^r$3MLp;?D929HUKx7Xaa7yj)9@j*L9Y?UIexrz z)Y8k~w!uF~dPJpFj*sHK<3)CcUFN}G@Mbv2J4+dApmZA-WInL4-hroevN8{0`W zX46>P*cfMQshdCRs%bCQe(JPo`-w&i8+tC{Lw@ngUgcw!n7`^j#WP}fmc6SsGQRkL zetv>Kp&M@IdE>3y`yYS&ZZ&2B9ya*7@mu@besKE$KP3;o56ARj$)CzI$wyu{lr|)1 zNCxl^#N~2yl9C}QS6Wxp4{2_{6h)Sv;E@2&h?JSvrQWC~f$7^xqzqEGLIzb1!!OGvbsNGmpAe6vOa4}|ls}ZGh3I(n$dhrNj3-*oLN9wf_J=tO=i~9c z59dDYAhQxQQW{Y|{;dQ$6MMeYajs)D&7Ev&IM*;DJ`6qhDL9{k5%E;?;}x7M7&T8r zzpeda$Kvx?eCNox6aP-c6F;3ePKc~6a{F#O-b?uklKDHwc(QM@V`=sas!w<3zZ2tX z>O{}eC&txm-}+D5%GV#3`@l?tg)w7q?h($p@j+HZ0=f!B(F)!OX{$H-vF7;yR{uo?u%RO&9kimf594 zw<>LXFETj37s^*`c#LdJYq8d>90zGE?G|}L--C2D*2|_dc^RLgxxS*O(xmftcv8G3 zUzwkwrSp;B4K|-Ly`dRd&3EP7RpUtbP4Q{zI<@?+(`r7GPX2DLCuu_iF25;<;g#Qg z`5V5p+~&LaUFBo+nEEt4QZB`>${jAVxrX_a*D!gSd?b&d86I=pG>_ynznM?tb5Haf zmnog6%0vAo{N5;+&Bvr*Ib9xkeZ%F-D)|qO7GT89ofnVB$oL@iZR_D7@eNsslZEcZbLs?!M_8eNjOh}5KBQLC5pHQ z;8LJE#@lD%d=^IQ(=pN>#CZ_o`xO|^pM&!`7_%?LxVsvzdMeeR@15r+qe<_RWqB+F(}`QeCdEcrFoHWo^E+P|p_zZrDao~fuq+IKnyHS_=+(@?`Weq)ru zWYiqS6->u5BQ+kAV>5%5k2JoI=`q`QQ@q2)i{XQ78ed`v!$+3zgs|;r-Lag#zo>8C z@tCb+dE+#urH}E1_VH#2N8q8)@OYG|2+v2E3{M)%dhTL7u9IUt_?%_x)5JnwK?3Ki3T$(p_CBM;C2&3+eS^ebWxPB`BG`9DbbQmLvSZ`r$^{MJ=!XKg=+aC8F8Jlm$(kzR?Mz>5`23tMvRqF!UKIG%L9xDEP z%zlS|uKyhVL$A*~?N>BurJp>O9 zkFfNFCo|XZ=?!v^SovhyM7LO@@$#s2ah_afN%9f;5*w^SHgeV+Cel zCu63!5J#_?w>5BXL<5+kF2M|OK8`LmBj9r-jES0x;{fHeorBpOp7+3+&x)LZebUz8 zyaqGQ^RXk@cKo{;JN|FSaXxm{zXE&w-+|*+>}OWN+;%qh>)(L$27EskyYyd=^Yxgk z-iH1EFT(jEwX^>=?9l%v9M?oQU`PI~IB$(sW0$o%@eb9sIIhDUXB+Y6*sE}?$Nct8 z%v27=O!*v~&%yVL@rHpn;NO*alfWBrTpXCcxN}d=>-1Pfj#u6Jf|-Zvae`ha((^&R zPDI}z#y@dB?)=n_i~M8Y%v@FYGecuPGY*VpNPLp^TK_rbvuwYxcdFg*56sAXzE6W| zot!80oy2@kD%U;^!TAuhKt5YF1!qPT@+}=^?IX1ZzNlkn9_P-Nt*`#&t!tpp4C?Xf zmzx&rwF5hj_1EDjPRshtw8n27!tOlOlq+5T_r&WjYA)c#7)vYt_~wABZ7M%J{4xb= z4QQXE_=jfCe9~3o54~+3_ z^vTm=y!Y4l4ICWf|MBaA=JXi<&tE^$oRQ$4H)qE9KYl%H@YJ|m|MBbjz`9&%Z29L8 zN=$yrZ}@$f_nqyB<;}xJx2B#LeoNP_Fxw_&8zoQZdypQFY2@z`%j>4;^1H$2)1;F! znemh5asBg_u2akJI&D6`zLv`)udj2pI`ZY2@FZhB@B(B#bQ9P;N(s?*Mu`HHnx*8Krhi8A5>KW+m*U!ctg;Ct$ zIF7|QtQVuHlW=f-`!tNR8W`TdQnWLt(JECq?k^-Ep7P8 zF`YJC+VhTt{&UB+TYElB*y>rz2HSS8>R_rJkj6h-7bmdRh))k}IaAPn7_~AP?PVIy z9L4F#6-JZKK#gbQ%1j)y(DwMmBqLWCOU|bz`3@t-k{^TCa4Zh>jAWB_jD4W3{}R78 z)!-QB$jg-OLxbIq#NI62($dwx0#P)zp>&^W2-}s5A7T(G`1|W#vyt3_j*T^ zj9q^-*EOt-<(OHHpADWJ97|(8O!@HjIN6Wk?^b?z@`NzzM8Xrqv23*Y(#}iUF73Ir z;nHqPTP^Lgw8<88ysh3-Z1>w!EW+!^bEJRxkX9qpa;-ASC{N&J42 zF8zDbrx)Up{=*bc;tx#AV0~q>ze;>=Y77?hpr3Pj0zOjFA13)In&o%%u`*bHpuCpw z@6kt^_(Fvrk9tmYD13dTo-YXT=j5OGx8;2a$;o?R$|!jR{WryLPyHu)mRQs`=N?IV ziTXSu^(pUlC?6@qtBHj?PTfn= zRu04YFpRuT!W?NC&dV^DYQyZQ2j?ElsQ5%JpBt!Q)-)G0n$vLR+h!Tf;`*-VVB~f< z{>{S3?Qk4(q5=4g2l0<_QG+-b+0=x``fME6!KZx|Jnm=UxEem{)8T7A7sn0o&##2< z`aJl(FUR?E_^rhziZ$% zzY@n~Vh-hwAw&K^J7#lZSIoFB_6aK=V4h#vH*R6t&=^3@zof71^*R@m{l4_4nf4*u z+ytfuWWW2`!P1A%xu1T1VTv;coTWS;e46UeQggr)U~lHZa?OJkTmYLSo?lS@2R%33 z%ryfarY+NS<>ya$XcHyB z@a?O$iOG8HAi?l2DgM~cA7ka`S2*_bD;)dz6^{M<3deqag=0T|jFq2X;n>d~W98@f zV%VaDE;0Q4O6GWO;>D;>V{EA`V;(m8A&(z37yhN&dD>4af0z70x|$Op-}qCd5t!fk z$MllN(A1Cd?}`>kD}S^3$XM=z{8hgB{OTGnE1sM==szo?mMf&cG=GLK)`!V2^E>ov z{^W1_1M@oReC7AF9O>W8_fT0>{^|0@-%Z{QPh57BUxZOE$Bp#!b9a~{FxsV`{~(Mc zkA?N8pPysYw%E_#tNMdQ7^gNc8g0k7MK~`4J`|(J<@k3P{EY|W8!?gDZ<9~p9*Cn7 zO#zKNa8@w3<=&f&#xS;2IQH`=82+CaD?fjN;R{kY_VXtgej$ZpKYxPZ zBT_i_^CuYoB86i=e}dsVQaJYWCm4RD7%M-2f-#0vn6};8>Ipx8w%xNG^3SyC)-a!F z(0+dQZ3m*(($9YYTG$Mla< z&+o+?0|-BVE{=WsiYJY&K9!$8)~AXI31Fi)@)TpM&v1OWyz|GUI2q_bk?B*K|LIZ(o&>JRuC&N${ebb8>cOOaVehvBmO|j zVEoUp-_H2T(i0wxv0NVOw|D&WzI@d9%<{YW$ZN$s6S2^qy?w-b#H$($E$XV{!$*Dg z)mvvRK&CC>-=?2GiCqu0m*84}lxKfqQ7-!VeR>G`|797aKVRl4c>;O}t_4iTJVN{V zr@+r&!H9`|{-ZIjS{Tm@4#sSOa}fIZs~A@ui+N82GZFguXREQ6-lzHm%swXLV59|S zA&1~N5FUO$1x-KyQp}-xF{h!QpV3h@%sAR{EW#XSx$^cihKf%^Yd`;~811F^%|09> zHpZwkB8xkH9v(41d;tIW^z(p<59iyqwV%JKJp0$;d@cO_=fb~FZ~xWs`=5uI8vXkH z@ata=Z~uAl^wZ;i9=>0Ie-|oW{slO{0l(0{PrpC?{TIW(e<=_@&x3FOdieG)gNOeb zoUg%mJN|LUkj{Kc_ya>@IWw-Kf6Mr1Vn2T}js(BZ0qh)&?|R|izRgD_(!Tn73++=R=YVCvdgLn9J1t@iWle0*5&i+n}}j>arco4`$hR|`BO@M8k+ z9JA%x1#HUYVtcJ!BCY1p@`tgtf!vqUtdF?Z+OBBSu8Cl*m)J(lZ*;|ceAwnQB=-It z6*wBRJZ%Cu1zs)ikid@#ymQQ!YZtI7my7MSc8Ro_$LP(L#id)FcZjqdLjMgxZ;WaC zyqDMOq``gfn)CJle%UpkHXZay`a z`n48^dVbdGh69^7%V)d}gQ>|t!nzH2OmZP|B? zg|M}I&ff3h9UKvCsTrfXV{g08Lb_RVaj{)P85#*;yPh&M62d}GVcT6hZ+TpMZt1Sw zwshA%TRO+preAQ!=T;}Ao3e+oE&Hyq5VmFCH5S63{M-)*U;2-E1A8u9IwtW|Z+>a; z=O1~XNxH;_XX#g}2|uynN#h^h@Z%(Zi61=S2TA@RZ1|a{#D<^r5T-o;a`q<@`P10Q zNxI3$@G#FjEcw&;ozD)B8huK<`k60{8huJ^c$kmGhKF>CSMK92 zoVAI7-`?Q~`0a!17xsFu?R7(0uKkULPJ-)7vd&0;xrUN+zlxrxD05E--g3#?M*id% zzuaxFPc#&wj|BKbbmlXF{8xJN7j!v?Fq}ioQ}Bf7-n8-jKmA+cM-cu2=4<%UpXQp1 zXGDL?;>62wi(@h!6(wYBAK%atc%IV4FdY2AG4OlSob>v=QH39 zs;DP>DtNl*RCtIu%cSv9{6z@K>Xy6 z$Y)^{@-(axo{sbB_|9j5xZ-yS)&MWW>fe<(^U0no@Z8X4IA5lo3gYuZm*O}Vzg>)V z$SZNI!OG&**yZbT9INr$Dy&1EkK-DwO5TW_u&%{%J$B35h&{2^;n;vZwr-EM;k*s| zWo^aoTHGaT3wGVwg#EGBfak90 zEz#R>ep|F7Fu!wsQ`Y~?d7PQ=yuSQYwp{MIhMh0S`IPI+a@Quz{NnZH*RpzW*DqYV z!EeSUPhhQ^2|eWLK|Y@){avl@(V-)Ek4Hao40<5{x~=qg(JMxeKYd-?Z=Y|-T8h5K z%%juuZbRpsD2>fL%QxpW{AO-t=90|chskf~2AllL%=@gZZpHsB>u7qsV!oSCb2m*p zH=hYTH8xA=X55mDE%YxYU-OyakJBY|PySMde0(TIE0fh|WIDzed>W8%44wslC)bq@ z!ojx~anHXQIJh5^-4n+45otfC^?zFZ%RY2s-CxJgr~QrA4{6uOC)WKZ=LeV#xEC!wKEursIn<)=-bPq|M_mq3=Pu z$EK$9k!kk_R@W1K1N#Gc9sbTg(@&&-OXz{JsI&tr3w2_8lg3apdB*%fy17>T>B~o^ z-5;3Ol;t3n-xHaPtOJIkKMimC({Sw%nJ4m$buaG4YhNd?X53D3?9B}r<=fbs zHStOMD)@0`;J6t6ns2T&YbksLCT{8=*#0^!`%+N4@JV_dKBa?jRAAS; z6oshOXfDQbEyEhiGV~$zZSk$`TyvR=?=_rj=r@*tM#?Ezr(i^^`^42EuI_V5!p z&m9M1VE&IigDmCQ-&p8mBBl%b22dYT=R!XNGA0TJ^-X_-8n?ioq=V{m0-F0>= zkLwGyYwqs)yXAL%q;@U7O{~#3$9|ox*H;AY5V#@mB7y4ycM7~>?D8bWpdxUGzzu;H z30xPrQ{WY2Q<6A@iohKLHw0cJa9!X|fmeunQW3aA;D*491g;C*De#K1PbYB^6@fbh zZV0?c;JUz_0LVtmr6O>L zzzu;H30xPrQ($?ID&l^12;2~Ok-&9?8iyGRz=_rfg1uZ61XmKr@$-58cB>q=tMDq|LR2;2~Ok-&9Jc+%_DT`iL?`X zn5Y92bzq_nOw@siI`ErV2iD_R<=gRW^6hx0na@10#d$5BdtQS$*!4KC$1~5|8Tu5p zi`9t{-vzlC=f#MbosVbCxl`Y%i2v=tu>@y6&vy!bTZ;2iL|&bW=-*D9I}sPP6j4}x zIQJo1icwj;IQJrcY6*U8;M_pORxf^Af%6JP2RHEBa-5e(1Bf23BNn#@2jAz@kC@rz zI0o^ZZ;?C=$LUDZL|iSOG3UD^&p>SOSt>sGZ19~6j&l)bdnWkK!utvKF- zG^j@6b z8@(HR4@3{+{BZOxL^E%IG?(GH5)sUIAmt@Eu156p{n2}Heh=cK7vTI5&JU@Y@d#2a z#KGG0Fmh|h(S}Iw6HtS$!0}$hc0UN&SK+t@@!xl&4ql4mD#VPx8PDbO+5GFGPe-4M zK8N$?qTh`^5q&b+h4U`ZekXb|dIslbqNk&eM?0g>;QX2BDI8BnpU3(0(X-%tD*7zW zpN+nN?_Z3*j`P=}ui*Q$(Q`OI7kvr&ej)lA&R>hZjPGBGUcmW<=tX@0QuI8|&quqX zuj03F;QWo~oA~}>^evpf6^-Eg?&$Y${yi*7y$}sY-^Tgd(HMRki+&&H-;e$fzl}uS z!TCGU_o8v|eHZ8NMt=}}EP4W^`WTM)M;}JnzKZi#qxVH0#Wlup9*-VF4Y@Y@AkH5I z{|!j>J)FO%TIqL?^Yu8`N`F6k3Fnuftq4*${L|t|wp zLF-{+eL?G?Db@uh))%x+Ce|0U9wycov>qnb7qlKG))%xMCe{}w{QTN0F`-u@1Fu#c*Z_a_Cisr&(Y^t`%Z)g11noxnE8mRso3X;M0RG~WaONsP zJAA|^<9ssK4;I3Ad?L;#V*TJ`c+R_U?!x-PiTJI8a|P=MC*e2lEz75_m*J@6T!$CG z0zSSwvm0v(Rq*MZW*hk42d{iLjuoKwVkM!5V>!|^u#!;6aT>m_!0JK2T16PZZ-bx? zV*OwxemfoK)72`%*;ofS9mjd#I|p9>GjN;_zO%33fMkc@ zI5L_7`Bvh*5^D?xA+HN?zCf)qT!7qW;h2UMhKrEH(Krsk3d4oS`3M{{u(B{otuh>s zs~wE%HgRrZjbSRv)rE7H+TC|C{OdDuoPcYu$Lhh&YRB4*kmD9;{}!wt+zLr*3qSV; zoHt;N;Y!q%J8-@OYYbQ88u#OTKh_u)V6BF$3~vPge585==SNg6c^7h?hoc>}=iOLY zXv4u(hWFz7SKwHM6^8pz)@yKFiWP?2QSYw8aXD5Co`HA#X&j%2SNr2wG592oUGR4Q z4yZeEdPO z;ZI}9Lu{T?HqQd5-&-Mh3^sZCo+*|*#HQ!5_IGH+(umA=^J#wl-|e0Kk5xw*$Io_I z3d`HFEDHq|7AQ!Ih@}wTWbeHSR04rgY%495#+N2-(nM114;r;GRufZ=v8GjHjc+wg z)L5JNi$Bmy{{VmBca!}i`~&=aXXZKcoU`X#E@>Ny*?Ti{zGv<;FXuUP=FIbQXI@GF zd$D7gp7Jk9H~NpXe68R)&ixzb{%HlzHN;v)Tq}64Bwoo_rWHJw6KnrZ{>NnN3ijCN zr4h6KWJ;gtX@A_PyO^zD<&A4IY7gI5+_$`WPZ`Q7X3I7G2I1nJ{r}{5?h$z!@JK30 z`}byitAg1hIMx;S2o6|#`KnB{O;~wV{tVaAhBL3`yB=p=#q`LNLD<&B79ZvVZ&hy- z7VnjAZEM4Mz0h#KN}lJnxWhe4dxN%PuKlKXlK7c$;7N(w_FRUafhO_urnOmRHsRbK z0>s^EMr^KP%JdAI*yOiz3cG)>s?nKqO>FR^&w zcsl?W>Ep*oVSg@?w)58XmT}k0s*m3xy_Tn5c7>)!Yvtnx{=BJt|GTh0)om%5Y4v01uc7{Ut@e9aXUCA0;ds)}o>*6vCZxG?B26qe*5~Ob zi|t4vlY|Y-oR%T6+(Xcc`CE}%HxYIq`Ds^{wMcmPfrZuvG|LR?LB30i5#kZ5*i+1g zl(-M?9Jn?zXk03u?A-=--XpqWBk-o=}#Ex*bg)oW)_5^1;30shEPjNOy z*a@0K8ePwv@DbuiIM=B);m4t4ReNWoM$puD(6(9kMk?h=Xpgavz+I+_pHiH@AT?CgmTinB9s|v zVjB|ug!8RpZct2E`F+EBKf3ZO?_XCw^s%n^J}vmzbGL}af%u6$(GxhvbEsWmM+@y( zpdFg-+8VfD#oS&98IyK!Gv zDMZ%U0HJd5#)oqWtU(l9iPA?N40m%y1oTxPa#0 zW0yOdxu)CUZCsPl)N$ss=JUqqFt_j8vz&RZbmQ%CIP-bFI}FY|pYINX^RpcKOd1Eg zOqa)>ICizmdd72}{q8V0^MAfOEROt-^n-BT?=|%2zU$j1hM#@cpBpheEYsUCeayy5 z^|un+m^nxe6}|DQ4b%5-X8sJusecCgI?nex^wo5)Ltkydwr6hWtBG&zIP){~)x@`U zocS60YDwRgZts-T4?~-)_!iHpz2hP_-YR_8TF~ znqhI|bL{_vagjcE_nMQ|O3gw2`iFjPL(yn&U;SR4tNQd3Bd7WKY*GA@^%b>-qRL75 zMx7>=A7s2tUo9uMp}Cy>KYaN85B84E>FBS8^G-_FHJ0l){^Nre=Vt$Pt)rt~3a3w6#I za(%v}ar~^T=jr%Xc^=)pP@kMrnQFD;x%zO)x3=^3MUS{SXfG$x)UGFNL~D8#uZYhP^uOZA@s7EUXU#cc`R9BCo#&&( zkK$Ex2F>XN-^=*3Oc2hX@%$S4SNQ~e77v@p(06{F@B$teFX4IfWx`WvDz&Thmk7_| zsq->kFkdBHK}-8Qo;P14JcmB_WYC)KN1wWy&_hf61@yWX(RQ9CKFj%c@xOVC_$~Y~ z{)&&rYs9bNqwzibblxO>6R(PQ@#FXbJ~V#>>G&?bDDU7w^LN6}f@jaGc_|gsVDR=~x|2kTH>a zddM|BrAK))+TuM{K4h6dBinJVtE$({a!Rv~MdegwGn%eq?9*<}n+cm3iB~hCuOX~p6xNPv>j;yKiqdAUCrmMlZe=9j zM$oDXvyA=Q33zZ;p5S4|RM5zALdD#jeeXPcb#d*1q!C zL_?ZgcO`G4wY>J5(YB^rK3A9Ju`+a2T0PyDX}C^fd7F-RpZ~@L@3rl`^S1Mz)7x@} zcqY6XxA1n`NZ7{PaRqO{HM|oyfQ8lsbdb6JDI}0n$RzsrLXWtI6yw(^nnVVf<6Sz( zJ98h$b$rM1fLIs2Ahg5XO1@f0>61u3!a~!?M5}neb~x@JO!KBb&Dmzcj$#S&&i#Dl zHzH3FVWEeS!H)CYja;O)m5vi12XAH$pq*QfQN}L9X4*1`oH0w-#P=k!+9tv%lG_;Z zDEKh(Vb1gWy*5Api2Nw>{C3gjf#f{lm4KAU*hjx#?$9>0P-ZxnBB z4(T!T?lL`Me(I~(SUom7;{@r37j3n=7tvN2{S)dq^J>vnyJ)Ko zHnLWGLDC6p9_ZdnrS6*a67zeNrb%C2r)knTx6p*ToV}oIkJn>+dxzIodmD$>X?uH$ z*NuCfe;fUP^6$uY;CQ$|=WqP+b&0--x4xbJT3q>oXO`E~*UQiMy{yaI%NE!UR0sF1 zVsr64kH42Ri?%KN0>llw7vi1q$lnXkL(dz4k3;t7JL;cp<+rs{*U{E*tzY?T z5q;)EiT|gzt!>Puw;^L4Ldsi5ybk$Hwyj;nyNc~ddk-N6$_}*&3F|&)-4n=cN5b(4 z^YduK+KU{yD#(+vVeMqLzBAaXK7|~4kT8v$wiPLGH{md{*!@UdvxEakT|1E8_7IMt zZG8|KZVO=_v;SpC0p5nS9tm}l?;2#fNy2)pSErH<>nawvOIWM4>gtO~eJ7IL?JL-` z9><<_4%^oCaJ-IHOBOo)ANvU;!!Gu$Gg!4Q6JO?B-u%(FrL}8cNVcuVuxdS(Y+Em3 z)p|DBwzS&qm1Ns`8LQTF$+q=8a`8#z;~rKm{oh{yXt;=N>pb7HShvm-F1E-oHQCeY zkh6@SIc=653`@tXxxMC)gX}?h4xH!4%A4m))p=&Nn^gb1M|;d3)HnMJdgc;SCV0^n zQ|4;OUv-sg%8AL-Ajq CYl-Fn diff --git a/public/assets/g/polytrack/models/signs.glb b/public/assets/g/polytrack/models/signs.glb index 55086c53e3d2eba0b2143791adb5f155fe395e6b..7284d6c8b2d5333c9387d0f3ca79ef619b094175 100644 GIT binary patch literal 15940 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 Gf%1Q-WCeEs literal 408268 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�iPJZ`PjzrZUbA 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 t={312:(t,e,n)=>{var i; -/** - * [js-sha256]{@link https://github.com/emn178/js-sha256} - * - * @version 0.11.0 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2014-2024 - * @license MIT - */!function(){"use strict";var e="input is invalid type",r="object"==typeof window,a=r?window:{};a.JS_SHA256_NO_WINDOW&&(r=!1);var o=!r&&"object"==typeof self,s=!a.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;s?a=n.g:o&&(a=self);var l=!a.JS_SHA256_NO_COMMON_JS&&t.exports,c=n.amdO,h=!a.JS_SHA256_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,d="0123456789abcdef".split(""),u=[-2147483648,8388608,32768,128],f=[24,16,8,0],m=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],p=["hex","array","digest","arrayBuffer"],g=[];!a.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),!h||!a.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(t){return"object"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});var _=function(t,e){return function(n){return new S(e,!0).update(n)[t]()}},v=function(t){var e=_("hex",t);s&&(e=y(e,t)),e.create=function(){return new S(t)},e.update=function(t){return e.create().update(t)};for(var n=0;n>>6,s[c++]=128|63&o):o<55296||o>=57344?(s[c++]=224|o>>>12,s[c++]=128|o>>>6&63,s[c++]=128|63&o):(o=65536+((1023&o)<<10|1023&t.charCodeAt(++r)),s[c++]=240|o>>>18,s[c++]=128|o>>>12&63,s[c++]=128|o>>>6&63,s[c++]=128|63&o);t=s}else{if("object"!==a)throw new Error(e);if(null===t)throw new Error(e);if(h&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||h&&ArrayBuffer.isView(t)))throw new Error(e)}t.length>64&&(t=new S(n,!0).update(t).array());var d=[],u=[];for(r=0;r<64;++r){var f=t[r]||0;d[r]=92^f,u[r]=54^f}S.call(this,n,i),this.update(u),this.oKeyPad=d,this.inner=!0,this.sharedMemory=i}S.prototype.update=function(t){if(!this.finalized){var n,i=typeof t;if("string"!==i){if("object"!==i)throw new Error(e);if(null===t)throw new Error(e);if(h&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||h&&ArrayBuffer.isView(t)))throw new Error(e);n=!0}for(var r,a,o=0,s=t.length,l=this.blocks;o>>2]|=t[o]<>>2]|=r<>>2]|=(192|r>>>6)<>>2]|=(128|63&r)<=57344?(l[a>>>2]|=(224|r>>>12)<>>2]|=(128|r>>>6&63)<>>2]|=(128|63&r)<>>2]|=(240|r>>>18)<>>2]|=(128|r>>>12&63)<>>2]|=(128|r>>>6&63)<>>2]|=(128|63&r)<=64?(this.block=l[16],this.start=a-64,this.hash(),this.hashed=!0):this.start=a}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},S.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>>2]|=u[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},S.prototype.hash=function(){var t,e,n,i,r,a,o,s,l,c=this.h0,h=this.h1,d=this.h2,u=this.h3,f=this.h4,p=this.h5,g=this.h6,_=this.h7,v=this.blocks;for(t=16;t<64;++t)e=((r=v[t-15])>>>7|r<<25)^(r>>>18|r<<14)^r>>>3,n=((r=v[t-2])>>>17|r<<15)^(r>>>19|r<<13)^r>>>10,v[t]=v[t-16]+e+v[t-7]+n|0;for(l=h&d,t=0;t<64;t+=4)this.first?(this.is224?(a=300032,_=(r=v[0]-1413257819)-150054599|0,u=r+24177077|0):(a=704751109,_=(r=v[0]-210244248)-1521486534|0,u=r+143694565|0),this.first=!1):(e=(c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10),i=(a=c&h)^c&d^l,_=u+(r=_+(n=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))+(f&p^~f&g)+m[t]+v[t])|0,u=r+(e+i)|0),e=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),i=(o=u&c)^u&h^a,g=d+(r=g+(n=(_>>>6|_<<26)^(_>>>11|_<<21)^(_>>>25|_<<7))+(_&f^~_&p)+m[t+1]+v[t+1])|0,e=((d=r+(e+i)|0)>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),i=(s=d&u)^d&c^o,p=h+(r=p+(n=(g>>>6|g<<26)^(g>>>11|g<<21)^(g>>>25|g<<7))+(g&_^~g&f)+m[t+2]+v[t+2])|0,e=((h=r+(e+i)|0)>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),i=(l=h&d)^h&u^s,f=c+(r=f+(n=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+(p&g^~p&_)+m[t+3]+v[t+3])|0,c=r+(e+i)|0,this.chromeBugWorkAround=!0;this.h0=this.h0+c|0,this.h1=this.h1+h|0,this.h2=this.h2+d|0,this.h3=this.h3+u|0,this.h4=this.h4+f|0,this.h5=this.h5+p|0,this.h6=this.h6+g|0,this.h7=this.h7+_|0},S.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,n=this.h2,i=this.h3,r=this.h4,a=this.h5,o=this.h6,s=this.h7,l=d[t>>>28&15]+d[t>>>24&15]+d[t>>>20&15]+d[t>>>16&15]+d[t>>>12&15]+d[t>>>8&15]+d[t>>>4&15]+d[15&t]+d[e>>>28&15]+d[e>>>24&15]+d[e>>>20&15]+d[e>>>16&15]+d[e>>>12&15]+d[e>>>8&15]+d[e>>>4&15]+d[15&e]+d[n>>>28&15]+d[n>>>24&15]+d[n>>>20&15]+d[n>>>16&15]+d[n>>>12&15]+d[n>>>8&15]+d[n>>>4&15]+d[15&n]+d[i>>>28&15]+d[i>>>24&15]+d[i>>>20&15]+d[i>>>16&15]+d[i>>>12&15]+d[i>>>8&15]+d[i>>>4&15]+d[15&i]+d[r>>>28&15]+d[r>>>24&15]+d[r>>>20&15]+d[r>>>16&15]+d[r>>>12&15]+d[r>>>8&15]+d[r>>>4&15]+d[15&r]+d[a>>>28&15]+d[a>>>24&15]+d[a>>>20&15]+d[a>>>16&15]+d[a>>>12&15]+d[a>>>8&15]+d[a>>>4&15]+d[15&a]+d[o>>>28&15]+d[o>>>24&15]+d[o>>>20&15]+d[o>>>16&15]+d[o>>>12&15]+d[o>>>8&15]+d[o>>>4&15]+d[15&o];return this.is224||(l+=d[s>>>28&15]+d[s>>>24&15]+d[s>>>20&15]+d[s>>>16&15]+d[s>>>12&15]+d[s>>>8&15]+d[s>>>4&15]+d[15&s]),l},S.prototype.toString=S.prototype.hex,S.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,n=this.h2,i=this.h3,r=this.h4,a=this.h5,o=this.h6,s=this.h7,l=[t>>>24&255,t>>>16&255,t>>>8&255,255&t,e>>>24&255,e>>>16&255,e>>>8&255,255&e,n>>>24&255,n>>>16&255,n>>>8&255,255&n,i>>>24&255,i>>>16&255,i>>>8&255,255&i,r>>>24&255,r>>>16&255,r>>>8&255,255&r,a>>>24&255,a>>>16&255,a>>>8&255,255&a,o>>>24&255,o>>>16&255,o>>>8&255,255&o];return this.is224||l.push(s>>>24&255,s>>>16&255,s>>>8&255,255&s),l},S.prototype.array=S.prototype.digest,S.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(this.is224?28:32),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),e.setUint32(20,this.h5),e.setUint32(24,this.h6),this.is224||e.setUint32(28,this.h7),t},b.prototype=new S,b.prototype.finalize=function(){if(S.prototype.finalize.call(this),this.inner){this.inner=!1;var t=this.array();S.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(t),S.prototype.finalize.call(this)}};var M=v();M.sha256=M,M.sha224=v(!0),M.sha256.hmac=w(),M.sha224.hmac=w(!0),l?t.exports=M:(a.sha256=M.sha256,a.sha224=M.sha224,c&&(void 0===(i=function(){return M}.call(M,n,M,t))||(t.exports=i)))}()},903:()=>{},394:()=>{}},e={};function n(i){var r=e[i];if(void 0!==r)return r.exports;var a=e[i]={exports:{}};return t[i](a,a.exports,n),a.exports}n.amdO={},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{"use strict"; -/** - * @license - * Copyright 2010-2024 Three.js Authors - * SPDX-License-Identifier: MIT - */ -const t="166",e=0,i=1,r=100,a=0,o=1e3,s=1001,l=1002,c=1009,h=1015,d=1023,u=1028,f=2300,m=2301,p=2302,g=2400,_=2401,v=2402,y="",x="srgb",w="srgb-linear",S="display-p3",b="display-p3-linear",M="linear",A="srgb",T="rec709",E="p3",C=7680,P=35044,k=2e3,I=2001;class D{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+N[t>>16&255]+N[t>>24&255]+"-"+N[255&e]+N[e>>8&255]+"-"+N[e>>16&15|64]+N[e>>24&255]+"-"+N[63&n|128]+N[n>>8&255]+"-"+N[n>>16&255]+N[n>>24&255]+N[255&i]+N[i>>8&255]+N[i>>16&255]+N[i>>24&255]).toLowerCase()}function L(t,e,n){return Math.max(e,Math.min(n,t))}function z(t,e){return(t%e+e)%e}function U(t,e,n){return(1-n)*t+n*e}function B(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function O(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return Math.round(4294967295*t);case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int32Array:return Math.round(2147483647*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}}class V{constructor(t=0,e=0){V.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(L(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*n-a*i+t.x,this.y=r*i+a*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class F{constructor(t,e,n,i,r,a,o,s,l){F.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==t&&this.set(t,e,n,i,r,a,o,s,l)}set(t,e,n,i,r,a,o,s,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=o,c[3]=e,c[4]=r,c[5]=s,c[6]=n,c[7]=a,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,a=n[0],o=n[3],s=n[6],l=n[1],c=n[4],h=n[7],d=n[2],u=n[5],f=n[8],m=i[0],p=i[3],g=i[6],_=i[1],v=i[4],y=i[7],x=i[2],w=i[5],S=i[8];return r[0]=a*m+o*_+s*x,r[3]=a*p+o*v+s*w,r[6]=a*g+o*y+s*S,r[1]=l*m+c*_+h*x,r[4]=l*p+c*v+h*w,r[7]=l*g+c*y+h*S,r[2]=d*m+u*_+f*x,r[5]=d*p+u*v+f*w,r[8]=d*g+u*y+f*S,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],o=t[5],s=t[6],l=t[7],c=t[8];return e*a*c-e*o*l-n*r*c+n*o*s+i*r*l-i*a*s}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],o=t[5],s=t[6],l=t[7],c=t[8],h=c*a-o*l,d=o*s-c*r,u=l*r-a*s,f=e*h+n*d+i*u;if(0===f)return this.set(0,0,0,0,0,0,0,0,0);const m=1/f;return t[0]=h*m,t[1]=(i*l-c*n)*m,t[2]=(o*n-i*a)*m,t[3]=d*m,t[4]=(c*e-i*s)*m,t[5]=(i*r-o*e)*m,t[6]=u*m,t[7]=(n*s-l*e)*m,t[8]=(a*e-n*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,a,o){const s=Math.cos(r),l=Math.sin(r);return this.set(n*s,n*l,-n*(s*a+l*o)+a+t,-i*l,i*s,-i*(-l*a+s*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(H.makeScale(t,e)),this}rotate(t){return this.premultiply(H.makeRotation(-t)),this}translate(t,e){return this.premultiply(H.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}const H=new F;function W(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array;function G(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}const q={};function j(t){t in q||(q[t]=!0,console.warn(t))}const Z=(new F).set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),Y=(new F).set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),X={[w]:{transfer:M,primaries:T,toReference:t=>t,fromReference:t=>t},[x]:{transfer:A,primaries:T,toReference:t=>t.convertSRGBToLinear(),fromReference:t=>t.convertLinearToSRGB()},[b]:{transfer:M,primaries:E,toReference:t=>t.applyMatrix3(Y),fromReference:t=>t.applyMatrix3(Z)},[S]:{transfer:A,primaries:E,toReference:t=>t.convertSRGBToLinear().applyMatrix3(Y),fromReference:t=>t.applyMatrix3(Z).convertLinearToSRGB()}},J=new Set([w,b]),Q={enabled:!0,_workingColorSpace:w,get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(t){if(!J.has(t))throw new Error(`Unsupported working color space, "${t}".`);this._workingColorSpace=t},convert:function(t,e,n){if(!1===this.enabled||e===n||!e||!n)return t;const i=X[e].toReference;return(0,X[n].fromReference)(i(t))},fromWorkingColorSpace:function(t,e){return this.convert(t,this._workingColorSpace,e)},toWorkingColorSpace:function(t,e){return this.convert(t,e,this._workingColorSpace)},getPrimaries:function(t){return X[t].primaries},getTransfer:function(t){return t===y?M:X[t].transfer}};function K(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function $(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}let tt;class et{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===tt&&(tt=G("canvas")),tt.width=t.width,tt.height=t.height;const n=tt.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=tt}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=G("canvas");e.width=t.width,e.height=t.height;const n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);const i=n.getImageData(0,0,t.width,t.height),r=i.data;for(let t=0;t0&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(300!==this.mapping)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case o:t.x=t.x-Math.floor(t.x);break;case s:t.x=t.x<0?0:1;break;case l:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case o:t.y=t.y-Math.floor(t.y);break;case s:t.y=t.y<0?0:1;break;case l:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){!0===t&&this.pmremVersion++}}ot.DEFAULT_IMAGE=null,ot.DEFAULT_MAPPING=300,ot.DEFAULT_ANISOTROPY=1;class st{constructor(t=0,e=0,n=0,i=1){st.prototype.isVector4=!0,this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*i+a[12]*r,this.y=a[1]*e+a[5]*n+a[9]*i+a[13]*r,this.z=a[2]*e+a[6]*n+a[10]*i+a[14]*r,this.w=a[3]*e+a[7]*n+a[11]*i+a[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const a=.01,o=.1,s=t.elements,l=s[0],c=s[4],h=s[8],d=s[1],u=s[5],f=s[9],m=s[2],p=s[6],g=s[10];if(Math.abs(c-d)s&&t>_?t_?s=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),a=Math.atan2(r,e*n);t=Math.sin(t*a)/r,o=Math.sin(o*a)/r}const r=o*n;if(s=s*t+d*r,l=l*t+u*r,c=c*t+f*r,h=h*t+m*r,t===1-o){const t=1/Math.sqrt(s*s+l*l+c*c+h*h);s*=t,l*=t,c*=t,h*=t}}t[e]=s,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,a){const o=n[i],s=n[i+1],l=n[i+2],c=n[i+3],h=r[a],d=r[a+1],u=r[a+2],f=r[a+3];return t[e]=o*f+c*h+s*u-l*d,t[e+1]=s*f+c*d+l*h-o*u,t[e+2]=l*f+c*u+o*d-s*h,t[e+3]=c*f-o*h-s*d-l*u,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const n=t._x,i=t._y,r=t._z,a=t._order,o=Math.cos,s=Math.sin,l=o(n/2),c=o(i/2),h=o(r/2),d=s(n/2),u=s(i/2),f=s(r/2);switch(a){case"XYZ":this._x=d*c*h+l*u*f,this._y=l*u*h-d*c*f,this._z=l*c*f+d*u*h,this._w=l*c*h-d*u*f;break;case"YXZ":this._x=d*c*h+l*u*f,this._y=l*u*h-d*c*f,this._z=l*c*f-d*u*h,this._w=l*c*h+d*u*f;break;case"ZXY":this._x=d*c*h-l*u*f,this._y=l*u*h+d*c*f,this._z=l*c*f+d*u*h,this._w=l*c*h-d*u*f;break;case"ZYX":this._x=d*c*h-l*u*f,this._y=l*u*h+d*c*f,this._z=l*c*f-d*u*h,this._w=l*c*h+d*u*f;break;case"YZX":this._x=d*c*h+l*u*f,this._y=l*u*h+d*c*f,this._z=l*c*f-d*u*h,this._w=l*c*h-d*u*f;break;case"XZY":this._x=d*c*h-l*u*f,this._y=l*u*h-d*c*f,this._z=l*c*f+d*u*h,this._w=l*c*h+d*u*f;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!0===e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],a=e[1],o=e[5],s=e[9],l=e[2],c=e[6],h=e[10],d=n+o+h;if(d>0){const t=.5/Math.sqrt(d+1);this._w=.25/t,this._x=(c-s)*t,this._y=(r-l)*t,this._z=(a-i)*t}else if(n>o&&n>h){const t=2*Math.sqrt(1+n-o-h);this._w=(c-s)/t,this._x=.25*t,this._y=(i+a)/t,this._z=(r+l)/t}else if(o>h){const t=2*Math.sqrt(1+o-n-h);this._w=(r-l)/t,this._x=(i+a)/t,this._y=.25*t,this._z=(s+c)/t}else{const t=2*Math.sqrt(1+h-n-o);this._w=(a-i)/t,this._x=(r+l)/t,this._y=(s+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(L(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,a=t._w,o=e._x,s=e._y,l=e._z,c=e._w;return this._x=n*c+a*o+i*l-r*s,this._y=i*c+a*s+r*o-n*l,this._z=r*c+a*l+n*s-i*o,this._w=a*c-n*o-i*s-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,a=this._w;let o=a*t._w+n*t._x+i*t._y+r*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=n,this._y=i,this._z=r,this;const s=1-o*o;if(s<=Number.EPSILON){const t=1-e;return this._w=t*a+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this}const l=Math.sqrt(s),c=Math.atan2(l,o),h=Math.sin((1-e)*c)/l,d=Math.sin(e*c)/l;return this._w=a*h+this._w*d,this._x=n*h+this._x*d,this._y=i*h+this._y*d,this._z=r*h+this._z*d,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),n=Math.random(),i=Math.sqrt(1-n),r=Math.sqrt(n);return this.set(i*Math.sin(t),i*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class ct{constructor(t=0,e=0,n=0){ct.prototype.isVector3=!0,this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(dt.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(dt.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,a=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*a,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*a,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*a,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,a=t.y,o=t.z,s=t.w,l=2*(a*i-o*n),c=2*(o*e-r*i),h=2*(r*n-a*e);return this.x=e+s*l+a*h-o*c,this.y=n+s*c+o*l-r*h,this.z=i+s*h+r*c-a*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,a=e.x,o=e.y,s=e.z;return this.x=i*s-r*o,this.y=r*a-n*s,this.z=n*o-i*a,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return ht.copy(this).projectOnVector(t),this.sub(ht)}reflect(t){return this.sub(ht.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(L(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=2*Math.random()-1,n=Math.sqrt(1-e*e);return this.x=n*Math.cos(t),this.y=e,this.z=n*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const ht=new ct,dt=new lt;class ut{constructor(t=new ct(1/0,1/0,1/0),e=new ct(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,mt),mt.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(St),bt.subVectors(this.max,St),gt.subVectors(t.a,St),_t.subVectors(t.b,St),vt.subVectors(t.c,St),yt.subVectors(_t,gt),xt.subVectors(vt,_t),wt.subVectors(gt,vt);let e=[0,-yt.z,yt.y,0,-xt.z,xt.y,0,-wt.z,wt.y,yt.z,0,-yt.x,xt.z,0,-xt.x,wt.z,0,-wt.x,-yt.y,yt.x,0,-xt.y,xt.x,0,-wt.y,wt.x,0];return!!Tt(e,gt,_t,vt,bt)&&(e=[1,0,0,0,1,0,0,0,1],!!Tt(e,gt,_t,vt,bt)&&(Mt.crossVectors(yt,xt),e=[Mt.x,Mt.y,Mt.z],Tt(e,gt,_t,vt,bt)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,mt).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=.5*this.getSize(mt).length()),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(ft[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),ft[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),ft[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),ft[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),ft[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),ft[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),ft[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),ft[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(ft)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const ft=[new ct,new ct,new ct,new ct,new ct,new ct,new ct,new ct],mt=new ct,pt=new ut,gt=new ct,_t=new ct,vt=new ct,yt=new ct,xt=new ct,wt=new ct,St=new ct,bt=new ct,Mt=new ct,At=new ct;function Tt(t,e,n,i,r){for(let a=0,o=t.length-3;a<=o;a+=3){At.fromArray(t,a);const o=r.x*Math.abs(At.x)+r.y*Math.abs(At.y)+r.z*Math.abs(At.z),s=e.dot(At),l=n.dot(At),c=i.dot(At);if(Math.max(-Math.max(s,l,c),Math.min(s,l,c))>o)return!1}return!0}const Et=new ut,Ct=new ct,Pt=new ct;class kt{constructor(t=new ct,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):Et.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Ct.subVectors(t,this.center);const e=Ct.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.addScaledVector(Ct,n/t),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(!0===this.center.equals(t.center)?this.radius=Math.max(this.radius,t.radius):(Pt.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Ct.copy(t.center).add(Pt)),this.expandByPoint(Ct.copy(t.center).sub(Pt))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const It=new ct,Dt=new ct,Nt=new ct,Rt=new ct,Lt=new ct,zt=new ct,Ut=new ct;class Bt{constructor(t=new ct,e=new ct(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,It)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=It.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(It.copy(this.origin).addScaledVector(this.direction,e),It.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Dt.copy(t).add(e).multiplyScalar(.5),Nt.copy(e).sub(t).normalize(),Rt.copy(this.origin).sub(Dt);const r=.5*t.distanceTo(e),a=-this.direction.dot(Nt),o=Rt.dot(this.direction),s=-Rt.dot(Nt),l=Rt.lengthSq(),c=Math.abs(1-a*a);let h,d,u,f;if(c>0)if(h=a*s-o,d=a*o-s,f=r*c,h>=0)if(d>=-f)if(d<=f){const t=1/c;h*=t,d*=t,u=h*(h+a*d+2*o)+d*(a*h+d+2*s)+l}else d=r,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*s)+l;else d=-r,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*s)+l;else d<=-f?(h=Math.max(0,-(-a*r+o)),d=h>0?-r:Math.min(Math.max(-r,-s),r),u=-h*h+d*(d+2*s)+l):d<=f?(h=0,d=Math.min(Math.max(-r,-s),r),u=d*(d+2*s)+l):(h=Math.max(0,-(a*r+o)),d=h>0?r:Math.min(Math.max(-r,-s),r),u=-h*h+d*(d+2*s)+l);else d=a>0?-r:r,h=Math.max(0,-(a*d+o)),u=-h*h+d*(d+2*s)+l;return n&&n.copy(this.origin).addScaledVector(this.direction,h),i&&i.copy(Dt).addScaledVector(Nt,d),u}intersectSphere(t,e){It.subVectors(t.center,this.origin);const n=It.dot(this.direction),i=It.dot(It)-n*n,r=t.radius*t.radius;if(i>r)return null;const a=Math.sqrt(r-i),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,e):this.at(o,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,a,o,s;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,d=this.origin;return l>=0?(n=(t.min.x-d.x)*l,i=(t.max.x-d.x)*l):(n=(t.max.x-d.x)*l,i=(t.min.x-d.x)*l),c>=0?(r=(t.min.y-d.y)*c,a=(t.max.y-d.y)*c):(r=(t.max.y-d.y)*c,a=(t.min.y-d.y)*c),n>a||r>i?null:((r>n||isNaN(n))&&(n=r),(a=0?(o=(t.min.z-d.z)*h,s=(t.max.z-d.z)*h):(o=(t.max.z-d.z)*h,s=(t.min.z-d.z)*h),n>s||o>i?null:((o>n||n!=n)&&(n=o),(s=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,It)}intersectTriangle(t,e,n,i,r){Lt.subVectors(e,t),zt.subVectors(n,t),Ut.crossVectors(Lt,zt);let a,o=this.direction.dot(Ut);if(o>0){if(i)return null;a=1}else{if(!(o<0))return null;a=-1,o=-o}Rt.subVectors(this.origin,t);const s=a*this.direction.dot(zt.crossVectors(Rt,zt));if(s<0)return null;const l=a*this.direction.dot(Lt.cross(Rt));if(l<0)return null;if(s+l>o)return null;const c=-a*Rt.dot(Ut);return c<0?null:this.at(c/o,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Ot{constructor(t,e,n,i,r,a,o,s,l,c,h,d,u,f,m,p){Ot.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==t&&this.set(t,e,n,i,r,a,o,s,l,c,h,d,u,f,m,p)}set(t,e,n,i,r,a,o,s,l,c,h,d,u,f,m,p){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=a,g[9]=o,g[13]=s,g[2]=l,g[6]=c,g[10]=h,g[14]=d,g[3]=u,g[7]=f,g[11]=m,g[15]=p,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Ot).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Vt.setFromMatrixColumn(t,0).length(),r=1/Vt.setFromMatrixColumn(t,1).length(),a=1/Vt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,n=t.x,i=t.y,r=t.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=a*c,n=a*h,i=o*c,r=o*h;e[0]=s*c,e[4]=-s*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-o*s,e[2]=r-t*l,e[6]=i+n*l,e[10]=a*s}else if("YXZ"===t.order){const t=s*c,n=s*h,i=l*c,r=l*h;e[0]=t+r*o,e[4]=i*o-n,e[8]=a*l,e[1]=a*h,e[5]=a*c,e[9]=-o,e[2]=n*o-i,e[6]=r+t*o,e[10]=a*s}else if("ZXY"===t.order){const t=s*c,n=s*h,i=l*c,r=l*h;e[0]=t-r*o,e[4]=-a*h,e[8]=i+n*o,e[1]=n+i*o,e[5]=a*c,e[9]=r-t*o,e[2]=-a*l,e[6]=o,e[10]=a*s}else if("ZYX"===t.order){const t=a*c,n=a*h,i=o*c,r=o*h;e[0]=s*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=s*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=o*s,e[10]=a*s}else if("YZX"===t.order){const t=a*s,n=a*l,i=o*s,r=o*l;e[0]=s*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=a*c,e[9]=-o*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=a*s,n=a*l,i=o*s,r=o*l;e[0]=s*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=a*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=o*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Ht,t,Wt)}lookAt(t,e,n){const i=this.elements;return jt.subVectors(t,e),0===jt.lengthSq()&&(jt.z=1),jt.normalize(),Gt.crossVectors(n,jt),0===Gt.lengthSq()&&(1===Math.abs(n.z)?jt.x+=1e-4:jt.z+=1e-4,jt.normalize(),Gt.crossVectors(n,jt)),Gt.normalize(),qt.crossVectors(jt,Gt),i[0]=Gt.x,i[4]=qt.x,i[8]=jt.x,i[1]=Gt.y,i[5]=qt.y,i[9]=jt.y,i[2]=Gt.z,i[6]=qt.z,i[10]=jt.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,a=n[0],o=n[4],s=n[8],l=n[12],c=n[1],h=n[5],d=n[9],u=n[13],f=n[2],m=n[6],p=n[10],g=n[14],_=n[3],v=n[7],y=n[11],x=n[15],w=i[0],S=i[4],b=i[8],M=i[12],A=i[1],T=i[5],E=i[9],C=i[13],P=i[2],k=i[6],I=i[10],D=i[14],N=i[3],R=i[7],L=i[11],z=i[15];return r[0]=a*w+o*A+s*P+l*N,r[4]=a*S+o*T+s*k+l*R,r[8]=a*b+o*E+s*I+l*L,r[12]=a*M+o*C+s*D+l*z,r[1]=c*w+h*A+d*P+u*N,r[5]=c*S+h*T+d*k+u*R,r[9]=c*b+h*E+d*I+u*L,r[13]=c*M+h*C+d*D+u*z,r[2]=f*w+m*A+p*P+g*N,r[6]=f*S+m*T+p*k+g*R,r[10]=f*b+m*E+p*I+g*L,r[14]=f*M+m*C+p*D+g*z,r[3]=_*w+v*A+y*P+x*N,r[7]=_*S+v*T+y*k+x*R,r[11]=_*b+v*E+y*I+x*L,r[15]=_*M+v*C+y*D+x*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],a=t[1],o=t[5],s=t[9],l=t[13],c=t[2],h=t[6],d=t[10],u=t[14];return t[3]*(+r*s*h-i*l*h-r*o*d+n*l*d+i*o*u-n*s*u)+t[7]*(+e*s*u-e*l*d+r*a*d-i*a*u+i*l*c-r*s*c)+t[11]*(+e*l*h-e*o*u-r*a*h+n*a*u+r*o*c-n*l*c)+t[15]*(-i*o*c-e*s*h+e*o*d+i*a*h-n*a*d+n*s*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],o=t[5],s=t[6],l=t[7],c=t[8],h=t[9],d=t[10],u=t[11],f=t[12],m=t[13],p=t[14],g=t[15],_=h*p*l-m*d*l+m*s*u-o*p*u-h*s*g+o*d*g,v=f*d*l-c*p*l-f*s*u+a*p*u+c*s*g-a*d*g,y=c*m*l-f*h*l+f*o*u-a*m*u-c*o*g+a*h*g,x=f*h*s-c*m*s-f*o*d+a*m*d+c*o*p-a*h*p,w=e*_+n*v+i*y+r*x;if(0===w)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const S=1/w;return t[0]=_*S,t[1]=(m*d*r-h*p*r-m*i*u+n*p*u+h*i*g-n*d*g)*S,t[2]=(o*p*r-m*s*r+m*i*l-n*p*l-o*i*g+n*s*g)*S,t[3]=(h*s*r-o*d*r-h*i*l+n*d*l+o*i*u-n*s*u)*S,t[4]=v*S,t[5]=(c*p*r-f*d*r+f*i*u-e*p*u-c*i*g+e*d*g)*S,t[6]=(f*s*r-a*p*r-f*i*l+e*p*l+a*i*g-e*s*g)*S,t[7]=(a*d*r-c*s*r+c*i*l-e*d*l-a*i*u+e*s*u)*S,t[8]=y*S,t[9]=(f*h*r-c*m*r-f*n*u+e*m*u+c*n*g-e*h*g)*S,t[10]=(a*m*r-f*o*r+f*n*l-e*m*l-a*n*g+e*o*g)*S,t[11]=(c*o*r-a*h*r-c*n*l+e*h*l+a*n*u-e*o*u)*S,t[12]=x*S,t[13]=(c*m*i-f*h*i+f*n*d-e*m*d-c*n*p+e*h*p)*S,t[14]=(f*o*i-a*m*i-f*n*s+e*m*s+a*n*p-e*o*p)*S,t[15]=(a*h*i-c*o*i+c*n*s-e*h*s-a*n*d+e*o*d)*S,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,a=t.x,o=t.y,s=t.z,l=r*a,c=r*o;return this.set(l*a+n,l*o-i*s,l*s+i*o,0,l*o+i*s,c*o+n,c*s-i*a,0,l*s-i*o,c*s+i*a,r*s*s+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,a){return this.set(1,n,r,0,t,1,a,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,a=e._y,o=e._z,s=e._w,l=r+r,c=a+a,h=o+o,d=r*l,u=r*c,f=r*h,m=a*c,p=a*h,g=o*h,_=s*l,v=s*c,y=s*h,x=n.x,w=n.y,S=n.z;return i[0]=(1-(m+g))*x,i[1]=(u+y)*x,i[2]=(f-v)*x,i[3]=0,i[4]=(u-y)*w,i[5]=(1-(d+g))*w,i[6]=(p+_)*w,i[7]=0,i[8]=(f+v)*S,i[9]=(p-_)*S,i[10]=(1-(d+m))*S,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Vt.set(i[0],i[1],i[2]).length();const a=Vt.set(i[4],i[5],i[6]).length(),o=Vt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Ft.copy(this);const s=1/r,l=1/a,c=1/o;return Ft.elements[0]*=s,Ft.elements[1]*=s,Ft.elements[2]*=s,Ft.elements[4]*=l,Ft.elements[5]*=l,Ft.elements[6]*=l,Ft.elements[8]*=c,Ft.elements[9]*=c,Ft.elements[10]*=c,e.setFromRotationMatrix(Ft),n.x=r,n.y=a,n.z=o,this}makePerspective(t,e,n,i,r,a,o=2e3){const s=this.elements,l=2*r/(e-t),c=2*r/(n-i),h=(e+t)/(e-t),d=(n+i)/(n-i);let u,f;if(o===k)u=-(a+r)/(a-r),f=-2*a*r/(a-r);else{if(o!==I)throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);u=-a/(a-r),f=-a*r/(a-r)}return s[0]=l,s[4]=0,s[8]=h,s[12]=0,s[1]=0,s[5]=c,s[9]=d,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=f,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,a,o=2e3){const s=this.elements,l=1/(e-t),c=1/(n-i),h=1/(a-r),d=(e+t)*l,u=(n+i)*c;let f,m;if(o===k)f=(a+r)*h,m=-2*h;else{if(o!==I)throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);f=r*h,m=-1*h}return s[0]=2*l,s[4]=0,s[8]=0,s[12]=-d,s[1]=0,s[5]=2*c,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=m,s[14]=-f,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const Vt=new ct,Ft=new Ot,Ht=new ct(0,0,0),Wt=new ct(1,1,1),Gt=new ct,qt=new ct,jt=new ct,Zt=new Ot,Yt=new lt;class Xt{constructor(t=0,e=0,n=0,i=Xt.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],a=i[4],o=i[8],s=i[1],l=i[5],c=i[9],h=i[2],d=i[6],u=i[10];switch(e){case"XYZ":this._y=Math.asin(L(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,u),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(d,l),this._z=0);break;case"YXZ":this._x=Math.asin(-L(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(o,u),this._z=Math.atan2(s,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(L(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-h,u),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(s,r));break;case"ZYX":this._y=Math.asin(-L(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(d,u),this._z=Math.atan2(s,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(L(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(o,u));break;case"XZY":this._z=Math.asin(-L(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-c,u),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Zt.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Zt,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Yt.setFromEuler(this),this.setFromQuaternion(Yt,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Xt.DEFAULT_ORDER="XYZ";class Jt{constructor(){this.mask=1}set(t){this.mask=1<>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.visibility=this._visibility,i.active=this._active,i.bounds=this._bounds.map((t=>({boxInitialized:t.boxInitialized,boxMin:t.box.min.toArray(),boxMax:t.box.max.toArray(),sphereInitialized:t.sphereInitialized,sphereRadius:t.sphere.radius,sphereCenter:t.sphere.center.toArray()}))),i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.geometryCount=this._geometryCount,i.matricesTexture=this._matricesTexture.toJSON(t),null!==this._colorsTexture&&(i.colorsTexture=this._colorsTexture.toJSON(t)),null!==this.boundingSphere&&(i.boundingSphere={center:i.boundingSphere.center.toArray(),radius:i.boundingSphere.radius}),null!==this.boundingBox&&(i.boundingBox={min:i.boundingBox.min.toArray(),max:i.boundingBox.max.toArray()})),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c),h.length>0&&(n.nodes=h)}return n.object=i,n;function a(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){fe.subVectors(i,e),me.subVectors(n,e),pe.subVectors(t,e);const a=fe.dot(fe),o=fe.dot(me),s=fe.dot(pe),l=me.dot(me),c=me.dot(pe),h=a*l-o*o;if(0===h)return r.set(0,0,0),null;const d=1/h,u=(l*s-o*c)*d,f=(a*c-o*s)*d;return r.set(1-u-f,f,u)}static containsPoint(t,e,n,i){return null!==this.getBarycoord(t,e,n,i,ge)&&(ge.x>=0&&ge.y>=0&&ge.x+ge.y<=1)}static getInterpolation(t,e,n,i,r,a,o,s){return null===this.getBarycoord(t,e,n,i,ge)?(s.x=0,s.y=0,"z"in s&&(s.z=0),"w"in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(r,ge.x),s.addScaledVector(a,ge.y),s.addScaledVector(o,ge.z),s)}static isFrontFacing(t,e,n,i){return fe.subVectors(n,e),me.subVectors(t,e),fe.cross(me).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return fe.subVectors(this.c,this.b),me.subVectors(this.a,this.b),.5*fe.cross(me).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return be.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return be.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,n,i,r){return be.getInterpolation(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return be.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return be.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let a,o;_e.subVectors(i,n),ve.subVectors(r,n),xe.subVectors(t,n);const s=_e.dot(xe),l=ve.dot(xe);if(s<=0&&l<=0)return e.copy(n);we.subVectors(t,i);const c=_e.dot(we),h=ve.dot(we);if(c>=0&&h<=c)return e.copy(i);const d=s*h-c*l;if(d<=0&&s>=0&&c<=0)return a=s/(s-c),e.copy(n).addScaledVector(_e,a);Se.subVectors(t,r);const u=_e.dot(Se),f=ve.dot(Se);if(f>=0&&u<=f)return e.copy(r);const m=u*l-s*f;if(m<=0&&l>=0&&f<=0)return o=l/(l-f),e.copy(n).addScaledVector(ve,o);const p=c*f-u*h;if(p<=0&&h-c>=0&&u-f>=0)return ye.subVectors(r,i),o=(h-c)/(h-c+(u-f)),e.copy(i).addScaledVector(ye,o);const g=1/(p+m+d);return a=m*g,o=d*g,e.copy(n).addScaledVector(_e,a).addScaledVector(ve,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Me={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ae={h:0,s:0,l:0},Te={h:0,s:0,l:0};function Ee(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}class Ce{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(void 0===e&&void 0===n){const e=t;e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e)}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=x){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,Q.toWorkingColorSpace(this,e),this}setRGB(t,e,n,i=Q.workingColorSpace){return this.r=t,this.g=e,this.b=n,Q.toWorkingColorSpace(this,i),this}setHSL(t,e,n,i=Q.workingColorSpace){if(t=z(t,1),e=L(e,0,1),n=L(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=Ee(r,i,t+1/3),this.g=Ee(r,i,t),this.b=Ee(r,i,t-1/3)}return Q.toWorkingColorSpace(this,i),this}setStyle(t,e=x){function n(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let i;if(i=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=i[1],o=i[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(t)){const n=i[1],r=n.length;if(3===r)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,e);if(6===r)return this.setHex(parseInt(n,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=x){const n=Me[t.toLowerCase()];return void 0!==n?this.setHex(n,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=K(t.r),this.g=K(t.g),this.b=K(t.b),this}copyLinearToSRGB(t){return this.r=$(t.r),this.g=$(t.g),this.b=$(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=x){return Q.fromWorkingColorSpace(Pe.copy(this),t),65536*Math.round(L(255*Pe.r,0,255))+256*Math.round(L(255*Pe.g,0,255))+Math.round(L(255*Pe.b,0,255))}getHexString(t=x){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Q.workingColorSpace){Q.fromWorkingColorSpace(Pe.copy(this),e);const n=Pe.r,i=Pe.g,r=Pe.b,a=Math.max(n,i,r),o=Math.min(n,i,r);let s,l;const c=(o+a)/2;if(o===a)s=0,l=0;else{const t=a-o;switch(l=c<=.5?t/(a+o):t/(2-a-o),a){case n:s=(i-r)/t+(i0!=t>0&&this.version++,this._alphaTest=t}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`)}}toJSON(t){const n=void 0===t||"string"==typeof t;n&&(t={textures:{},images:{}});const i={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};function a(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.dispersion&&(i.dispersion=this.dispersion),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),void 0!==this.anisotropy&&(i.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapRotation&&(i.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),this.side!==e&&(i.side=this.side),!0===this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=!0),204!==this.blendSrc&&(i.blendSrc=this.blendSrc),205!==this.blendDst&&(i.blendDst=this.blendDst),this.blendEquation!==r&&(i.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(i.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(i.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(i.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(i.depthFunc=this.depthFunc),!1===this.depthTest&&(i.depthTest=this.depthTest),!1===this.depthWrite&&(i.depthWrite=this.depthWrite),!1===this.colorWrite&&(i.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(i.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(i.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(i.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==C&&(i.stencilFail=this.stencilFail),this.stencilZFail!==C&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==C&&(i.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(i.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaHash&&(i.alphaHash=!0),!0===this.alphaToCoverage&&(i.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=!0),!0===this.forceSinglePass&&(i.forceSinglePass=!0),!0===this.wireframe&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=!0),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),n){const e=a(t.textures),n=a(t.images);e.length>0&&(i.textures=e),n.length>0&&(i.images=n)}return i}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}onBuild(){console.warn("Material: onBuild() has been removed.")}onBeforeRender(){console.warn("Material: onBeforeRender() has been removed.")}}class De extends Ie{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Ce(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Xt,this.combine=a,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const Ne=new ct,Re=new V;class Le{constructor(t,e,n=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=n,this.usage=P,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.gpuType=h,this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}get updateRange(){return j("THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],a=[];for(let e=0,i=n.length;e0&&(i[e]=a,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return null!==o&&(t.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t0){const n=t[e[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=n.length;t(t.far-t.near)**2)return}Ze.copy(r).invert(),Ye.copy(t.ray).applyMatrix4(Ze),null!==n.boundingBox&&!1===Ye.intersectsBox(n.boundingBox)||this._computeIntersections(t,e,Ye)}}_computeIntersections(t,e,n){let i;const r=this.geometry,a=this.material,o=r.index,s=r.attributes.position,l=r.attributes.uv,c=r.attributes.uv1,h=r.attributes.normal,d=r.groups,u=r.drawRange;if(null!==o)if(Array.isArray(a))for(let r=0,s=d.length;rr.far?null:{distance:d,point:hn.clone(),object:t}}(t,n,r,a,Qe,Ke,$e,cn);if(u){o&&(nn.fromBufferAttribute(o,c),rn.fromBufferAttribute(o,h),an.fromBufferAttribute(o,d),u.uv=be.getInterpolation(cn,Qe,Ke,$e,nn,rn,an,new V)),s&&(nn.fromBufferAttribute(s,c),rn.fromBufferAttribute(s,h),an.fromBufferAttribute(s,d),u.uv1=be.getInterpolation(cn,Qe,Ke,$e,nn,rn,an,new V)),l&&(on.fromBufferAttribute(l,c),sn.fromBufferAttribute(l,h),ln.fromBufferAttribute(l,d),u.normal=be.getInterpolation(cn,Qe,Ke,$e,on,sn,ln,new ct),u.normal.dot(a.direction)>0&&u.normal.multiplyScalar(-1));const t={a:c,b:h,c:d,normal:new ct,materialIndex:0};be.getNormal(Qe,Ke,$e,t.normal),u.face=t}return u}function fn(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const r=t[n][i];r&&(r.isColor||r.isMatrix3||r.isMatrix4||r.isVector2||r.isVector3||r.isVector4||r.isTexture||r.isQuaternion)?r.isRenderTargetTexture?(console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),e[n][i]=null):e[n][i]=r.clone():Array.isArray(r)?e[n][i]=r.slice():e[n][i]=r}}return e}function mn(t){const e={};for(let n=0;n1?null:e.copy(t.start).addScaledVector(n,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||_n.getNormalMatrix(t),i=this.coplanarPoint(pn).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const yn={alphahash_fragment:"#ifdef USE_ALPHAHASH\n\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif",alphahash_pars_fragment:"#ifdef USE_ALPHAHASH\n\tconst float ALPHA_HASH_SCALE = 0.05;\n\tfloat hash2D( vec2 value ) {\n\t\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n\t}\n\tfloat hash3D( vec3 value ) {\n\t\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\n\t}\n\tfloat getAlphaHashThreshold( vec3 position ) {\n\t\tfloat maxDeriv = max(\n\t\t\tlength( dFdx( position.xyz ) ),\n\t\t\tlength( dFdy( position.xyz ) )\n\t\t);\n\t\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n\t\tvec2 pixScales = vec2(\n\t\t\texp2( floor( log2( pixScale ) ) ),\n\t\t\texp2( ceil( log2( pixScale ) ) )\n\t\t);\n\t\tvec2 alpha = vec2(\n\t\t\thash3D( floor( pixScales.x * position.xyz ) ),\n\t\t\thash3D( floor( pixScales.y * position.xyz ) )\n\t\t);\n\t\tfloat lerpFactor = fract( log2( pixScale ) );\n\t\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n\t\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\n\t\tvec3 cases = vec3(\n\t\t\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\n\t\t\t( x - 0.5 * a ) / ( 1.0 - a ),\n\t\t\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n\t\t);\n\t\tfloat threshold = ( x < ( 1.0 - a ) )\n\t\t\t? ( ( x < a ) ? cases.x : cases.y )\n\t\t\t: cases.z;\n\t\treturn clamp( threshold , 1.0e-6, 1.0 );\n\t}\n#endif",alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef USE_ALPHATEST\n\t#ifdef ALPHA_TO_COVERAGE\n\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\tif ( diffuseColor.a < alphaTest ) discard;\n\t#endif\n#endif",alphatest_pars_fragment:"#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_CLEARCOAT ) \n\t\tclearcoatSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_SHEEN ) \n\t\tsheenSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",batching_pars_vertex:"#ifdef USE_BATCHING\n\t#if ! defined( GL_ANGLE_multi_draw )\n\t#define gl_DrawID _gl_DrawID\n\tuniform int _gl_DrawID;\n\t#endif\n\tuniform highp sampler2D batchingTexture;\n\tuniform highp usampler2D batchingIdTexture;\n\tmat4 getBatchingMatrix( const in float i ) {\n\t\tint size = textureSize( batchingTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n\tfloat getIndirectIndex( const in int i ) {\n\t\tint size = textureSize( batchingIdTexture, 0 ).x;\n\t\tint x = i % size;\n\t\tint y = i / size;\n\t\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n\t}\n#endif\n#ifdef USE_BATCHING_COLOR\n\tuniform sampler2D batchingColorTexture;\n\tvec3 getBatchingColor( const in float i ) {\n\t\tint size = textureSize( batchingColorTexture, 0 ).x;\n\t\tint j = int( i );\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n\t}\n#endif",batching_vertex:"#ifdef USE_BATCHING\n\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif",begin_vertex:"vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n\tvPosition = vec3( position );\n#endif",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n} // validated",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\treturn vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n\t\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n\tvColor.xyz *= batchingColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\n\tvec3( 0.8224621, 0.177538, 0.0 ),\n\tvec3( 0.0331941, 0.9668058, 0.0 ),\n\tvec3( 0.0170827, 0.0723974, 0.9105199 )\n);\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.2249401, - 0.2249404, 0.0 ),\n\tvec3( - 0.0420569, 1.0420571, 0.0 ),\n\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\n);\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\n\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\n}\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\n\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\n}\nvec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn sRGBTransferOETF( value );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t\n\t\t#else\n\t\t\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},xn={common:{diffuse:{value:new Ce(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new F},alphaMap:{value:null},alphaMapTransform:{value:new F},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new F}},envmap:{envMap:{value:null},envMapRotation:{value:new F},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new F}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new F}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new F},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new F},normalScale:{value:new V(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new F},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new F}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new F}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new F}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Ce(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Ce(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new F},alphaTest:{value:0},uvTransform:{value:new F}},sprite:{diffuse:{value:new Ce(16777215)},opacity:{value:1},center:{value:new V(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new F},alphaMap:{value:null},alphaMapTransform:{value:new F},alphaTest:{value:0}}},wn={basic:{uniforms:mn([xn.common,xn.specularmap,xn.envmap,xn.aomap,xn.lightmap,xn.fog]),vertexShader:yn.meshbasic_vert,fragmentShader:yn.meshbasic_frag},lambert:{uniforms:mn([xn.common,xn.specularmap,xn.envmap,xn.aomap,xn.lightmap,xn.emissivemap,xn.bumpmap,xn.normalmap,xn.displacementmap,xn.fog,xn.lights,{emissive:{value:new Ce(0)}}]),vertexShader:yn.meshlambert_vert,fragmentShader:yn.meshlambert_frag},phong:{uniforms:mn([xn.common,xn.specularmap,xn.envmap,xn.aomap,xn.lightmap,xn.emissivemap,xn.bumpmap,xn.normalmap,xn.displacementmap,xn.fog,xn.lights,{emissive:{value:new Ce(0)},specular:{value:new Ce(1118481)},shininess:{value:30}}]),vertexShader:yn.meshphong_vert,fragmentShader:yn.meshphong_frag},standard:{uniforms:mn([xn.common,xn.envmap,xn.aomap,xn.lightmap,xn.emissivemap,xn.bumpmap,xn.normalmap,xn.displacementmap,xn.roughnessmap,xn.metalnessmap,xn.fog,xn.lights,{emissive:{value:new Ce(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:yn.meshphysical_vert,fragmentShader:yn.meshphysical_frag},toon:{uniforms:mn([xn.common,xn.aomap,xn.lightmap,xn.emissivemap,xn.bumpmap,xn.normalmap,xn.displacementmap,xn.gradientmap,xn.fog,xn.lights,{emissive:{value:new Ce(0)}}]),vertexShader:yn.meshtoon_vert,fragmentShader:yn.meshtoon_frag},matcap:{uniforms:mn([xn.common,xn.bumpmap,xn.normalmap,xn.displacementmap,xn.fog,{matcap:{value:null}}]),vertexShader:yn.meshmatcap_vert,fragmentShader:yn.meshmatcap_frag},points:{uniforms:mn([xn.points,xn.fog]),vertexShader:yn.points_vert,fragmentShader:yn.points_frag},dashed:{uniforms:mn([xn.common,xn.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:yn.linedashed_vert,fragmentShader:yn.linedashed_frag},depth:{uniforms:mn([xn.common,xn.displacementmap]),vertexShader:yn.depth_vert,fragmentShader:yn.depth_frag},normal:{uniforms:mn([xn.common,xn.bumpmap,xn.normalmap,xn.displacementmap,{opacity:{value:1}}]),vertexShader:yn.meshnormal_vert,fragmentShader:yn.meshnormal_frag},sprite:{uniforms:mn([xn.sprite,xn.fog]),vertexShader:yn.sprite_vert,fragmentShader:yn.sprite_frag},background:{uniforms:{uvTransform:{value:new F},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:yn.background_vert,fragmentShader:yn.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new F}},vertexShader:yn.backgroundCube_vert,fragmentShader:yn.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:yn.cube_vert,fragmentShader:yn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:yn.equirect_vert,fragmentShader:yn.equirect_frag},distanceRGBA:{uniforms:mn([xn.common,xn.displacementmap,{referencePosition:{value:new ct},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:yn.distanceRGBA_vert,fragmentShader:yn.distanceRGBA_frag},shadow:{uniforms:mn([xn.lights,xn.fog,{color:{value:new Ce(0)},opacity:{value:1}}]),vertexShader:yn.shadow_vert,fragmentShader:yn.shadow_frag}};wn.physical={uniforms:mn([wn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new F},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new F},clearcoatNormalScale:{value:new V(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new F},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new F},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new F},sheen:{value:0},sheenColor:{value:new Ce(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new F},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new F},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new F},transmissionSamplerSize:{value:new V},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new F},attenuationDistance:{value:0},attenuationColor:{value:new Ce(0)},specularColor:{value:new Ce(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new F},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new F},anisotropyVector:{value:new V},anisotropyMap:{value:null},anisotropyMapTransform:{value:new F}}]),vertexShader:yn.meshphysical_vert,fragmentShader:yn.meshphysical_frag};Math.sqrt(5);new Float32Array(16),new Float32Array(9),new Float32Array(4);new Map;class Sn extends ot{constructor(t=null,e=1,n=1,i,r,a,o,s,l=1003,c=1003,h,d){super(null,a,o,s,l,c,i,r,h,d),this.isDataTexture=!0,this.image={data:t,width:e,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class bn extends Le{constructor(t,e,n,i=1){super(t,e,n),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=i}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}const Mn=new Ot,An=new Ot,Tn=[],En=new ut,Cn=new Ot,Pn=new dn,kn=new kt;class In extends dn{constructor(t,e,n){super(t,e),this.isInstancedMesh=!0,this.instanceMatrix=new bn(new Float32Array(16*n),16),this.instanceColor=null,this.morphTexture=null,this.count=n,this.boundingBox=null,this.boundingSphere=null;for(let t=0;t=r)break t;{const o=e[1];t=r)break e}a=n,n=0}}for(;n>>1;te;)--a;if(++a,0!==r||a!==i){r>=a&&(a=Math.max(a,1),r=a-1);const t=this.getValueSize();this.times=n.slice(r,a),this.values=this.values.slice(r*t,a*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let a=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==a&&a>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,a),t=!1;break}a=i}if(void 0!==i&&Nn(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t}optimize(){const t=this.times.slice(),e=this.values.slice(),n=this.getValueSize(),i=this.getInterpolation()===p,r=t.length-1;let a=1;for(let o=1;o0){t[a]=t[r];for(let t=r*n,i=a*n,o=0;o!==n;++o)e[i+o]=e[t+o];++a}return a!==t.length?(this.times=t.slice(0,a),this.values=e.slice(0,a*n)):(this.times=t,this.values=e),this}clone(){const t=this.times.slice(),e=this.values.slice(),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}Bn.prototype.TimeBufferType=Float32Array,Bn.prototype.ValueBufferType=Float32Array,Bn.prototype.DefaultInterpolation=m;class On extends Bn{constructor(t,e,n){super(t,e,n)}}On.prototype.ValueTypeName="bool",On.prototype.ValueBufferType=Array,On.prototype.DefaultInterpolation=f,On.prototype.InterpolantFactoryMethodLinear=void 0,On.prototype.InterpolantFactoryMethodSmooth=void 0;class Vn extends Bn{}Vn.prototype.ValueTypeName="color";class Fn extends Bn{}Fn.prototype.ValueTypeName="number";class Hn extends Rn{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-e)/(i-e);let l=t*o;for(let t=l+o;l!==t;l+=4)lt.slerpFlat(r,0,a,l-o,a,l,s);return r}}class Wn extends Bn{InterpolantFactoryMethodLinear(t){return new Hn(this.times,this.values,this.getValueSize(),t)}}Wn.prototype.ValueTypeName="quaternion",Wn.prototype.InterpolantFactoryMethodSmooth=void 0;class Gn extends Bn{constructor(t,e,n){super(t,e,n)}}Gn.prototype.ValueTypeName="string",Gn.prototype.ValueBufferType=Array,Gn.prototype.DefaultInterpolation=f,Gn.prototype.InterpolantFactoryMethodLinear=void 0,Gn.prototype.InterpolantFactoryMethodSmooth=void 0;class qn extends Bn{}qn.prototype.ValueTypeName="vector";class jn{constructor(t,e,n){const i=this;let r,a=!1,o=0,s=0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){s++,!1===a&&void 0!==i.onStart&&i.onStart(t,o,s),a=!0},this.itemEnd=function(t){o++,void 0!==i.onProgress&&i.onProgress(t,o,s),o===s&&(a=!1,void 0!==i.onLoad&&i.onLoad())},this.itemError=function(t){void 0!==i.onError&&i.onError(t)},this.resolveURL=function(t){return r?r(t):t},this.setURLModifier=function(t){return r=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e&&l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e=0;)t[e]=0}const ii=256,ri=286,ai=30,oi=15,si=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),li=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),ci=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),hi=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),di=new Array(576);ni(di);const ui=new Array(60);ni(ui);const fi=new Array(512);ni(fi);const mi=new Array(256);ni(mi);const pi=new Array(29);ni(pi);const gi=new Array(ai);function _i(t,e,n,i,r){this.static_tree=t,this.extra_bits=e,this.extra_base=n,this.elems=i,this.max_length=r,this.has_stree=t&&t.length}let vi,yi,xi;function wi(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}ni(gi);const Si=t=>t<256?fi[t]:fi[256+(t>>>7)],bi=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},Mi=(t,e,n)=>{t.bi_valid>16-n?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=n-16):(t.bi_buf|=e<{Mi(t,n[2*e],n[2*e+1])},Ti=(t,e)=>{let n=0;do{n|=1&t,t>>>=1,n<<=1}while(--e>0);return n>>>1},Ei=(t,e,n)=>{const i=new Array(16);let r,a,o=0;for(r=1;r<=oi;r++)o=o+n[r-1]<<1,i[r]=o;for(a=0;a<=e;a++){let e=t[2*a+1];0!==e&&(t[2*a]=Ti(i[e]++,e))}},Ci=t=>{let e;for(e=0;e{t.bi_valid>8?bi(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},ki=(t,e,n,i)=>{const r=2*e,a=2*n;return t[r]{const i=t.heap[n];let r=n<<1;for(;r<=t.heap_len&&(r{let i,r,a,o,s=0;if(0!==t.sym_next)do{i=255&t.pending_buf[t.sym_buf+s++],i+=(255&t.pending_buf[t.sym_buf+s++])<<8,r=t.pending_buf[t.sym_buf+s++],0===i?Ai(t,r,e):(a=mi[r],Ai(t,a+ii+1,e),o=si[a],0!==o&&(r-=pi[a],Mi(t,r,o)),i--,a=Si(i),Ai(t,a,n),o=li[a],0!==o&&(i-=gi[a],Mi(t,i,o)))}while(s{const n=e.dyn_tree,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,a=e.stat_desc.elems;let o,s,l,c=-1;for(t.heap_len=0,t.heap_max=573,o=0;o>1;o>=1;o--)Ii(t,n,o);l=a;do{o=t.heap[1],t.heap[1]=t.heap[t.heap_len--],Ii(t,n,1),s=t.heap[1],t.heap[--t.heap_max]=o,t.heap[--t.heap_max]=s,n[2*l]=n[2*o]+n[2*s],t.depth[l]=(t.depth[o]>=t.depth[s]?t.depth[o]:t.depth[s])+1,n[2*o+1]=n[2*s+1]=l,t.heap[1]=l++,Ii(t,n,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const n=e.dyn_tree,i=e.max_code,r=e.stat_desc.static_tree,a=e.stat_desc.has_stree,o=e.stat_desc.extra_bits,s=e.stat_desc.extra_base,l=e.stat_desc.max_length;let c,h,d,u,f,m,p=0;for(u=0;u<=oi;u++)t.bl_count[u]=0;for(n[2*t.heap[t.heap_max]+1]=0,c=t.heap_max+1;c<573;c++)h=t.heap[c],u=n[2*n[2*h+1]+1]+1,u>l&&(u=l,p++),n[2*h+1]=u,h>i||(t.bl_count[u]++,f=0,h>=s&&(f=o[h-s]),m=n[2*h],t.opt_len+=m*(u+f),a&&(t.static_len+=m*(r[2*h+1]+f)));if(0!==p){do{for(u=l-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[l]--,p-=2}while(p>0);for(u=l;0!==u;u--)for(h=t.bl_count[u];0!==h;)d=t.heap[--c],d>i||(n[2*d+1]!==u&&(t.opt_len+=(u-n[2*d+1])*n[2*d],n[2*d+1]=u),h--)}})(t,e),Ei(n,c,t.bl_count)},Ri=(t,e,n)=>{let i,r,a=-1,o=e[1],s=0,l=7,c=4;for(0===o&&(l=138,c=3),e[2*(n+1)+1]=65535,i=0;i<=n;i++)r=o,o=e[2*(i+1)+1],++s{let i,r,a=-1,o=e[1],s=0,l=7,c=4;for(0===o&&(l=138,c=3),i=0;i<=n;i++)if(r=o,o=e[2*(i+1)+1],!(++s{Mi(t,0+(i?1:0),3),Pi(t),bi(t,n),bi(t,~n),n&&t.pending_buf.set(t.window.subarray(e,e+n),t.pending),t.pending+=n};var Bi=(t,e,n,i)=>{let r,a,o=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,n=4093624447;for(e=0;e<=31;e++,n>>>=1)if(1&n&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e{let e;for(Ri(t,t.dyn_ltree,t.l_desc.max_code),Ri(t,t.dyn_dtree,t.d_desc.max_code),Ni(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*hi[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),r=t.opt_len+3+7>>>3,a=t.static_len+3+7>>>3,a<=r&&(r=a)):r=a=n+5,n+4<=r&&-1!==e?Ui(t,e,n,i):4===t.strategy||a===r?(Mi(t,2+(i?1:0),3),Di(t,di,ui)):(Mi(t,4+(i?1:0),3),((t,e,n,i)=>{let r;for(Mi(t,e-257,5),Mi(t,n-1,5),Mi(t,i-4,4),r=0;r{zi||((()=>{let t,e,n,i,r;const a=new Array(16);for(n=0,i=0;i<28;i++)for(pi[i]=n,t=0;t<1<>=7;i(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=n,0===e?t.dyn_ltree[2*n]++:(t.matches++,e--,t.dyn_ltree[2*(mi[n]+ii+1)]++,t.dyn_dtree[2*Si(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{Mi(t,2,3),Ai(t,256,di),(t=>{16===t.bi_valid?(bi(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var Vi=(t,e,n,i)=>{let r=65535&t,a=t>>>16&65535,o=0;for(;0!==n;){o=n>2e3?2e3:n,n-=o;do{r=r+e[i++]|0,a=a+r|0}while(--o);r%=65521,a%=65521}return r|a<<16};const Fi=new Uint32Array((()=>{let t,e=[];for(var n=0;n<256;n++){t=n;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[n]=t}return e})());var Hi=(t,e,n,i)=>{const r=Fi,a=i+n;t^=-1;for(let n=i;n>>8^r[255&(t^e[n])];return~t},Wi={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Gi={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:qi,_tr_stored_block:ji,_tr_flush_block:Zi,_tr_tally:Yi,_tr_align:Xi}=Oi,{Z_NO_FLUSH:Ji,Z_PARTIAL_FLUSH:Qi,Z_FULL_FLUSH:Ki,Z_FINISH:$i,Z_BLOCK:tr,Z_OK:er,Z_STREAM_END:nr,Z_STREAM_ERROR:ir,Z_DATA_ERROR:rr,Z_BUF_ERROR:ar,Z_DEFAULT_COMPRESSION:or,Z_FILTERED:sr,Z_HUFFMAN_ONLY:lr,Z_RLE:cr,Z_FIXED:hr,Z_DEFAULT_STRATEGY:dr,Z_UNKNOWN:ur,Z_DEFLATED:fr}=Gi,mr=258,pr=262,gr=42,_r=113,vr=666,yr=(t,e)=>(t.msg=Wi[e],e),xr=t=>2*t-(t>4?9:0),wr=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Sr=t=>{let e,n,i,r=t.w_size;e=t.hash_size,i=e;do{n=t.head[--i],t.head[i]=n>=r?n-r:0}while(--e);e=r,i=e;do{n=t.prev[--i],t.prev[i]=n>=r?n-r:0}while(--e)};let br=(t,e,n)=>(e<{const e=t.state;let n=e.pending;n>t.avail_out&&(n=t.avail_out),0!==n&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+n),t.next_out),t.next_out+=n,e.pending_out+=n,t.total_out+=n,t.avail_out-=n,e.pending-=n,0===e.pending&&(e.pending_out=0))},Ar=(t,e)=>{Zi(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Mr(t.strm)},Tr=(t,e)=>{t.pending_buf[t.pending++]=e},Er=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Cr=(t,e,n,i)=>{let r=t.avail_in;return r>i&&(r=i),0===r?0:(t.avail_in-=r,e.set(t.input.subarray(t.next_in,t.next_in+r),n),1===t.state.wrap?t.adler=Vi(t.adler,e,r,n):2===t.state.wrap&&(t.adler=Hi(t.adler,e,r,n)),t.next_in+=r,t.total_in+=r,r)},Pr=(t,e)=>{let n,i,r=t.max_chain_length,a=t.strstart,o=t.prev_length,s=t.nice_match;const l=t.strstart>t.w_size-pr?t.strstart-(t.w_size-pr):0,c=t.window,h=t.w_mask,d=t.prev,u=t.strstart+mr;let f=c[a+o-1],m=c[a+o];t.prev_length>=t.good_match&&(r>>=2),s>t.lookahead&&(s=t.lookahead);do{if(n=e,c[n+o]===m&&c[n+o-1]===f&&c[n]===c[a]&&c[++n]===c[a+1]){a+=2,n++;do{}while(c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&ao){if(t.match_start=e,o=i,i>=s)break;f=c[a+o-1],m=c[a+o]}}}while((e=d[e&h])>l&&0!=--r);return o<=t.lookahead?o:t.lookahead},kr=t=>{const e=t.w_size;let n,i,r;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-pr)&&(t.window.set(t.window.subarray(e,e+e-i),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Sr(t),i+=e),0===t.strm.avail_in)break;if(n=Cr(t.strm,t.window,t.strstart+t.lookahead,i),t.lookahead+=n,t.lookahead+t.insert>=3)for(r=t.strstart-t.insert,t.ins_h=t.window[r],t.ins_h=br(t,t.ins_h,t.window[r+1]);t.insert&&(t.ins_h=br(t,t.ins_h,t.window[r+3-1]),t.prev[r&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=r,r++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead{let n,i,r,a=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,o=0,s=t.strm.avail_in;do{if(n=65535,r=t.bi_valid+42>>3,t.strm.avail_outi+t.strm.avail_in&&(n=i+t.strm.avail_in),n>r&&(n=r),n>8,t.pending_buf[t.pending-2]=~n,t.pending_buf[t.pending-1]=~n>>8,Mr(t.strm),i&&(i>n&&(i=n),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,n-=i),n&&(Cr(t.strm,t.strm.output,t.strm.next_out,n),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n)}while(0===o);return s-=t.strm.avail_in,s&&(s>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=s&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-s,t.strm.next_in),t.strstart),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.block_start=t.strstart),t.high_waterr&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,r+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),r>t.strm.avail_in&&(r=t.strm.avail_in),r&&(Cr(t.strm,t.window,t.strstart,r),t.strstart+=r,t.insert+=r>t.w_size-t.insert?t.w_size-t.insert:r),t.high_water>3,r=t.pending_buf_size-r>65535?65535:t.pending_buf_size-r,a=r>t.w_size?t.w_size:r,i=t.strstart-t.block_start,(i>=a||(i||e===$i)&&e!==Ji&&0===t.strm.avail_in&&i<=r)&&(n=i>r?r:i,o=e===$i&&0===t.strm.avail_in&&n===i?1:0,ji(t,t.block_start,n,o),t.block_start+=n,Mr(t.strm)),o?3:1)},Dr=(t,e)=>{let n,i;for(;;){if(t.lookahead=3&&(t.ins_h=br(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==n&&t.strstart-n<=t.w_size-pr&&(t.match_length=Pr(t,n)),t.match_length>=3)if(i=Yi(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=br(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=br(t,t.ins_h,t.window[t.strstart+1]);else i=Yi(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(Ar(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===$i?(Ar(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ar(t,!1),0===t.strm.avail_out)?1:2},Nr=(t,e)=>{let n,i,r;for(;;){if(t.lookahead=3&&(t.ins_h=br(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==n&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,i=Yi(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=r&&(t.ins_h=br(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,i&&(Ar(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(i=Yi(t,0,t.window[t.strstart-1]),i&&Ar(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=Yi(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===$i?(Ar(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ar(t,!1),0===t.strm.avail_out)?1:2};function Rr(t,e,n,i,r){this.good_length=t,this.max_lazy=e,this.nice_length=n,this.max_chain=i,this.func=r}const Lr=[new Rr(0,0,0,0,Ir),new Rr(4,4,8,4,Dr),new Rr(4,5,16,8,Dr),new Rr(4,6,32,32,Dr),new Rr(4,4,16,16,Nr),new Rr(8,16,32,32,Nr),new Rr(8,16,128,128,Nr),new Rr(8,32,128,256,Nr),new Rr(32,128,258,1024,Nr),new Rr(32,258,258,4096,Nr)];function zr(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=fr,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),wr(this.dyn_ltree),wr(this.dyn_dtree),wr(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),wr(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),wr(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Ur=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==gr&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==_r&&e.status!==vr?1:0},Br=t=>{if(Ur(t))return yr(t,ir);t.total_in=t.total_out=0,t.data_type=ur;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?gr:_r,t.adler=2===e.wrap?0:1,e.last_flush=-2,qi(e),er},Or=t=>{const e=Br(t);var n;return e===er&&((n=t.state).window_size=2*n.w_size,wr(n.head),n.max_lazy_match=Lr[n.level].max_lazy,n.good_match=Lr[n.level].good_length,n.nice_match=Lr[n.level].nice_length,n.max_chain_length=Lr[n.level].max_chain,n.strstart=0,n.block_start=0,n.lookahead=0,n.insert=0,n.match_length=n.prev_length=2,n.match_available=0,n.ins_h=0),e},Vr=(t,e,n,i,r,a)=>{if(!t)return ir;let o=1;if(e===or&&(e=6),i<0?(o=0,i=-i):i>15&&(o=2,i-=16),r<1||r>9||n!==fr||i<8||i>15||e<0||e>9||a<0||a>hr||8===i&&1!==o)return yr(t,ir);8===i&&(i=9);const s=new zr;return t.state=s,s.strm=t,s.status=gr,s.wrap=o,s.gzhead=null,s.w_bits=i,s.w_size=1<Vr(t,e,fr,15,8,dr),deflateInit2:Vr,deflateReset:Or,deflateResetKeep:Br,deflateSetHeader:(t,e)=>Ur(t)||2!==t.state.wrap?ir:(t.state.gzhead=e,er),deflate:(t,e)=>{if(Ur(t)||e>tr||e<0)return t?yr(t,ir):ir;const n=t.state;if(!t.output||0!==t.avail_in&&!t.input||n.status===vr&&e!==$i)return yr(t,0===t.avail_out?ar:ir);const i=n.last_flush;if(n.last_flush=e,0!==n.pending){if(Mr(t),0===t.avail_out)return n.last_flush=-1,er}else if(0===t.avail_in&&xr(e)<=xr(i)&&e!==$i)return yr(t,ar);if(n.status===vr&&0!==t.avail_in)return yr(t,ar);if(n.status===gr&&0===n.wrap&&(n.status=_r),n.status===gr){let e=fr+(n.w_bits-8<<4)<<8,i=-1;if(i=n.strategy>=lr||n.level<2?0:n.level<6?1:6===n.level?2:3,e|=i<<6,0!==n.strstart&&(e|=32),e+=31-e%31,Er(n,e),0!==n.strstart&&(Er(n,t.adler>>>16),Er(n,65535&t.adler)),t.adler=1,n.status=_r,Mr(t),0!==n.pending)return n.last_flush=-1,er}if(57===n.status)if(t.adler=0,Tr(n,31),Tr(n,139),Tr(n,8),n.gzhead)Tr(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),Tr(n,255&n.gzhead.time),Tr(n,n.gzhead.time>>8&255),Tr(n,n.gzhead.time>>16&255),Tr(n,n.gzhead.time>>24&255),Tr(n,9===n.level?2:n.strategy>=lr||n.level<2?4:0),Tr(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(Tr(n,255&n.gzhead.extra.length),Tr(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(t.adler=Hi(t.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69;else if(Tr(n,0),Tr(n,0),Tr(n,0),Tr(n,0),Tr(n,0),Tr(n,9===n.level?2:n.strategy>=lr||n.level<2?4:0),Tr(n,3),n.status=_r,Mr(t),0!==n.pending)return n.last_flush=-1,er;if(69===n.status){if(n.gzhead.extra){let e=n.pending,i=(65535&n.gzhead.extra.length)-n.gzindex;for(;n.pending+i>n.pending_buf_size;){let r=n.pending_buf_size-n.pending;if(n.pending_buf.set(n.gzhead.extra.subarray(n.gzindex,n.gzindex+r),n.pending),n.pending=n.pending_buf_size,n.gzhead.hcrc&&n.pending>e&&(t.adler=Hi(t.adler,n.pending_buf,n.pending-e,e)),n.gzindex+=r,Mr(t),0!==n.pending)return n.last_flush=-1,er;e=0,i-=r}let r=new Uint8Array(n.gzhead.extra);n.pending_buf.set(r.subarray(n.gzindex,n.gzindex+i),n.pending),n.pending+=i,n.gzhead.hcrc&&n.pending>e&&(t.adler=Hi(t.adler,n.pending_buf,n.pending-e,e)),n.gzindex=0}n.status=73}if(73===n.status){if(n.gzhead.name){let e,i=n.pending;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>i&&(t.adler=Hi(t.adler,n.pending_buf,n.pending-i,i)),Mr(t),0!==n.pending)return n.last_flush=-1,er;i=0}e=n.gzindexi&&(t.adler=Hi(t.adler,n.pending_buf,n.pending-i,i)),n.gzindex=0}n.status=91}if(91===n.status){if(n.gzhead.comment){let e,i=n.pending;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>i&&(t.adler=Hi(t.adler,n.pending_buf,n.pending-i,i)),Mr(t),0!==n.pending)return n.last_flush=-1,er;i=0}e=n.gzindexi&&(t.adler=Hi(t.adler,n.pending_buf,n.pending-i,i))}n.status=103}if(103===n.status){if(n.gzhead.hcrc){if(n.pending+2>n.pending_buf_size&&(Mr(t),0!==n.pending))return n.last_flush=-1,er;Tr(n,255&t.adler),Tr(n,t.adler>>8&255),t.adler=0}if(n.status=_r,Mr(t),0!==n.pending)return n.last_flush=-1,er}if(0!==t.avail_in||0!==n.lookahead||e!==Ji&&n.status!==vr){let i=0===n.level?Ir(n,e):n.strategy===lr?((t,e)=>{let n;for(;;){if(0===t.lookahead&&(kr(t),0===t.lookahead)){if(e===Ji)return 1;break}if(t.match_length=0,n=Yi(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,n&&(Ar(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===$i?(Ar(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ar(t,!1),0===t.strm.avail_out)?1:2})(n,e):n.strategy===cr?((t,e)=>{let n,i,r,a;const o=t.window;for(;;){if(t.lookahead<=mr){if(kr(t),t.lookahead<=mr&&e===Ji)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(r=t.strstart-1,i=o[r],i===o[++r]&&i===o[++r]&&i===o[++r])){a=t.strstart+mr;do{}while(i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&i===o[++r]&&rt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(n=Yi(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(n=Yi(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),n&&(Ar(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===$i?(Ar(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ar(t,!1),0===t.strm.avail_out)?1:2})(n,e):Lr[n.level].func(n,e);if(3!==i&&4!==i||(n.status=vr),1===i||3===i)return 0===t.avail_out&&(n.last_flush=-1),er;if(2===i&&(e===Qi?Xi(n):e!==tr&&(ji(n,0,0,!1),e===Ki&&(wr(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),Mr(t),0===t.avail_out))return n.last_flush=-1,er}return e!==$i?er:n.wrap<=0?nr:(2===n.wrap?(Tr(n,255&t.adler),Tr(n,t.adler>>8&255),Tr(n,t.adler>>16&255),Tr(n,t.adler>>24&255),Tr(n,255&t.total_in),Tr(n,t.total_in>>8&255),Tr(n,t.total_in>>16&255),Tr(n,t.total_in>>24&255)):(Er(n,t.adler>>>16),Er(n,65535&t.adler)),Mr(t),n.wrap>0&&(n.wrap=-n.wrap),0!==n.pending?er:nr)},deflateEnd:t=>{if(Ur(t))return ir;const e=t.state.status;return t.state=null,e===_r?yr(t,rr):er},deflateSetDictionary:(t,e)=>{let n=e.length;if(Ur(t))return ir;const i=t.state,r=i.wrap;if(2===r||1===r&&i.status!==gr||i.lookahead)return ir;if(1===r&&(t.adler=Vi(t.adler,e,n,0)),i.wrap=0,n>=i.w_size){0===r&&(wr(i.head),i.strstart=0,i.block_start=0,i.insert=0);let t=new Uint8Array(i.w_size);t.set(e.subarray(n-i.w_size,n),0),e=t,n=i.w_size}const a=t.avail_in,o=t.next_in,s=t.input;for(t.avail_in=n,t.next_in=0,t.input=e,kr(i);i.lookahead>=3;){let t=i.strstart,e=i.lookahead-2;do{i.ins_h=br(i,i.ins_h,i.window[t+3-1]),i.prev[t&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=t,t++}while(--e);i.strstart=t,i.lookahead=2,kr(i)}return i.strstart+=i.lookahead,i.block_start=i.strstart,i.insert=i.lookahead,i.lookahead=0,i.match_length=i.prev_length=2,i.match_available=0,t.next_in=o,t.input=s,t.avail_in=a,i.wrap=r,er},deflateInfo:"pako deflate (from Nodeca project)"};const Hr=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var Wr={assign:function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const n=e.shift();if(n){if("object"!=typeof n)throw new TypeError(n+"must be non-object");for(const e in n)Hr(n,e)&&(t[e]=n[e])}}return t},flattenChunks:t=>{let e=0;for(let n=0,i=t.length;n=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;qr[254]=qr[254]=1;var jr={string2buf:t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,n,i,r,a,o=t.length,s=0;for(r=0;r>>6,e[a++]=128|63&n):n<65536?(e[a++]=224|n>>>12,e[a++]=128|n>>>6&63,e[a++]=128|63&n):(e[a++]=240|n>>>18,e[a++]=128|n>>>12&63,e[a++]=128|n>>>6&63,e[a++]=128|63&n);return e},buf2string:(t,e)=>{const n=e||t.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(t.subarray(0,e));let i,r;const a=new Array(2*n);for(r=0,i=0;i4)a[r++]=65533,i+=o-1;else{for(e&=2===o?31:3===o?15:7;o>1&&i1?a[r++]=65533:e<65536?a[r++]=e:(e-=65536,a[r++]=55296|e>>10&1023,a[r++]=56320|1023&e)}}return((t,e)=>{if(e<65534&&t.subarray&&Gr)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let n="";for(let i=0;i{(e=e||t.length)>t.length&&(e=t.length);let n=e-1;for(;n>=0&&128==(192&t[n]);)n--;return n<0||0===n?e:n+qr[t[n]]>e?n:e}};var Zr=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Yr=Object.prototype.toString,{Z_NO_FLUSH:Xr,Z_SYNC_FLUSH:Jr,Z_FULL_FLUSH:Qr,Z_FINISH:Kr,Z_OK:$r,Z_STREAM_END:ta,Z_DEFAULT_COMPRESSION:ea,Z_DEFAULT_STRATEGY:na,Z_DEFLATED:ia}=Gi;function ra(t){this.options=Wr.assign({level:ea,method:ia,chunkSize:16384,windowBits:15,memLevel:8,strategy:na},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Zr,this.strm.avail_out=0;let n=Fr.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(n!==$r)throw new Error(Wi[n]);if(e.header&&Fr.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?jr.string2buf(e.dictionary):"[object ArrayBuffer]"===Yr.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,n=Fr.deflateSetDictionary(this.strm,t),n!==$r)throw new Error(Wi[n]);this._dict_set=!0}}function aa(t,e){const n=new ra(e);if(n.push(t,!0),n.err)throw n.msg||Wi[n.err];return n.result}ra.prototype.push=function(t,e){const n=this.strm,i=this.options.chunkSize;let r,a;if(this.ended)return!1;for(a=e===~~e?e:!0===e?Kr:Xr,"string"==typeof t?n.input=jr.string2buf(t):"[object ArrayBuffer]"===Yr.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;;)if(0===n.avail_out&&(n.output=new Uint8Array(i),n.next_out=0,n.avail_out=i),(a===Jr||a===Qr)&&n.avail_out<=6)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else{if(r=Fr.deflate(n,a),r===ta)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),r=Fr.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===$r;if(0!==n.avail_out){if(a>0&&n.next_out>0)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else if(0===n.avail_in)break}else this.onData(n.output)}return!0},ra.prototype.onData=function(t){this.chunks.push(t)},ra.prototype.onEnd=function(t){t===$r&&(this.result=Wr.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var oa={Deflate:ra,deflate:aa,deflateRaw:function(t,e){return(e=e||{}).raw=!0,aa(t,e)},gzip:function(t,e){return(e=e||{}).gzip=!0,aa(t,e)},constants:Gi};const sa=16209;var la=function(t,e){let n,i,r,a,o,s,l,c,h,d,u,f,m,p,g,_,v,y,x,w,S,b,M,A;const T=t.state;n=t.next_in,M=t.input,i=n+(t.avail_in-5),r=t.next_out,A=t.output,a=r-(e-t.avail_out),o=r+(t.avail_out-257),s=T.dmax,l=T.wsize,c=T.whave,h=T.wnext,d=T.window,u=T.hold,f=T.bits,m=T.lencode,p=T.distcode,g=(1<>>24,u>>>=y,f-=y,y=v>>>16&255,0===y)A[r++]=65535&v;else{if(!(16&y)){if(64&y){if(32&y){T.mode=16191;break t}t.msg="invalid literal/length code",T.mode=sa;break t}v=m[(65535&v)+(u&(1<>>=y,f-=y),f<15&&(u+=M[n++]<>>24,u>>>=y,f-=y,y=v>>>16&255,16&y){if(w=65535&v,y&=15,fs){t.msg="invalid distance too far back",T.mode=sa;break t}if(u>>>=y,f-=y,y=r-a,w>y){if(y=w-y,y>c&&T.sane){t.msg="invalid distance too far back",T.mode=sa;break t}if(S=0,b=d,0===h){if(S+=l-y,y2;)A[r++]=b[S++],A[r++]=b[S++],A[r++]=b[S++],x-=3;x&&(A[r++]=b[S++],x>1&&(A[r++]=b[S++]))}else{S=r-w;do{A[r++]=A[S++],A[r++]=A[S++],A[r++]=A[S++],x-=3}while(x>2);x&&(A[r++]=A[S++],x>1&&(A[r++]=A[S++]))}break}if(64&y){t.msg="invalid distance code",T.mode=sa;break t}v=p[(65535&v)+(u&(1<>3,n-=x,f-=x<<3,u&=(1<{const l=s.bits;let c,h,d,u,f,m,p=0,g=0,_=0,v=0,y=0,x=0,w=0,S=0,b=0,M=0,A=null;const T=new Uint16Array(16),E=new Uint16Array(16);let C,P,k,I=null;for(p=0;p<=ca;p++)T[p]=0;for(g=0;g=1&&0===T[v];v--);if(y>v&&(y=v),0===v)return r[a++]=20971520,r[a++]=20971520,s.bits=1,0;for(_=1;_0&&(0===t||1!==v))return-1;for(E[1]=0,p=1;p852||2===t&&b>592)return 1;for(;;){C=p-w,o[g]+1=m?(P=I[o[g]-m],k=A[o[g]-m]):(P=96,k=0),c=1<>w)+h]=C<<24|P<<16|k}while(0!==h);for(c=1<>=1;if(0!==c?(M&=c-1,M+=c):M=0,g++,0==--T[p]){if(p===v)break;p=e[n+o[g]]}if(p>y&&(M&u)!==d){for(0===w&&(w=y),f+=_,x=p-w,S=1<852||2===t&&b>592)return 1;d=M&u,r[d]=y<<24|x<<16|f-a}}return 0!==M&&(r[f+M]=p-w<<24|64<<16),s.bits=y,0};const{Z_FINISH:pa,Z_BLOCK:ga,Z_TREES:_a,Z_OK:va,Z_STREAM_END:ya,Z_NEED_DICT:xa,Z_STREAM_ERROR:wa,Z_DATA_ERROR:Sa,Z_MEM_ERROR:ba,Z_BUF_ERROR:Ma,Z_DEFLATED:Aa}=Gi,Ta=16180,Ea=16190,Ca=16191,Pa=16192,ka=16194,Ia=16199,Da=16200,Na=16206,Ra=16209,La=t=>(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);function za(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Ua=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.mode16211?1:0},Ba=t=>{if(Ua(t))return wa;const e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=Ta,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,va},Oa=t=>{if(Ua(t))return wa;const e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,Ba(t)},Va=(t,e)=>{let n;if(Ua(t))return wa;const i=t.state;return e<0?(n=0,e=-e):(n=5+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?wa:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=n,i.wbits=e,Oa(t))},Fa=(t,e)=>{if(!t)return wa;const n=new za;t.state=n,n.strm=t,n.window=null,n.mode=Ta;const i=Va(t,e);return i!==va&&(t.state=null),i};let Ha,Wa,Ga=!0;const qa=t=>{if(Ga){Ha=new Int32Array(512),Wa=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ma(1,t.lens,0,288,Ha,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ma(2,t.lens,0,32,Wa,0,t.work,{bits:5}),Ga=!1}t.lencode=Ha,t.lenbits=9,t.distcode=Wa,t.distbits=5},ja=(t,e,n,i)=>{let r;const a=t.state;return null===a.window&&(a.wsize=1<=a.wsize?(a.window.set(e.subarray(n-a.wsize,n),0),a.wnext=0,a.whave=a.wsize):(r=a.wsize-a.wnext,r>i&&(r=i),a.window.set(e.subarray(n-i,n-i+r),a.wnext),(i-=r)?(a.window.set(e.subarray(n-i,n),0),a.wnext=i,a.whave=a.wsize):(a.wnext+=r,a.wnext===a.wsize&&(a.wnext=0),a.whaveFa(t,15),inflateInit2:Fa,inflate:(t,e)=>{let n,i,r,a,o,s,l,c,h,d,u,f,m,p,g,_,v,y,x,w,S,b,M=0;const A=new Uint8Array(4);let T,E;const C=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Ua(t)||!t.output||!t.input&&0!==t.avail_in)return wa;n=t.state,n.mode===Ca&&(n.mode=Pa),o=t.next_out,r=t.output,l=t.avail_out,a=t.next_in,i=t.input,s=t.avail_in,c=n.hold,h=n.bits,d=s,u=l,b=va;t:for(;;)switch(n.mode){case Ta:if(0===n.wrap){n.mode=Pa;break}for(;h<16;){if(0===s)break t;s--,c+=i[a++]<>>8&255,n.check=Hi(n.check,A,2,0),c=0,h=0,n.mode=16181;break}if(n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&c)<<8)+(c>>8))%31){t.msg="incorrect header check",n.mode=Ra;break}if((15&c)!==Aa){t.msg="unknown compression method",n.mode=Ra;break}if(c>>>=4,h-=4,S=8+(15&c),0===n.wbits&&(n.wbits=S),S>15||S>n.wbits){t.msg="invalid window size",n.mode=Ra;break}n.dmax=1<>8&1),512&n.flags&&4&n.wrap&&(A[0]=255&c,A[1]=c>>>8&255,n.check=Hi(n.check,A,2,0)),c=0,h=0,n.mode=16182;case 16182:for(;h<32;){if(0===s)break t;s--,c+=i[a++]<>>8&255,A[2]=c>>>16&255,A[3]=c>>>24&255,n.check=Hi(n.check,A,4,0)),c=0,h=0,n.mode=16183;case 16183:for(;h<16;){if(0===s)break t;s--,c+=i[a++]<>8),512&n.flags&&4&n.wrap&&(A[0]=255&c,A[1]=c>>>8&255,n.check=Hi(n.check,A,2,0)),c=0,h=0,n.mode=16184;case 16184:if(1024&n.flags){for(;h<16;){if(0===s)break t;s--,c+=i[a++]<>>8&255,n.check=Hi(n.check,A,2,0)),c=0,h=0}else n.head&&(n.head.extra=null);n.mode=16185;case 16185:if(1024&n.flags&&(f=n.length,f>s&&(f=s),f&&(n.head&&(S=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(i.subarray(a,a+f),S)),512&n.flags&&4&n.wrap&&(n.check=Hi(n.check,i,f,a)),s-=f,a+=f,n.length-=f),n.length))break t;n.length=0,n.mode=16186;case 16186:if(2048&n.flags){if(0===s)break t;f=0;do{S=i[a+f++],n.head&&S&&n.length<65536&&(n.head.name+=String.fromCharCode(S))}while(S&&f>9&1,n.head.done=!0),t.adler=n.check=0,n.mode=Ca;break;case 16189:for(;h<32;){if(0===s)break t;s--,c+=i[a++]<>>=7&h,h-=7&h,n.mode=Na;break}for(;h<3;){if(0===s)break t;s--,c+=i[a++]<>>=1,h-=1,3&c){case 0:n.mode=16193;break;case 1:if(qa(n),n.mode=Ia,e===_a){c>>>=2,h-=2;break t}break;case 2:n.mode=16196;break;case 3:t.msg="invalid block type",n.mode=Ra}c>>>=2,h-=2;break;case 16193:for(c>>>=7&h,h-=7&h;h<32;){if(0===s)break t;s--,c+=i[a++]<>>16^65535)){t.msg="invalid stored block lengths",n.mode=Ra;break}if(n.length=65535&c,c=0,h=0,n.mode=ka,e===_a)break t;case ka:n.mode=16195;case 16195:if(f=n.length,f){if(f>s&&(f=s),f>l&&(f=l),0===f)break t;r.set(i.subarray(a,a+f),o),s-=f,a+=f,l-=f,o+=f,n.length-=f;break}n.mode=Ca;break;case 16196:for(;h<14;){if(0===s)break t;s--,c+=i[a++]<>>=5,h-=5,n.ndist=1+(31&c),c>>>=5,h-=5,n.ncode=4+(15&c),c>>>=4,h-=4,n.nlen>286||n.ndist>30){t.msg="too many length or distance symbols",n.mode=Ra;break}n.have=0,n.mode=16197;case 16197:for(;n.have>>=3,h-=3}for(;n.have<19;)n.lens[C[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,T={bits:n.lenbits},b=ma(0,n.lens,0,19,n.lencode,0,n.work,T),n.lenbits=T.bits,b){t.msg="invalid code lengths set",n.mode=Ra;break}n.have=0,n.mode=16198;case 16198:for(;n.have>>24,_=M>>>16&255,v=65535&M,!(g<=h);){if(0===s)break t;s--,c+=i[a++]<>>=g,h-=g,n.lens[n.have++]=v;else{if(16===v){for(E=g+2;h>>=g,h-=g,0===n.have){t.msg="invalid bit length repeat",n.mode=Ra;break}S=n.lens[n.have-1],f=3+(3&c),c>>>=2,h-=2}else if(17===v){for(E=g+3;h>>=g,h-=g,S=0,f=3+(7&c),c>>>=3,h-=3}else{for(E=g+7;h>>=g,h-=g,S=0,f=11+(127&c),c>>>=7,h-=7}if(n.have+f>n.nlen+n.ndist){t.msg="invalid bit length repeat",n.mode=Ra;break}for(;f--;)n.lens[n.have++]=S}}if(n.mode===Ra)break;if(0===n.lens[256]){t.msg="invalid code -- missing end-of-block",n.mode=Ra;break}if(n.lenbits=9,T={bits:n.lenbits},b=ma(1,n.lens,0,n.nlen,n.lencode,0,n.work,T),n.lenbits=T.bits,b){t.msg="invalid literal/lengths set",n.mode=Ra;break}if(n.distbits=6,n.distcode=n.distdyn,T={bits:n.distbits},b=ma(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,T),n.distbits=T.bits,b){t.msg="invalid distances set",n.mode=Ra;break}if(n.mode=Ia,e===_a)break t;case Ia:n.mode=Da;case Da:if(s>=6&&l>=258){t.next_out=o,t.avail_out=l,t.next_in=a,t.avail_in=s,n.hold=c,n.bits=h,la(t,u),o=t.next_out,r=t.output,l=t.avail_out,a=t.next_in,i=t.input,s=t.avail_in,c=n.hold,h=n.bits,n.mode===Ca&&(n.back=-1);break}for(n.back=0;M=n.lencode[c&(1<>>24,_=M>>>16&255,v=65535&M,!(g<=h);){if(0===s)break t;s--,c+=i[a++]<>y)],g=M>>>24,_=M>>>16&255,v=65535&M,!(y+g<=h);){if(0===s)break t;s--,c+=i[a++]<>>=y,h-=y,n.back+=y}if(c>>>=g,h-=g,n.back+=g,n.length=v,0===_){n.mode=16205;break}if(32&_){n.back=-1,n.mode=Ca;break}if(64&_){t.msg="invalid literal/length code",n.mode=Ra;break}n.extra=15&_,n.mode=16201;case 16201:if(n.extra){for(E=n.extra;h>>=n.extra,h-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=16202;case 16202:for(;M=n.distcode[c&(1<>>24,_=M>>>16&255,v=65535&M,!(g<=h);){if(0===s)break t;s--,c+=i[a++]<>y)],g=M>>>24,_=M>>>16&255,v=65535&M,!(y+g<=h);){if(0===s)break t;s--,c+=i[a++]<>>=y,h-=y,n.back+=y}if(c>>>=g,h-=g,n.back+=g,64&_){t.msg="invalid distance code",n.mode=Ra;break}n.offset=v,n.extra=15&_,n.mode=16203;case 16203:if(n.extra){for(E=n.extra;h>>=n.extra,h-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){t.msg="invalid distance too far back",n.mode=Ra;break}n.mode=16204;case 16204:if(0===l)break t;if(f=u-l,n.offset>f){if(f=n.offset-f,f>n.whave&&n.sane){t.msg="invalid distance too far back",n.mode=Ra;break}f>n.wnext?(f-=n.wnext,m=n.wsize-f):m=n.wnext-f,f>n.length&&(f=n.length),p=n.window}else p=r,m=o-n.offset,f=n.length;f>l&&(f=l),l-=f,n.length-=f;do{r[o++]=p[m++]}while(--f);0===n.length&&(n.mode=Da);break;case 16205:if(0===l)break t;r[o++]=n.length,l--,n.mode=Da;break;case Na:if(n.wrap){for(;h<32;){if(0===s)break t;s--,c|=i[a++]<{if(Ua(t))return wa;let e=t.state;return e.window&&(e.window=null),t.state=null,va},inflateGetHeader:(t,e)=>{if(Ua(t))return wa;const n=t.state;return 2&n.wrap?(n.head=e,e.done=!1,va):wa},inflateSetDictionary:(t,e)=>{const n=e.length;let i,r,a;return Ua(t)?wa:(i=t.state,0!==i.wrap&&i.mode!==Ea?wa:i.mode===Ea&&(r=1,r=Vi(r,e,n,0),r!==i.check)?Sa:(a=ja(t,e,n,n),a?(i.mode=16210,ba):(i.havedict=1,va)))},inflateInfo:"pako inflate (from Nodeca project)"};var Ya=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Xa=Object.prototype.toString,{Z_NO_FLUSH:Ja,Z_FINISH:Qa,Z_OK:Ka,Z_STREAM_END:$a,Z_NEED_DICT:to,Z_STREAM_ERROR:eo,Z_DATA_ERROR:no,Z_MEM_ERROR:io}=Gi;function ro(t){this.options=Wr.assign({chunkSize:65536,windowBits:15,to:""},t||{});const e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(15&e.windowBits||(e.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Zr,this.strm.avail_out=0;let n=Za.inflateInit2(this.strm,e.windowBits);if(n!==Ka)throw new Error(Wi[n]);if(this.header=new Ya,Za.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=jr.string2buf(e.dictionary):"[object ArrayBuffer]"===Xa.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(n=Za.inflateSetDictionary(this.strm,e.dictionary),n!==Ka)))throw new Error(Wi[n])}function ao(t,e){const n=new ro(e);if(n.push(t),n.err)throw n.msg||Wi[n.err];return n.result}ro.prototype.push=function(t,e){const n=this.strm,i=this.options.chunkSize,r=this.options.dictionary;let a,o,s;if(this.ended)return!1;for(o=e===~~e?e:!0===e?Qa:Ja,"[object ArrayBuffer]"===Xa.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;;){for(0===n.avail_out&&(n.output=new Uint8Array(i),n.next_out=0,n.avail_out=i),a=Za.inflate(n,o),a===to&&r&&(a=Za.inflateSetDictionary(n,r),a===Ka?a=Za.inflate(n,o):a===no&&(a=to));n.avail_in>0&&a===$a&&n.state.wrap>0&&0!==t[n.next_in];)Za.inflateReset(n),a=Za.inflate(n,o);switch(a){case eo:case no:case to:case io:return this.onEnd(a),this.ended=!0,!1}if(s=n.avail_out,n.next_out&&(0===n.avail_out||a===$a))if("string"===this.options.to){let t=jr.utf8border(n.output,n.next_out),e=n.next_out-t,r=jr.buf2string(n.output,t);n.next_out=e,n.avail_out=i-e,e&&n.output.set(n.output.subarray(t,t+e),0),this.onData(r)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(a!==Ka||0!==s){if(a===$a)return a=Za.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(0===n.avail_in)break}}return!0},ro.prototype.onData=function(t){this.chunks.push(t)},ro.prototype.onEnd=function(t){t===Ka&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Wr.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var oo={Inflate:ro,inflate:ao,inflateRaw:function(t,e){return(e=e||{}).raw=!0,ao(t,e)},ungzip:ao,constants:Gi};const{Deflate:so,deflate:lo,deflateRaw:co,gzip:ho}=oa,{Inflate:uo,inflate:fo,inflateRaw:mo,ungzip:po}=oo;var go={Deflate:so,deflate:lo,deflateRaw:co,gzip:ho,Inflate:uo,inflate:fo,inflateRaw:mo,ungzip:po,constants:Gi};function _o(t){let e;t=(t=t.replace(/-/g,"+")).replace(/_/g,"/");try{e=atob(t)}catch(t){return null}const n=new Uint8Array(e.length);for(let t=0;t255)return null;n[t]=i}return n}var vo,yo=function(t,e,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!r:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(t,n):r?r.value=n:e.set(t,n),n},xo=function(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)};class wo{constructor(t){vo.set(this,[]),null!=t&&yo(this,vo,t,"f")}recordFrame(t,e){if(xo(this,vo,"f").length>0){const t=xo(this,vo,"f")[xo(this,vo,"f").length-1];if(t.controls.up==e.up&&t.controls.right==e.right&&t.controls.down==e.down&&t.controls.left==e.left)return}xo(this,vo,"f").push({frame:t,controls:e})}getFrame(t){for(let e=0;et&&e>0){const t=xo(this,vo,"f")[e-1];return[t.controls.up,t.controls.right,t.controls.down,t.controls.left]}}if(xo(this,vo,"f").length>0){const t=xo(this,vo,"f")[xo(this,vo,"f").length-1];return[t.controls.up,t.controls.right,t.controls.down,t.controls.left]}return[!1,!1,!1,!1]}getRecording(){return xo(this,vo,"f")}serialize(){const t=new Uint8Array(Math.ceil(3.5*xo(this,vo,"f").length));for(let e=0;e>>8&255,t[3*e+2]=n.frame>>>16&255}for(let e=0;e{e+=String.fromCharCode(t)}));let n=btoa(e);return n=n.replace(/\+/g,"-"),n=n.replace(/\//g,"_"),n=n.replace(/=/g,""),n}(e.result)}static deserialize(t){const e=_o(t);if(null==e)return null;const n=new go.Inflate;if(n.push(e,!0),n.err)return null;const i=n.result,r=[],a=Math.round(i.length/3.5);for(let t=0;t>>1&1),down:1==(o>>>2&1),left:1==(o>>>3&1)}:{up:1==(o>>>4&1),right:1==(o>>>5&1),down:1==(o>>>6&1),left:1==(o>>>7&1)},r.push({frame:e,controls:n})}return new wo(r)}}vo=new WeakMap;const So=wo;var bo,Mo,Ao,To,Eo,Co,Po,ko,Io,Do,No,Ro,Lo,zo,Uo,Bo,Oo,Vo,Fo,Ho,Wo=function(t,e,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!r:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(t,n):r?r.value=n:e.set(t,n),n},Go=function(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)};class qo{constructor(){bo.add(this),Ao.set(this,void 0),To.set(this,void 0),Eo.set(this,void 0),Co.set(this,void 0),Po.set(this,void 0),ko.set(this,void 0),Io.set(this,[]),Do.set(this,[]),No.set(this,new Map),Lo.set(this,[]),zo.set(this,null),Uo.set(this,null),Bo.set(this,0),Oo.set(this,1e3),Vo.set(this,[]),Fo.set(this,[]),Wo(this,Ao,new Ammo.btDefaultCollisionConfiguration,"f"),Wo(this,To,new Ammo.btCollisionDispatcher(Go(this,Ao,"f")),"f"),Wo(this,Eo,new Ammo.btDbvtBroadphase,"f"),Wo(this,Co,new Ammo.btSequentialImpulseConstraintSolver,"f"),Wo(this,Po,new Ammo.btDiscreteDynamicsWorld(Go(this,To,"f"),Go(this,Eo,"f"),Go(this,Co,"f"),Go(this,Ao,"f")),"f"),Wo(this,ko,new Ammo.btGhostPairCallback,"f"),Go(this,Po,"f").getPairCache().setInternalGhostPairCallback(Go(this,ko,"f"));const t=new Ammo.btVector3(0,-9.82,0);Go(this,Po,"f").setGravity(t),Ammo.destroy(t)}dispose(){Go(this,Io,"f").forEach((t=>{Go(this,Po,"f").removeRigidBody(t),Ammo.destroy(t.getMotionState()),Ammo.destroy(t)})),Go(this,Io,"f").length=0,Go(this,Lo,"f").forEach((({body:t})=>{Go(this,Po,"f").removeRigidBody(t)})),Go(this,Lo,"f").length=0,Go(this,Do,"f").forEach((({body:t})=>{Ammo.destroy(t.getMotionState()),Ammo.destroy(t)})),Go(this,Do,"f").length=0,Go(this,No,"f").clear(),null!=Go(this,zo,"f")&&Ammo.destroy(Go(this,zo,"f")),null!=Go(this,Uo,"f")&&(Ammo.destroy(Go(this,Uo,"f").shape),Ammo.destroy(Go(this,Uo,"f").triangleMesh)),Ammo.destroy(Go(this,Po,"f")),Ammo.destroy(Go(this,ko,"f")),Ammo.destroy(Go(this,Co,"f")),Ammo.destroy(Go(this,Eo,"f")),Ammo.destroy(Go(this,To,"f")),Ammo.destroy(Go(this,Ao,"f"))}createGroundPlane(){if(null!=Go(this,zo,"f"))throw"Ground is already initialized";const t=new Ammo.btVector3(0,1,0),e=new Ammo.btStaticPlaneShape(t,0);Ammo.destroy(t);const n=new Ammo.btTransform;n.setIdentity();const i=new Ammo.btDefaultMotionState(n);Ammo.destroy(n);const r=new Ammo.btVector3;e.calculateLocalInertia(0,r);const a=new Ammo.btRigidBodyConstructionInfo(0,i,e,r),o=new Ammo.btRigidBody(a);Ammo.destroy(r),Ammo.destroy(a),Go(this,bo,"m",Ho).call(this,o),Wo(this,zo,e,"f")}createMountains(t,e){if(t.length%9!=0)throw"Number of mountain vertices is not dividable by 9";if(t.length>0){if(null!=Go(this,Uo,"f"))throw"Mountains are already initialized";const n=new Ammo.btTriangleMesh;for(let e=0;e{i.body.getAabb(e,n);const r=t.xn.x()+3,a=t.yn.y()+3,o=t.zn.z()+3;return!(!(r&&a&&o)&&i.active)||(Go(this,Po,"f").removeRigidBody(i.body),i.active=!1,!1)})),"f");const i=t.clone().divideScalar(Go(Mo,Mo,"f",Ro)).floor(),r=i.x+"|"+i.y+"|"+i.z,a=Go(this,No,"f").get(r);null!=a&&a.forEach((i=>{i.body.getAabb(e,n);const r=t.x>=e.x()-3&&t.x<=n.x()+3,a=t.y>=e.y()-3&&t.y<=n.y()+3,o=t.z>=e.z()-3&&t.z<=n.z()+3;r&&a&&o&&(i.active||(Go(this,Po,"f").addRigidBody(i.body),i.active=!0,Go(this,Lo,"f").push(i)))})),Ammo.destroy(e),Ammo.destroy(n)}addPreStepEventListener(t){Go(this,Vo,"f").push(t)}addPostStepEventListener(t){Go(this,Fo,"f").push(t)}removePreStepEventListener(t){Wo(this,Vo,Go(this,Vo,"f").filter((e=>e!=t)),"f")}removePostStepEventListener(t){Wo(this,Fo,Go(this,Fo,"f").filter((e=>e!=t)),"f")}step(){var t;for(let t=0;tXo(t,Zo,"f")}lessOrEqual(t){return Xo(this,Zo,"f")<=Xo(t,Zo,"f")}greaterOrEqual(t){return Xo(this,Zo,"f")>=Xo(t,Zo,"f")}equals(t){return Xo(this,Zo,"f")==Xo(t,Zo,"f")}isNegative(){return Xo(this,Zo,"f")<0}clone(){const t=new Jo;return Yo(t,Zo,Xo(this,Zo,"f"),"f"),t}}Zo=new WeakMap;const Qo=Jo;var Ko;!function(t){t[t.Checkpoint=0]="Checkpoint",t[t.Finish=1]="Finish"}(Ko||(Ko={}));const $o=Ko;var ts,es,ns,is,rs,as=function(t,e,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!r:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(t,n):r?r.value=n:e.set(t,n),n},os=function(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)};class ss{constructor(t,e,n){ts.add(this),ns.set(this,void 0),is.set(this,new Map),as(this,ns,e,"f"),n.forEachPart(((n,i,r,a,o,s)=>{os(this,ts,"m",rs).call(this,n,i,r,o,a,t,e);const l=os(this,is,"f").get(a);null==l?os(this,is,"f").set(a,[{x:n,y:i,z:r,rotation:o,type:a,checkpointOrder:s}]):l.push({x:n,y:i,z:r,rotation:o,type:a,checkpointOrder:s})}))}checkCheckpoint(t,e){return this.checkFinishOrCheckpoint(t,e)}checkFinish(t){return this.checkFinishOrCheckpoint(t)}checkFinishOrCheckpoint(t,e){let n=[],i=null;if(null==e){os(this,ns,"f").getPartTypesWithDetector($o.Finish).forEach((t=>{const e=os(this,ns,"f").getDetector(t);if(null==e)throw"Part detector is missing";const i=os(this,is,"f").get(t);null!=i&&(n=n.concat(i.map((({x:t,y:n,z:i,rotation:r,checkpointOrder:a})=>({x:t,y:n,z:i,rotation:r,checkpointOrder:a,detector:e})))))}))}else{os(this,ns,"f").getPartTypesWithDetector($o.Checkpoint).forEach((t=>{const e=os(this,ns,"f").getDetector(t);if(null==e)throw"Part detector is missing";const i=os(this,is,"f").get(t);null!=i&&(n=n.concat(i.map((({x:t,y:n,z:i,rotation:r,checkpointOrder:a})=>({x:t,y:n,z:i,rotation:r,checkpointOrder:a,detector:e})))))}));const t=n.map((t=>{if(null==t.checkpointOrder)throw"Checkpoint has no checkpoint order";return t.checkpointOrder})).filter(((t,e,n)=>n.indexOf(t)==e)).sort(((t,e)=>t-e));e{if(o==i){const i=new ct(...s.center),o=new ct(...s.size);let l,c;if(0==a)l=new ct(i.x,i.y,i.z),c=new ct(o.x,o.y,o.z);else if(1==a)l=new ct(i.z,i.y,-i.x),c=new ct(o.z,o.y,o.x);else if(2==a)l=new ct(-i.x,i.y,-i.z),c=new ct(o.x,o.y,o.z);else{if(3!=a)throw"Invalid rotation";l=new ct(i.z,i.y,i.x),c=new ct(o.z,o.y,o.x)}l.add(new ct(e*es.partWidth,n*es.partHeight,r*es.partLength));const h=(new ut).setFromCenterAndSize(l,c);return t.some((t=>h.intersectsTriangle(t)))}return!1}))}getTotalNumberOfCheckpointIndices(){let t=[];if(os(this,ns,"f").getPartTypesWithDetector($o.Checkpoint).forEach((e=>{const n=os(this,ns,"f").getDetector(e);if(null==n)throw"Part detector is missing";const i=os(this,is,"f").get(e);null!=i&&(t=t.concat(i.map((({x:t,y:e,z:i,rotation:r,checkpointOrder:a})=>({x:t,y:e,z:i,rotation:r,checkpointOrder:a,detector:n})))))})),null==t)return 0;return t.map((t=>t.checkpointOrder)).filter(((t,e,n)=>n.indexOf(t)==e)).length}}es=ss,ns=new WeakMap,is=new WeakMap,ts=new WeakSet,rs=function(t,e,n,i,r,a,o){const s=new Ammo.btTransform,l=new Ammo.btVector3(t*es.partWidth,e*es.partHeight,n*es.partLength);s.setOrigin(l),Ammo.destroy(l);const c=new Ammo.btQuaternion;c.setEulerZYX(0,i*Math.PI/2,0),s.setRotation(c),Ammo.destroy(c);const h=new Ammo.btDefaultMotionState(s);Ammo.destroy(s);const d=o.getPhysicsShape(r),u=new Ammo.btVector3;d.calculateLocalInertia(0,u);const f=new Ammo.btRigidBodyConstructionInfo(0,h,d,u),m=new Ammo.btRigidBody(f);Ammo.destroy(u),Ammo.destroy(f),a.addStaticBody(m)},ss.partWidth=20,ss.partHeight=5,ss.partLength=20;const ls=ss;var cs,hs,ds,us,fs,ms,ps,gs,_s,vs,ys,xs,ws,Ss,bs,Ms,As,Ts,Es,Cs,Ps,ks,Is,Ds,Ns=function(t,e,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!r:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(t,n):r?r.value=n:e.set(t,n),n},Rs=function(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)};hs=new WeakMap,ds=new WeakMap,us=new WeakMap,fs=new WeakMap,ms=new WeakMap,ps=new WeakMap,gs=new WeakMap,_s=new WeakMap,vs=new WeakMap,ys=new WeakMap,xs=new WeakMap,ws=new WeakMap,Ss=new WeakMap,bs=new WeakMap,Ms=new WeakMap,As=new WeakMap,Ts=new WeakMap,cs=new WeakSet,Es=function(t){if(t.length%3!=0)throw"Car collision shape number of vertices is not dividable by 3";const e=new Ammo.btConvexHullShape;for(let n=0;n1){const t=10;Rs(this,us,"f").setBrake(t,0),Rs(this,us,"f").setBrake(t,1),Rs(this,us,"f").setBrake(t,2),Rs(this,us,"f").setBrake(t,3),Ns(this,Ms,!0,"f")}else{const t=-1e3;Rs(this,us,"f").applyEngineForce(t,2),Rs(this,us,"f").applyEngineForce(t,3),Rs(this,us,"f").setBrake(0,0),Rs(this,us,"f").setBrake(0,1),Rs(this,us,"f").setBrake(0,2),Rs(this,us,"f").setBrake(0,3)}else Rs(this,us,"f").setBrake(0,0),Rs(this,us,"f").setBrake(0,1),Rs(this,us,"f").setBrake(0,2),Rs(this,us,"f").setBrake(0,3);const s=Rs(this,cs,"m",ks).call(this).applyQuaternion(this.getQuaternion().invert()),l=-new V(s.x,s.z).normalize().angle()+Math.PI/2;let c=Math.max(0,Math.min(1,this.getSpeedKmh()/30));this.getWheelInContact(0)||this.getWheelInContact(1)||(c=0);const h=144/Math.pow(46,1.55),d=Math.max(-h,Math.min(h,l*c)),u=144/Math.pow(Math.max(46,Math.abs(this.getSpeedKmh())),1.55);Rs(this,xs,"f")&&(o&&!Rs(this,ys,"f")?Ns(this,_s,Math.min(Rs(this,_s,"f")+10*t,1),"f"):r&&!Rs(this,ys,"f")?Ns(this,_s,Math.max(Rs(this,_s,"f")-10*t,-1),"f"):Rs(this,_s,"f")>0?Ns(this,_s,Math.max(Rs(this,_s,"f")-10*t,0),"f"):Rs(this,_s,"f")<0&&Ns(this,_s,Math.min(Rs(this,_s,"f")+10*t,0),"f"));const f=Rs(this,_s,"f")*u;let m;m=d<0&&f<0?Math.min(d,f):d>0&&f>0?Math.max(d,f):d+f,Rs(this,us,"f").setSteeringValue(m,0),Rs(this,us,"f").setSteeringValue(m,1)};const Ls=class{constructor(t,e,n,i,r,a,o,s){cs.add(this),hs.set(this,void 0),ds.set(this,void 0),us.set(this,void 0),fs.set(this,void 0),ms.set(this,void 0),ps.set(this,void 0),gs.set(this,void 0),_s.set(this,0),vs.set(this,new So),ys.set(this,!1),xs.set(this,!1),ws.set(this,new Qo),Ss.set(this,new Qo),bs.set(this,0),Ms.set(this,!1),As.set(this,void 0),Ts.set(this,void 0),Ns(this,gs,o,"f"),Ns(this,ps,a,"f"),Ns(this,ds,new jo,"f"),Rs(this,ds,"f").createGroundPlane(),Rs(this,ds,"f").createMountains(t,e),Ns(this,hs,new ls(Rs(this,ds,"f"),n,i),"f"),Rs(this,ds,"f").addPreStepEventListener(Ns(this,As,(t=>{null!=Rs(this,us,"f")&&(Rs(this,ds,"f").activePhysicsAt(this.getPosition()),Rs(this,cs,"m",Is).call(this),Rs(this,cs,"m",Ds).call(this,t,o))}),"f")),Rs(this,ds,"f").addPostStepEventListener(Ns(this,Ts,(()=>{var t;if(null!=Rs(this,us,"f")&&!Rs(this,ys,"f")){const e=this.getMatrix4(),n=.16,i=[new be(new ct(0,n,-1.65436).applyMatrix4(e),new ct(.701253,n,-.458486).applyMatrix4(e),new ct(-.701253,n,-.458486).applyMatrix4(e)),new be(new ct(0,n,1.94498).applyMatrix4(e),new ct(.701253,n,-.458486).applyMatrix4(e),new ct(-.701253,n,-.458486).applyMatrix4(e))],r=Rs(this,hs,"f").getTotalNumberOfCheckpointIndices();Rs(this,bs,"f")==r?Rs(this,hs,"f").checkFinish(i)&&Ns(this,ys,!0,"f"):Rs(this,hs,"f").checkCheckpoint(i,Rs(this,bs,"f"))&&Ns(this,bs,(t=Rs(this,bs,"f"),++t),"f")}}),"f"));const l=new Ammo.btTransform;l.setIdentity();const c=new Ammo.btDefaultMotionState(l);Ammo.destroy(l);const h=new Ammo.btVector3(0,0,0);Ns(this,ms,Rs(this,cs,"m",Es).call(this,r),"f"),Rs(this,ms,"f").calculateLocalInertia(400,h);const d=new Ammo.btRigidBodyConstructionInfo(400,c,Rs(this,ms,"f"),h),u=new Ammo.btRigidBody(d);Ammo.destroy(d),Ammo.destroy(h),u.setDamping(.1,.1),u.setActivationState(4),Rs(this,ds,"f").world.addRigidBody(u,1,2),Ns(this,fs,u,"f");const f=new Ammo.btVehicleTuning,m=new Ammo.btDefaultVehicleRaycaster(Rs(this,ds,"f").world),p=new Ammo.btRaycastVehicle(f,u,m);p.setCoordinateSystem(0,1,2),Rs(this,ds,"f").world.addAction(p),Ns(this,us,p,"f");const g=new Ammo.btVector3(0,-1,0),_=new Ammo.btVector3(-1,0,0);["WheelFL","WheelFR","WheelBL","WheelBR"].forEach((t=>{let e;if("WheelFL"==t)e=new Ammo.btVector3(.627909,.27,1.3478);else if("WheelFR"==t)e=new Ammo.btVector3(-.627909,.27,1.3478);else if("WheelBL"==t)e=new Ammo.btVector3(.720832,.27,-1.52686);else{if("WheelBR"!=t)throw"Unidentified wheel";e=new Ammo.btVector3(-.720832,.27,-1.52686)}const n="WheelFL"==t||"WheelFR"==t,i=p.addWheel(e,g,_,.12,.331,f,n);Ammo.destroy(e),i.set_m_maxSuspensionTravelCm(1e3),i.set_m_maxSuspensionForce(1e6),i.set_m_suspensionStiffness(50),i.set_m_wheelsDampingRelaxation(5),i.set_m_wheelsDampingCompression(200),i.set_m_frictionSlip(3),i.set_m_rollInfluence(.75)})),Ammo.destroy(g),Ammo.destroy(_);const v=new Ammo.btTransform;v.setIdentity();const y=new Ammo.btVector3(s.position.x,s.position.y,s.position.z);v.setOrigin(y),Ammo.destroy(y);const x=new Ammo.btQuaternion(s.quaternion.x,s.quaternion.y,s.quaternion.z,s.quaternion.w);v.setRotation(x),Ammo.destroy(x),Rs(this,fs,"f").setWorldTransform(v),Rs(this,fs,"f").getMotionState().setWorldTransform(v),Ammo.destroy(v),Rs(this,us,"f").resetSuspension(),Rs(this,us,"f").setSteeringValue(0,0),Rs(this,us,"f").setSteeringValue(0,1);const w=Rs(this,us,"f").getNumWheels();for(let t=0;t{const{shape:i,triangleMesh:r}=Os(this,zs,"m",Bs).call(this,e);Os(this,Us,"f").set(t,{shape:i,triangleMesh:r,detector:n})}))}dispose(){Os(this,Us,"f").forEach((({shape:t,triangleMesh:e})=>{Ammo.destroy(t),Ammo.destroy(e)})),Os(this,Us,"f").clear()}getPhysicsShape(t){var e;const n=null===(e=Os(this,Us,"f").get(t))||void 0===e?void 0:e.shape;if(null==n)throw'Track part with the id "'+t+'" has no physics model';return n}getPartTypesWithDetector(t){const e=[];return Os(this,Us,"f").forEach(((n,i)=>{null!=n.detector&&n.detector.type==t&&e.push(i)})),e}getDetector(t){const e=Os(this,Us,"f").get(t);if(null==e)throw'Track part with the id "'+t+'" does not exist';return e.detector}};var Fs;!function(t){t[t.Init=0]="Init",t[t.Verify=1]="Verify",t[t.TestDeterminism=2]="TestDeterminism",t[t.CreateCar=3]="CreateCar",t[t.DeleteCar=4]="DeleteCar",t[t.StartCar=5]="StartCar",t[t.ControlCar=6]="ControlCar",t[t.PauseCar=7]="PauseCar",t[t.VerifyResult=8]="VerifyResult",t[t.DeterminismResult=9]="DeterminismResult",t[t.UpdateResult=10]="UpdateResult"}(Fs||(Fs={}));const Hs=Fs;var Ws,Gs=function(t,e,n,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!r:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(t,n):r?r.value=n:e.set(t,n),n},qs=function(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)};Ws=new WeakMap;const js=class{constructor(t){Ws.set(this,void 0),Gs(this,Ws,t,"f")}dispose(){}getControls(t){const[e,n,i,r]=qs(this,Ws,"f").getFrame(t);return{up:e,right:n,down:i,left:r}}};var Zs=n(312);const Ys=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"],Xs=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],Js=30;function Qs(t){let e=0,n="";for(;e<8*t.length;){const i=$s(t,e);let r;(i&Js)==Js?(r=31&i,e+=5):(r=i,e+=6),n+=Ys[r]}return n}function Ks(t){let e=0;const n=[],i=t.length;for(let r=0;r=Xs.length)return null;const o=Xs[a];if(-1==o)return null;(o&Js)==Js?(tl(n,e,5,o,r==i-1),e+=5):(tl(n,e,6,o,r==i-1),e+=6)}return new Uint8Array(n)}function $s(t,e){if(e>=8*t.length)throw"Out of range";const n=Math.floor(e/8),i=t[n],r=e-8*n;if(r<=2||n>=t.length-1)return(i&63<>>r;return(i&63<>>r|(t[n+1]&63>>>8-r)<<8-r}function tl(t,e,n,i,r){const a=Math.floor(e/8);for(;a>=t.length;)t.push(0);const o=e-8*a;if(t[a]|=i<8-n&&!r){const e=a+1;e>=t.length&&t.push(0),t[e]|=i>>8-o}}var el;!function(t){t[t.Straight=0]="Straight",t[t.TurnSharp=1]="TurnSharp",t[t.SlopeUp=2]="SlopeUp",t[t.SlopeDown=3]="SlopeDown",t[t.Slope=4]="Slope",t[t.Start=5]="Start",t[t.Finish=6]="Finish",t[t.ToWideMiddle=7]="ToWideMiddle",t[t.ToWideLeft=8]="ToWideLeft",t[t.ToWideRight=9]="ToWideRight",t[t.StraightWide=10]="StraightWide",t[t.InnerCornerWide=11]="InnerCornerWide",t[t.OuterCornerWide=12]="OuterCornerWide",t[t.SlopeUpLeftWide=13]="SlopeUpLeftWide",t[t.SlopeUpRightWide=14]="SlopeUpRightWide",t[t.SlopeDownLeftWide=15]="SlopeDownLeftWide",t[t.SlopeDownRightWide=16]="SlopeDownRightWide",t[t.SlopeLeftWide=17]="SlopeLeftWide",t[t.SlopeRightWide=18]="SlopeRightWide",t[t.PillarTop=19]="PillarTop",t[t.PillarMiddle=20]="PillarMiddle",t[t.PillarBottom=21]="PillarBottom",t[t.PillarShort=22]="PillarShort",t[t.PlanePillarBottom=23]="PlanePillarBottom",t[t.PlanePillarShort=24]="PlanePillarShort",t[t.Plane=25]="Plane",t[t.PlaneWall=26]="PlaneWall",t[t.PlaneWallCorner=27]="PlaneWallCorner",t[t.PlaneWallInnerCorner=28]="PlaneWallInnerCorner",t[t.Block=29]="Block",t[t.WallTrackTop=30]="WallTrackTop",t[t.WallTrackMiddle=31]="WallTrackMiddle",t[t.WallTrackBottom=32]="WallTrackBottom",t[t.PlaneSlopeUp=33]="PlaneSlopeUp",t[t.PlaneSlopeDown=34]="PlaneSlopeDown",t[t.PlaneSlope=35]="PlaneSlope",t[t.TurnShort=36]="TurnShort",t[t.TurnLong=37]="TurnLong",t[t.SlopeUpLong=38]="SlopeUpLong",t[t.SlopeDownLong=39]="SlopeDownLong",t[t.SlopePillar=40]="SlopePillar",t[t.TurnSLeft=41]="TurnSLeft",t[t.TurnSRight=42]="TurnSRight",t[t.IntersectionT=43]="IntersectionT",t[t.IntersectionCross=44]="IntersectionCross",t[t.PillarBranch1=45]="PillarBranch1",t[t.PillarBranch2=46]="PillarBranch2",t[t.PillarBranch3=47]="PillarBranch3",t[t.PillarBranch4=48]="PillarBranch4",t[t.WallTrackBottomCorner=49]="WallTrackBottomCorner",t[t.WallTrackMiddleCorner=50]="WallTrackMiddleCorner",t[t.WallTrackTopCorner=51]="WallTrackTopCorner",t[t.Checkpoint=52]="Checkpoint",t[t.HalfBlock=53]="HalfBlock",t[t.QuarterBlock=54]="QuarterBlock",t[t.HalfPlane=55]="HalfPlane",t[t.QuarterPlane=56]="QuarterPlane",t[t.PlaneBridge=57]="PlaneBridge",t[t.SignArrowLeft=58]="SignArrowLeft",t[t.SignArrowRight=59]="SignArrowRight",t[t.SignArrowUp=61]="SignArrowUp",t[t.SignArrowDown=62]="SignArrowDown",t[t.SignWarning=63]="SignWarning",t[t.SignWrongWay=64]="SignWrongWay",t[t.CheckpointWide=65]="CheckpointWide",t[t.WallTrackCeiling=66]="WallTrackCeiling",t[t.WallTrackFloor=67]="WallTrackFloor",t[t.BlockSlopedDown=68]="BlockSlopedDown",t[t.BlockSlopedDownInnerCorner=69]="BlockSlopedDownInnerCorner",t[t.BlockSlopedDownOuterCorner=70]="BlockSlopedDownOuterCorner",t[t.BlockSlopedUp=71]="BlockSlopedUp",t[t.BlockSlopedUpInnerCorner=72]="BlockSlopedUpInnerCorner",t[t.BlockSlopedUpOuterCorner=73]="BlockSlopedUpOuterCorner",t[t.FinishWide=74]="FinishWide",t[t.PlaneCheckpoint=75]="PlaneCheckpoint",t[t.PlaneFinish=76]="PlaneFinish",t[t.PlaneCheckpointWide=77]="PlaneCheckpointWide",t[t.PlaneFinishWide=78]="PlaneFinishWide",t[t.WallTrackBottomInnerCorner=79]="WallTrackBottomInnerCorner",t[t.WallTrackInnerCorner=80]="WallTrackInnerCorner",t[t.WallTrackTopInnerCorner=81]="WallTrackTopInnerCorner",t[t.TurnLong2=82]="TurnLong2",t[t.TurnLong3=83]="TurnLong3",t[t.SlopePillarShort=84]="SlopePillarShort",t[t.BlockSlopeUp=85]="BlockSlopeUp",t[t.BlockSlopeDown=86]="BlockSlopeDown",t[t.SlopeBlock=87]="SlopeBlock",t[t.SlopeUpBlock=88]="SlopeUpBlock",t[t.SlopeDownBlock=89]="SlopeDownBlock",t[t.SlopeUpLeftWideBlock=90]="SlopeUpLeftWideBlock",t[t.SlopeUpRightWideBlock=91]="SlopeUpRightWideBlock",t[t.SlopeDownLeftWideBlock=92]="SlopeDownLeftWideBlock",t[t.SlopeDownRightWideBlock=93]="SlopeDownRightWideBlock",t[t.SlopeLeftWideBlock=94]="SlopeLeftWideBlock",t[t.SlopeRightWideBlock=95]="SlopeRightWideBlock",t[t.PlaneSlopeUpBlock=96]="PlaneSlopeUpBlock",t[t.PlaneSlopeDownBlock=97]="PlaneSlopeDownBlock",t[t.PlaneSlopeBlock=98]="PlaneSlopeBlock",t[t.PlaneSlopePillar=99]="PlaneSlopePillar",t[t.PlaneSlopePillarShort=100]="PlaneSlopePillarShort",t[t.PillarBranch1Top=101]="PillarBranch1Top",t[t.PillarBranch1Bottom=102]="PillarBranch1Bottom",t[t.PillarBranch1Middle=103]="PillarBranch1Middle",t[t.PillarBranch2Top=104]="PillarBranch2Top",t[t.PillarBranch2Middle=105]="PillarBranch2Middle",t[t.PillarBranch2Bottom=106]="PillarBranch2Bottom",t[t.PillarBranch3Top=107]="PillarBranch3Top",t[t.PillarBranch3Middle=108]="PillarBranch3Middle",t[t.PillarBranch3Bottom=109]="PillarBranch3Bottom",t[t.PillarBranch4Top=110]="PillarBranch4Top",t[t.PillarBranch4Middle=111]="PillarBranch4Middle",t[t.PillarBranch4Bottom=112]="PillarBranch4Bottom",t[t.PillarBranch5=113]="PillarBranch5",t[t.PillarBranch5Top=114]="PillarBranch5Top",t[t.PillarBranch5Middle=115]="PillarBranch5Middle",t[t.PillarBranch5Bottom=116]="PillarBranch5Bottom",t[t.ToWideDouble=117]="ToWideDouble",t[t.ToWideDiagonal=118]="ToWideDiagonal",t[t.StraightPillarBottom=119]="StraightPillarBottom",t[t.StraightPillarShort=120]="StraightPillarShort",t[t.TurnSharpPillarBottom=121]="TurnSharpPillarBottom",t[t.TurnSharpPillarShort=122]="TurnSharpPillarShort",t[t.IntersectionTPillarBottom=123]="IntersectionTPillarBottom",t[t.IntersectionTPillarShort=124]="IntersectionTPillarShort",t[t.IntersectionCrossPillarBottom=125]="IntersectionCrossPillarBottom",t[t.IntersectionCrossPillarShort=126]="IntersectionCrossPillarShort",t[t.PlaneBridgeCorner=127]="PlaneBridgeCorner",t[t.PlaneBridgeIntersectionT=128]="PlaneBridgeIntersectionT",t[t.PlaneBridgeIntersectionCross=129]="PlaneBridgeIntersectionCross",t[t.BlockBridge=130]="BlockBridge",t[t.BlockBridgeCorner=131]="BlockBridgeCorner",t[t.BlockBridgeIntersectionT=132]="BlockBridgeIntersectionT",t[t.BlockBridgeIntersectionCross=133]="BlockBridgeIntersectionCross",t[t.RedBlock=134]="RedBlock",t[t.RedHalfBlock=135]="RedHalfBlock",t[t.RedQuarterBlock=136]="RedQuarterBlock",t[t.RedBlockSlopedDown=137]="RedBlockSlopedDown",t[t.RedBlockSlopedDownInnerCorner=138]="RedBlockSlopedDownInnerCorner",t[t.RedBlockSlopedDownOuterCorner=139]="RedBlockSlopedDownOuterCorner",t[t.RedBlockSlopedUp=140]="RedBlockSlopedUp",t[t.RedBlockSlopedUpInnerCorner=141]="RedBlockSlopedUpInnerCorner",t[t.RedBlockSlopedUpOuterCorner=142]="RedBlockSlopedUpOuterCorner",t[t.RedBlockSlopeDown=143]="RedBlockSlopeDown",t[t.RedBlockSlopeUp=144]="RedBlockSlopeUp",t[t.RedBlockBridge=145]="RedBlockBridge",t[t.RedBlockBridgeCorner=146]="RedBlockBridgeCorner",t[t.RedBlockBridgeIntersectionT=147]="RedBlockBridgeIntersectionT",t[t.RedBlockBridgeIntersectionCross=148]="RedBlockBridgeIntersectionCross",t[t.BlueBlock=149]="BlueBlock",t[t.BlueHalfBlock=150]="BlueHalfBlock",t[t.BlueQuarterBlock=151]="BlueQuarterBlock",t[t.BlueBlockSlopedDown=152]="BlueBlockSlopedDown",t[t.BlueBlockSlopedDownInnerCorner=153]="BlueBlockSlopedDownInnerCorner",t[t.BlueBlockSlopedDownOuterCorner=154]="BlueBlockSlopedDownOuterCorner",t[t.BlueBlockSlopedUp=155]="BlueBlockSlopedUp",t[t.BlueBlockSlopedUpInnerCorner=156]="BlueBlockSlopedUpInnerCorner",t[t.BlueBlockSlopedUpOuterCorner=157]="BlueBlockSlopedUpOuterCorner",t[t.BlueBlockSlopeDown=158]="BlueBlockSlopeDown",t[t.BlueBlockSlopeUp=159]="BlueBlockSlopeUp",t[t.BlueBlockBridge=160]="BlueBlockBridge",t[t.BlueBlockBridgeCorner=161]="BlueBlockBridgeCorner",t[t.BlueBlockBridgeIntersectionT=162]="BlueBlockBridgeIntersectionT",t[t.BlueBlockBridgeIntersectionCross=163]="BlueBlockBridgeIntersectionCross",t[t.BlackBlock=164]="BlackBlock",t[t.BlackHalfBlock=165]="BlackHalfBlock",t[t.BlackQuarterBlock=166]="BlackQuarterBlock",t[t.BlackBlockSlopedDown=167]="BlackBlockSlopedDown",t[t.BlackBlockSlopedDownInnerCorner=168]="BlackBlockSlopedDownInnerCorner",t[t.BlackBlockSlopedDownOuterCorner=169]="BlackBlockSlopedDownOuterCorner",t[t.BlackBlockSlopedUp=170]="BlackBlockSlopedUp",t[t.BlackBlockSlopedUpInnerCorner=171]="BlackBlockSlopedUpInnerCorner",t[t.BlackBlockSlopedUpOuterCorner=172]="BlackBlockSlopedUpOuterCorner",t[t.BlackBlockSlopeDown=173]="BlackBlockSlopeDown",t[t.BlackBlockSlopeUp=174]="BlackBlockSlopeUp",t[t.BlackBlockBridge=175]="BlackBlockBridge",t[t.BlackBlockBridgeCorner=176]="BlackBlockBridgeCorner",t[t.BlackBlockBridgeIntersectionT=177]="BlackBlockBridgeIntersectionT",t[t.BlackBlockBridgeIntersectionCross=178]="BlackBlockBridgeIntersectionCross"}(el||(el={}));const nl=el;function il(t,e){const n=t.parts;if("object"!=typeof n&&null!==n&&!Array.isArray(n))return null;const i=e.getPartTypesWithDetector($o.Checkpoint),r=new Rl,a=Object.keys(n);for(let t=0;t=0&&l<=3&&Math.abs(a)<=1e9&&o>=0&&o<=1e9&&Math.abs(s)<=1e9))return null;if(i.includes(e))return null;r.addPart(a,o,s,e,l,null)}}}return r}function rl(t,e){const n=_o(t);if(null==n)return null;const i=e.getPartTypesWithDetector($o.Checkpoint),r=new Rl;let a=0;for(;a{const o=t+i+"|"+(e+r)+"|"+(n+a);if(this.hasPartAt(t+i,e+r,n+a))throw"Track part collision";Al(this,pl,"f").set(o,s)}));const l=Al(this,gl,"f").get(i);null==l?Al(this,gl,"f").set(i,[s]):l.push(s)}deletePart(t,e,n){const i=Al(this,pl,"f").get(t+"|"+e+"|"+n);if(null==i)throw"Track part missing from parts by position map";for(let t=0;t{const r=i.x+t+"|"+(i.y+e)+"|"+(i.z+n);if(!Al(this,pl,"f").has(r))throw"Track part section missing";Al(this,pl,"f").delete(r)}));const r=Al(this,gl,"f").get(i.type.id);if(null==r)throw"Track part type is missing from parts by type map";for(let t=0;t{if(null==e.type.mesh)throw"Track part is not loaded yet";if(null==i){e.type.mesh.matrixWorld.copy(e.matrix);const n=t.intersectObject(e.type.mesh,!0);n.length>0&&(i=n[0])}})),i}generateMeshes(){Al(this,hl,"m",xl).call(this);const t=Al(this,dl,"f").getShadowDirection(),e=new st(t.x,t.y,t.z,0);Al(this,fl,"f").getAllParts().forEach((t=>{const n=[];for(let e=0;e0){if(null==t.mesh)throw"Mesh is not loaded";const i=new In(t.mesh.geometry,t.mesh.material,n.length);i.frustumCulled=!1,i.receiveShadow=!0;for(let t=0;t{const n=Al(this,gl,"f").get(e);null!=n&&(t=t.concat(n))})),t.map((t=>{if(null==t.checkpointOrder)throw"Checkpoint has no checkpoint order";if(null==t.type.detector)throw"Checkpoint has no detector";return{x:t.x,y:t.y,z:t.z,rotation:t.rotation,checkpointOrder:t.checkpointOrder,detector:t.type.detector}}))}getCheckpointOrders(){let t=[];return Al(this,fl,"f").getPartTypesWithDetector($o.Checkpoint).forEach((e=>{const n=Al(this,gl,"f").get(e);null!=n&&(t=t.concat(n))})),t.map((t=>{if(null==t.checkpointOrder)throw"Checkpoint has no checkpoint order";if(null==t.type.detector)throw"Checkpoint has no detector";return t.checkpointOrder}))}getTotalNumberOfCheckpointIndices(){let t=[];if(Al(this,fl,"f").getPartTypesWithDetector($o.Checkpoint).forEach((e=>{const n=Al(this,gl,"f").get(e);null!=n&&(t=t.concat(n))})),null==t)return 0;return t.map((t=>t.checkpointOrder)).filter(((t,e,n)=>n.indexOf(t)==e)).length}getStartTransform(){const t=Al(this,hl,"m",bl).call(this);if(null!=t){const e=(new lt).setFromEuler(new Xt(0,Math.PI+t.rotation*Math.PI/2,0)),n=new ct(0,.385,1.35);return n.applyQuaternion(e),{position:new ct(t.x*El.partWidth+n.x,t.y*El.partHeight+n.y,t.z*El.partLength+n.z),quaternion:e}}return null}getTrackData(){const t=new Rl;return Al(this,ml,"f").forEach((e=>{t.addPart(e.x,e.y,e.z,e.type.id,e.rotation,e.checkpointOrder)})),t}loadTrackData(t,e=!0){return this.clear(),Ml(this,vl,e?t.getId(Al(this,fl,"f")):null,"f"),t.forEachPart(((t,e,n,i,r,a)=>{this.setPart(t,e,n,i,r,a)})),!0}}dl=new WeakMap,ul=new WeakMap,fl=new WeakMap,ml=new WeakMap,pl=new WeakMap,gl=new WeakMap,_l=new WeakMap,vl=new WeakMap,yl=new WeakMap,hl=new WeakSet,xl=function(){for(let t=0;t{t=Math.min(r.x,t),e=Math.min(r.z,e),n=Math.max(r.x,n),i=Math.max(r.z,i)})),Number.isFinite(t)&&Number.isFinite(e)&&Number.isFinite(n)&&Number.isFinite(i)?Ml(this,_l,{min:new V(t,e),max:new V(n,i)},"f"):Ml(this,_l,{min:new V,max:new V},"f")},bl=function(){const t=Al(this,gl,"f").get(nl.Start);return null!=t&&t.length>0?t[t.length-1]:null},El.partWidth=20,El.partHeight=5,El.partLength=20;const Cl=El;var Pl,kl,Il,Dl,Nl=function(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)};kl=new WeakMap,Pl=new WeakSet,Il=function(){const t=Nl(this,kl,"f").get(nl.Start);return null!=t&&t.length>0?t[t.length-1]:null},Dl=function(t){const e=t.getPartTypesWithDetector($o.Checkpoint),n=[];return Nl(this,kl,"f").forEach(((t,i)=>{if(i<0||i>65535)throw"Type id is out of range";const r=t.length;n.push(255&i,i>>>8&255,255&r,r>>>8&255,r>>>16&255,r>>>24&255),t.forEach((t=>{const r=t.x+Math.pow(2,23),a=t.y,o=t.z+Math.pow(2,23);if(n.push(255&r,r>>>8&255,r>>>16&255,255&a,a>>>8&255,a>>>16&255,255&o,o>>>8&255,o>>>16&255,3&t.rotation),e.includes(i)){if(null==t.checkpointOrder)throw"Checkpoint has no checkpoint order";n.push(255&t.checkpointOrder,t.checkpointOrder>>>8&255)}}))})),new Uint8Array(n)};const Rl=class{constructor(){Pl.add(this),kl.set(this,new Map)}addPart(t,e,n,i,r,a){const o=Nl(this,kl,"f").get(i);null!=o?o.push({x:t,y:e,z:n,rotation:r,checkpointOrder:a}):Nl(this,kl,"f").set(i,[{x:t,y:e,z:n,rotation:r,checkpointOrder:a}])}forEachPart(t){Nl(this,kl,"f").forEach(((e,n)=>{e.forEach((e=>{t(e.x,e.y,e.z,n,e.rotation,e.checkpointOrder)}))}))}getId(t){return(0,Zs.sha256)(Nl(this,Pl,"m",Dl).call(this,t))}getBounds(){let t=1/0,e=1/0,n=-1/0,i=-1/0;return this.forEachPart(((r,a,o)=>{t=Math.min(r,t),e=Math.min(o,e),n=Math.max(r,n),i=Math.max(o,i)})),Number.isFinite(t)&&Number.isFinite(e)&&Number.isFinite(n)&&Number.isFinite(i)?{min:new V(t,e),max:new V(n,i)}:{min:new V,max:new V}}hasStartingPoint(){return Nl(this,kl,"f").has(nl.Start)}getStartTransform(){const t=Nl(this,Pl,"m",Il).call(this);if(null!=t){const e=(new lt).setFromEuler(new Xt(0,Math.PI+t.rotation*Math.PI/2,0)),n=new ct(0,.385,1.35);return n.applyQuaternion(e),{position:new ct(t.x*Cl.partWidth+n.x,t.y*Cl.partHeight+n.y,t.z*Cl.partLength+n.z),quaternion:e}}return null}toSaveString(t){const e=Nl(this,Pl,"m",Dl).call(this,t),n=new go.Deflate({level:9});return n.push(e,!0),Qs(n.result)}toExportString(t,e){const n=Qs((new TextEncoder).encode(t)),i=new Uint8Array(1);i[0]=n.length;let r=Qs(i);return 1==r.length&&(r+="A"),"v3"+r+n+this.toSaveString(e)}static fromSaveString(t,e){const n=ol(t,e);if(null!=n)return n;const i=al(t,e);if(null!=i)return i;const r=rl(t,e);if(null!=r)return r;const a=il(t,e);return null!=a?a:null}static fromExportString(t,e){const n=t.replace(/\s+/g,""),i=function(t,e){if(!t.startsWith("v3"))return null;const n=Ks(t.substring(2,4));if(null==n)return null;if(1!=n.length)return null;const i=n[0],r=Ks(t.substring(4,4+i));if(null==r)return null;let a;try{a=new TextDecoder("utf-8").decode(r)}catch(t){return null}const o=ol(t.substring(4+i),e);return null==o?null:{trackName:a,trackData:o}}(n,e);if(null!=i)return i;const r=function(t,e){if(!t.startsWith("v2"))return null;const n=Ks(t.substring(2,4));if(null==n)return null;if(1!=n.length)return null;const i=n[0],r=Math.ceil(i/3*4),a=Ks(t.substring(4,4+r));if(null==a)return null;let o;try{o=new TextDecoder("utf-8").decode(a)}catch(t){return null}const s=al(t.substring(4+r),e);return null==s?null:{trackName:o,trackData:s}}(n,e);if(null!=r)return r;const a=function(t,e){if(!t.startsWith("v1n"))return null;const n=_o(t.substring(3,5));if(null==n)return null;if(1!=n.length)return null;const i=n[0],r=t.substring(5,5+i);let a;try{a=decodeURIComponent(r)}catch(t){return console.error(t),null}const o=rl(t.substring(5+i),e);return null==o?null:{trackName:a,trackData:o}}(n,e);if(null!=a)return a;const o=function(t,e){if("string"!=typeof t.name)return null;if("string"!=typeof t.track)return null;let n;try{n=JSON.parse(t.track)}catch(t){return console.error(t),null}const i=il(n,e);return null==i?null:{trackName:t.name,trackData:i}}(t,e);return null!=o?o:null}createThumbnail(t){const e=document.createElement("canvas");let n=0,i=0,r=0,a=0;this.forEachPart(((t,e,o)=>{n=Math.min(n,t),i=Math.min(i,o),r=Math.max(r,t),a=Math.max(a,o)}));const o=10,s=r-n+1;s<=o&&(r+=Math.ceil((o-s)/2),n-=Math.ceil((o-s)/2));const l=a-i+1;l<=o&&(a+=Math.ceil((o-l)/2),i-=Math.ceil((o-l)/2)),e.width=Math.min(1024,r-n+1),e.height=Math.min(1024,a-i+1);const c=e.getContext("2d");c.fillStyle="#fff";const h=[],d=[],u=[];return this.forEachPart(((e,r,a,o,s)=>{const l=t.getPart(o);l.tiles.rotated(s).forEach(((t,r,s)=>{c.fillRect(e+t-n,a+s-i,1,1),o==nl.Start?d.push([e+t-n,a+s-i]):null!=l.detector&&l.detector.type==$o.Checkpoint?h.push([e+t-n,a+s-i]):null!=l.detector&&l.detector.type==$o.Finish&&u.push([e+t-n,a+s-i])}))})),c.fillStyle="#e2c026",h.forEach((([t,e])=>{c.fillRect(t,e,1,1)})),c.fillStyle="#338ce0",d.forEach((([t,e])=>{c.fillRect(t,e,1,1)})),c.fillStyle="#d12929",u.forEach((([t,e])=>{c.fillRect(t,e,1,1)})),e}};const Ll=class{constructor(){this.up=!1,this.right=!1,this.down=!1,this.left=!1}dispose(){}getControls(){return{up:this.up,right:this.right,down:this.down,left:this.left}}};importScripts("lib/ammo.wasm.js");const zl=[];onmessage=t=>{zl.push(t)},Ammo().then((function(t){let e=new Vs([]);const n=[];function i(t){switch(t.data.messageType){case Hs.Init:e=new Vs(t.data.trackParts);break;case Hs.Verify:!function(t){const n=Rl.fromSaveString(t.data.trackData,e);if(null==n)throw"Failed to load track";const i=So.deserialize(t.data.carRecording);if(null==i)throw"Failed to deserialize recording";const r=t.data.carId,a=new Ls(t.data.mountainVertices,new ct(t.data.mountainOffset.x,t.data.mountainOffset.y,t.data.mountainOffset.z),e,n,t.data.carCollisionShapeVertices,t.data.carMassOffset,new js(i),{position:new ct(t.data.carPosition.x,t.data.carPosition.y,t.data.carPosition.z),quaternion:new lt(t.data.carQuaternion.x,t.data.carQuaternion.y,t.data.carQuaternion.z,t.data.carQuaternion.w)});a.start();const o=new Qo(t.data.targetFrames);for(;!a.hasFinished()&&a.getTime().lessOrEqual(o);)a.step();const s=a.hasFinished()&&a.getTime().equals(o);postMessage({messageType:Hs.VerifyResult,carId:r,result:s}),a.dispose()}(t);break;case Hs.TestDeterminism:postMessage({messageType:Hs.DeterminismResult,isDeterminstic:r()});break;case Hs.CreateCar:!function(t){const i=Rl.fromSaveString(t.data.trackData,e);if(null==i)throw"Failed to load track";let r,a=null;const o=t.data.carRecording;if(null==o)r=a=new Ll;else{const t=So.deserialize(o);if(null==t)throw"Failed to deserialize recording";r=new js(t)}const s=t.data.carId,l=new Ls(t.data.mountainVertices,new ct(t.data.mountainOffset.x,t.data.mountainOffset.y,t.data.mountainOffset.z),e,i,t.data.carCollisionShapeVertices,t.data.carMassOffset,r,{position:new ct(t.data.carPosition.x,t.data.carPosition.y,t.data.carPosition.z),quaternion:new lt(t.data.carQuaternion.x,t.data.carQuaternion.y,t.data.carQuaternion.z,t.data.carQuaternion.w)});n.push({id:s,model:l,controls:a,targetSimulationTime:null,isPaused:!1})}(t);break;case Hs.DeleteCar:!function(t){var e;const i=t.data.carId;for(let t=0;t{let n;if("WheelFL"==e)n=new t.btVector3(.627909,.27,1.3478);else if("WheelFR"==e)n=new t.btVector3(-.627909,.27,1.3478);else if("WheelBL"==e)n=new t.btVector3(.720832,.27,-1.52686);else{if("WheelBR"!=e)throw"Unidentified wheel";n=new t.btVector3(-.720832,.27,-1.52686)}const i="WheelFL"==e||"WheelFR"==e;f.addWheel(n,m,p,.12,.331,d,i),t.destroy(n)})),t.destroy(m),t.destroy(p);const g=new t.btTransform;g.setIdentity(),h.setWorldTransform(g),h.getMotionState().setWorldTransform(g),t.destroy(g),f.resetSuspension(),f.setSteeringValue(0,0),f.setSteeringValue(0,1);const _=new t.btTransform;_.setIdentity();const v=new t.btDefaultMotionState(_);t.destroy(_);const y=new t.btVector3(0,0,0),x=new t.btVector3(.1,.1,.1),w=new t.btBoxShape(x);w.calculateLocalInertia(100,y),t.destroy(x);const S=new t.btRigidBodyConstructionInfo(100,v,w,y),b=new t.btRigidBody(S);t.destroy(y),t.destroy(S),b.setActivationState(4),i.world.addRigidBody(b);const M=1e5;f.applyEngineForce(M,2),f.applyEngineForce(M,3);for(let t=0;t<999;t++)i.step();const A=new t.btTransform;h.getMotionState().getWorldTransform(A);const T=A.getOrigin(),E=A.getRotation();t.destroy(A);const C=e.equals(new ct(T.x(),T.y(),T.z())),P=n.equals(new lt(E.x(),E.y(),E.z(),E.w()));i.dispose(),t.destroy(l),t.destroy(h),t.destroy(f),t.destroy(w),t.destroy(b);const k=C||P;return k||console.error("Determinism check failed: Simulation"),k}zl.forEach((t=>{i(t)})),zl.length=0,onmessage=i;let a=performance.now(),o=0;setInterval((()=>{const t=performance.now();for(o+=Math.max(0,Math.min(.1,(t-a)/1e3)),a=t;o>.001;){o-=.001;const e=[];n.forEach((n=>{const i=n.id,r=n.model,a=n.isPaused;if(n.model.hasStarted()&&(null==n.targetSimulationTime||n.model.getTotalTime().lessThan(n.targetSimulationTime))&&!a)do{const t=r.controls.getControls(r.getTime().numberOfFrames);r.step();const n=r.getPosition(),a=r.getQuaternion(),o=r.getWheelPosition(0),s=r.getWheelPosition(1),l=r.getWheelPosition(2),c=r.getWheelPosition(3),h=r.getWheelQuaternion(0),d=r.getWheelQuaternion(1),u=r.getWheelQuaternion(2),f=r.getWheelQuaternion(3),m={id:i,frames:r.getTime().numberOfFrames,totalFrames:r.getTotalTime().numberOfFrames,speedKmh:r.getSpeedKmh(),hasStarted:r.hasStarted(),hasFinished:r.hasFinished(),nextCheckpointIndex:r.getNextCheckpointIndex(),position:{x:n.x,y:n.y,z:n.z},quaternion:{x:a.x,y:a.y,z:a.z,w:a.w},collisionImpulses:r.getCollisionImpulses(),wheelInContact:[r.getWheelInContact(0),r.getWheelInContact(1),r.getWheelInContact(2),r.getWheelInContact(3)],wheelSuspensionLength:[r.getWheelSuspensionLength(0),r.getWheelSuspensionLength(1),r.getWheelSuspensionLength(2),r.getWheelSuspensionLength(3)],wheelSuspensionVelocity:[r.getWheelSuspensionVelocity(0),r.getWheelSuspensionVelocity(1),r.getWheelSuspensionVelocity(2),r.getWheelSuspensionVelocity(3)],wheelRotation:[r.getWheelRotation(0),r.getWheelRotation(1),r.getWheelRotation(2),r.getWheelRotation(3)],wheelDeltaRotation:[r.getWheelDeltaRotation(0),r.getWheelDeltaRotation(1),r.getWheelDeltaRotation(2),r.getWheelDeltaRotation(3)],wheelSkidInfo:[r.getWheelSkidInfo(0),r.getWheelSkidInfo(1),r.getWheelSkidInfo(2),r.getWheelSkidInfo(3)],wheelPosition:[{x:o.x,y:o.y,z:o.z},{x:s.x,y:s.y,z:s.z},{x:l.x,y:l.y,z:l.z},{x:c.x,y:c.y,z:c.z}],wheelQuaternion:[{x:h.x,y:h.y,z:h.z,w:h.w},{x:d.x,y:d.y,z:d.z,w:d.w},{x:u.x,y:u.y,z:u.z,w:u.w},{x:f.x,y:f.y,z:f.z,w:f.w}],brakeLightEnabled:r.isBrakeLightEnabled(),controls:t};e.push(m)}while(null!=n.targetSimulationTime&&n.model.getTotalTime().lessThan(n.targetSimulationTime)&&Math.max(0,performance.now()-t)/1e3<.01)})),postMessage({messageType:Hs.UpdateResult,carStates:e})}}))}))})()})(); \ No newline at end of file +(() => { + var e = { + 1312: (e, t, n) => { + var i; + /** + * [js-sha256]{@link https://github.com/emn178/js-sha256} + * + * @version 0.11.0 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2024 + * @license MIT + */ + ! function() { + "use strict"; + var t = "input is invalid type", + r = "object" == typeof window, + a = r ? window : {}; + a.JS_SHA256_NO_WINDOW && (r = !1); + var s = !r && "object" == typeof self, + o = !a.JS_SHA256_NO_NODE_JS && "object" == typeof process && process.versions && process.versions.node; + o ? a = n.g : s && (a = self); + var l = !a.JS_SHA256_NO_COMMON_JS && e.exports, + c = n.amdO, + h = !a.JS_SHA256_NO_ARRAY_BUFFER && "undefined" != typeof ArrayBuffer, + u = "0123456789abcdef".split(""), + d = [-2147483648, 8388608, 32768, 128], + f = [24, 16, 8, 0], + p = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298], + m = ["hex", "array", "digest", "arrayBuffer"], + g = []; + !a.JS_SHA256_NO_NODE_JS && Array.isArray || (Array.isArray = function(e) { + return "[object Array]" === Object.prototype.toString.call(e) + }), !h || !a.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW && ArrayBuffer.isView || (ArrayBuffer.isView = function(e) { + return "object" == typeof e && e.buffer && e.buffer.constructor === ArrayBuffer + }); + var A = function(e, t) { + return function(n) { + return new x(t, !0).update(n)[e]() + } + }, + _ = function(e) { + var t = A("hex", e); + o && (t = v(t, e)), t.create = function() { + return new x(e) + }, t.update = function(e) { + return t.create().update(e) + }; + for (var n = 0; n < m.length; ++n) { + var i = m[n]; + t[i] = A(i, e) + } + return t + }, + v = function(e, i) { + var r, s = n(4394), + o = n(1903).Buffer, + l = i ? "sha224" : "sha256"; + r = o.from && !a.JS_SHA256_NO_BUFFER_FROM ? o.from : function(e) { + return new o(e) + }; + return function(n) { + if ("string" == typeof n) return s.createHash(l).update(n, "utf8").digest("hex"); + if (null == n) throw new Error(t); + return n.constructor === ArrayBuffer && (n = new Uint8Array(n)), Array.isArray(n) || ArrayBuffer.isView(n) || n.constructor === o ? s.createHash(l).update(r(n)).digest("hex") : e(n) + } + }, + w = function(e, t) { + return function(n, i) { + return new b(n, t, !0).update(i)[e]() + } + }, + y = function(e) { + var t = w("hex", e); + t.create = function(t) { + return new b(t, e) + }, t.update = function(e, n) { + return t.create(e).update(n) + }; + for (var n = 0; n < m.length; ++n) { + var i = m[n]; + t[i] = w(i, e) + } + return t + }; + + function x(e, t) { + t ? (g[0] = g[16] = g[1] = g[2] = g[3] = g[4] = g[5] = g[6] = g[7] = g[8] = g[9] = g[10] = g[11] = g[12] = g[13] = g[14] = g[15] = 0, this.blocks = g) : this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], e ? (this.h0 = 3238371032, this.h1 = 914150663, this.h2 = 812702999, this.h3 = 4144912697, this.h4 = 4290775857, this.h5 = 1750603025, this.h6 = 1694076839, this.h7 = 3204075428) : (this.h0 = 1779033703, this.h1 = 3144134277, this.h2 = 1013904242, this.h3 = 2773480762, this.h4 = 1359893119, this.h5 = 2600822924, this.h6 = 528734635, this.h7 = 1541459225), this.block = this.start = this.bytes = this.hBytes = 0, this.finalized = this.hashed = !1, this.first = !0, this.is224 = e + } + + function b(e, n, i) { + var r, a = typeof e; + if ("string" === a) { + var s, o = [], + l = e.length, + c = 0; + for (r = 0; r < l; ++r)(s = e.charCodeAt(r)) < 128 ? o[c++] = s : s < 2048 ? (o[c++] = 192 | s >>> 6, o[c++] = 128 | 63 & s) : s < 55296 || s >= 57344 ? (o[c++] = 224 | s >>> 12, o[c++] = 128 | s >>> 6 & 63, o[c++] = 128 | 63 & s) : (s = 65536 + ((1023 & s) << 10 | 1023 & e.charCodeAt(++r)), o[c++] = 240 | s >>> 18, o[c++] = 128 | s >>> 12 & 63, o[c++] = 128 | s >>> 6 & 63, o[c++] = 128 | 63 & s); + e = o + } else { + if ("object" !== a) throw new Error(t); + if (null === e) throw new Error(t); + if (h && e.constructor === ArrayBuffer) e = new Uint8Array(e); + else if (!(Array.isArray(e) || h && ArrayBuffer.isView(e))) throw new Error(t) + } + e.length > 64 && (e = new x(n, !0).update(e).array()); + var u = [], + d = []; + for (r = 0; r < 64; ++r) { + var f = e[r] || 0; + u[r] = 92 ^ f, d[r] = 54 ^ f + } + x.call(this, n, i), this.update(d), this.oKeyPad = u, this.inner = !0, this.sharedMemory = i + } + x.prototype.update = function(e) { + if (!this.finalized) { + var n, i = typeof e; + if ("string" !== i) { + if ("object" !== i) throw new Error(t); + if (null === e) throw new Error(t); + if (h && e.constructor === ArrayBuffer) e = new Uint8Array(e); + else if (!(Array.isArray(e) || h && ArrayBuffer.isView(e))) throw new Error(t); + n = !0 + } + for (var r, a, s = 0, o = e.length, l = this.blocks; s < o;) { + if (this.hashed && (this.hashed = !1, l[0] = this.block, this.block = l[16] = l[1] = l[2] = l[3] = l[4] = l[5] = l[6] = l[7] = l[8] = l[9] = l[10] = l[11] = l[12] = l[13] = l[14] = l[15] = 0), n) + for (a = this.start; s < o && a < 64; ++s) l[a >>> 2] |= e[s] << f[3 & a++]; + else + for (a = this.start; s < o && a < 64; ++s)(r = e.charCodeAt(s)) < 128 ? l[a >>> 2] |= r << f[3 & a++] : r < 2048 ? (l[a >>> 2] |= (192 | r >>> 6) << f[3 & a++], l[a >>> 2] |= (128 | 63 & r) << f[3 & a++]) : r < 55296 || r >= 57344 ? (l[a >>> 2] |= (224 | r >>> 12) << f[3 & a++], l[a >>> 2] |= (128 | r >>> 6 & 63) << f[3 & a++], l[a >>> 2] |= (128 | 63 & r) << f[3 & a++]) : (r = 65536 + ((1023 & r) << 10 | 1023 & e.charCodeAt(++s)), l[a >>> 2] |= (240 | r >>> 18) << f[3 & a++], l[a >>> 2] |= (128 | r >>> 12 & 63) << f[3 & a++], l[a >>> 2] |= (128 | r >>> 6 & 63) << f[3 & a++], l[a >>> 2] |= (128 | 63 & r) << f[3 & a++]); + this.lastByteIndex = a, this.bytes += a - this.start, a >= 64 ? (this.block = l[16], this.start = a - 64, this.hash(), this.hashed = !0) : this.start = a + } + return this.bytes > 4294967295 && (this.hBytes += this.bytes / 4294967296 | 0, this.bytes = this.bytes % 4294967296), this + } + }, x.prototype.finalize = function() { + if (!this.finalized) { + this.finalized = !0; + var e = this.blocks, + t = this.lastByteIndex; + e[16] = this.block, e[t >>> 2] |= d[3 & t], this.block = e[16], t >= 56 && (this.hashed || this.hash(), e[0] = this.block, e[16] = e[1] = e[2] = e[3] = e[4] = e[5] = e[6] = e[7] = e[8] = e[9] = e[10] = e[11] = e[12] = e[13] = e[14] = e[15] = 0), e[14] = this.hBytes << 3 | this.bytes >>> 29, e[15] = this.bytes << 3, this.hash() + } + }, x.prototype.hash = function() { + var e, t, n, i, r, a, s, o, l, c = this.h0, + h = this.h1, + u = this.h2, + d = this.h3, + f = this.h4, + m = this.h5, + g = this.h6, + A = this.h7, + _ = this.blocks; + for (e = 16; e < 64; ++e) t = ((r = _[e - 15]) >>> 7 | r << 25) ^ (r >>> 18 | r << 14) ^ r >>> 3, n = ((r = _[e - 2]) >>> 17 | r << 15) ^ (r >>> 19 | r << 13) ^ r >>> 10, _[e] = _[e - 16] + t + _[e - 7] + n | 0; + for (l = h & u, e = 0; e < 64; e += 4) this.first ? (this.is224 ? (a = 300032, A = (r = _[0] - 1413257819) - 150054599 | 0, d = r + 24177077 | 0) : (a = 704751109, A = (r = _[0] - 210244248) - 1521486534 | 0, d = r + 143694565 | 0), this.first = !1) : (t = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10), i = (a = c & h) ^ c & u ^ l, A = d + (r = A + (n = (f >>> 6 | f << 26) ^ (f >>> 11 | f << 21) ^ (f >>> 25 | f << 7)) + (f & m ^ ~f & g) + p[e] + _[e]) | 0, d = r + (t + i) | 0), t = (d >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10), i = (s = d & c) ^ d & h ^ a, g = u + (r = g + (n = (A >>> 6 | A << 26) ^ (A >>> 11 | A << 21) ^ (A >>> 25 | A << 7)) + (A & f ^ ~A & m) + p[e + 1] + _[e + 1]) | 0, t = ((u = r + (t + i) | 0) >>> 2 | u << 30) ^ (u >>> 13 | u << 19) ^ (u >>> 22 | u << 10), i = (o = u & d) ^ u & c ^ s, m = h + (r = m + (n = (g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7)) + (g & A ^ ~g & f) + p[e + 2] + _[e + 2]) | 0, t = ((h = r + (t + i) | 0) >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10), i = (l = h & u) ^ h & d ^ o, f = c + (r = f + (n = (m >>> 6 | m << 26) ^ (m >>> 11 | m << 21) ^ (m >>> 25 | m << 7)) + (m & g ^ ~m & A) + p[e + 3] + _[e + 3]) | 0, c = r + (t + i) | 0, this.chromeBugWorkAround = !0; + this.h0 = this.h0 + c | 0, this.h1 = this.h1 + h | 0, this.h2 = this.h2 + u | 0, this.h3 = this.h3 + d | 0, this.h4 = this.h4 + f | 0, this.h5 = this.h5 + m | 0, this.h6 = this.h6 + g | 0, this.h7 = this.h7 + A | 0 + }, x.prototype.hex = function() { + this.finalize(); + var e = this.h0, + t = this.h1, + n = this.h2, + i = this.h3, + r = this.h4, + a = this.h5, + s = this.h6, + o = this.h7, + l = u[e >>> 28 & 15] + u[e >>> 24 & 15] + u[e >>> 20 & 15] + u[e >>> 16 & 15] + u[e >>> 12 & 15] + u[e >>> 8 & 15] + u[e >>> 4 & 15] + u[15 & e] + u[t >>> 28 & 15] + u[t >>> 24 & 15] + u[t >>> 20 & 15] + u[t >>> 16 & 15] + u[t >>> 12 & 15] + u[t >>> 8 & 15] + u[t >>> 4 & 15] + u[15 & t] + u[n >>> 28 & 15] + u[n >>> 24 & 15] + u[n >>> 20 & 15] + u[n >>> 16 & 15] + u[n >>> 12 & 15] + u[n >>> 8 & 15] + u[n >>> 4 & 15] + u[15 & n] + u[i >>> 28 & 15] + u[i >>> 24 & 15] + u[i >>> 20 & 15] + u[i >>> 16 & 15] + u[i >>> 12 & 15] + u[i >>> 8 & 15] + u[i >>> 4 & 15] + u[15 & i] + u[r >>> 28 & 15] + u[r >>> 24 & 15] + u[r >>> 20 & 15] + u[r >>> 16 & 15] + u[r >>> 12 & 15] + u[r >>> 8 & 15] + u[r >>> 4 & 15] + u[15 & r] + u[a >>> 28 & 15] + u[a >>> 24 & 15] + u[a >>> 20 & 15] + u[a >>> 16 & 15] + u[a >>> 12 & 15] + u[a >>> 8 & 15] + u[a >>> 4 & 15] + u[15 & a] + u[s >>> 28 & 15] + u[s >>> 24 & 15] + u[s >>> 20 & 15] + u[s >>> 16 & 15] + u[s >>> 12 & 15] + u[s >>> 8 & 15] + u[s >>> 4 & 15] + u[15 & s]; + return this.is224 || (l += u[o >>> 28 & 15] + u[o >>> 24 & 15] + u[o >>> 20 & 15] + u[o >>> 16 & 15] + u[o >>> 12 & 15] + u[o >>> 8 & 15] + u[o >>> 4 & 15] + u[15 & o]), l + }, x.prototype.toString = x.prototype.hex, x.prototype.digest = function() { + this.finalize(); + var e = this.h0, + t = this.h1, + n = this.h2, + i = this.h3, + r = this.h4, + a = this.h5, + s = this.h6, + o = this.h7, + l = [e >>> 24 & 255, e >>> 16 & 255, e >>> 8 & 255, 255 & e, t >>> 24 & 255, t >>> 16 & 255, t >>> 8 & 255, 255 & t, n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, 255 & n, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i, r >>> 24 & 255, r >>> 16 & 255, r >>> 8 & 255, 255 & r, a >>> 24 & 255, a >>> 16 & 255, a >>> 8 & 255, 255 & a, s >>> 24 & 255, s >>> 16 & 255, s >>> 8 & 255, 255 & s]; + return this.is224 || l.push(o >>> 24 & 255, o >>> 16 & 255, o >>> 8 & 255, 255 & o), l + }, x.prototype.array = x.prototype.digest, x.prototype.arrayBuffer = function() { + this.finalize(); + var e = new ArrayBuffer(this.is224 ? 28 : 32), + t = new DataView(e); + return t.setUint32(0, this.h0), t.setUint32(4, this.h1), t.setUint32(8, this.h2), t.setUint32(12, this.h3), t.setUint32(16, this.h4), t.setUint32(20, this.h5), t.setUint32(24, this.h6), this.is224 || t.setUint32(28, this.h7), e + }, b.prototype = new x, b.prototype.finalize = function() { + if (x.prototype.finalize.call(this), this.inner) { + this.inner = !1; + var e = this.array(); + x.call(this, this.is224, this.sharedMemory), this.update(this.oKeyPad), this.update(e), x.prototype.finalize.call(this) + } + }; + var E = _(); + E.sha256 = E, E.sha224 = _(!0), E.sha256.hmac = y(), E.sha224.hmac = y(!0), l ? e.exports = E : (a.sha256 = E.sha256, a.sha224 = E.sha224, c && (void 0 === (i = function() { + return E + }.call(E, n, E, e)) || (e.exports = i))) + }() + }, + 1903: () => {}, + 4394: () => {}, + 6925: () => { + "use strict"; + + function e(e) { + throw new Error(e + ": No deterministic implementation") + } + const t = new WebAssembly.Instance(new WebAssembly.Module(Uint8Array.from(atob("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"), (e => e.charCodeAt(0))))).exports; + Math = { + E: 2.718281828459045, + LN10: 2.302585092994046, + LN2: .6931471805599453, + LOG2E: 1.4426950408889634, + LOG10E: .4342944819032518, + PI: 3.141592653589793, + SQRT1_2: .7071067811865476, + SQRT2: 1.4142135623730951, + abs: Math.abs, + acos: t.acos, + asin: t.asin, + atan: t.atan, + atan2: t.atan2, + ceil: Math.ceil, + cos: function(e) { + return Math.sin(e + Math.PI / 2) + }, + exp: t.exp, + floor: Math.floor, + log: t.log, + max: Math.max, + min: Math.min, + pow: t.pow, + random: Math.random, + round: Math.round, + sin: function(e) { + if (!Number.isFinite(e)) return NaN; + const t = (e = function(e) { + return (e %= 2 * Math.PI) < 0 && (e += 2 * Math.PI), e + }(e)) / (2 * Math.PI) * n.length, + i = Math.floor(t), + r = (i + 1) % n.length, + a = t - i; + return n[i] * (1 - a) + n[r] * a + }, + sqrt: t.sqrt, + tan: t.tan, + clz32: () => e("clz32"), + imul: () => e("imul"), + sign: Math.sign, + log10: t.log10, + log2: t.log2, + log1p: () => e("log1p"), + expm1: () => e("expm1"), + cosh: () => e("cosh"), + sinh: () => e("sinh"), + tanh: () => e("tanh"), + acosh: () => e("acosh"), + asinh: () => e("asinh"), + atanh: () => e("atanh"), + hypot: () => e("hypot"), + trunc: Math.trunc, + cbrt: () => e("cbrt"), + fround: Math.fround, + [Symbol.toStringTag]: "Math" + }; + const n = [0, .01745240643728351, .03489949670250097, .05233595624294383, .0697564737441253, .08715574274765817, .10452846326765346, .12186934340514748, .13917310096006544, .15643446504023087, .17364817766693033, .1908089953765448, .20791169081775931, .22495105434386498, .24192189559966773, .25881904510252074, .27563735581699916, .2923717047227367, .3090169943749474, .3255681544571567, .3420201433256687, .35836794954530027, .374606593415912, .3907311284892737, .40673664307580015, .42261826174069944, .4383711467890774, .45399049973954675, .4694715627858908, .48480962024633706, .49999999999999994, .5150380749100542, .5299192642332049, .544639035015027, .5591929034707468, .573576436351046, .5877852522924731, .6018150231520483, .6156614753256583, .6293203910498375, .6427876096865393, .6560590289905073, .6691306063588582, .6819983600624985, .6946583704589973, .7071067811865475, .7193398003386511, .7313537016191705, .7431448254773942, .7547095802227719, .766044443118978, .7771459614569708, .7880107536067219, .7986355100472928, .8090169943749475, .8191520442889918, .8290375725550417, .8386705679454239, .848048096156426, .8571673007021122, .8660254037844386, .8746197071393957, .8829475928589269, .8910065241883678, .898794046299167, .9063077870366499, .9135454576426009, .9205048534524404, .9271838545667873, .9335804264972017, .9396926207859083, .9455185755993167, .9510565162951535, .9563047559630354, .9612616959383189, .9659258262890683, .9702957262759965, .9743700647852352, .9781476007338057, .981627183447664, .984807753012208, .9876883405951378, .9902680687415704, .992546151641322, .9945218953682733, .9961946980917455, .9975640502598242, .9986295347545738, .9993908270190958, .9998476951563913, 1, .9998476951563913, .9993908270190958, .9986295347545738, .9975640502598242, .9961946980917455, .9945218953682734, .9925461516413221, .9902680687415704, .9876883405951377, .984807753012208, .981627183447664, .9781476007338057, .9743700647852352, .9702957262759965, .9659258262890683, .9612616959383189, .9563047559630355, .9510565162951536, .9455185755993168, .9396926207859084, .9335804264972017, .9271838545667874, .9205048534524404, .913545457642601, .90630778703665, .8987940462991669, .8910065241883679, .8829475928589271, .8746197071393959, .8660254037844387, .8571673007021123, .8480480961564261, .8386705679454239, .8290375725550417, .819152044288992, .8090169943749475, .7986355100472927, .788010753606722, .777145961456971, .766044443118978, .7547095802227721, .7431448254773945, .7313537016191706, .7193398003386511, .7071067811865476, .6946583704589975, .6819983600624986, .669130606358858, .6560590289905073, .6427876096865395, .6293203910498374, .6156614753256584, .6018150231520486, .5877852522924732, .5735764363510459, .5591929034707469, .5446390350150273, .5299192642332049, .5150380749100544, .49999999999999994, .48480962024633717, .4694715627858907, .45399049973954686, .4383711467890777, .4226182617406995, .40673664307580004, .39073112848927377, .37460659341591224, .35836794954530066, .3420201433256689, .3255681544571566, .3090169943749475, .29237170472273705, .2756373558169992, .258819045102521, .24192189559966773, .2249510543438652, .20791169081775931, .19080899537654497, .1736481776669307, .15643446504023098, .13917310096006533, .12186934340514755, .10452846326765373, .0871557427476582, .06975647374412552, .05233595624294425, .03489949670250114, .01745240643728344, 12246467991473532e-32, -.017452406437283192, -.0348994967025009, -.052335956242943564, -.06975647374412483, -.08715574274765794, -.1045284632676535, -.12186934340514774, -.13917310096006552, -.15643446504023073, -.17364817766693047, -.19080899537654472, -.20791169081775907, -.22495105434386498, -.2419218955996675, -.25881904510252035, -.2756373558169986, -.29237170472273677, -.30901699437494773, -.32556815445715676, -.34202014332566866, -.35836794954530043, -.374606593415912, -.39073112848927355, -.4067366430757998, -.4226182617406993, -.43837114678907707, -.45399049973954625, -.4694715627858905, -.48480962024633734, -.5000000000000001, -.5150380749100542, -.5299192642332048, -.5446390350150271, -.5591929034707467, -.5735764363510458, -.587785252292473, -.601815023152048, -.6156614753256578, -.6293203910498372, -.6427876096865393, -.6560590289905074, -.6691306063588582, -.6819983600624984, -.6946583704589974, -.7071067811865475, -.7193398003386509, -.7313537016191705, -.743144825477394, -.7547095802227717, -.7660444431189779, -.7771459614569711, -.7880107536067221, -.7986355100472928, -.8090169943749473, -.8191520442889916, -.8290375725550414, -.838670567945424, -.848048096156426, -.8571673007021121, -.8660254037844384, -.8746197071393955, -.882947592858927, -.8910065241883678, -.8987940462991668, -.90630778703665, -.913545457642601, -.9205048534524403, -.9271838545667873, -.9335804264972016, -.9396926207859082, -.9455185755993168, -.9510565162951535, -.9563047559630353, -.961261695938319, -.9659258262890683, -.9702957262759965, -.9743700647852351, -.9781476007338056, -.981627183447664, -.984807753012208, -.9876883405951377, -.9902680687415703, -.992546151641322, -.9945218953682733, -.9961946980917455, -.9975640502598242, -.9986295347545739, -.9993908270190958, -.9998476951563913, -1, -.9998476951563913, -.9993908270190958, -.9986295347545739, -.9975640502598243, -.9961946980917455, -.9945218953682733, -.992546151641322, -.9902680687415704, -.9876883405951378, -.9848077530122081, -.9816271834476641, -.9781476007338056, -.9743700647852352, -.9702957262759966, -.9659258262890684, -.961261695938319, -.9563047559630354, -.9510565162951536, -.945518575599317, -.9396926207859083, -.9335804264972017, -.9271838545667874, -.9205048534524405, -.9135454576426011, -.9063077870366503, -.898794046299167, -.8910065241883679, -.8829475928589271, -.8746197071393956, -.8660254037844386, -.8571673007021123, -.8480480961564262, -.8386705679454243, -.8290375725550416, -.8191520442889918, -.8090169943749476, -.798635510047293, -.7880107536067223, -.7771459614569713, -.7660444431189781, -.7547095802227722, -.743144825477394, -.7313537016191703, -.7193398003386512, -.7071067811865477, -.6946583704589976, -.6819983600624989, -.6691306063588588, -.6560590289905074, -.6427876096865396, -.6293203910498372, -.6156614753256582, -.6018150231520483, -.5877852522924734, -.5735764363510465, -.5591929034707473, -.544639035015027, -.529919264233205, -.5150380749100545, -.5000000000000004, -.48480962024633767, -.4694715627858908, -.45399049973954697, -.4383711467890778, -.4226182617406992, -.40673664307580015, -.3907311284892739, -.37460659341591235, -.35836794954530077, -.34202014332566943, -.3255681544571567, -.3090169943749477, -.29237170472273716, -.27563735581699894, -.2588190451025207, -.24192189559966787, -.22495105434386534, -.20791169081775987, -.19080899537654467, -.1736481776669304, -.15643446504023112, -.13917310096006588, -.12186934340514811, -.1045284632676543, -.08715574274765832, -.06975647374412564, -.05233595624294348, -.034899496702500823, -.01745240643728356] + } + }, + t = {}; + + function n(i) { + var r = t[i]; + if (void 0 !== r) return r.exports; + var a = t[i] = { + exports: {} + }; + return e[i](a, a.exports, n), a.exports + } + n.amdO = {}, n.g = function() { + if ("object" == typeof globalThis) return globalThis; + try { + return this || new Function("return this")() + } catch (e) { + if ("object" == typeof window) return window + } + }(), (() => { + "use strict"; + n(6925); + /** + * @license + * Copyright 2010-2025 Three.js Authors + * SPDX-License-Identifier: MIT + */ + const e = "174", + t = 0, + i = 1, + r = 2, + a = 100, + s = 101, + o = 102, + l = 200, + c = 201, + h = 202, + u = 203, + d = 204, + f = 205, + p = 206, + m = 207, + g = 208, + A = 209, + _ = 210, + v = 211, + w = 212, + y = 213, + x = 214, + b = 0, + E = 1, + S = 2, + M = 3, + T = 4, + C = 5, + I = 6, + R = 7, + P = "attached", + B = 301, + D = 302, + L = 303, + U = 304, + k = 306, + N = 1e3, + F = 1001, + O = 1002, + z = 1003, + W = 1004, + H = 1005, + V = 1006, + G = 1007, + Q = 1008, + X = 1009, + j = 1010, + q = 1011, + Y = 1012, + K = 1013, + Z = 1014, + J = 1015, + $ = 1016, + ee = 1017, + te = 1018, + ne = 1020, + ie = 35902, + re = 1023, + ae = 1026, + se = 1027, + oe = 1028, + le = 1029, + ce = 1031, + he = 1033, + ue = 33776, + de = 33777, + fe = 33778, + pe = 33779, + me = 35840, + ge = 35841, + Ae = 35842, + _e = 35843, + ve = 36196, + we = 37492, + ye = 37496, + xe = 37808, + be = 37809, + Ee = 37810, + Se = 37811, + Me = 37812, + Te = 37813, + Ce = 37814, + Ie = 37815, + Re = 37816, + Pe = 37817, + Be = 37818, + De = 37819, + Le = 37820, + Ue = 37821, + ke = 36492, + Ne = 36494, + Fe = 36495, + Oe = 36284, + ze = 36285, + We = 36286, + He = 2300, + Ve = 2301, + Ge = 2302, + Qe = 2400, + Xe = 2401, + je = 2402, + qe = "", + Ye = "srgb", + Ke = "srgb-linear", + Ze = "linear", + Je = "srgb", + $e = 7680, + et = 512, + tt = 513, + nt = 514, + it = 515, + rt = 516, + at = 517, + st = 518, + ot = 519, + lt = 35044, + ct = "300 es", + ht = 2e3, + ut = 2001; + class dt { + addEventListener(e, t) { + void 0 === this._listeners && (this._listeners = {}); + const n = this._listeners; + void 0 === n[e] && (n[e] = []), -1 === n[e].indexOf(t) && n[e].push(t) + } + hasEventListener(e, t) { + const n = this._listeners; + return void 0 !== n && (void 0 !== n[e] && -1 !== n[e].indexOf(t)) + } + removeEventListener(e, t) { + const n = this._listeners; + if (void 0 === n) return; + const i = n[e]; + if (void 0 !== i) { + const e = i.indexOf(t); - 1 !== e && i.splice(e, 1) + } + } + dispatchEvent(e) { + const t = this._listeners; + if (void 0 === t) return; + const n = t[e.type]; + if (void 0 !== n) { + e.target = this; + const t = n.slice(0); + for (let n = 0, i = t.length; n < i; n++) t[n].call(this, e); + e.target = null + } + } + } + const ft = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"]; + let pt = 1234567; + const mt = Math.PI / 180, + gt = 180 / Math.PI; + + function At() { + const e = 4294967295 * Math.random() | 0, + t = 4294967295 * Math.random() | 0, + n = 4294967295 * Math.random() | 0, + i = 4294967295 * Math.random() | 0; + return (ft[255 & e] + ft[e >> 8 & 255] + ft[e >> 16 & 255] + ft[e >> 24 & 255] + "-" + ft[255 & t] + ft[t >> 8 & 255] + "-" + ft[t >> 16 & 15 | 64] + ft[t >> 24 & 255] + "-" + ft[63 & n | 128] + ft[n >> 8 & 255] + "-" + ft[n >> 16 & 255] + ft[n >> 24 & 255] + ft[255 & i] + ft[i >> 8 & 255] + ft[i >> 16 & 255] + ft[i >> 24 & 255]).toLowerCase() + } + + function _t(e, t, n) { + return Math.max(t, Math.min(n, e)) + } + + function vt(e, t) { + return (e % t + t) % t + } + + function wt(e, t, n) { + return (1 - n) * e + n * t + } + + function yt(e, t) { + switch (t.constructor) { + case Float32Array: + return e; + case Uint32Array: + return e / 4294967295; + case Uint16Array: + return e / 65535; + case Uint8Array: + return e / 255; + case Int32Array: + return Math.max(e / 2147483647, -1); + case Int16Array: + return Math.max(e / 32767, -1); + case Int8Array: + return Math.max(e / 127, -1); + default: + throw new Error("Invalid component type.") + } + } + + function xt(e, t) { + switch (t.constructor) { + case Float32Array: + return e; + case Uint32Array: + return Math.round(4294967295 * e); + case Uint16Array: + return Math.round(65535 * e); + case Uint8Array: + return Math.round(255 * e); + case Int32Array: + return Math.round(2147483647 * e); + case Int16Array: + return Math.round(32767 * e); + case Int8Array: + return Math.round(127 * e); + default: + throw new Error("Invalid component type.") + } + } + const bt = { + DEG2RAD: mt, + RAD2DEG: gt, + generateUUID: At, + clamp: _t, + euclideanModulo: vt, + mapLinear: function(e, t, n, i, r) { + return i + (e - t) * (r - i) / (n - t) + }, + inverseLerp: function(e, t, n) { + return e !== t ? (n - e) / (t - e) : 0 + }, + lerp: wt, + damp: function(e, t, n, i) { + return wt(e, t, 1 - Math.exp(-n * i)) + }, + pingpong: function(e, t = 1) { + return t - Math.abs(vt(e, 2 * t) - t) + }, + smoothstep: function(e, t, n) { + return e <= t ? 0 : e >= n ? 1 : (e = (e - t) / (n - t)) * e * (3 - 2 * e) + }, + smootherstep: function(e, t, n) { + return e <= t ? 0 : e >= n ? 1 : (e = (e - t) / (n - t)) * e * e * (e * (6 * e - 15) + 10) + }, + randInt: function(e, t) { + return e + Math.floor(Math.random() * (t - e + 1)) + }, + randFloat: function(e, t) { + return e + Math.random() * (t - e) + }, + randFloatSpread: function(e) { + return e * (.5 - Math.random()) + }, + seededRandom: function(e) { + void 0 !== e && (pt = e); + let t = pt += 1831565813; + return t = Math.imul(t ^ t >>> 15, 1 | t), t ^= t + Math.imul(t ^ t >>> 7, 61 | t), ((t ^ t >>> 14) >>> 0) / 4294967296 + }, + degToRad: function(e) { + return e * mt + }, + radToDeg: function(e) { + return e * gt + }, + isPowerOfTwo: function(e) { + return !(e & e - 1) && 0 !== e + }, + ceilPowerOfTwo: function(e) { + return Math.pow(2, Math.ceil(Math.log(e) / Math.LN2)) + }, + floorPowerOfTwo: function(e) { + return Math.pow(2, Math.floor(Math.log(e) / Math.LN2)) + }, + setQuaternionFromProperEuler: function(e, t, n, i, r) { + const a = Math.cos, + s = Math.sin, + o = a(n / 2), + l = s(n / 2), + c = a((t + i) / 2), + h = s((t + i) / 2), + u = a((t - i) / 2), + d = s((t - i) / 2), + f = a((i - t) / 2), + p = s((i - t) / 2); + switch (r) { + case "XYX": + e.set(o * h, l * u, l * d, o * c); + break; + case "YZY": + e.set(l * d, o * h, l * u, o * c); + break; + case "ZXZ": + e.set(l * u, l * d, o * h, o * c); + break; + case "XZX": + e.set(o * h, l * p, l * f, o * c); + break; + case "YXY": + e.set(l * f, o * h, l * p, o * c); + break; + case "ZYZ": + e.set(l * p, l * f, o * h, o * c); + break; + default: + console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + r) + } + }, + normalize: xt, + denormalize: yt + }; + class Et { + constructor(e = 0, t = 0) { + Et.prototype.isVector2 = !0, this.x = e, this.y = t + } + get width() { + return this.x + } + set width(e) { + this.x = e + } + get height() { + return this.y + } + set height(e) { + this.y = e + } + set(e, t) { + return this.x = e, this.y = t, this + } + setScalar(e) { + return this.x = e, this.y = e, this + } + setX(e) { + return this.x = e, this + } + setY(e) { + return this.y = e, this + } + setComponent(e, t) { + switch (e) { + case 0: + this.x = t; + break; + case 1: + this.y = t; + break; + default: + throw new Error("index is out of range: " + e) + } + return this + } + getComponent(e) { + switch (e) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + e) + } + } + clone() { + return new this.constructor(this.x, this.y) + } + copy(e) { + return this.x = e.x, this.y = e.y, this + } + add(e) { + return this.x += e.x, this.y += e.y, this + } + addScalar(e) { + return this.x += e, this.y += e, this + } + addVectors(e, t) { + return this.x = e.x + t.x, this.y = e.y + t.y, this + } + addScaledVector(e, t) { + return this.x += e.x * t, this.y += e.y * t, this + } + sub(e) { + return this.x -= e.x, this.y -= e.y, this + } + subScalar(e) { + return this.x -= e, this.y -= e, this + } + subVectors(e, t) { + return this.x = e.x - t.x, this.y = e.y - t.y, this + } + multiply(e) { + return this.x *= e.x, this.y *= e.y, this + } + multiplyScalar(e) { + return this.x *= e, this.y *= e, this + } + divide(e) { + return this.x /= e.x, this.y /= e.y, this + } + divideScalar(e) { + return this.multiplyScalar(1 / e) + } + applyMatrix3(e) { + const t = this.x, + n = this.y, + i = e.elements; + return this.x = i[0] * t + i[3] * n + i[6], this.y = i[1] * t + i[4] * n + i[7], this + } + min(e) { + return this.x = Math.min(this.x, e.x), this.y = Math.min(this.y, e.y), this + } + max(e) { + return this.x = Math.max(this.x, e.x), this.y = Math.max(this.y, e.y), this + } + clamp(e, t) { + return this.x = _t(this.x, e.x, t.x), this.y = _t(this.y, e.y, t.y), this + } + clampScalar(e, t) { + return this.x = _t(this.x, e, t), this.y = _t(this.y, e, t), this + } + clampLength(e, t) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(_t(n, e, t)) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this + } + roundToZero() { + return this.x = Math.trunc(this.x), this.y = Math.trunc(this.y), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this + } + dot(e) { + return this.x * e.x + this.y * e.y + } + cross(e) { + return this.x * e.y - this.y * e.x + } + lengthSq() { + return this.x * this.x + this.y * this.y + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + angle() { + return Math.atan2(-this.y, -this.x) + Math.PI + } + angleTo(e) { + const t = Math.sqrt(this.lengthSq() * e.lengthSq()); + if (0 === t) return Math.PI / 2; + const n = this.dot(e) / t; + return Math.acos(_t(n, -1, 1)) + } + distanceTo(e) { + return Math.sqrt(this.distanceToSquared(e)) + } + distanceToSquared(e) { + const t = this.x - e.x, + n = this.y - e.y; + return t * t + n * n + } + manhattanDistanceTo(e) { + return Math.abs(this.x - e.x) + Math.abs(this.y - e.y) + } + setLength(e) { + return this.normalize().multiplyScalar(e) + } + lerp(e, t) { + return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this + } + lerpVectors(e, t, n) { + return this.x = e.x + (t.x - e.x) * n, this.y = e.y + (t.y - e.y) * n, this + } + equals(e) { + return e.x === this.x && e.y === this.y + } + fromArray(e, t = 0) { + return this.x = e[t], this.y = e[t + 1], this + } + toArray(e = [], t = 0) { + return e[t] = this.x, e[t + 1] = this.y, e + } + fromBufferAttribute(e, t) { + return this.x = e.getX(t), this.y = e.getY(t), this + } + rotateAround(e, t) { + const n = Math.cos(t), + i = Math.sin(t), + r = this.x - e.x, + a = this.y - e.y; + return this.x = r * n - a * i + e.x, this.y = r * i + a * n + e.y, this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this + }*[Symbol.iterator]() { + yield this.x, yield this.y + } + } + class St { + constructor(e, t, n, i, r, a, s, o, l) { + St.prototype.isMatrix3 = !0, this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], void 0 !== e && this.set(e, t, n, i, r, a, s, o, l) + } + set(e, t, n, i, r, a, s, o, l) { + const c = this.elements; + return c[0] = e, c[1] = i, c[2] = s, c[3] = t, c[4] = r, c[5] = o, c[6] = n, c[7] = a, c[8] = l, this + } + identity() { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this + } + copy(e) { + const t = this.elements, + n = e.elements; + return t[0] = n[0], t[1] = n[1], t[2] = n[2], t[3] = n[3], t[4] = n[4], t[5] = n[5], t[6] = n[6], t[7] = n[7], t[8] = n[8], this + } + extractBasis(e, t, n) { + return e.setFromMatrix3Column(this, 0), t.setFromMatrix3Column(this, 1), n.setFromMatrix3Column(this, 2), this + } + setFromMatrix4(e) { + const t = e.elements; + return this.set(t[0], t[4], t[8], t[1], t[5], t[9], t[2], t[6], t[10]), this + } + multiply(e) { + return this.multiplyMatrices(this, e) + } + premultiply(e) { + return this.multiplyMatrices(e, this) + } + multiplyMatrices(e, t) { + const n = e.elements, + i = t.elements, + r = this.elements, + a = n[0], + s = n[3], + o = n[6], + l = n[1], + c = n[4], + h = n[7], + u = n[2], + d = n[5], + f = n[8], + p = i[0], + m = i[3], + g = i[6], + A = i[1], + _ = i[4], + v = i[7], + w = i[2], + y = i[5], + x = i[8]; + return r[0] = a * p + s * A + o * w, r[3] = a * m + s * _ + o * y, r[6] = a * g + s * v + o * x, r[1] = l * p + c * A + h * w, r[4] = l * m + c * _ + h * y, r[7] = l * g + c * v + h * x, r[2] = u * p + d * A + f * w, r[5] = u * m + d * _ + f * y, r[8] = u * g + d * v + f * x, this + } + multiplyScalar(e) { + const t = this.elements; + return t[0] *= e, t[3] *= e, t[6] *= e, t[1] *= e, t[4] *= e, t[7] *= e, t[2] *= e, t[5] *= e, t[8] *= e, this + } + determinant() { + const e = this.elements, + t = e[0], + n = e[1], + i = e[2], + r = e[3], + a = e[4], + s = e[5], + o = e[6], + l = e[7], + c = e[8]; + return t * a * c - t * s * l - n * r * c + n * s * o + i * r * l - i * a * o + } + invert() { + const e = this.elements, + t = e[0], + n = e[1], + i = e[2], + r = e[3], + a = e[4], + s = e[5], + o = e[6], + l = e[7], + c = e[8], + h = c * a - s * l, + u = s * o - c * r, + d = l * r - a * o, + f = t * h + n * u + i * d; + if (0 === f) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + const p = 1 / f; + return e[0] = h * p, e[1] = (i * l - c * n) * p, e[2] = (s * n - i * a) * p, e[3] = u * p, e[4] = (c * t - i * o) * p, e[5] = (i * r - s * t) * p, e[6] = d * p, e[7] = (n * o - l * t) * p, e[8] = (a * t - n * r) * p, this + } + transpose() { + let e; + const t = this.elements; + return e = t[1], t[1] = t[3], t[3] = e, e = t[2], t[2] = t[6], t[6] = e, e = t[5], t[5] = t[7], t[7] = e, this + } + getNormalMatrix(e) { + return this.setFromMatrix4(e).invert().transpose() + } + transposeIntoArray(e) { + const t = this.elements; + return e[0] = t[0], e[1] = t[3], e[2] = t[6], e[3] = t[1], e[4] = t[4], e[5] = t[7], e[6] = t[2], e[7] = t[5], e[8] = t[8], this + } + setUvTransform(e, t, n, i, r, a, s) { + const o = Math.cos(r), + l = Math.sin(r); + return this.set(n * o, n * l, -n * (o * a + l * s) + a + e, -i * l, i * o, -i * (-l * a + o * s) + s + t, 0, 0, 1), this + } + scale(e, t) { + return this.premultiply(Mt.makeScale(e, t)), this + } + rotate(e) { + return this.premultiply(Mt.makeRotation(-e)), this + } + translate(e, t) { + return this.premultiply(Mt.makeTranslation(e, t)), this + } + makeTranslation(e, t) { + return e.isVector2 ? this.set(1, 0, e.x, 0, 1, e.y, 0, 0, 1) : this.set(1, 0, e, 0, 1, t, 0, 0, 1), this + } + makeRotation(e) { + const t = Math.cos(e), + n = Math.sin(e); + return this.set(t, -n, 0, n, t, 0, 0, 0, 1), this + } + makeScale(e, t) { + return this.set(e, 0, 0, 0, t, 0, 0, 0, 1), this + } + equals(e) { + const t = this.elements, + n = e.elements; + for (let e = 0; e < 9; e++) + if (t[e] !== n[e]) return !1; + return !0 + } + fromArray(e, t = 0) { + for (let n = 0; n < 9; n++) this.elements[n] = e[n + t]; + return this + } + toArray(e = [], t = 0) { + const n = this.elements; + return e[t] = n[0], e[t + 1] = n[1], e[t + 2] = n[2], e[t + 3] = n[3], e[t + 4] = n[4], e[t + 5] = n[5], e[t + 6] = n[6], e[t + 7] = n[7], e[t + 8] = n[8], e + } + clone() { + return (new this.constructor).fromArray(this.elements) + } + } + const Mt = new St; + + function Tt(e) { + for (let t = e.length - 1; t >= 0; --t) + if (e[t] >= 65535) return !0; + return !1 + } + Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array; + + function Ct(e) { + return document.createElementNS("http://www.w3.org/1999/xhtml", e) + } + + function It() { + const e = Ct("canvas"); + return e.style.display = "block", e + } + const Rt = {}; + + function Pt(e) { + e in Rt || (Rt[e] = !0, console.warn(e)) + } + const Bt = (new St).set(.4123908, .3575843, .1804808, .212639, .7151687, .0721923, .0193308, .1191948, .9505322), + Dt = (new St).set(3.2409699, -1.5373832, -.4986108, -.9692436, 1.8759675, .0415551, .0556301, -.203977, 1.0569715); + + function Lt() { + const e = { + enabled: !0, + workingColorSpace: Ke, + spaces: {}, + convert: function(e, t, n) { + return !1 !== this.enabled && t !== n && t && n ? (this.spaces[t].transfer === Je && (e.r = kt(e.r), e.g = kt(e.g), e.b = kt(e.b)), this.spaces[t].primaries !== this.spaces[n].primaries && (e.applyMatrix3(this.spaces[t].toXYZ), e.applyMatrix3(this.spaces[n].fromXYZ)), this.spaces[n].transfer === Je && (e.r = Nt(e.r), e.g = Nt(e.g), e.b = Nt(e.b)), e) : e + }, + fromWorkingColorSpace: function(e, t) { + return this.convert(e, this.workingColorSpace, t) + }, + toWorkingColorSpace: function(e, t) { + return this.convert(e, t, this.workingColorSpace) + }, + getPrimaries: function(e) { + return this.spaces[e].primaries + }, + getTransfer: function(e) { + return e === qe ? Ze : this.spaces[e].transfer + }, + getLuminanceCoefficients: function(e, t = this.workingColorSpace) { + return e.fromArray(this.spaces[t].luminanceCoefficients) + }, + define: function(e) { + Object.assign(this.spaces, e) + }, + _getMatrix: function(e, t, n) { + return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ) + }, + _getDrawingBufferColorSpace: function(e) { + return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace + }, + _getUnpackColorSpace: function(e = this.workingColorSpace) { + return this.spaces[e].workingColorSpaceConfig.unpackColorSpace + } + }, + t = [.64, .33, .3, .6, .15, .06], + n = [.2126, .7152, .0722], + i = [.3127, .329]; + return e.define({ + [Ke]: { + primaries: t, + whitePoint: i, + transfer: Ze, + toXYZ: Bt, + fromXYZ: Dt, + luminanceCoefficients: n, + workingColorSpaceConfig: { + unpackColorSpace: Ye + }, + outputColorSpaceConfig: { + drawingBufferColorSpace: Ye + } + }, + [Ye]: { + primaries: t, + whitePoint: i, + transfer: Je, + toXYZ: Bt, + fromXYZ: Dt, + luminanceCoefficients: n, + outputColorSpaceConfig: { + drawingBufferColorSpace: Ye + } + } + }), e + } + const Ut = Lt(); + + function kt(e) { + return e < .04045 ? .0773993808 * e : Math.pow(.9478672986 * e + .0521327014, 2.4) + } + + function Nt(e) { + return e < .0031308 ? 12.92 * e : 1.055 * Math.pow(e, .41666) - .055 + } + let Ft; + class Ot { + static getDataURL(e) { + if (/^data:/i.test(e.src)) return e.src; + if ("undefined" == typeof HTMLCanvasElement) return e.src; + let t; + if (e instanceof HTMLCanvasElement) t = e; + else { + void 0 === Ft && (Ft = Ct("canvas")), Ft.width = e.width, Ft.height = e.height; + const n = Ft.getContext("2d"); + e instanceof ImageData ? n.putImageData(e, 0, 0) : n.drawImage(e, 0, 0, e.width, e.height), t = Ft + } + return t.toDataURL("image/png") + } + static sRGBToLinear(e) { + if ("undefined" != typeof HTMLImageElement && e instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && e instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && e instanceof ImageBitmap) { + const t = Ct("canvas"); + t.width = e.width, t.height = e.height; + const n = t.getContext("2d"); + n.drawImage(e, 0, 0, e.width, e.height); + const i = n.getImageData(0, 0, e.width, e.height), + r = i.data; + for (let e = 0; e < r.length; e++) r[e] = 255 * kt(r[e] / 255); + return n.putImageData(i, 0, 0), t + } + if (e.data) { + const t = e.data.slice(0); + for (let e = 0; e < t.length; e++) t instanceof Uint8Array || t instanceof Uint8ClampedArray ? t[e] = Math.floor(255 * kt(t[e] / 255)) : t[e] = kt(t[e]); + return { + data: t, + width: e.width, + height: e.height + } + } + return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."), e + } + } + let zt = 0; + class Wt { + constructor(e = null) { + this.isSource = !0, Object.defineProperty(this, "id", { + value: zt++ + }), this.uuid = At(), this.data = e, this.dataReady = !0, this.version = 0 + } + set needsUpdate(e) { + !0 === e && this.version++ + } + toJSON(e) { + const t = void 0 === e || "string" == typeof e; + if (!t && void 0 !== e.images[this.uuid]) return e.images[this.uuid]; + const n = { + uuid: this.uuid, + url: "" + }, + i = this.data; + if (null !== i) { + let e; + if (Array.isArray(i)) { + e = []; + for (let t = 0, n = i.length; t < n; t++) i[t].isDataTexture ? e.push(Ht(i[t].image)) : e.push(Ht(i[t])) + } else e = Ht(i); + n.url = e + } + return t || (e.images[this.uuid] = n), n + } + } + + function Ht(e) { + return "undefined" != typeof HTMLImageElement && e instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && e instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && e instanceof ImageBitmap ? Ot.getDataURL(e) : e.data ? { + data: Array.from(e.data), + width: e.width, + height: e.height, + type: e.data.constructor.name + } : (console.warn("THREE.Texture: Unable to serialize Texture."), {}) + } + let Vt = 0; + class Gt extends dt { + constructor(e = Gt.DEFAULT_IMAGE, t = Gt.DEFAULT_MAPPING, n = 1001, i = 1001, r = 1006, a = 1008, s = 1023, o = 1009, l = Gt.DEFAULT_ANISOTROPY, c = "") { + super(), this.isTexture = !0, Object.defineProperty(this, "id", { + value: Vt++ + }), this.uuid = At(), this.name = "", this.source = new Wt(e), this.mipmaps = [], this.mapping = t, this.channel = 0, this.wrapS = n, this.wrapT = i, this.magFilter = r, this.minFilter = a, this.anisotropy = l, this.format = s, this.internalFormat = null, this.type = o, this.offset = new Et(0, 0), this.repeat = new Et(1, 1), this.center = new Et(0, 0), this.rotation = 0, this.matrixAutoUpdate = !0, this.matrix = new St, this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this.colorSpace = c, this.userData = {}, this.version = 0, this.onUpdate = null, this.renderTarget = null, this.isRenderTargetTexture = !1, this.pmremVersion = 0 + } + get image() { + return this.source.data + } + set image(e = null) { + this.source.data = e + } + updateMatrix() { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + return this.name = e.name, this.source = e.source, this.mipmaps = e.mipmaps.slice(0), this.mapping = e.mapping, this.channel = e.channel, this.wrapS = e.wrapS, this.wrapT = e.wrapT, this.magFilter = e.magFilter, this.minFilter = e.minFilter, this.anisotropy = e.anisotropy, this.format = e.format, this.internalFormat = e.internalFormat, this.type = e.type, this.offset.copy(e.offset), this.repeat.copy(e.repeat), this.center.copy(e.center), this.rotation = e.rotation, this.matrixAutoUpdate = e.matrixAutoUpdate, this.matrix.copy(e.matrix), this.generateMipmaps = e.generateMipmaps, this.premultiplyAlpha = e.premultiplyAlpha, this.flipY = e.flipY, this.unpackAlignment = e.unpackAlignment, this.colorSpace = e.colorSpace, this.renderTarget = e.renderTarget, this.isRenderTargetTexture = e.isRenderTargetTexture, this.userData = JSON.parse(JSON.stringify(e.userData)), this.needsUpdate = !0, this + } + toJSON(e) { + const t = void 0 === e || "string" == typeof e; + if (!t && void 0 !== e.textures[this.uuid]) return e.textures[this.uuid]; + const n = { + metadata: { + version: 4.6, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + image: this.source.toJSON(e).uuid, + mapping: this.mapping, + channel: this.channel, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + internalFormat: this.internalFormat, + type: this.type, + colorSpace: this.colorSpace, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + generateMipmaps: this.generateMipmaps, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }; + return Object.keys(this.userData).length > 0 && (n.userData = this.userData), t || (e.textures[this.uuid] = n), n + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + transformUv(e) { + if (300 !== this.mapping) return e; + if (e.applyMatrix3(this.matrix), e.x < 0 || e.x > 1) switch (this.wrapS) { + case N: + e.x = e.x - Math.floor(e.x); + break; + case F: + e.x = e.x < 0 ? 0 : 1; + break; + case O: + 1 === Math.abs(Math.floor(e.x) % 2) ? e.x = Math.ceil(e.x) - e.x : e.x = e.x - Math.floor(e.x) + } + if (e.y < 0 || e.y > 1) switch (this.wrapT) { + case N: + e.y = e.y - Math.floor(e.y); + break; + case F: + e.y = e.y < 0 ? 0 : 1; + break; + case O: + 1 === Math.abs(Math.floor(e.y) % 2) ? e.y = Math.ceil(e.y) - e.y : e.y = e.y - Math.floor(e.y) + } + return this.flipY && (e.y = 1 - e.y), e + } + set needsUpdate(e) { + !0 === e && (this.version++, this.source.needsUpdate = !0) + } + set needsPMREMUpdate(e) { + !0 === e && this.pmremVersion++ + } + } + Gt.DEFAULT_IMAGE = null, Gt.DEFAULT_MAPPING = 300, Gt.DEFAULT_ANISOTROPY = 1; + class Qt { + constructor(e = 0, t = 0, n = 0, i = 1) { + Qt.prototype.isVector4 = !0, this.x = e, this.y = t, this.z = n, this.w = i + } + get width() { + return this.z + } + set width(e) { + this.z = e + } + get height() { + return this.w + } + set height(e) { + this.w = e + } + set(e, t, n, i) { + return this.x = e, this.y = t, this.z = n, this.w = i, this + } + setScalar(e) { + return this.x = e, this.y = e, this.z = e, this.w = e, this + } + setX(e) { + return this.x = e, this + } + setY(e) { + return this.y = e, this + } + setZ(e) { + return this.z = e, this + } + setW(e) { + return this.w = e, this + } + setComponent(e, t) { + switch (e) { + case 0: + this.x = t; + break; + case 1: + this.y = t; + break; + case 2: + this.z = t; + break; + case 3: + this.w = t; + break; + default: + throw new Error("index is out of range: " + e) + } + return this + } + getComponent(e) { + switch (e) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error("index is out of range: " + e) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z, this.w) + } + copy(e) { + return this.x = e.x, this.y = e.y, this.z = e.z, this.w = void 0 !== e.w ? e.w : 1, this + } + add(e) { + return this.x += e.x, this.y += e.y, this.z += e.z, this.w += e.w, this + } + addScalar(e) { + return this.x += e, this.y += e, this.z += e, this.w += e, this + } + addVectors(e, t) { + return this.x = e.x + t.x, this.y = e.y + t.y, this.z = e.z + t.z, this.w = e.w + t.w, this + } + addScaledVector(e, t) { + return this.x += e.x * t, this.y += e.y * t, this.z += e.z * t, this.w += e.w * t, this + } + sub(e) { + return this.x -= e.x, this.y -= e.y, this.z -= e.z, this.w -= e.w, this + } + subScalar(e) { + return this.x -= e, this.y -= e, this.z -= e, this.w -= e, this + } + subVectors(e, t) { + return this.x = e.x - t.x, this.y = e.y - t.y, this.z = e.z - t.z, this.w = e.w - t.w, this + } + multiply(e) { + return this.x *= e.x, this.y *= e.y, this.z *= e.z, this.w *= e.w, this + } + multiplyScalar(e) { + return this.x *= e, this.y *= e, this.z *= e, this.w *= e, this + } + applyMatrix4(e) { + const t = this.x, + n = this.y, + i = this.z, + r = this.w, + a = e.elements; + return this.x = a[0] * t + a[4] * n + a[8] * i + a[12] * r, this.y = a[1] * t + a[5] * n + a[9] * i + a[13] * r, this.z = a[2] * t + a[6] * n + a[10] * i + a[14] * r, this.w = a[3] * t + a[7] * n + a[11] * i + a[15] * r, this + } + divide(e) { + return this.x /= e.x, this.y /= e.y, this.z /= e.z, this.w /= e.w, this + } + divideScalar(e) { + return this.multiplyScalar(1 / e) + } + setAxisAngleFromQuaternion(e) { + this.w = 2 * Math.acos(e.w); + const t = Math.sqrt(1 - e.w * e.w); + return t < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = e.x / t, this.y = e.y / t, this.z = e.z / t), this + } + setAxisAngleFromRotationMatrix(e) { + let t, n, i, r; + const a = .01, + s = .1, + o = e.elements, + l = o[0], + c = o[4], + h = o[8], + u = o[1], + d = o[5], + f = o[9], + p = o[2], + m = o[6], + g = o[10]; + if (Math.abs(c - u) < a && Math.abs(h - p) < a && Math.abs(f - m) < a) { + if (Math.abs(c + u) < s && Math.abs(h + p) < s && Math.abs(f + m) < s && Math.abs(l + d + g - 3) < s) return this.set(1, 0, 0, 0), this; + t = Math.PI; + const e = (l + 1) / 2, + o = (d + 1) / 2, + A = (g + 1) / 2, + _ = (c + u) / 4, + v = (h + p) / 4, + w = (f + m) / 4; + return e > o && e > A ? e < a ? (n = 0, i = .707106781, r = .707106781) : (n = Math.sqrt(e), i = _ / n, r = v / n) : o > A ? o < a ? (n = .707106781, i = 0, r = .707106781) : (i = Math.sqrt(o), n = _ / i, r = w / i) : A < a ? (n = .707106781, i = .707106781, r = 0) : (r = Math.sqrt(A), n = v / r, i = w / r), this.set(n, i, r, t), this + } + let A = Math.sqrt((m - f) * (m - f) + (h - p) * (h - p) + (u - c) * (u - c)); + return Math.abs(A) < .001 && (A = 1), this.x = (m - f) / A, this.y = (h - p) / A, this.z = (u - c) / A, this.w = Math.acos((l + d + g - 1) / 2), this + } + setFromMatrixPosition(e) { + const t = e.elements; + return this.x = t[12], this.y = t[13], this.z = t[14], this.w = t[15], this + } + min(e) { + return this.x = Math.min(this.x, e.x), this.y = Math.min(this.y, e.y), this.z = Math.min(this.z, e.z), this.w = Math.min(this.w, e.w), this + } + max(e) { + return this.x = Math.max(this.x, e.x), this.y = Math.max(this.y, e.y), this.z = Math.max(this.z, e.z), this.w = Math.max(this.w, e.w), this + } + clamp(e, t) { + return this.x = _t(this.x, e.x, t.x), this.y = _t(this.y, e.y, t.y), this.z = _t(this.z, e.z, t.z), this.w = _t(this.w, e.w, t.w), this + } + clampScalar(e, t) { + return this.x = _t(this.x, e, t), this.y = _t(this.y, e, t), this.z = _t(this.z, e, t), this.w = _t(this.w, e, t), this + } + clampLength(e, t) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(_t(n, e, t)) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this + } + roundToZero() { + return this.x = Math.trunc(this.x), this.y = Math.trunc(this.y), this.z = Math.trunc(this.z), this.w = Math.trunc(this.w), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this + } + dot(e) { + return this.x * e.x + this.y * e.y + this.z * e.z + this.w * e.w + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(e) { + return this.normalize().multiplyScalar(e) + } + lerp(e, t) { + return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this.z += (e.z - this.z) * t, this.w += (e.w - this.w) * t, this + } + lerpVectors(e, t, n) { + return this.x = e.x + (t.x - e.x) * n, this.y = e.y + (t.y - e.y) * n, this.z = e.z + (t.z - e.z) * n, this.w = e.w + (t.w - e.w) * n, this + } + equals(e) { + return e.x === this.x && e.y === this.y && e.z === this.z && e.w === this.w + } + fromArray(e, t = 0) { + return this.x = e[t], this.y = e[t + 1], this.z = e[t + 2], this.w = e[t + 3], this + } + toArray(e = [], t = 0) { + return e[t] = this.x, e[t + 1] = this.y, e[t + 2] = this.z, e[t + 3] = this.w, e + } + fromBufferAttribute(e, t) { + return this.x = e.getX(t), this.y = e.getY(t), this.z = e.getZ(t), this.w = e.getW(t), this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this.w = Math.random(), this + }*[Symbol.iterator]() { + yield this.x, yield this.y, yield this.z, yield this.w + } + } + class Xt extends dt { + constructor(e = 1, t = 1, n = {}) { + super(), this.isRenderTarget = !0, this.width = e, this.height = t, this.depth = 1, this.scissor = new Qt(0, 0, e, t), this.scissorTest = !1, this.viewport = new Qt(0, 0, e, t); + const i = { + width: e, + height: t, + depth: 1 + }; + n = Object.assign({ + generateMipmaps: !1, + internalFormat: null, + minFilter: V, + depthBuffer: !0, + stencilBuffer: !1, + resolveDepthBuffer: !0, + resolveStencilBuffer: !0, + depthTexture: null, + samples: 0, + count: 1 + }, n); + const r = new Gt(i, n.mapping, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.colorSpace); + r.flipY = !1, r.generateMipmaps = n.generateMipmaps, r.internalFormat = n.internalFormat, this.textures = []; + const a = n.count; + for (let e = 0; e < a; e++) this.textures[e] = r.clone(), this.textures[e].isRenderTargetTexture = !0, this.textures[e].renderTarget = this; + this.depthBuffer = n.depthBuffer, this.stencilBuffer = n.stencilBuffer, this.resolveDepthBuffer = n.resolveDepthBuffer, this.resolveStencilBuffer = n.resolveStencilBuffer, this._depthTexture = null, this.depthTexture = n.depthTexture, this.samples = n.samples + } + get texture() { + return this.textures[0] + } + set texture(e) { + this.textures[0] = e + } + set depthTexture(e) { + null !== this._depthTexture && (this._depthTexture.renderTarget = null), null !== e && (e.renderTarget = this), this._depthTexture = e + } + get depthTexture() { + return this._depthTexture + } + setSize(e, t, n = 1) { + if (this.width !== e || this.height !== t || this.depth !== n) { + this.width = e, this.height = t, this.depth = n; + for (let i = 0, r = this.textures.length; i < r; i++) this.textures[i].image.width = e, this.textures[i].image.height = t, this.textures[i].image.depth = n; + this.dispose() + } + this.viewport.set(0, 0, e, t), this.scissor.set(0, 0, e, t) + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + this.width = e.width, this.height = e.height, this.depth = e.depth, this.scissor.copy(e.scissor), this.scissorTest = e.scissorTest, this.viewport.copy(e.viewport), this.textures.length = 0; + for (let t = 0, n = e.textures.length; t < n; t++) { + this.textures[t] = e.textures[t].clone(), this.textures[t].isRenderTargetTexture = !0, this.textures[t].renderTarget = this; + const n = Object.assign({}, e.textures[t].image); + this.textures[t].source = new Wt(n) + } + return this.depthBuffer = e.depthBuffer, this.stencilBuffer = e.stencilBuffer, this.resolveDepthBuffer = e.resolveDepthBuffer, this.resolveStencilBuffer = e.resolveStencilBuffer, null !== e.depthTexture && (this.depthTexture = e.depthTexture.clone()), this.samples = e.samples, this + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + } + class jt extends Xt { + constructor(e = 1, t = 1, n = {}) { + super(e, t, n), this.isWebGLRenderTarget = !0 + } + } + class qt extends Gt { + constructor(e = null, t = 1, n = 1, i = 1) { + super(null), this.isDataArrayTexture = !0, this.image = { + data: e, + width: t, + height: n, + depth: i + }, this.magFilter = z, this.minFilter = z, this.wrapR = F, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1, this.layerUpdates = new Set + } + addLayerUpdate(e) { + this.layerUpdates.add(e) + } + clearLayerUpdates() { + this.layerUpdates.clear() + } + } + class Yt extends Gt { + constructor(e = null, t = 1, n = 1, i = 1) { + super(null), this.isData3DTexture = !0, this.image = { + data: e, + width: t, + height: n, + depth: i + }, this.magFilter = z, this.minFilter = z, this.wrapR = F, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1 + } + } + class Kt { + constructor(e = 0, t = 0, n = 0, i = 1) { + this.isQuaternion = !0, this._x = e, this._y = t, this._z = n, this._w = i + } + static slerpFlat(e, t, n, i, r, a, s) { + let o = n[i + 0], + l = n[i + 1], + c = n[i + 2], + h = n[i + 3]; + const u = r[a + 0], + d = r[a + 1], + f = r[a + 2], + p = r[a + 3]; + if (0 === s) return e[t + 0] = o, e[t + 1] = l, e[t + 2] = c, void(e[t + 3] = h); + if (1 === s) return e[t + 0] = u, e[t + 1] = d, e[t + 2] = f, void(e[t + 3] = p); + if (h !== p || o !== u || l !== d || c !== f) { + let e = 1 - s; + const t = o * u + l * d + c * f + h * p, + n = t >= 0 ? 1 : -1, + i = 1 - t * t; + if (i > Number.EPSILON) { + const r = Math.sqrt(i), + a = Math.atan2(r, t * n); + e = Math.sin(e * a) / r, s = Math.sin(s * a) / r + } + const r = s * n; + if (o = o * e + u * r, l = l * e + d * r, c = c * e + f * r, h = h * e + p * r, e === 1 - s) { + const e = 1 / Math.sqrt(o * o + l * l + c * c + h * h); + o *= e, l *= e, c *= e, h *= e + } + } + e[t] = o, e[t + 1] = l, e[t + 2] = c, e[t + 3] = h + } + static multiplyQuaternionsFlat(e, t, n, i, r, a) { + const s = n[i], + o = n[i + 1], + l = n[i + 2], + c = n[i + 3], + h = r[a], + u = r[a + 1], + d = r[a + 2], + f = r[a + 3]; + return e[t] = s * f + c * h + o * d - l * u, e[t + 1] = o * f + c * u + l * h - s * d, e[t + 2] = l * f + c * d + s * u - o * h, e[t + 3] = c * f - s * h - o * u - l * d, e + } + get x() { + return this._x + } + set x(e) { + this._x = e, this._onChangeCallback() + } + get y() { + return this._y + } + set y(e) { + this._y = e, this._onChangeCallback() + } + get z() { + return this._z + } + set z(e) { + this._z = e, this._onChangeCallback() + } + get w() { + return this._w + } + set w(e) { + this._w = e, this._onChangeCallback() + } + set(e, t, n, i) { + return this._x = e, this._y = t, this._z = n, this._w = i, this._onChangeCallback(), this + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w) + } + copy(e) { + return this._x = e.x, this._y = e.y, this._z = e.z, this._w = e.w, this._onChangeCallback(), this + } + setFromEuler(e, t = !0) { + const n = e._x, + i = e._y, + r = e._z, + a = e._order, + s = Math.cos, + o = Math.sin, + l = s(n / 2), + c = s(i / 2), + h = s(r / 2), + u = o(n / 2), + d = o(i / 2), + f = o(r / 2); + switch (a) { + case "XYZ": + this._x = u * c * h + l * d * f, this._y = l * d * h - u * c * f, this._z = l * c * f + u * d * h, this._w = l * c * h - u * d * f; + break; + case "YXZ": + this._x = u * c * h + l * d * f, this._y = l * d * h - u * c * f, this._z = l * c * f - u * d * h, this._w = l * c * h + u * d * f; + break; + case "ZXY": + this._x = u * c * h - l * d * f, this._y = l * d * h + u * c * f, this._z = l * c * f + u * d * h, this._w = l * c * h - u * d * f; + break; + case "ZYX": + this._x = u * c * h - l * d * f, this._y = l * d * h + u * c * f, this._z = l * c * f - u * d * h, this._w = l * c * h + u * d * f; + break; + case "YZX": + this._x = u * c * h + l * d * f, this._y = l * d * h + u * c * f, this._z = l * c * f - u * d * h, this._w = l * c * h - u * d * f; + break; + case "XZY": + this._x = u * c * h - l * d * f, this._y = l * d * h - u * c * f, this._z = l * c * f + u * d * h, this._w = l * c * h + u * d * f; + break; + default: + console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + a) + } + return !0 === t && this._onChangeCallback(), this + } + setFromAxisAngle(e, t) { + const n = t / 2, + i = Math.sin(n); + return this._x = e.x * i, this._y = e.y * i, this._z = e.z * i, this._w = Math.cos(n), this._onChangeCallback(), this + } + setFromRotationMatrix(e) { + const t = e.elements, + n = t[0], + i = t[4], + r = t[8], + a = t[1], + s = t[5], + o = t[9], + l = t[2], + c = t[6], + h = t[10], + u = n + s + h; + if (u > 0) { + const e = .5 / Math.sqrt(u + 1); + this._w = .25 / e, this._x = (c - o) * e, this._y = (r - l) * e, this._z = (a - i) * e + } else if (n > s && n > h) { + const e = 2 * Math.sqrt(1 + n - s - h); + this._w = (c - o) / e, this._x = .25 * e, this._y = (i + a) / e, this._z = (r + l) / e + } else if (s > h) { + const e = 2 * Math.sqrt(1 + s - n - h); + this._w = (r - l) / e, this._x = (i + a) / e, this._y = .25 * e, this._z = (o + c) / e + } else { + const e = 2 * Math.sqrt(1 + h - n - s); + this._w = (a - i) / e, this._x = (r + l) / e, this._y = (o + c) / e, this._z = .25 * e + } + return this._onChangeCallback(), this + } + setFromUnitVectors(e, t) { + let n = e.dot(t) + 1; + return n < Number.EPSILON ? (n = 0, Math.abs(e.x) > Math.abs(e.z) ? (this._x = -e.y, this._y = e.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -e.z, this._z = e.y, this._w = n)) : (this._x = e.y * t.z - e.z * t.y, this._y = e.z * t.x - e.x * t.z, this._z = e.x * t.y - e.y * t.x, this._w = n), this.normalize() + } + angleTo(e) { + return 2 * Math.acos(Math.abs(_t(this.dot(e), -1, 1))) + } + rotateTowards(e, t) { + const n = this.angleTo(e); + if (0 === n) return this; + const i = Math.min(1, t / n); + return this.slerp(e, i), this + } + identity() { + return this.set(0, 0, 0, 1) + } + invert() { + return this.conjugate() + } + conjugate() { + return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this + } + dot(e) { + return this._x * e._x + this._y * e._y + this._z * e._z + this._w * e._w + } + lengthSq() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + } + length() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + } + normalize() { + let e = this.length(); + return 0 === e ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (e = 1 / e, this._x = this._x * e, this._y = this._y * e, this._z = this._z * e, this._w = this._w * e), this._onChangeCallback(), this + } + multiply(e) { + return this.multiplyQuaternions(this, e) + } + premultiply(e) { + return this.multiplyQuaternions(e, this) + } + multiplyQuaternions(e, t) { + const n = e._x, + i = e._y, + r = e._z, + a = e._w, + s = t._x, + o = t._y, + l = t._z, + c = t._w; + return this._x = n * c + a * s + i * l - r * o, this._y = i * c + a * o + r * s - n * l, this._z = r * c + a * l + n * o - i * s, this._w = a * c - n * s - i * o - r * l, this._onChangeCallback(), this + } + slerp(e, t) { + if (0 === t) return this; + if (1 === t) return this.copy(e); + const n = this._x, + i = this._y, + r = this._z, + a = this._w; + let s = a * e._w + n * e._x + i * e._y + r * e._z; + if (s < 0 ? (this._w = -e._w, this._x = -e._x, this._y = -e._y, this._z = -e._z, s = -s) : this.copy(e), s >= 1) return this._w = a, this._x = n, this._y = i, this._z = r, this; + const o = 1 - s * s; + if (o <= Number.EPSILON) { + const e = 1 - t; + return this._w = e * a + t * this._w, this._x = e * n + t * this._x, this._y = e * i + t * this._y, this._z = e * r + t * this._z, this.normalize(), this + } + const l = Math.sqrt(o), + c = Math.atan2(l, s), + h = Math.sin((1 - t) * c) / l, + u = Math.sin(t * c) / l; + return this._w = a * h + this._w * u, this._x = n * h + this._x * u, this._y = i * h + this._y * u, this._z = r * h + this._z * u, this._onChangeCallback(), this + } + slerpQuaternions(e, t, n) { + return this.copy(e).slerp(t, n) + } + random() { + const e = 2 * Math.PI * Math.random(), + t = 2 * Math.PI * Math.random(), + n = Math.random(), + i = Math.sqrt(1 - n), + r = Math.sqrt(n); + return this.set(i * Math.sin(e), i * Math.cos(e), r * Math.sin(t), r * Math.cos(t)) + } + equals(e) { + return e._x === this._x && e._y === this._y && e._z === this._z && e._w === this._w + } + fromArray(e, t = 0) { + return this._x = e[t], this._y = e[t + 1], this._z = e[t + 2], this._w = e[t + 3], this._onChangeCallback(), this + } + toArray(e = [], t = 0) { + return e[t] = this._x, e[t + 1] = this._y, e[t + 2] = this._z, e[t + 3] = this._w, e + } + fromBufferAttribute(e, t) { + return this._x = e.getX(t), this._y = e.getY(t), this._z = e.getZ(t), this._w = e.getW(t), this._onChangeCallback(), this + } + toJSON() { + return this.toArray() + } + _onChange(e) { + return this._onChangeCallback = e, this + } + _onChangeCallback() {}*[Symbol.iterator]() { + yield this._x, yield this._y, yield this._z, yield this._w + } + } + class Zt { + constructor(e = 0, t = 0, n = 0) { + Zt.prototype.isVector3 = !0, this.x = e, this.y = t, this.z = n + } + set(e, t, n) { + return void 0 === n && (n = this.z), this.x = e, this.y = t, this.z = n, this + } + setScalar(e) { + return this.x = e, this.y = e, this.z = e, this + } + setX(e) { + return this.x = e, this + } + setY(e) { + return this.y = e, this + } + setZ(e) { + return this.z = e, this + } + setComponent(e, t) { + switch (e) { + case 0: + this.x = t; + break; + case 1: + this.y = t; + break; + case 2: + this.z = t; + break; + default: + throw new Error("index is out of range: " + e) + } + return this + } + getComponent(e) { + switch (e) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + e) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z) + } + copy(e) { + return this.x = e.x, this.y = e.y, this.z = e.z, this + } + add(e) { + return this.x += e.x, this.y += e.y, this.z += e.z, this + } + addScalar(e) { + return this.x += e, this.y += e, this.z += e, this + } + addVectors(e, t) { + return this.x = e.x + t.x, this.y = e.y + t.y, this.z = e.z + t.z, this + } + addScaledVector(e, t) { + return this.x += e.x * t, this.y += e.y * t, this.z += e.z * t, this + } + sub(e) { + return this.x -= e.x, this.y -= e.y, this.z -= e.z, this + } + subScalar(e) { + return this.x -= e, this.y -= e, this.z -= e, this + } + subVectors(e, t) { + return this.x = e.x - t.x, this.y = e.y - t.y, this.z = e.z - t.z, this + } + multiply(e) { + return this.x *= e.x, this.y *= e.y, this.z *= e.z, this + } + multiplyScalar(e) { + return this.x *= e, this.y *= e, this.z *= e, this + } + multiplyVectors(e, t) { + return this.x = e.x * t.x, this.y = e.y * t.y, this.z = e.z * t.z, this + } + applyEuler(e) { + return this.applyQuaternion($t.setFromEuler(e)) + } + applyAxisAngle(e, t) { + return this.applyQuaternion($t.setFromAxisAngle(e, t)) + } + applyMatrix3(e) { + const t = this.x, + n = this.y, + i = this.z, + r = e.elements; + return this.x = r[0] * t + r[3] * n + r[6] * i, this.y = r[1] * t + r[4] * n + r[7] * i, this.z = r[2] * t + r[5] * n + r[8] * i, this + } + applyNormalMatrix(e) { + return this.applyMatrix3(e).normalize() + } + applyMatrix4(e) { + const t = this.x, + n = this.y, + i = this.z, + r = e.elements, + a = 1 / (r[3] * t + r[7] * n + r[11] * i + r[15]); + return this.x = (r[0] * t + r[4] * n + r[8] * i + r[12]) * a, this.y = (r[1] * t + r[5] * n + r[9] * i + r[13]) * a, this.z = (r[2] * t + r[6] * n + r[10] * i + r[14]) * a, this + } + applyQuaternion(e) { + const t = this.x, + n = this.y, + i = this.z, + r = e.x, + a = e.y, + s = e.z, + o = e.w, + l = 2 * (a * i - s * n), + c = 2 * (s * t - r * i), + h = 2 * (r * n - a * t); + return this.x = t + o * l + a * h - s * c, this.y = n + o * c + s * l - r * h, this.z = i + o * h + r * c - a * l, this + } + project(e) { + return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix) + } + unproject(e) { + return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld) + } + transformDirection(e) { + const t = this.x, + n = this.y, + i = this.z, + r = e.elements; + return this.x = r[0] * t + r[4] * n + r[8] * i, this.y = r[1] * t + r[5] * n + r[9] * i, this.z = r[2] * t + r[6] * n + r[10] * i, this.normalize() + } + divide(e) { + return this.x /= e.x, this.y /= e.y, this.z /= e.z, this + } + divideScalar(e) { + return this.multiplyScalar(1 / e) + } + min(e) { + return this.x = Math.min(this.x, e.x), this.y = Math.min(this.y, e.y), this.z = Math.min(this.z, e.z), this + } + max(e) { + return this.x = Math.max(this.x, e.x), this.y = Math.max(this.y, e.y), this.z = Math.max(this.z, e.z), this + } + clamp(e, t) { + return this.x = _t(this.x, e.x, t.x), this.y = _t(this.y, e.y, t.y), this.z = _t(this.z, e.z, t.z), this + } + clampScalar(e, t) { + return this.x = _t(this.x, e, t), this.y = _t(this.y, e, t), this.z = _t(this.z, e, t), this + } + clampLength(e, t) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(_t(n, e, t)) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this + } + roundToZero() { + return this.x = Math.trunc(this.x), this.y = Math.trunc(this.y), this.z = Math.trunc(this.z), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this + } + dot(e) { + return this.x * e.x + this.y * e.y + this.z * e.z + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(e) { + return this.normalize().multiplyScalar(e) + } + lerp(e, t) { + return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this.z += (e.z - this.z) * t, this + } + lerpVectors(e, t, n) { + return this.x = e.x + (t.x - e.x) * n, this.y = e.y + (t.y - e.y) * n, this.z = e.z + (t.z - e.z) * n, this + } + cross(e) { + return this.crossVectors(this, e) + } + crossVectors(e, t) { + const n = e.x, + i = e.y, + r = e.z, + a = t.x, + s = t.y, + o = t.z; + return this.x = i * o - r * s, this.y = r * a - n * o, this.z = n * s - i * a, this + } + projectOnVector(e) { + const t = e.lengthSq(); + if (0 === t) return this.set(0, 0, 0); + const n = e.dot(this) / t; + return this.copy(e).multiplyScalar(n) + } + projectOnPlane(e) { + return Jt.copy(this).projectOnVector(e), this.sub(Jt) + } + reflect(e) { + return this.sub(Jt.copy(e).multiplyScalar(2 * this.dot(e))) + } + angleTo(e) { + const t = Math.sqrt(this.lengthSq() * e.lengthSq()); + if (0 === t) return Math.PI / 2; + const n = this.dot(e) / t; + return Math.acos(_t(n, -1, 1)) + } + distanceTo(e) { + return Math.sqrt(this.distanceToSquared(e)) + } + distanceToSquared(e) { + const t = this.x - e.x, + n = this.y - e.y, + i = this.z - e.z; + return t * t + n * n + i * i + } + manhattanDistanceTo(e) { + return Math.abs(this.x - e.x) + Math.abs(this.y - e.y) + Math.abs(this.z - e.z) + } + setFromSpherical(e) { + return this.setFromSphericalCoords(e.radius, e.phi, e.theta) + } + setFromSphericalCoords(e, t, n) { + const i = Math.sin(t) * e; + return this.x = i * Math.sin(n), this.y = Math.cos(t) * e, this.z = i * Math.cos(n), this + } + setFromCylindrical(e) { + return this.setFromCylindricalCoords(e.radius, e.theta, e.y) + } + setFromCylindricalCoords(e, t, n) { + return this.x = e * Math.sin(t), this.y = n, this.z = e * Math.cos(t), this + } + setFromMatrixPosition(e) { + const t = e.elements; + return this.x = t[12], this.y = t[13], this.z = t[14], this + } + setFromMatrixScale(e) { + const t = this.setFromMatrixColumn(e, 0).length(), + n = this.setFromMatrixColumn(e, 1).length(), + i = this.setFromMatrixColumn(e, 2).length(); + return this.x = t, this.y = n, this.z = i, this + } + setFromMatrixColumn(e, t) { + return this.fromArray(e.elements, 4 * t) + } + setFromMatrix3Column(e, t) { + return this.fromArray(e.elements, 3 * t) + } + setFromEuler(e) { + return this.x = e._x, this.y = e._y, this.z = e._z, this + } + setFromColor(e) { + return this.x = e.r, this.y = e.g, this.z = e.b, this + } + equals(e) { + return e.x === this.x && e.y === this.y && e.z === this.z + } + fromArray(e, t = 0) { + return this.x = e[t], this.y = e[t + 1], this.z = e[t + 2], this + } + toArray(e = [], t = 0) { + return e[t] = this.x, e[t + 1] = this.y, e[t + 2] = this.z, e + } + fromBufferAttribute(e, t) { + return this.x = e.getX(t), this.y = e.getY(t), this.z = e.getZ(t), this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this + } + randomDirection() { + const e = Math.random() * Math.PI * 2, + t = 2 * Math.random() - 1, + n = Math.sqrt(1 - t * t); + return this.x = n * Math.cos(e), this.y = t, this.z = n * Math.sin(e), this + }*[Symbol.iterator]() { + yield this.x, yield this.y, yield this.z + } + } + const Jt = new Zt, + $t = new Kt; + class en { + constructor(e = new Zt(1 / 0, 1 / 0, 1 / 0), t = new Zt(-1 / 0, -1 / 0, -1 / 0)) { + this.isBox3 = !0, this.min = e, this.max = t + } + set(e, t) { + return this.min.copy(e), this.max.copy(t), this + } + setFromArray(e) { + this.makeEmpty(); + for (let t = 0, n = e.length; t < n; t += 3) this.expandByPoint(nn.fromArray(e, t)); + return this + } + setFromBufferAttribute(e) { + this.makeEmpty(); + for (let t = 0, n = e.count; t < n; t++) this.expandByPoint(nn.fromBufferAttribute(e, t)); + return this + } + setFromPoints(e) { + this.makeEmpty(); + for (let t = 0, n = e.length; t < n; t++) this.expandByPoint(e[t]); + return this + } + setFromCenterAndSize(e, t) { + const n = nn.copy(t).multiplyScalar(.5); + return this.min.copy(e).sub(n), this.max.copy(e).add(n), this + } + setFromObject(e, t = !1) { + return this.makeEmpty(), this.expandByObject(e, t) + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + return this.min.copy(e.min), this.max.copy(e.max), this + } + makeEmpty() { + return this.min.x = this.min.y = this.min.z = 1 / 0, this.max.x = this.max.y = this.max.z = -1 / 0, this + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z + } + getCenter(e) { + return this.isEmpty() ? e.set(0, 0, 0) : e.addVectors(this.min, this.max).multiplyScalar(.5) + } + getSize(e) { + return this.isEmpty() ? e.set(0, 0, 0) : e.subVectors(this.max, this.min) + } + expandByPoint(e) { + return this.min.min(e), this.max.max(e), this + } + expandByVector(e) { + return this.min.sub(e), this.max.add(e), this + } + expandByScalar(e) { + return this.min.addScalar(-e), this.max.addScalar(e), this + } + expandByObject(e, t = !1) { + e.updateWorldMatrix(!1, !1); + const n = e.geometry; + if (void 0 !== n) { + const i = n.getAttribute("position"); + if (!0 === t && void 0 !== i && !0 !== e.isInstancedMesh) + for (let t = 0, n = i.count; t < n; t++) !0 === e.isMesh ? e.getVertexPosition(t, nn) : nn.fromBufferAttribute(i, t), nn.applyMatrix4(e.matrixWorld), this.expandByPoint(nn); + else void 0 !== e.boundingBox ? (null === e.boundingBox && e.computeBoundingBox(), rn.copy(e.boundingBox)) : (null === n.boundingBox && n.computeBoundingBox(), rn.copy(n.boundingBox)), rn.applyMatrix4(e.matrixWorld), this.union(rn) + } + const i = e.children; + for (let e = 0, n = i.length; e < n; e++) this.expandByObject(i[e], t); + return this + } + containsPoint(e) { + return e.x >= this.min.x && e.x <= this.max.x && e.y >= this.min.y && e.y <= this.max.y && e.z >= this.min.z && e.z <= this.max.z + } + containsBox(e) { + return this.min.x <= e.min.x && e.max.x <= this.max.x && this.min.y <= e.min.y && e.max.y <= this.max.y && this.min.z <= e.min.z && e.max.z <= this.max.z + } + getParameter(e, t) { + return t.set((e.x - this.min.x) / (this.max.x - this.min.x), (e.y - this.min.y) / (this.max.y - this.min.y), (e.z - this.min.z) / (this.max.z - this.min.z)) + } + intersectsBox(e) { + return e.max.x >= this.min.x && e.min.x <= this.max.x && e.max.y >= this.min.y && e.min.y <= this.max.y && e.max.z >= this.min.z && e.min.z <= this.max.z + } + intersectsSphere(e) { + return this.clampPoint(e.center, nn), nn.distanceToSquared(e.center) <= e.radius * e.radius + } + intersectsPlane(e) { + let t, n; + return e.normal.x > 0 ? (t = e.normal.x * this.min.x, n = e.normal.x * this.max.x) : (t = e.normal.x * this.max.x, n = e.normal.x * this.min.x), e.normal.y > 0 ? (t += e.normal.y * this.min.y, n += e.normal.y * this.max.y) : (t += e.normal.y * this.max.y, n += e.normal.y * this.min.y), e.normal.z > 0 ? (t += e.normal.z * this.min.z, n += e.normal.z * this.max.z) : (t += e.normal.z * this.max.z, n += e.normal.z * this.min.z), t <= -e.constant && n >= -e.constant + } + intersectsTriangle(e) { + if (this.isEmpty()) return !1; + this.getCenter(un), dn.subVectors(this.max, un), an.subVectors(e.a, un), sn.subVectors(e.b, un), on.subVectors(e.c, un), ln.subVectors(sn, an), cn.subVectors(on, sn), hn.subVectors(an, on); + let t = [0, -ln.z, ln.y, 0, -cn.z, cn.y, 0, -hn.z, hn.y, ln.z, 0, -ln.x, cn.z, 0, -cn.x, hn.z, 0, -hn.x, -ln.y, ln.x, 0, -cn.y, cn.x, 0, -hn.y, hn.x, 0]; + return !!mn(t, an, sn, on, dn) && (t = [1, 0, 0, 0, 1, 0, 0, 0, 1], !!mn(t, an, sn, on, dn) && (fn.crossVectors(ln, cn), t = [fn.x, fn.y, fn.z], mn(t, an, sn, on, dn))) + } + clampPoint(e, t) { + return t.copy(e).clamp(this.min, this.max) + } + distanceToPoint(e) { + return this.clampPoint(e, nn).distanceTo(e) + } + getBoundingSphere(e) { + return this.isEmpty() ? e.makeEmpty() : (this.getCenter(e.center), e.radius = .5 * this.getSize(nn).length()), e + } + intersect(e) { + return this.min.max(e.min), this.max.min(e.max), this.isEmpty() && this.makeEmpty(), this + } + union(e) { + return this.min.min(e.min), this.max.max(e.max), this + } + applyMatrix4(e) { + return this.isEmpty() || (tn[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(e), tn[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(e), tn[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(e), tn[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(e), tn[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(e), tn[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(e), tn[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(e), tn[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(e), this.setFromPoints(tn)), this + } + translate(e) { + return this.min.add(e), this.max.add(e), this + } + equals(e) { + return e.min.equals(this.min) && e.max.equals(this.max) + } + } + const tn = [new Zt, new Zt, new Zt, new Zt, new Zt, new Zt, new Zt, new Zt], + nn = new Zt, + rn = new en, + an = new Zt, + sn = new Zt, + on = new Zt, + ln = new Zt, + cn = new Zt, + hn = new Zt, + un = new Zt, + dn = new Zt, + fn = new Zt, + pn = new Zt; + + function mn(e, t, n, i, r) { + for (let a = 0, s = e.length - 3; a <= s; a += 3) { + pn.fromArray(e, a); + const s = r.x * Math.abs(pn.x) + r.y * Math.abs(pn.y) + r.z * Math.abs(pn.z), + o = t.dot(pn), + l = n.dot(pn), + c = i.dot(pn); + if (Math.max(-Math.max(o, l, c), Math.min(o, l, c)) > s) return !1 + } + return !0 + } + const gn = new en, + An = new Zt, + _n = new Zt; + class vn { + constructor(e = new Zt, t = -1) { + this.isSphere = !0, this.center = e, this.radius = t + } + set(e, t) { + return this.center.copy(e), this.radius = t, this + } + setFromPoints(e, t) { + const n = this.center; + void 0 !== t ? n.copy(t) : gn.setFromPoints(e).getCenter(n); + let i = 0; + for (let t = 0, r = e.length; t < r; t++) i = Math.max(i, n.distanceToSquared(e[t])); + return this.radius = Math.sqrt(i), this + } + copy(e) { + return this.center.copy(e.center), this.radius = e.radius, this + } + isEmpty() { + return this.radius < 0 + } + makeEmpty() { + return this.center.set(0, 0, 0), this.radius = -1, this + } + containsPoint(e) { + return e.distanceToSquared(this.center) <= this.radius * this.radius + } + distanceToPoint(e) { + return e.distanceTo(this.center) - this.radius + } + intersectsSphere(e) { + const t = this.radius + e.radius; + return e.center.distanceToSquared(this.center) <= t * t + } + intersectsBox(e) { + return e.intersectsSphere(this) + } + intersectsPlane(e) { + return Math.abs(e.distanceToPoint(this.center)) <= this.radius + } + clampPoint(e, t) { + const n = this.center.distanceToSquared(e); + return t.copy(e), n > this.radius * this.radius && (t.sub(this.center).normalize(), t.multiplyScalar(this.radius).add(this.center)), t + } + getBoundingBox(e) { + return this.isEmpty() ? (e.makeEmpty(), e) : (e.set(this.center, this.center), e.expandByScalar(this.radius), e) + } + applyMatrix4(e) { + return this.center.applyMatrix4(e), this.radius = this.radius * e.getMaxScaleOnAxis(), this + } + translate(e) { + return this.center.add(e), this + } + expandByPoint(e) { + if (this.isEmpty()) return this.center.copy(e), this.radius = 0, this; + An.subVectors(e, this.center); + const t = An.lengthSq(); + if (t > this.radius * this.radius) { + const e = Math.sqrt(t), + n = .5 * (e - this.radius); + this.center.addScaledVector(An, n / e), this.radius += n + } + return this + } + union(e) { + return e.isEmpty() ? this : this.isEmpty() ? (this.copy(e), this) : (!0 === this.center.equals(e.center) ? this.radius = Math.max(this.radius, e.radius) : (_n.subVectors(e.center, this.center).setLength(e.radius), this.expandByPoint(An.copy(e.center).add(_n)), this.expandByPoint(An.copy(e.center).sub(_n))), this) + } + equals(e) { + return e.center.equals(this.center) && e.radius === this.radius + } + clone() { + return (new this.constructor).copy(this) + } + } + const wn = new Zt, + yn = new Zt, + xn = new Zt, + bn = new Zt, + En = new Zt, + Sn = new Zt, + Mn = new Zt; + class Tn { + constructor(e = new Zt, t = new Zt(0, 0, -1)) { + this.origin = e, this.direction = t + } + set(e, t) { + return this.origin.copy(e), this.direction.copy(t), this + } + copy(e) { + return this.origin.copy(e.origin), this.direction.copy(e.direction), this + } + at(e, t) { + return t.copy(this.origin).addScaledVector(this.direction, e) + } + lookAt(e) { + return this.direction.copy(e).sub(this.origin).normalize(), this + } + recast(e) { + return this.origin.copy(this.at(e, wn)), this + } + closestPointToPoint(e, t) { + t.subVectors(e, this.origin); + const n = t.dot(this.direction); + return n < 0 ? t.copy(this.origin) : t.copy(this.origin).addScaledVector(this.direction, n) + } + distanceToPoint(e) { + return Math.sqrt(this.distanceSqToPoint(e)) + } + distanceSqToPoint(e) { + const t = wn.subVectors(e, this.origin).dot(this.direction); + return t < 0 ? this.origin.distanceToSquared(e) : (wn.copy(this.origin).addScaledVector(this.direction, t), wn.distanceToSquared(e)) + } + distanceSqToSegment(e, t, n, i) { + yn.copy(e).add(t).multiplyScalar(.5), xn.copy(t).sub(e).normalize(), bn.copy(this.origin).sub(yn); + const r = .5 * e.distanceTo(t), + a = -this.direction.dot(xn), + s = bn.dot(this.direction), + o = -bn.dot(xn), + l = bn.lengthSq(), + c = Math.abs(1 - a * a); + let h, u, d, f; + if (c > 0) + if (h = a * o - s, u = a * s - o, f = r * c, h >= 0) + if (u >= -f) + if (u <= f) { + const e = 1 / c; + h *= e, u *= e, d = h * (h + a * u + 2 * s) + u * (a * h + u + 2 * o) + l + } else u = r, h = Math.max(0, -(a * u + s)), d = -h * h + u * (u + 2 * o) + l; + else u = -r, h = Math.max(0, -(a * u + s)), d = -h * h + u * (u + 2 * o) + l; + else u <= -f ? (h = Math.max(0, -(-a * r + s)), u = h > 0 ? -r : Math.min(Math.max(-r, -o), r), d = -h * h + u * (u + 2 * o) + l) : u <= f ? (h = 0, u = Math.min(Math.max(-r, -o), r), d = u * (u + 2 * o) + l) : (h = Math.max(0, -(a * r + s)), u = h > 0 ? r : Math.min(Math.max(-r, -o), r), d = -h * h + u * (u + 2 * o) + l); + else u = a > 0 ? -r : r, h = Math.max(0, -(a * u + s)), d = -h * h + u * (u + 2 * o) + l; + return n && n.copy(this.origin).addScaledVector(this.direction, h), i && i.copy(yn).addScaledVector(xn, u), d + } + intersectSphere(e, t) { + wn.subVectors(e.center, this.origin); + const n = wn.dot(this.direction), + i = wn.dot(wn) - n * n, + r = e.radius * e.radius; + if (i > r) return null; + const a = Math.sqrt(r - i), + s = n - a, + o = n + a; + return o < 0 ? null : s < 0 ? this.at(o, t) : this.at(s, t) + } + intersectsSphere(e) { + return this.distanceSqToPoint(e.center) <= e.radius * e.radius + } + distanceToPlane(e) { + const t = e.normal.dot(this.direction); + if (0 === t) return 0 === e.distanceToPoint(this.origin) ? 0 : null; + const n = -(this.origin.dot(e.normal) + e.constant) / t; + return n >= 0 ? n : null + } + intersectPlane(e, t) { + const n = this.distanceToPlane(e); + return null === n ? null : this.at(n, t) + } + intersectsPlane(e) { + const t = e.distanceToPoint(this.origin); + if (0 === t) return !0; + return e.normal.dot(this.direction) * t < 0 + } + intersectBox(e, t) { + let n, i, r, a, s, o; + const l = 1 / this.direction.x, + c = 1 / this.direction.y, + h = 1 / this.direction.z, + u = this.origin; + return l >= 0 ? (n = (e.min.x - u.x) * l, i = (e.max.x - u.x) * l) : (n = (e.max.x - u.x) * l, i = (e.min.x - u.x) * l), c >= 0 ? (r = (e.min.y - u.y) * c, a = (e.max.y - u.y) * c) : (r = (e.max.y - u.y) * c, a = (e.min.y - u.y) * c), n > a || r > i ? null : ((r > n || isNaN(n)) && (n = r), (a < i || isNaN(i)) && (i = a), h >= 0 ? (s = (e.min.z - u.z) * h, o = (e.max.z - u.z) * h) : (s = (e.max.z - u.z) * h, o = (e.min.z - u.z) * h), n > o || s > i ? null : ((s > n || n != n) && (n = s), (o < i || i != i) && (i = o), i < 0 ? null : this.at(n >= 0 ? n : i, t))) + } + intersectsBox(e) { + return null !== this.intersectBox(e, wn) + } + intersectTriangle(e, t, n, i, r) { + En.subVectors(t, e), Sn.subVectors(n, e), Mn.crossVectors(En, Sn); + let a, s = this.direction.dot(Mn); + if (s > 0) { + if (i) return null; + a = 1 + } else { + if (!(s < 0)) return null; + a = -1, s = -s + } + bn.subVectors(this.origin, e); + const o = a * this.direction.dot(Sn.crossVectors(bn, Sn)); + if (o < 0) return null; + const l = a * this.direction.dot(En.cross(bn)); + if (l < 0) return null; + if (o + l > s) return null; + const c = -a * bn.dot(Mn); + return c < 0 ? null : this.at(c / s, r) + } + applyMatrix4(e) { + return this.origin.applyMatrix4(e), this.direction.transformDirection(e), this + } + equals(e) { + return e.origin.equals(this.origin) && e.direction.equals(this.direction) + } + clone() { + return (new this.constructor).copy(this) + } + } + class Cn { + constructor(e, t, n, i, r, a, s, o, l, c, h, u, d, f, p, m) { + Cn.prototype.isMatrix4 = !0, this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], void 0 !== e && this.set(e, t, n, i, r, a, s, o, l, c, h, u, d, f, p, m) + } + set(e, t, n, i, r, a, s, o, l, c, h, u, d, f, p, m) { + const g = this.elements; + return g[0] = e, g[4] = t, g[8] = n, g[12] = i, g[1] = r, g[5] = a, g[9] = s, g[13] = o, g[2] = l, g[6] = c, g[10] = h, g[14] = u, g[3] = d, g[7] = f, g[11] = p, g[15] = m, this + } + identity() { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + clone() { + return (new Cn).fromArray(this.elements) + } + copy(e) { + const t = this.elements, + n = e.elements; + return t[0] = n[0], t[1] = n[1], t[2] = n[2], t[3] = n[3], t[4] = n[4], t[5] = n[5], t[6] = n[6], t[7] = n[7], t[8] = n[8], t[9] = n[9], t[10] = n[10], t[11] = n[11], t[12] = n[12], t[13] = n[13], t[14] = n[14], t[15] = n[15], this + } + copyPosition(e) { + const t = this.elements, + n = e.elements; + return t[12] = n[12], t[13] = n[13], t[14] = n[14], this + } + setFromMatrix3(e) { + const t = e.elements; + return this.set(t[0], t[3], t[6], 0, t[1], t[4], t[7], 0, t[2], t[5], t[8], 0, 0, 0, 0, 1), this + } + extractBasis(e, t, n) { + return e.setFromMatrixColumn(this, 0), t.setFromMatrixColumn(this, 1), n.setFromMatrixColumn(this, 2), this + } + makeBasis(e, t, n) { + return this.set(e.x, t.x, n.x, 0, e.y, t.y, n.y, 0, e.z, t.z, n.z, 0, 0, 0, 0, 1), this + } + extractRotation(e) { + const t = this.elements, + n = e.elements, + i = 1 / In.setFromMatrixColumn(e, 0).length(), + r = 1 / In.setFromMatrixColumn(e, 1).length(), + a = 1 / In.setFromMatrixColumn(e, 2).length(); + return t[0] = n[0] * i, t[1] = n[1] * i, t[2] = n[2] * i, t[3] = 0, t[4] = n[4] * r, t[5] = n[5] * r, t[6] = n[6] * r, t[7] = 0, t[8] = n[8] * a, t[9] = n[9] * a, t[10] = n[10] * a, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, this + } + makeRotationFromEuler(e) { + const t = this.elements, + n = e.x, + i = e.y, + r = e.z, + a = Math.cos(n), + s = Math.sin(n), + o = Math.cos(i), + l = Math.sin(i), + c = Math.cos(r), + h = Math.sin(r); + if ("XYZ" === e.order) { + const e = a * c, + n = a * h, + i = s * c, + r = s * h; + t[0] = o * c, t[4] = -o * h, t[8] = l, t[1] = n + i * l, t[5] = e - r * l, t[9] = -s * o, t[2] = r - e * l, t[6] = i + n * l, t[10] = a * o + } else if ("YXZ" === e.order) { + const e = o * c, + n = o * h, + i = l * c, + r = l * h; + t[0] = e + r * s, t[4] = i * s - n, t[8] = a * l, t[1] = a * h, t[5] = a * c, t[9] = -s, t[2] = n * s - i, t[6] = r + e * s, t[10] = a * o + } else if ("ZXY" === e.order) { + const e = o * c, + n = o * h, + i = l * c, + r = l * h; + t[0] = e - r * s, t[4] = -a * h, t[8] = i + n * s, t[1] = n + i * s, t[5] = a * c, t[9] = r - e * s, t[2] = -a * l, t[6] = s, t[10] = a * o + } else if ("ZYX" === e.order) { + const e = a * c, + n = a * h, + i = s * c, + r = s * h; + t[0] = o * c, t[4] = i * l - n, t[8] = e * l + r, t[1] = o * h, t[5] = r * l + e, t[9] = n * l - i, t[2] = -l, t[6] = s * o, t[10] = a * o + } else if ("YZX" === e.order) { + const e = a * o, + n = a * l, + i = s * o, + r = s * l; + t[0] = o * c, t[4] = r - e * h, t[8] = i * h + n, t[1] = h, t[5] = a * c, t[9] = -s * c, t[2] = -l * c, t[6] = n * h + i, t[10] = e - r * h + } else if ("XZY" === e.order) { + const e = a * o, + n = a * l, + i = s * o, + r = s * l; + t[0] = o * c, t[4] = -h, t[8] = l * c, t[1] = e * h + r, t[5] = a * c, t[9] = n * h - i, t[2] = i * h - n, t[6] = s * c, t[10] = r * h + e + } + return t[3] = 0, t[7] = 0, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, this + } + makeRotationFromQuaternion(e) { + return this.compose(Pn, e, Bn) + } + lookAt(e, t, n) { + const i = this.elements; + return Un.subVectors(e, t), 0 === Un.lengthSq() && (Un.z = 1), Un.normalize(), Dn.crossVectors(n, Un), 0 === Dn.lengthSq() && (1 === Math.abs(n.z) ? Un.x += 1e-4 : Un.z += 1e-4, Un.normalize(), Dn.crossVectors(n, Un)), Dn.normalize(), Ln.crossVectors(Un, Dn), i[0] = Dn.x, i[4] = Ln.x, i[8] = Un.x, i[1] = Dn.y, i[5] = Ln.y, i[9] = Un.y, i[2] = Dn.z, i[6] = Ln.z, i[10] = Un.z, this + } + multiply(e) { + return this.multiplyMatrices(this, e) + } + premultiply(e) { + return this.multiplyMatrices(e, this) + } + multiplyMatrices(e, t) { + const n = e.elements, + i = t.elements, + r = this.elements, + a = n[0], + s = n[4], + o = n[8], + l = n[12], + c = n[1], + h = n[5], + u = n[9], + d = n[13], + f = n[2], + p = n[6], + m = n[10], + g = n[14], + A = n[3], + _ = n[7], + v = n[11], + w = n[15], + y = i[0], + x = i[4], + b = i[8], + E = i[12], + S = i[1], + M = i[5], + T = i[9], + C = i[13], + I = i[2], + R = i[6], + P = i[10], + B = i[14], + D = i[3], + L = i[7], + U = i[11], + k = i[15]; + return r[0] = a * y + s * S + o * I + l * D, r[4] = a * x + s * M + o * R + l * L, r[8] = a * b + s * T + o * P + l * U, r[12] = a * E + s * C + o * B + l * k, r[1] = c * y + h * S + u * I + d * D, r[5] = c * x + h * M + u * R + d * L, r[9] = c * b + h * T + u * P + d * U, r[13] = c * E + h * C + u * B + d * k, r[2] = f * y + p * S + m * I + g * D, r[6] = f * x + p * M + m * R + g * L, r[10] = f * b + p * T + m * P + g * U, r[14] = f * E + p * C + m * B + g * k, r[3] = A * y + _ * S + v * I + w * D, r[7] = A * x + _ * M + v * R + w * L, r[11] = A * b + _ * T + v * P + w * U, r[15] = A * E + _ * C + v * B + w * k, this + } + multiplyScalar(e) { + const t = this.elements; + return t[0] *= e, t[4] *= e, t[8] *= e, t[12] *= e, t[1] *= e, t[5] *= e, t[9] *= e, t[13] *= e, t[2] *= e, t[6] *= e, t[10] *= e, t[14] *= e, t[3] *= e, t[7] *= e, t[11] *= e, t[15] *= e, this + } + determinant() { + const e = this.elements, + t = e[0], + n = e[4], + i = e[8], + r = e[12], + a = e[1], + s = e[5], + o = e[9], + l = e[13], + c = e[2], + h = e[6], + u = e[10], + d = e[14]; + return e[3] * (+r * o * h - i * l * h - r * s * u + n * l * u + i * s * d - n * o * d) + e[7] * (+t * o * d - t * l * u + r * a * u - i * a * d + i * l * c - r * o * c) + e[11] * (+t * l * h - t * s * d - r * a * h + n * a * d + r * s * c - n * l * c) + e[15] * (-i * s * c - t * o * h + t * s * u + i * a * h - n * a * u + n * o * c) + } + transpose() { + const e = this.elements; + let t; + return t = e[1], e[1] = e[4], e[4] = t, t = e[2], e[2] = e[8], e[8] = t, t = e[6], e[6] = e[9], e[9] = t, t = e[3], e[3] = e[12], e[12] = t, t = e[7], e[7] = e[13], e[13] = t, t = e[11], e[11] = e[14], e[14] = t, this + } + setPosition(e, t, n) { + const i = this.elements; + return e.isVector3 ? (i[12] = e.x, i[13] = e.y, i[14] = e.z) : (i[12] = e, i[13] = t, i[14] = n), this + } + invert() { + const e = this.elements, + t = e[0], + n = e[1], + i = e[2], + r = e[3], + a = e[4], + s = e[5], + o = e[6], + l = e[7], + c = e[8], + h = e[9], + u = e[10], + d = e[11], + f = e[12], + p = e[13], + m = e[14], + g = e[15], + A = h * m * l - p * u * l + p * o * d - s * m * d - h * o * g + s * u * g, + _ = f * u * l - c * m * l - f * o * d + a * m * d + c * o * g - a * u * g, + v = c * p * l - f * h * l + f * s * d - a * p * d - c * s * g + a * h * g, + w = f * h * o - c * p * o - f * s * u + a * p * u + c * s * m - a * h * m, + y = t * A + n * _ + i * v + r * w; + if (0 === y) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const x = 1 / y; + return e[0] = A * x, e[1] = (p * u * r - h * m * r - p * i * d + n * m * d + h * i * g - n * u * g) * x, e[2] = (s * m * r - p * o * r + p * i * l - n * m * l - s * i * g + n * o * g) * x, e[3] = (h * o * r - s * u * r - h * i * l + n * u * l + s * i * d - n * o * d) * x, e[4] = _ * x, e[5] = (c * m * r - f * u * r + f * i * d - t * m * d - c * i * g + t * u * g) * x, e[6] = (f * o * r - a * m * r - f * i * l + t * m * l + a * i * g - t * o * g) * x, e[7] = (a * u * r - c * o * r + c * i * l - t * u * l - a * i * d + t * o * d) * x, e[8] = v * x, e[9] = (f * h * r - c * p * r - f * n * d + t * p * d + c * n * g - t * h * g) * x, e[10] = (a * p * r - f * s * r + f * n * l - t * p * l - a * n * g + t * s * g) * x, e[11] = (c * s * r - a * h * r - c * n * l + t * h * l + a * n * d - t * s * d) * x, e[12] = w * x, e[13] = (c * p * i - f * h * i + f * n * u - t * p * u - c * n * m + t * h * m) * x, e[14] = (f * s * i - a * p * i - f * n * o + t * p * o + a * n * m - t * s * m) * x, e[15] = (a * h * i - c * s * i + c * n * o - t * h * o - a * n * u + t * s * u) * x, this + } + scale(e) { + const t = this.elements, + n = e.x, + i = e.y, + r = e.z; + return t[0] *= n, t[4] *= i, t[8] *= r, t[1] *= n, t[5] *= i, t[9] *= r, t[2] *= n, t[6] *= i, t[10] *= r, t[3] *= n, t[7] *= i, t[11] *= r, this + } + getMaxScaleOnAxis() { + const e = this.elements, + t = e[0] * e[0] + e[1] * e[1] + e[2] * e[2], + n = e[4] * e[4] + e[5] * e[5] + e[6] * e[6], + i = e[8] * e[8] + e[9] * e[9] + e[10] * e[10]; + return Math.sqrt(Math.max(t, n, i)) + } + makeTranslation(e, t, n) { + return e.isVector3 ? this.set(1, 0, 0, e.x, 0, 1, 0, e.y, 0, 0, 1, e.z, 0, 0, 0, 1) : this.set(1, 0, 0, e, 0, 1, 0, t, 0, 0, 1, n, 0, 0, 0, 1), this + } + makeRotationX(e) { + const t = Math.cos(e), + n = Math.sin(e); + return this.set(1, 0, 0, 0, 0, t, -n, 0, 0, n, t, 0, 0, 0, 0, 1), this + } + makeRotationY(e) { + const t = Math.cos(e), + n = Math.sin(e); + return this.set(t, 0, n, 0, 0, 1, 0, 0, -n, 0, t, 0, 0, 0, 0, 1), this + } + makeRotationZ(e) { + const t = Math.cos(e), + n = Math.sin(e); + return this.set(t, -n, 0, 0, n, t, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + makeRotationAxis(e, t) { + const n = Math.cos(t), + i = Math.sin(t), + r = 1 - n, + a = e.x, + s = e.y, + o = e.z, + l = r * a, + c = r * s; + return this.set(l * a + n, l * s - i * o, l * o + i * s, 0, l * s + i * o, c * s + n, c * o - i * a, 0, l * o - i * s, c * o + i * a, r * o * o + n, 0, 0, 0, 0, 1), this + } + makeScale(e, t, n) { + return this.set(e, 0, 0, 0, 0, t, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this + } + makeShear(e, t, n, i, r, a) { + return this.set(1, n, r, 0, e, 1, a, 0, t, i, 1, 0, 0, 0, 0, 1), this + } + compose(e, t, n) { + const i = this.elements, + r = t._x, + a = t._y, + s = t._z, + o = t._w, + l = r + r, + c = a + a, + h = s + s, + u = r * l, + d = r * c, + f = r * h, + p = a * c, + m = a * h, + g = s * h, + A = o * l, + _ = o * c, + v = o * h, + w = n.x, + y = n.y, + x = n.z; + return i[0] = (1 - (p + g)) * w, i[1] = (d + v) * w, i[2] = (f - _) * w, i[3] = 0, i[4] = (d - v) * y, i[5] = (1 - (u + g)) * y, i[6] = (m + A) * y, i[7] = 0, i[8] = (f + _) * x, i[9] = (m - A) * x, i[10] = (1 - (u + p)) * x, i[11] = 0, i[12] = e.x, i[13] = e.y, i[14] = e.z, i[15] = 1, this + } + decompose(e, t, n) { + const i = this.elements; + let r = In.set(i[0], i[1], i[2]).length(); + const a = In.set(i[4], i[5], i[6]).length(), + s = In.set(i[8], i[9], i[10]).length(); + this.determinant() < 0 && (r = -r), e.x = i[12], e.y = i[13], e.z = i[14], Rn.copy(this); + const o = 1 / r, + l = 1 / a, + c = 1 / s; + return Rn.elements[0] *= o, Rn.elements[1] *= o, Rn.elements[2] *= o, Rn.elements[4] *= l, Rn.elements[5] *= l, Rn.elements[6] *= l, Rn.elements[8] *= c, Rn.elements[9] *= c, Rn.elements[10] *= c, t.setFromRotationMatrix(Rn), n.x = r, n.y = a, n.z = s, this + } + makePerspective(e, t, n, i, r, a, s = 2e3) { + const o = this.elements, + l = 2 * r / (t - e), + c = 2 * r / (n - i), + h = (t + e) / (t - e), + u = (n + i) / (n - i); + let d, f; + if (s === ht) d = -(a + r) / (a - r), f = -2 * a * r / (a - r); + else { + if (s !== ut) throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: " + s); + d = -a / (a - r), f = -a * r / (a - r) + } + return o[0] = l, o[4] = 0, o[8] = h, o[12] = 0, o[1] = 0, o[5] = c, o[9] = u, o[13] = 0, o[2] = 0, o[6] = 0, o[10] = d, o[14] = f, o[3] = 0, o[7] = 0, o[11] = -1, o[15] = 0, this + } + makeOrthographic(e, t, n, i, r, a, s = 2e3) { + const o = this.elements, + l = 1 / (t - e), + c = 1 / (n - i), + h = 1 / (a - r), + u = (t + e) * l, + d = (n + i) * c; + let f, p; + if (s === ht) f = (a + r) * h, p = -2 * h; + else { + if (s !== ut) throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: " + s); + f = r * h, p = -1 * h + } + return o[0] = 2 * l, o[4] = 0, o[8] = 0, o[12] = -u, o[1] = 0, o[5] = 2 * c, o[9] = 0, o[13] = -d, o[2] = 0, o[6] = 0, o[10] = p, o[14] = -f, o[3] = 0, o[7] = 0, o[11] = 0, o[15] = 1, this + } + equals(e) { + const t = this.elements, + n = e.elements; + for (let e = 0; e < 16; e++) + if (t[e] !== n[e]) return !1; + return !0 + } + fromArray(e, t = 0) { + for (let n = 0; n < 16; n++) this.elements[n] = e[n + t]; + return this + } + toArray(e = [], t = 0) { + const n = this.elements; + return e[t] = n[0], e[t + 1] = n[1], e[t + 2] = n[2], e[t + 3] = n[3], e[t + 4] = n[4], e[t + 5] = n[5], e[t + 6] = n[6], e[t + 7] = n[7], e[t + 8] = n[8], e[t + 9] = n[9], e[t + 10] = n[10], e[t + 11] = n[11], e[t + 12] = n[12], e[t + 13] = n[13], e[t + 14] = n[14], e[t + 15] = n[15], e + } + } + const In = new Zt, + Rn = new Cn, + Pn = new Zt(0, 0, 0), + Bn = new Zt(1, 1, 1), + Dn = new Zt, + Ln = new Zt, + Un = new Zt, + kn = new Cn, + Nn = new Kt; + class Fn { + constructor(e = 0, t = 0, n = 0, i = Fn.DEFAULT_ORDER) { + this.isEuler = !0, this._x = e, this._y = t, this._z = n, this._order = i + } + get x() { + return this._x + } + set x(e) { + this._x = e, this._onChangeCallback() + } + get y() { + return this._y + } + set y(e) { + this._y = e, this._onChangeCallback() + } + get z() { + return this._z + } + set z(e) { + this._z = e, this._onChangeCallback() + } + get order() { + return this._order + } + set order(e) { + this._order = e, this._onChangeCallback() + } + set(e, t, n, i = this._order) { + return this._x = e, this._y = t, this._z = n, this._order = i, this._onChangeCallback(), this + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._order) + } + copy(e) { + return this._x = e._x, this._y = e._y, this._z = e._z, this._order = e._order, this._onChangeCallback(), this + } + setFromRotationMatrix(e, t = this._order, n = !0) { + const i = e.elements, + r = i[0], + a = i[4], + s = i[8], + o = i[1], + l = i[5], + c = i[9], + h = i[2], + u = i[6], + d = i[10]; + switch (t) { + case "XYZ": + this._y = Math.asin(_t(s, -1, 1)), Math.abs(s) < .9999999 ? (this._x = Math.atan2(-c, d), this._z = Math.atan2(-a, r)) : (this._x = Math.atan2(u, l), this._z = 0); + break; + case "YXZ": + this._x = Math.asin(-_t(c, -1, 1)), Math.abs(c) < .9999999 ? (this._y = Math.atan2(s, d), this._z = Math.atan2(o, l)) : (this._y = Math.atan2(-h, r), this._z = 0); + break; + case "ZXY": + this._x = Math.asin(_t(u, -1, 1)), Math.abs(u) < .9999999 ? (this._y = Math.atan2(-h, d), this._z = Math.atan2(-a, l)) : (this._y = 0, this._z = Math.atan2(o, r)); + break; + case "ZYX": + this._y = Math.asin(-_t(h, -1, 1)), Math.abs(h) < .9999999 ? (this._x = Math.atan2(u, d), this._z = Math.atan2(o, r)) : (this._x = 0, this._z = Math.atan2(-a, l)); + break; + case "YZX": + this._z = Math.asin(_t(o, -1, 1)), Math.abs(o) < .9999999 ? (this._x = Math.atan2(-c, l), this._y = Math.atan2(-h, r)) : (this._x = 0, this._y = Math.atan2(s, d)); + break; + case "XZY": + this._z = Math.asin(-_t(a, -1, 1)), Math.abs(a) < .9999999 ? (this._x = Math.atan2(u, l), this._y = Math.atan2(s, r)) : (this._x = Math.atan2(-c, d), this._y = 0); + break; + default: + console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + t) + } + return this._order = t, !0 === n && this._onChangeCallback(), this + } + setFromQuaternion(e, t, n) { + return kn.makeRotationFromQuaternion(e), this.setFromRotationMatrix(kn, t, n) + } + setFromVector3(e, t = this._order) { + return this.set(e.x, e.y, e.z, t) + } + reorder(e) { + return Nn.setFromEuler(this), this.setFromQuaternion(Nn, e) + } + equals(e) { + return e._x === this._x && e._y === this._y && e._z === this._z && e._order === this._order + } + fromArray(e) { + return this._x = e[0], this._y = e[1], this._z = e[2], void 0 !== e[3] && (this._order = e[3]), this._onChangeCallback(), this + } + toArray(e = [], t = 0) { + return e[t] = this._x, e[t + 1] = this._y, e[t + 2] = this._z, e[t + 3] = this._order, e + } + _onChange(e) { + return this._onChangeCallback = e, this + } + _onChangeCallback() {}*[Symbol.iterator]() { + yield this._x, yield this._y, yield this._z, yield this._order + } + } + Fn.DEFAULT_ORDER = "XYZ"; + class On { + constructor() { + this.mask = 1 + } + set(e) { + this.mask = 1 << e >>> 0 + } + enable(e) { + this.mask |= 1 << e + } + enableAll() { + this.mask = -1 + } + toggle(e) { + this.mask ^= 1 << e + } + disable(e) { + this.mask &= ~(1 << e) + } + disableAll() { + this.mask = 0 + } + test(e) { + return !!(this.mask & e.mask) + } + isEnabled(e) { + return !!(this.mask & 1 << e) + } + } + let zn = 0; + const Wn = new Zt, + Hn = new Kt, + Vn = new Cn, + Gn = new Zt, + Qn = new Zt, + Xn = new Zt, + jn = new Kt, + qn = new Zt(1, 0, 0), + Yn = new Zt(0, 1, 0), + Kn = new Zt(0, 0, 1), + Zn = { + type: "added" + }, + Jn = { + type: "removed" + }, + $n = { + type: "childadded", + child: null + }, + ei = { + type: "childremoved", + child: null + }; + class ti extends dt { + constructor() { + super(), this.isObject3D = !0, Object.defineProperty(this, "id", { + value: zn++ + }), this.uuid = At(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = ti.DEFAULT_UP.clone(); + const e = new Zt, + t = new Fn, + n = new Kt, + i = new Zt(1, 1, 1); + t._onChange((function() { + n.setFromEuler(t, !1) + })), n._onChange((function() { + t.setFromQuaternion(n, void 0, !1) + })), Object.defineProperties(this, { + position: { + configurable: !0, + enumerable: !0, + value: e + }, + rotation: { + configurable: !0, + enumerable: !0, + value: t + }, + quaternion: { + configurable: !0, + enumerable: !0, + value: n + }, + scale: { + configurable: !0, + enumerable: !0, + value: i + }, + modelViewMatrix: { + value: new Cn + }, + normalMatrix: { + value: new St + } + }), this.matrix = new Cn, this.matrixWorld = new Cn, this.matrixAutoUpdate = ti.DEFAULT_MATRIX_AUTO_UPDATE, this.matrixWorldAutoUpdate = ti.DEFAULT_MATRIX_WORLD_AUTO_UPDATE, this.matrixWorldNeedsUpdate = !1, this.layers = new On, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.animations = [], this.userData = {} + } + onBeforeShadow() {} + onAfterShadow() {} + onBeforeRender() {} + onAfterRender() {} + applyMatrix4(e) { + this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(e), this.matrix.decompose(this.position, this.quaternion, this.scale) + } + applyQuaternion(e) { + return this.quaternion.premultiply(e), this + } + setRotationFromAxisAngle(e, t) { + this.quaternion.setFromAxisAngle(e, t) + } + setRotationFromEuler(e) { + this.quaternion.setFromEuler(e, !0) + } + setRotationFromMatrix(e) { + this.quaternion.setFromRotationMatrix(e) + } + setRotationFromQuaternion(e) { + this.quaternion.copy(e) + } + rotateOnAxis(e, t) { + return Hn.setFromAxisAngle(e, t), this.quaternion.multiply(Hn), this + } + rotateOnWorldAxis(e, t) { + return Hn.setFromAxisAngle(e, t), this.quaternion.premultiply(Hn), this + } + rotateX(e) { + return this.rotateOnAxis(qn, e) + } + rotateY(e) { + return this.rotateOnAxis(Yn, e) + } + rotateZ(e) { + return this.rotateOnAxis(Kn, e) + } + translateOnAxis(e, t) { + return Wn.copy(e).applyQuaternion(this.quaternion), this.position.add(Wn.multiplyScalar(t)), this + } + translateX(e) { + return this.translateOnAxis(qn, e) + } + translateY(e) { + return this.translateOnAxis(Yn, e) + } + translateZ(e) { + return this.translateOnAxis(Kn, e) + } + localToWorld(e) { + return this.updateWorldMatrix(!0, !1), e.applyMatrix4(this.matrixWorld) + } + worldToLocal(e) { + return this.updateWorldMatrix(!0, !1), e.applyMatrix4(Vn.copy(this.matrixWorld).invert()) + } + lookAt(e, t, n) { + e.isVector3 ? Gn.copy(e) : Gn.set(e, t, n); + const i = this.parent; + this.updateWorldMatrix(!0, !1), Qn.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? Vn.lookAt(Qn, Gn, this.up) : Vn.lookAt(Gn, Qn, this.up), this.quaternion.setFromRotationMatrix(Vn), i && (Vn.extractRotation(i.matrixWorld), Hn.setFromRotationMatrix(Vn), this.quaternion.premultiply(Hn.invert())) + } + add(e) { + if (arguments.length > 1) { + for (let e = 0; e < arguments.length; e++) this.add(arguments[e]); + return this + } + return e === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", e), this) : (e && e.isObject3D ? (e.removeFromParent(), e.parent = this, this.children.push(e), e.dispatchEvent(Zn), $n.child = e, this.dispatchEvent($n), $n.child = null) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", e), this) + } + remove(e) { + if (arguments.length > 1) { + for (let e = 0; e < arguments.length; e++) this.remove(arguments[e]); + return this + } + const t = this.children.indexOf(e); + return -1 !== t && (e.parent = null, this.children.splice(t, 1), e.dispatchEvent(Jn), ei.child = e, this.dispatchEvent(ei), ei.child = null), this + } + removeFromParent() { + const e = this.parent; + return null !== e && e.remove(this), this + } + clear() { + return this.remove(...this.children) + } + attach(e) { + return this.updateWorldMatrix(!0, !1), Vn.copy(this.matrixWorld).invert(), null !== e.parent && (e.parent.updateWorldMatrix(!0, !1), Vn.multiply(e.parent.matrixWorld)), e.applyMatrix4(Vn), e.removeFromParent(), e.parent = this, this.children.push(e), e.updateWorldMatrix(!1, !0), e.dispatchEvent(Zn), $n.child = e, this.dispatchEvent($n), $n.child = null, this + } + getObjectById(e) { + return this.getObjectByProperty("id", e) + } + getObjectByName(e) { + return this.getObjectByProperty("name", e) + } + getObjectByProperty(e, t) { + if (this[e] === t) return this; + for (let n = 0, i = this.children.length; n < i; n++) { + const i = this.children[n].getObjectByProperty(e, t); + if (void 0 !== i) return i + } + } + getObjectsByProperty(e, t, n = []) { + this[e] === t && n.push(this); + const i = this.children; + for (let r = 0, a = i.length; r < a; r++) i[r].getObjectsByProperty(e, t, n); + return n + } + getWorldPosition(e) { + return this.updateWorldMatrix(!0, !1), e.setFromMatrixPosition(this.matrixWorld) + } + getWorldQuaternion(e) { + return this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(Qn, e, Xn), e + } + getWorldScale(e) { + return this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(Qn, jn, e), e + } + getWorldDirection(e) { + this.updateWorldMatrix(!0, !1); + const t = this.matrixWorld.elements; + return e.set(t[8], t[9], t[10]).normalize() + } + raycast() {} + traverse(e) { + e(this); + const t = this.children; + for (let n = 0, i = t.length; n < i; n++) t[n].traverse(e) + } + traverseVisible(e) { + if (!1 === this.visible) return; + e(this); + const t = this.children; + for (let n = 0, i = t.length; n < i; n++) t[n].traverseVisible(e) + } + traverseAncestors(e) { + const t = this.parent; + null !== t && (e(t), t.traverseAncestors(e)) + } + updateMatrix() { + this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0 + } + updateMatrixWorld(e) { + this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || e) && (!0 === this.matrixWorldAutoUpdate && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix)), this.matrixWorldNeedsUpdate = !1, e = !0); + const t = this.children; + for (let n = 0, i = t.length; n < i; n++) { + t[n].updateMatrixWorld(e) + } + } + updateWorldMatrix(e, t) { + const n = this.parent; + if (!0 === e && null !== n && n.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), !0 === this.matrixWorldAutoUpdate && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix)), !0 === t) { + const e = this.children; + for (let t = 0, n = e.length; t < n; t++) { + e[t].updateWorldMatrix(!1, !0) + } + } + } + toJSON(e) { + const t = void 0 === e || "string" == typeof e, + n = {}; + t && (e = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {}, + nodes: {} + }, n.metadata = { + version: 4.6, + type: "Object", + generator: "Object3D.toJSON" + }); + const i = {}; + + function r(t, n) { + return void 0 === t[n.uuid] && (t[n.uuid] = n.toJSON(e)), n.uuid + } + if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), Object.keys(this.userData).length > 0 && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), i.up = this.up.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON(), null !== this.instanceColor && (i.instanceColor = this.instanceColor.toJSON())), this.isBatchedMesh && (i.type = "BatchedMesh", i.perObjectFrustumCulled = this.perObjectFrustumCulled, i.sortObjects = this.sortObjects, i.drawRanges = this._drawRanges, i.reservedRanges = this._reservedRanges, i.visibility = this._visibility, i.active = this._active, i.bounds = this._bounds.map((e => ({ + boxInitialized: e.boxInitialized, + boxMin: e.box.min.toArray(), + boxMax: e.box.max.toArray(), + sphereInitialized: e.sphereInitialized, + sphereRadius: e.sphere.radius, + sphereCenter: e.sphere.center.toArray() + }))), i.maxInstanceCount = this._maxInstanceCount, i.maxVertexCount = this._maxVertexCount, i.maxIndexCount = this._maxIndexCount, i.geometryInitialized = this._geometryInitialized, i.geometryCount = this._geometryCount, i.matricesTexture = this._matricesTexture.toJSON(e), null !== this._colorsTexture && (i.colorsTexture = this._colorsTexture.toJSON(e)), null !== this.boundingSphere && (i.boundingSphere = { + center: i.boundingSphere.center.toArray(), + radius: i.boundingSphere.radius + }), null !== this.boundingBox && (i.boundingBox = { + min: i.boundingBox.min.toArray(), + max: i.boundingBox.max.toArray() + })), this.isScene) this.background && (this.background.isColor ? i.background = this.background.toJSON() : this.background.isTexture && (i.background = this.background.toJSON(e).uuid)), this.environment && this.environment.isTexture && !0 !== this.environment.isRenderTargetTexture && (i.environment = this.environment.toJSON(e).uuid); + else if (this.isMesh || this.isLine || this.isPoints) { + i.geometry = r(e.geometries, this.geometry); + const t = this.geometry.parameters; + if (void 0 !== t && void 0 !== t.shapes) { + const n = t.shapes; + if (Array.isArray(n)) + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + r(e.shapes, i) + } else r(e.shapes, n) + } + } + if (this.isSkinnedMesh && (i.bindMode = this.bindMode, i.bindMatrix = this.bindMatrix.toArray(), void 0 !== this.skeleton && (r(e.skeletons, this.skeleton), i.skeleton = this.skeleton.uuid)), void 0 !== this.material) + if (Array.isArray(this.material)) { + const t = []; + for (let n = 0, i = this.material.length; n < i; n++) t.push(r(e.materials, this.material[n])); + i.material = t + } else i.material = r(e.materials, this.material); + if (this.children.length > 0) { + i.children = []; + for (let t = 0; t < this.children.length; t++) i.children.push(this.children[t].toJSON(e).object) + } + if (this.animations.length > 0) { + i.animations = []; + for (let t = 0; t < this.animations.length; t++) { + const n = this.animations[t]; + i.animations.push(r(e.animations, n)) + } + } + if (t) { + const t = a(e.geometries), + i = a(e.materials), + r = a(e.textures), + s = a(e.images), + o = a(e.shapes), + l = a(e.skeletons), + c = a(e.animations), + h = a(e.nodes); + t.length > 0 && (n.geometries = t), i.length > 0 && (n.materials = i), r.length > 0 && (n.textures = r), s.length > 0 && (n.images = s), o.length > 0 && (n.shapes = o), l.length > 0 && (n.skeletons = l), c.length > 0 && (n.animations = c), h.length > 0 && (n.nodes = h) + } + return n.object = i, n; + + function a(e) { + const t = []; + for (const n in e) { + const i = e[n]; + delete i.metadata, t.push(i) + } + return t + } + } + clone(e) { + return (new this.constructor).copy(this, e) + } + copy(e, t = !0) { + if (this.name = e.name, this.up.copy(e.up), this.position.copy(e.position), this.rotation.order = e.rotation.order, this.quaternion.copy(e.quaternion), this.scale.copy(e.scale), this.matrix.copy(e.matrix), this.matrixWorld.copy(e.matrixWorld), this.matrixAutoUpdate = e.matrixAutoUpdate, this.matrixWorldAutoUpdate = e.matrixWorldAutoUpdate, this.matrixWorldNeedsUpdate = e.matrixWorldNeedsUpdate, this.layers.mask = e.layers.mask, this.visible = e.visible, this.castShadow = e.castShadow, this.receiveShadow = e.receiveShadow, this.frustumCulled = e.frustumCulled, this.renderOrder = e.renderOrder, this.animations = e.animations.slice(), this.userData = JSON.parse(JSON.stringify(e.userData)), !0 === t) + for (let t = 0; t < e.children.length; t++) { + const n = e.children[t]; + this.add(n.clone()) + } + return this + } + } + ti.DEFAULT_UP = new Zt(0, 1, 0), ti.DEFAULT_MATRIX_AUTO_UPDATE = !0, ti.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = !0; + const ni = new Zt, + ii = new Zt, + ri = new Zt, + ai = new Zt, + si = new Zt, + oi = new Zt, + li = new Zt, + ci = new Zt, + hi = new Zt, + ui = new Zt, + di = new Qt, + fi = new Qt, + pi = new Qt; + class mi { + constructor(e = new Zt, t = new Zt, n = new Zt) { + this.a = e, this.b = t, this.c = n + } + static getNormal(e, t, n, i) { + i.subVectors(n, t), ni.subVectors(e, t), i.cross(ni); + const r = i.lengthSq(); + return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0) + } + static getBarycoord(e, t, n, i, r) { + ni.subVectors(i, t), ii.subVectors(n, t), ri.subVectors(e, t); + const a = ni.dot(ni), + s = ni.dot(ii), + o = ni.dot(ri), + l = ii.dot(ii), + c = ii.dot(ri), + h = a * l - s * s; + if (0 === h) return r.set(0, 0, 0), null; + const u = 1 / h, + d = (l * o - s * c) * u, + f = (a * c - s * o) * u; + return r.set(1 - d - f, f, d) + } + static containsPoint(e, t, n, i) { + return null !== this.getBarycoord(e, t, n, i, ai) && (ai.x >= 0 && ai.y >= 0 && ai.x + ai.y <= 1) + } + static getInterpolation(e, t, n, i, r, a, s, o) { + return null === this.getBarycoord(e, t, n, i, ai) ? (o.x = 0, o.y = 0, "z" in o && (o.z = 0), "w" in o && (o.w = 0), null) : (o.setScalar(0), o.addScaledVector(r, ai.x), o.addScaledVector(a, ai.y), o.addScaledVector(s, ai.z), o) + } + static getInterpolatedAttribute(e, t, n, i, r, a) { + return di.setScalar(0), fi.setScalar(0), pi.setScalar(0), di.fromBufferAttribute(e, t), fi.fromBufferAttribute(e, n), pi.fromBufferAttribute(e, i), a.setScalar(0), a.addScaledVector(di, r.x), a.addScaledVector(fi, r.y), a.addScaledVector(pi, r.z), a + } + static isFrontFacing(e, t, n, i) { + return ni.subVectors(n, t), ii.subVectors(e, t), ni.cross(ii).dot(i) < 0 + } + set(e, t, n) { + return this.a.copy(e), this.b.copy(t), this.c.copy(n), this + } + setFromPointsAndIndices(e, t, n, i) { + return this.a.copy(e[t]), this.b.copy(e[n]), this.c.copy(e[i]), this + } + setFromAttributeAndIndices(e, t, n, i) { + return this.a.fromBufferAttribute(e, t), this.b.fromBufferAttribute(e, n), this.c.fromBufferAttribute(e, i), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + return this.a.copy(e.a), this.b.copy(e.b), this.c.copy(e.c), this + } + getArea() { + return ni.subVectors(this.c, this.b), ii.subVectors(this.a, this.b), .5 * ni.cross(ii).length() + } + getMidpoint(e) { + return e.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) + } + getNormal(e) { + return mi.getNormal(this.a, this.b, this.c, e) + } + getPlane(e) { + return e.setFromCoplanarPoints(this.a, this.b, this.c) + } + getBarycoord(e, t) { + return mi.getBarycoord(e, this.a, this.b, this.c, t) + } + getInterpolation(e, t, n, i, r) { + return mi.getInterpolation(e, this.a, this.b, this.c, t, n, i, r) + } + containsPoint(e) { + return mi.containsPoint(e, this.a, this.b, this.c) + } + isFrontFacing(e) { + return mi.isFrontFacing(this.a, this.b, this.c, e) + } + intersectsBox(e) { + return e.intersectsTriangle(this) + } + closestPointToPoint(e, t) { + const n = this.a, + i = this.b, + r = this.c; + let a, s; + si.subVectors(i, n), oi.subVectors(r, n), ci.subVectors(e, n); + const o = si.dot(ci), + l = oi.dot(ci); + if (o <= 0 && l <= 0) return t.copy(n); + hi.subVectors(e, i); + const c = si.dot(hi), + h = oi.dot(hi); + if (c >= 0 && h <= c) return t.copy(i); + const u = o * h - c * l; + if (u <= 0 && o >= 0 && c <= 0) return a = o / (o - c), t.copy(n).addScaledVector(si, a); + ui.subVectors(e, r); + const d = si.dot(ui), + f = oi.dot(ui); + if (f >= 0 && d <= f) return t.copy(r); + const p = d * l - o * f; + if (p <= 0 && l >= 0 && f <= 0) return s = l / (l - f), t.copy(n).addScaledVector(oi, s); + const m = c * f - d * h; + if (m <= 0 && h - c >= 0 && d - f >= 0) return li.subVectors(r, i), s = (h - c) / (h - c + (d - f)), t.copy(i).addScaledVector(li, s); + const g = 1 / (m + p + u); + return a = p * g, s = u * g, t.copy(n).addScaledVector(si, a).addScaledVector(oi, s) + } + equals(e) { + return e.a.equals(this.a) && e.b.equals(this.b) && e.c.equals(this.c) + } + } + const gi = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }, + Ai = { + h: 0, + s: 0, + l: 0 + }, + _i = { + h: 0, + s: 0, + l: 0 + }; + + function vi(e, t, n) { + return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? e + 6 * (t - e) * n : n < .5 ? t : n < 2 / 3 ? e + 6 * (t - e) * (2 / 3 - n) : e + } + class wi { + constructor(e, t, n) { + return this.isColor = !0, this.r = 1, this.g = 1, this.b = 1, this.set(e, t, n) + } + set(e, t, n) { + if (void 0 === t && void 0 === n) { + const t = e; + t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t) + } else this.setRGB(e, t, n); + return this + } + setScalar(e) { + return this.r = e, this.g = e, this.b = e, this + } + setHex(e, t = Ye) { + return e = Math.floor(e), this.r = (e >> 16 & 255) / 255, this.g = (e >> 8 & 255) / 255, this.b = (255 & e) / 255, Ut.toWorkingColorSpace(this, t), this + } + setRGB(e, t, n, i = Ut.workingColorSpace) { + return this.r = e, this.g = t, this.b = n, Ut.toWorkingColorSpace(this, i), this + } + setHSL(e, t, n, i = Ut.workingColorSpace) { + if (e = vt(e, 1), t = _t(t, 0, 1), n = _t(n, 0, 1), 0 === t) this.r = this.g = this.b = n; + else { + const i = n <= .5 ? n * (1 + t) : n + t - n * t, + r = 2 * n - i; + this.r = vi(r, i, e + 1 / 3), this.g = vi(r, i, e), this.b = vi(r, i, e - 1 / 3) + } + return Ut.toWorkingColorSpace(this, i), this + } + setStyle(e, t = Ye) { + function n(t) { + void 0 !== t && parseFloat(t) < 1 && console.warn("THREE.Color: Alpha component of " + e + " will be ignored.") + } + let i; + if (i = /^(\w+)\(([^\)]*)\)/.exec(e)) { + let r; + const a = i[1], + s = i[2]; + switch (a) { + case "rgb": + case "rgba": + if (r = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s)) return n(r[4]), this.setRGB(Math.min(255, parseInt(r[1], 10)) / 255, Math.min(255, parseInt(r[2], 10)) / 255, Math.min(255, parseInt(r[3], 10)) / 255, t); + if (r = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s)) return n(r[4]), this.setRGB(Math.min(100, parseInt(r[1], 10)) / 100, Math.min(100, parseInt(r[2], 10)) / 100, Math.min(100, parseInt(r[3], 10)) / 100, t); + break; + case "hsl": + case "hsla": + if (r = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s)) return n(r[4]), this.setHSL(parseFloat(r[1]) / 360, parseFloat(r[2]) / 100, parseFloat(r[3]) / 100, t); + break; + default: + console.warn("THREE.Color: Unknown color model " + e) + } + } else if (i = /^\#([A-Fa-f\d]+)$/.exec(e)) { + const n = i[1], + r = n.length; + if (3 === r) return this.setRGB(parseInt(n.charAt(0), 16) / 15, parseInt(n.charAt(1), 16) / 15, parseInt(n.charAt(2), 16) / 15, t); + if (6 === r) return this.setHex(parseInt(n, 16), t); + console.warn("THREE.Color: Invalid hex color " + e) + } else if (e && e.length > 0) return this.setColorName(e, t); + return this + } + setColorName(e, t = Ye) { + const n = gi[e.toLowerCase()]; + return void 0 !== n ? this.setHex(n, t) : console.warn("THREE.Color: Unknown color " + e), this + } + clone() { + return new this.constructor(this.r, this.g, this.b) + } + copy(e) { + return this.r = e.r, this.g = e.g, this.b = e.b, this + } + copySRGBToLinear(e) { + return this.r = kt(e.r), this.g = kt(e.g), this.b = kt(e.b), this + } + copyLinearToSRGB(e) { + return this.r = Nt(e.r), this.g = Nt(e.g), this.b = Nt(e.b), this + } + convertSRGBToLinear() { + return this.copySRGBToLinear(this), this + } + convertLinearToSRGB() { + return this.copyLinearToSRGB(this), this + } + getHex(e = Ye) { + return Ut.fromWorkingColorSpace(yi.copy(this), e), 65536 * Math.round(_t(255 * yi.r, 0, 255)) + 256 * Math.round(_t(255 * yi.g, 0, 255)) + Math.round(_t(255 * yi.b, 0, 255)) + } + getHexString(e = Ye) { + return ("000000" + this.getHex(e).toString(16)).slice(-6) + } + getHSL(e, t = Ut.workingColorSpace) { + Ut.fromWorkingColorSpace(yi.copy(this), t); + const n = yi.r, + i = yi.g, + r = yi.b, + a = Math.max(n, i, r), + s = Math.min(n, i, r); + let o, l; + const c = (s + a) / 2; + if (s === a) o = 0, l = 0; + else { + const e = a - s; + switch (l = c <= .5 ? e / (a + s) : e / (2 - a - s), a) { + case n: + o = (i - r) / e + (i < r ? 6 : 0); + break; + case i: + o = (r - n) / e + 2; + break; + case r: + o = (n - i) / e + 4 + } + o /= 6 + } + return e.h = o, e.s = l, e.l = c, e + } + getRGB(e, t = Ut.workingColorSpace) { + return Ut.fromWorkingColorSpace(yi.copy(this), t), e.r = yi.r, e.g = yi.g, e.b = yi.b, e + } + getStyle(e = Ye) { + Ut.fromWorkingColorSpace(yi.copy(this), e); + const t = yi.r, + n = yi.g, + i = yi.b; + return e !== Ye ? `color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${i.toFixed(3)})` : `rgb(${Math.round(255*t)},${Math.round(255*n)},${Math.round(255*i)})` + } + offsetHSL(e, t, n) { + return this.getHSL(Ai), this.setHSL(Ai.h + e, Ai.s + t, Ai.l + n) + } + add(e) { + return this.r += e.r, this.g += e.g, this.b += e.b, this + } + addColors(e, t) { + return this.r = e.r + t.r, this.g = e.g + t.g, this.b = e.b + t.b, this + } + addScalar(e) { + return this.r += e, this.g += e, this.b += e, this + } + sub(e) { + return this.r = Math.max(0, this.r - e.r), this.g = Math.max(0, this.g - e.g), this.b = Math.max(0, this.b - e.b), this + } + multiply(e) { + return this.r *= e.r, this.g *= e.g, this.b *= e.b, this + } + multiplyScalar(e) { + return this.r *= e, this.g *= e, this.b *= e, this + } + lerp(e, t) { + return this.r += (e.r - this.r) * t, this.g += (e.g - this.g) * t, this.b += (e.b - this.b) * t, this + } + lerpColors(e, t, n) { + return this.r = e.r + (t.r - e.r) * n, this.g = e.g + (t.g - e.g) * n, this.b = e.b + (t.b - e.b) * n, this + } + lerpHSL(e, t) { + this.getHSL(Ai), e.getHSL(_i); + const n = wt(Ai.h, _i.h, t), + i = wt(Ai.s, _i.s, t), + r = wt(Ai.l, _i.l, t); + return this.setHSL(n, i, r), this + } + setFromVector3(e) { + return this.r = e.x, this.g = e.y, this.b = e.z, this + } + applyMatrix3(e) { + const t = this.r, + n = this.g, + i = this.b, + r = e.elements; + return this.r = r[0] * t + r[3] * n + r[6] * i, this.g = r[1] * t + r[4] * n + r[7] * i, this.b = r[2] * t + r[5] * n + r[8] * i, this + } + equals(e) { + return e.r === this.r && e.g === this.g && e.b === this.b + } + fromArray(e, t = 0) { + return this.r = e[t], this.g = e[t + 1], this.b = e[t + 2], this + } + toArray(e = [], t = 0) { + return e[t] = this.r, e[t + 1] = this.g, e[t + 2] = this.b, e + } + fromBufferAttribute(e, t) { + return this.r = e.getX(t), this.g = e.getY(t), this.b = e.getZ(t), this + } + toJSON() { + return this.getHex() + }*[Symbol.iterator]() { + yield this.r, yield this.g, yield this.b + } + } + const yi = new wi; + wi.NAMES = gi; + let xi = 0; + class bi extends dt { + constructor() { + super(), this.isMaterial = !0, Object.defineProperty(this, "id", { + value: xi++ + }), this.uuid = At(), this.name = "", this.type = "Material", this.blending = 1, this.side = 0, this.vertexColors = !1, this.opacity = 1, this.transparent = !1, this.alphaHash = !1, this.blendSrc = 204, this.blendDst = 205, this.blendEquation = a, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.blendColor = new wi(0, 0, 0), this.blendAlpha = 0, this.depthFunc = 3, this.depthTest = !0, this.depthWrite = !0, this.stencilWriteMask = 255, this.stencilFunc = 519, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = $e, this.stencilZFail = $e, this.stencilZPass = $e, this.stencilWrite = !1, this.clippingPlanes = null, this.clipIntersection = !1, this.clipShadows = !1, this.shadowSide = null, this.colorWrite = !0, this.precision = null, this.polygonOffset = !1, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.dithering = !1, this.alphaToCoverage = !1, this.premultipliedAlpha = !1, this.forceSinglePass = !1, this.visible = !0, this.toneMapped = !0, this.userData = {}, this.version = 0, this._alphaTest = 0 + } + get alphaTest() { + return this._alphaTest + } + set alphaTest(e) { + this._alphaTest > 0 != e > 0 && this.version++, this._alphaTest = e + } + onBeforeRender() {} + onBeforeCompile() {} + customProgramCacheKey() { + return this.onBeforeCompile.toString() + } + setValues(e) { + if (void 0 !== e) + for (const t in e) { + const n = e[t]; + if (void 0 === n) { + console.warn(`THREE.Material: parameter '${t}' has value of undefined.`); + continue + } + const i = this[t]; + void 0 !== i ? i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[t] = n : console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`) + } + } + toJSON(e) { + const t = void 0 === e || "string" == typeof e; + t && (e = { + textures: {}, + images: {} + }); + const n = { + metadata: { + version: 4.6, + type: "Material", + generator: "Material.toJSON" + } + }; + + function i(e) { + const t = []; + for (const n in e) { + const i = e[n]; + delete i.metadata, t.push(i) + } + return t + } + if (n.uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), void 0 !== this.sheen && (n.sheen = this.sheen), this.sheenColor && this.sheenColor.isColor && (n.sheenColor = this.sheenColor.getHex()), void 0 !== this.sheenRoughness && (n.sheenRoughness = this.sheenRoughness), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), void 0 !== this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.specularIntensity && (n.specularIntensity = this.specularIntensity), this.specularColor && this.specularColor.isColor && (n.specularColor = this.specularColor.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (n.clearcoatMap = this.clearcoatMap.toJSON(e).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(e).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(e).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), void 0 !== this.dispersion && (n.dispersion = this.dispersion), void 0 !== this.iridescence && (n.iridescence = this.iridescence), void 0 !== this.iridescenceIOR && (n.iridescenceIOR = this.iridescenceIOR), void 0 !== this.iridescenceThicknessRange && (n.iridescenceThicknessRange = this.iridescenceThicknessRange), this.iridescenceMap && this.iridescenceMap.isTexture && (n.iridescenceMap = this.iridescenceMap.toJSON(e).uuid), this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture && (n.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON(e).uuid), void 0 !== this.anisotropy && (n.anisotropy = this.anisotropy), void 0 !== this.anisotropyRotation && (n.anisotropyRotation = this.anisotropyRotation), this.anisotropyMap && this.anisotropyMap.isTexture && (n.anisotropyMap = this.anisotropyMap.toJSON(e).uuid), this.map && this.map.isTexture && (n.map = this.map.toJSON(e).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(e).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(e).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(e).uuid, n.lightMapIntensity = this.lightMapIntensity), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(e).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(e).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(e).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(e).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(e).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(e).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(e).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(e).uuid), this.specularIntensityMap && this.specularIntensityMap.isTexture && (n.specularIntensityMap = this.specularIntensityMap.toJSON(e).uuid), this.specularColorMap && this.specularColorMap.isTexture && (n.specularColorMap = this.specularColorMap.toJSON(e).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(e).uuid, void 0 !== this.combine && (n.combine = this.combine)), void 0 !== this.envMapRotation && (n.envMapRotation = this.envMapRotation.toArray()), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity), void 0 !== this.reflectivity && (n.reflectivity = this.reflectivity), void 0 !== this.refractionRatio && (n.refractionRatio = this.refractionRatio), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(e).uuid), void 0 !== this.transmission && (n.transmission = this.transmission), this.transmissionMap && this.transmissionMap.isTexture && (n.transmissionMap = this.transmissionMap.toJSON(e).uuid), void 0 !== this.thickness && (n.thickness = this.thickness), this.thicknessMap && this.thicknessMap.isTexture && (n.thicknessMap = this.thicknessMap.toJSON(e).uuid), void 0 !== this.attenuationDistance && this.attenuationDistance !== 1 / 0 && (n.attenuationDistance = this.attenuationDistance), void 0 !== this.attenuationColor && (n.attenuationColor = this.attenuationColor.getHex()), void 0 !== this.size && (n.size = this.size), null !== this.shadowSide && (n.shadowSide = this.shadowSide), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (n.blending = this.blending), 0 !== this.side && (n.side = this.side), !0 === this.vertexColors && (n.vertexColors = !0), this.opacity < 1 && (n.opacity = this.opacity), !0 === this.transparent && (n.transparent = !0), 204 !== this.blendSrc && (n.blendSrc = this.blendSrc), 205 !== this.blendDst && (n.blendDst = this.blendDst), this.blendEquation !== a && (n.blendEquation = this.blendEquation), null !== this.blendSrcAlpha && (n.blendSrcAlpha = this.blendSrcAlpha), null !== this.blendDstAlpha && (n.blendDstAlpha = this.blendDstAlpha), null !== this.blendEquationAlpha && (n.blendEquationAlpha = this.blendEquationAlpha), this.blendColor && this.blendColor.isColor && (n.blendColor = this.blendColor.getHex()), 0 !== this.blendAlpha && (n.blendAlpha = this.blendAlpha), 3 !== this.depthFunc && (n.depthFunc = this.depthFunc), !1 === this.depthTest && (n.depthTest = this.depthTest), !1 === this.depthWrite && (n.depthWrite = this.depthWrite), !1 === this.colorWrite && (n.colorWrite = this.colorWrite), 255 !== this.stencilWriteMask && (n.stencilWriteMask = this.stencilWriteMask), 519 !== this.stencilFunc && (n.stencilFunc = this.stencilFunc), 0 !== this.stencilRef && (n.stencilRef = this.stencilRef), 255 !== this.stencilFuncMask && (n.stencilFuncMask = this.stencilFuncMask), this.stencilFail !== $e && (n.stencilFail = this.stencilFail), this.stencilZFail !== $e && (n.stencilZFail = this.stencilZFail), this.stencilZPass !== $e && (n.stencilZPass = this.stencilZPass), !0 === this.stencilWrite && (n.stencilWrite = this.stencilWrite), void 0 !== this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), !0 === this.polygonOffset && (n.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), void 0 !== this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), !0 === this.dithering && (n.dithering = !0), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), !0 === this.alphaHash && (n.alphaHash = !0), !0 === this.alphaToCoverage && (n.alphaToCoverage = !0), !0 === this.premultipliedAlpha && (n.premultipliedAlpha = !0), !0 === this.forceSinglePass && (n.forceSinglePass = !0), !0 === this.wireframe && (n.wireframe = !0), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), !0 === this.flatShading && (n.flatShading = !0), !1 === this.visible && (n.visible = !1), !1 === this.toneMapped && (n.toneMapped = !1), !1 === this.fog && (n.fog = !1), Object.keys(this.userData).length > 0 && (n.userData = this.userData), t) { + const t = i(e.textures), + r = i(e.images); + t.length > 0 && (n.textures = t), r.length > 0 && (n.images = r) + } + return n + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + this.name = e.name, this.blending = e.blending, this.side = e.side, this.vertexColors = e.vertexColors, this.opacity = e.opacity, this.transparent = e.transparent, this.blendSrc = e.blendSrc, this.blendDst = e.blendDst, this.blendEquation = e.blendEquation, this.blendSrcAlpha = e.blendSrcAlpha, this.blendDstAlpha = e.blendDstAlpha, this.blendEquationAlpha = e.blendEquationAlpha, this.blendColor.copy(e.blendColor), this.blendAlpha = e.blendAlpha, this.depthFunc = e.depthFunc, this.depthTest = e.depthTest, this.depthWrite = e.depthWrite, this.stencilWriteMask = e.stencilWriteMask, this.stencilFunc = e.stencilFunc, this.stencilRef = e.stencilRef, this.stencilFuncMask = e.stencilFuncMask, this.stencilFail = e.stencilFail, this.stencilZFail = e.stencilZFail, this.stencilZPass = e.stencilZPass, this.stencilWrite = e.stencilWrite; + const t = e.clippingPlanes; + let n = null; + if (null !== t) { + const e = t.length; + n = new Array(e); + for (let i = 0; i !== e; ++i) n[i] = t[i].clone() + } + return this.clippingPlanes = n, this.clipIntersection = e.clipIntersection, this.clipShadows = e.clipShadows, this.shadowSide = e.shadowSide, this.colorWrite = e.colorWrite, this.precision = e.precision, this.polygonOffset = e.polygonOffset, this.polygonOffsetFactor = e.polygonOffsetFactor, this.polygonOffsetUnits = e.polygonOffsetUnits, this.dithering = e.dithering, this.alphaTest = e.alphaTest, this.alphaHash = e.alphaHash, this.alphaToCoverage = e.alphaToCoverage, this.premultipliedAlpha = e.premultipliedAlpha, this.forceSinglePass = e.forceSinglePass, this.visible = e.visible, this.toneMapped = e.toneMapped, this.userData = JSON.parse(JSON.stringify(e.userData)), this + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + set needsUpdate(e) { + !0 === e && this.version++ + } + onBuild() { + console.warn("Material: onBuild() has been removed.") + } + } + class Ei extends bi { + constructor(e) { + super(), this.isMeshBasicMaterial = !0, this.type = "MeshBasicMaterial", this.color = new wi(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.envMapRotation = new Fn, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.color.copy(e.color), this.map = e.map, this.lightMap = e.lightMap, this.lightMapIntensity = e.lightMapIntensity, this.aoMap = e.aoMap, this.aoMapIntensity = e.aoMapIntensity, this.specularMap = e.specularMap, this.alphaMap = e.alphaMap, this.envMap = e.envMap, this.envMapRotation.copy(e.envMapRotation), this.combine = e.combine, this.reflectivity = e.reflectivity, this.refractionRatio = e.refractionRatio, this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this.wireframeLinecap = e.wireframeLinecap, this.wireframeLinejoin = e.wireframeLinejoin, this.fog = e.fog, this + } + } + const Si = new Zt, + Mi = new Et; + let Ti = 0; + class Ci { + constructor(e, t, n = !1) { + if (Array.isArray(e)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + this.isBufferAttribute = !0, Object.defineProperty(this, "id", { + value: Ti++ + }), this.name = "", this.array = e, this.itemSize = t, this.count = void 0 !== e ? e.length / t : 0, this.normalized = n, this.usage = lt, this.updateRanges = [], this.gpuType = J, this.version = 0 + } + onUploadCallback() {} + set needsUpdate(e) { + !0 === e && this.version++ + } + setUsage(e) { + return this.usage = e, this + } + addUpdateRange(e, t) { + this.updateRanges.push({ + start: e, + count: t + }) + } + clearUpdateRanges() { + this.updateRanges.length = 0 + } + copy(e) { + return this.name = e.name, this.array = new e.array.constructor(e.array), this.itemSize = e.itemSize, this.count = e.count, this.normalized = e.normalized, this.usage = e.usage, this.gpuType = e.gpuType, this + } + copyAt(e, t, n) { + e *= this.itemSize, n *= t.itemSize; + for (let i = 0, r = this.itemSize; i < r; i++) this.array[e + i] = t.array[n + i]; + return this + } + copyArray(e) { + return this.array.set(e), this + } + applyMatrix3(e) { + if (2 === this.itemSize) + for (let t = 0, n = this.count; t < n; t++) Mi.fromBufferAttribute(this, t), Mi.applyMatrix3(e), this.setXY(t, Mi.x, Mi.y); + else if (3 === this.itemSize) + for (let t = 0, n = this.count; t < n; t++) Si.fromBufferAttribute(this, t), Si.applyMatrix3(e), this.setXYZ(t, Si.x, Si.y, Si.z); + return this + } + applyMatrix4(e) { + for (let t = 0, n = this.count; t < n; t++) Si.fromBufferAttribute(this, t), Si.applyMatrix4(e), this.setXYZ(t, Si.x, Si.y, Si.z); + return this + } + applyNormalMatrix(e) { + for (let t = 0, n = this.count; t < n; t++) Si.fromBufferAttribute(this, t), Si.applyNormalMatrix(e), this.setXYZ(t, Si.x, Si.y, Si.z); + return this + } + transformDirection(e) { + for (let t = 0, n = this.count; t < n; t++) Si.fromBufferAttribute(this, t), Si.transformDirection(e), this.setXYZ(t, Si.x, Si.y, Si.z); + return this + } + set(e, t = 0) { + return this.array.set(e, t), this + } + getComponent(e, t) { + let n = this.array[e * this.itemSize + t]; + return this.normalized && (n = yt(n, this.array)), n + } + setComponent(e, t, n) { + return this.normalized && (n = xt(n, this.array)), this.array[e * this.itemSize + t] = n, this + } + getX(e) { + let t = this.array[e * this.itemSize]; + return this.normalized && (t = yt(t, this.array)), t + } + setX(e, t) { + return this.normalized && (t = xt(t, this.array)), this.array[e * this.itemSize] = t, this + } + getY(e) { + let t = this.array[e * this.itemSize + 1]; + return this.normalized && (t = yt(t, this.array)), t + } + setY(e, t) { + return this.normalized && (t = xt(t, this.array)), this.array[e * this.itemSize + 1] = t, this + } + getZ(e) { + let t = this.array[e * this.itemSize + 2]; + return this.normalized && (t = yt(t, this.array)), t + } + setZ(e, t) { + return this.normalized && (t = xt(t, this.array)), this.array[e * this.itemSize + 2] = t, this + } + getW(e) { + let t = this.array[e * this.itemSize + 3]; + return this.normalized && (t = yt(t, this.array)), t + } + setW(e, t) { + return this.normalized && (t = xt(t, this.array)), this.array[e * this.itemSize + 3] = t, this + } + setXY(e, t, n) { + return e *= this.itemSize, this.normalized && (t = xt(t, this.array), n = xt(n, this.array)), this.array[e + 0] = t, this.array[e + 1] = n, this + } + setXYZ(e, t, n, i) { + return e *= this.itemSize, this.normalized && (t = xt(t, this.array), n = xt(n, this.array), i = xt(i, this.array)), this.array[e + 0] = t, this.array[e + 1] = n, this.array[e + 2] = i, this + } + setXYZW(e, t, n, i, r) { + return e *= this.itemSize, this.normalized && (t = xt(t, this.array), n = xt(n, this.array), i = xt(i, this.array), r = xt(r, this.array)), this.array[e + 0] = t, this.array[e + 1] = n, this.array[e + 2] = i, this.array[e + 3] = r, this + } + onUpload(e) { + return this.onUploadCallback = e, this + } + clone() { + return new this.constructor(this.array, this.itemSize).copy(this) + } + toJSON() { + const e = { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.from(this.array), + normalized: this.normalized + }; + return "" !== this.name && (e.name = this.name), this.usage !== lt && (e.usage = this.usage), e + } + } + class Ii extends Ci { + constructor(e, t, n) { + super(new Uint16Array(e), t, n) + } + } + class Ri extends Ci { + constructor(e, t, n) { + super(new Uint32Array(e), t, n) + } + } + class Pi extends Ci { + constructor(e, t, n) { + super(new Float32Array(e), t, n) + } + } + let Bi = 0; + const Di = new Cn, + Li = new ti, + Ui = new Zt, + ki = new en, + Ni = new en, + Fi = new Zt; + class Oi extends dt { + constructor() { + super(), this.isBufferGeometry = !0, Object.defineProperty(this, "id", { + value: Bi++ + }), this.uuid = At(), this.name = "", this.type = "BufferGeometry", this.index = null, this.indirect = null, this.attributes = {}, this.morphAttributes = {}, this.morphTargetsRelative = !1, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.drawRange = { + start: 0, + count: 1 / 0 + }, this.userData = {} + } + getIndex() { + return this.index + } + setIndex(e) { + return Array.isArray(e) ? this.index = new(Tt(e) ? Ri : Ii)(e, 1) : this.index = e, this + } + setIndirect(e) { + return this.indirect = e, this + } + getIndirect() { + return this.indirect + } + getAttribute(e) { + return this.attributes[e] + } + setAttribute(e, t) { + return this.attributes[e] = t, this + } + deleteAttribute(e) { + return delete this.attributes[e], this + } + hasAttribute(e) { + return void 0 !== this.attributes[e] + } + addGroup(e, t, n = 0) { + this.groups.push({ + start: e, + count: t, + materialIndex: n + }) + } + clearGroups() { + this.groups = [] + } + setDrawRange(e, t) { + this.drawRange.start = e, this.drawRange.count = t + } + applyMatrix4(e) { + const t = this.attributes.position; + void 0 !== t && (t.applyMatrix4(e), t.needsUpdate = !0); + const n = this.attributes.normal; + if (void 0 !== n) { + const t = (new St).getNormalMatrix(e); + n.applyNormalMatrix(t), n.needsUpdate = !0 + } + const i = this.attributes.tangent; + return void 0 !== i && (i.transformDirection(e), i.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this + } + applyQuaternion(e) { + return Di.makeRotationFromQuaternion(e), this.applyMatrix4(Di), this + } + rotateX(e) { + return Di.makeRotationX(e), this.applyMatrix4(Di), this + } + rotateY(e) { + return Di.makeRotationY(e), this.applyMatrix4(Di), this + } + rotateZ(e) { + return Di.makeRotationZ(e), this.applyMatrix4(Di), this + } + translate(e, t, n) { + return Di.makeTranslation(e, t, n), this.applyMatrix4(Di), this + } + scale(e, t, n) { + return Di.makeScale(e, t, n), this.applyMatrix4(Di), this + } + lookAt(e) { + return Li.lookAt(e), Li.updateMatrix(), this.applyMatrix4(Li.matrix), this + } + center() { + return this.computeBoundingBox(), this.boundingBox.getCenter(Ui).negate(), this.translate(Ui.x, Ui.y, Ui.z), this + } + setFromPoints(e) { + const t = this.getAttribute("position"); + if (void 0 === t) { + const t = []; + for (let n = 0, i = e.length; n < i; n++) { + const i = e[n]; + t.push(i.x, i.y, i.z || 0) + } + this.setAttribute("position", new Pi(t, 3)) + } else { + const n = Math.min(e.length, t.count); + for (let i = 0; i < n; i++) { + const n = e[i]; + t.setXYZ(i, n.x, n.y, n.z || 0) + } + e.length > t.count && console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."), t.needsUpdate = !0 + } + return this + } + computeBoundingBox() { + null === this.boundingBox && (this.boundingBox = new en); + const e = this.attributes.position, + t = this.morphAttributes.position; + if (e && e.isGLBufferAttribute) return console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.", this), void this.boundingBox.set(new Zt(-1 / 0, -1 / 0, -1 / 0), new Zt(1 / 0, 1 / 0, 1 / 0)); + if (void 0 !== e) { + if (this.boundingBox.setFromBufferAttribute(e), t) + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e]; + ki.setFromBufferAttribute(n), this.morphTargetsRelative ? (Fi.addVectors(this.boundingBox.min, ki.min), this.boundingBox.expandByPoint(Fi), Fi.addVectors(this.boundingBox.max, ki.max), this.boundingBox.expandByPoint(Fi)) : (this.boundingBox.expandByPoint(ki.min), this.boundingBox.expandByPoint(ki.max)) + } + } else this.boundingBox.makeEmpty(); + (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this) + } + computeBoundingSphere() { + null === this.boundingSphere && (this.boundingSphere = new vn); + const e = this.attributes.position, + t = this.morphAttributes.position; + if (e && e.isGLBufferAttribute) return console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.", this), void this.boundingSphere.set(new Zt, 1 / 0); + if (e) { + const n = this.boundingSphere.center; + if (ki.setFromBufferAttribute(e), t) + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e]; + Ni.setFromBufferAttribute(n), this.morphTargetsRelative ? (Fi.addVectors(ki.min, Ni.min), ki.expandByPoint(Fi), Fi.addVectors(ki.max, Ni.max), ki.expandByPoint(Fi)) : (ki.expandByPoint(Ni.min), ki.expandByPoint(Ni.max)) + } + ki.getCenter(n); + let i = 0; + for (let t = 0, r = e.count; t < r; t++) Fi.fromBufferAttribute(e, t), i = Math.max(i, n.distanceToSquared(Fi)); + if (t) + for (let r = 0, a = t.length; r < a; r++) { + const a = t[r], + s = this.morphTargetsRelative; + for (let t = 0, r = a.count; t < r; t++) Fi.fromBufferAttribute(a, t), s && (Ui.fromBufferAttribute(e, t), Fi.add(Ui)), i = Math.max(i, n.distanceToSquared(Fi)) + } + this.boundingSphere.radius = Math.sqrt(i), isNaN(this.boundingSphere.radius) && console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this) + } + } + computeTangents() { + const e = this.index, + t = this.attributes; + if (null === e || void 0 === t.position || void 0 === t.normal || void 0 === t.uv) return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); + const n = t.position, + i = t.normal, + r = t.uv; + !1 === this.hasAttribute("tangent") && this.setAttribute("tangent", new Ci(new Float32Array(4 * n.count), 4)); + const a = this.getAttribute("tangent"), + s = [], + o = []; + for (let e = 0; e < n.count; e++) s[e] = new Zt, o[e] = new Zt; + const l = new Zt, + c = new Zt, + h = new Zt, + u = new Et, + d = new Et, + f = new Et, + p = new Zt, + m = new Zt; + + function g(e, t, i) { + l.fromBufferAttribute(n, e), c.fromBufferAttribute(n, t), h.fromBufferAttribute(n, i), u.fromBufferAttribute(r, e), d.fromBufferAttribute(r, t), f.fromBufferAttribute(r, i), c.sub(l), h.sub(l), d.sub(u), f.sub(u); + const a = 1 / (d.x * f.y - f.x * d.y); + isFinite(a) && (p.copy(c).multiplyScalar(f.y).addScaledVector(h, -d.y).multiplyScalar(a), m.copy(h).multiplyScalar(d.x).addScaledVector(c, -f.x).multiplyScalar(a), s[e].add(p), s[t].add(p), s[i].add(p), o[e].add(m), o[t].add(m), o[i].add(m)) + } + let A = this.groups; + 0 === A.length && (A = [{ + start: 0, + count: e.count + }]); + for (let t = 0, n = A.length; t < n; ++t) { + const n = A[t], + i = n.start; + for (let t = i, r = i + n.count; t < r; t += 3) g(e.getX(t + 0), e.getX(t + 1), e.getX(t + 2)) + } + const _ = new Zt, + v = new Zt, + w = new Zt, + y = new Zt; + + function x(e) { + w.fromBufferAttribute(i, e), y.copy(w); + const t = s[e]; + _.copy(t), _.sub(w.multiplyScalar(w.dot(t))).normalize(), v.crossVectors(y, t); + const n = v.dot(o[e]) < 0 ? -1 : 1; + a.setXYZW(e, _.x, _.y, _.z, n) + } + for (let t = 0, n = A.length; t < n; ++t) { + const n = A[t], + i = n.start; + for (let t = i, r = i + n.count; t < r; t += 3) x(e.getX(t + 0)), x(e.getX(t + 1)), x(e.getX(t + 2)) + } + } + computeVertexNormals() { + const e = this.index, + t = this.getAttribute("position"); + if (void 0 !== t) { + let n = this.getAttribute("normal"); + if (void 0 === n) n = new Ci(new Float32Array(3 * t.count), 3), this.setAttribute("normal", n); + else + for (let e = 0, t = n.count; e < t; e++) n.setXYZ(e, 0, 0, 0); + const i = new Zt, + r = new Zt, + a = new Zt, + s = new Zt, + o = new Zt, + l = new Zt, + c = new Zt, + h = new Zt; + if (e) + for (let u = 0, d = e.count; u < d; u += 3) { + const d = e.getX(u + 0), + f = e.getX(u + 1), + p = e.getX(u + 2); + i.fromBufferAttribute(t, d), r.fromBufferAttribute(t, f), a.fromBufferAttribute(t, p), c.subVectors(a, r), h.subVectors(i, r), c.cross(h), s.fromBufferAttribute(n, d), o.fromBufferAttribute(n, f), l.fromBufferAttribute(n, p), s.add(c), o.add(c), l.add(c), n.setXYZ(d, s.x, s.y, s.z), n.setXYZ(f, o.x, o.y, o.z), n.setXYZ(p, l.x, l.y, l.z) + } else + for (let e = 0, s = t.count; e < s; e += 3) i.fromBufferAttribute(t, e + 0), r.fromBufferAttribute(t, e + 1), a.fromBufferAttribute(t, e + 2), c.subVectors(a, r), h.subVectors(i, r), c.cross(h), n.setXYZ(e + 0, c.x, c.y, c.z), n.setXYZ(e + 1, c.x, c.y, c.z), n.setXYZ(e + 2, c.x, c.y, c.z); + this.normalizeNormals(), n.needsUpdate = !0 + } + } + normalizeNormals() { + const e = this.attributes.normal; + for (let t = 0, n = e.count; t < n; t++) Fi.fromBufferAttribute(e, t), Fi.normalize(), e.setXYZ(t, Fi.x, Fi.y, Fi.z) + } + toNonIndexed() { + function e(e, t) { + const n = e.array, + i = e.itemSize, + r = e.normalized, + a = new n.constructor(t.length * i); + let s = 0, + o = 0; + for (let r = 0, l = t.length; r < l; r++) { + s = e.isInterleavedBufferAttribute ? t[r] * e.data.stride + e.offset : t[r] * i; + for (let e = 0; e < i; e++) a[o++] = n[s++] + } + return new Ci(a, i, r) + } + if (null === this.index) return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."), this; + const t = new Oi, + n = this.index.array, + i = this.attributes; + for (const r in i) { + const a = e(i[r], n); + t.setAttribute(r, a) + } + const r = this.morphAttributes; + for (const i in r) { + const a = [], + s = r[i]; + for (let t = 0, i = s.length; t < i; t++) { + const i = e(s[t], n); + a.push(i) + } + t.morphAttributes[i] = a + } + t.morphTargetsRelative = this.morphTargetsRelative; + const a = this.groups; + for (let e = 0, n = a.length; e < n; e++) { + const n = a[e]; + t.addGroup(n.start, n.count, n.materialIndex) + } + return t + } + toJSON() { + const e = { + metadata: { + version: 4.6, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + if (e.uuid = this.uuid, e.type = this.type, "" !== this.name && (e.name = this.name), Object.keys(this.userData).length > 0 && (e.userData = this.userData), void 0 !== this.parameters) { + const t = this.parameters; + for (const n in t) void 0 !== t[n] && (e[n] = t[n]); + return e + } + e.data = { + attributes: {} + }; + const t = this.index; + null !== t && (e.data.index = { + type: t.array.constructor.name, + array: Array.prototype.slice.call(t.array) + }); + const n = this.attributes; + for (const t in n) { + const i = n[t]; + e.data.attributes[t] = i.toJSON(e.data) + } + const i = {}; + let r = !1; + for (const t in this.morphAttributes) { + const n = this.morphAttributes[t], + a = []; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + a.push(i.toJSON(e.data)) + } + a.length > 0 && (i[t] = a, r = !0) + } + r && (e.data.morphAttributes = i, e.data.morphTargetsRelative = this.morphTargetsRelative); + const a = this.groups; + a.length > 0 && (e.data.groups = JSON.parse(JSON.stringify(a))); + const s = this.boundingSphere; + return null !== s && (e.data.boundingSphere = { + center: s.center.toArray(), + radius: s.radius + }), e + } + clone() { + return (new this.constructor).copy(this) + } + copy(e) { + this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null; + const t = {}; + this.name = e.name; + const n = e.index; + null !== n && this.setIndex(n.clone(t)); + const i = e.attributes; + for (const e in i) { + const n = i[e]; + this.setAttribute(e, n.clone(t)) + } + const r = e.morphAttributes; + for (const e in r) { + const n = [], + i = r[e]; + for (let e = 0, r = i.length; e < r; e++) n.push(i[e].clone(t)); + this.morphAttributes[e] = n + } + this.morphTargetsRelative = e.morphTargetsRelative; + const a = e.groups; + for (let e = 0, t = a.length; e < t; e++) { + const t = a[e]; + this.addGroup(t.start, t.count, t.materialIndex) + } + const s = e.boundingBox; + null !== s && (this.boundingBox = s.clone()); + const o = e.boundingSphere; + return null !== o && (this.boundingSphere = o.clone()), this.drawRange.start = e.drawRange.start, this.drawRange.count = e.drawRange.count, this.userData = e.userData, this + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + } + const zi = new Cn, + Wi = new Tn, + Hi = new vn, + Vi = new Zt, + Gi = new Zt, + Qi = new Zt, + Xi = new Zt, + ji = new Zt, + qi = new Zt, + Yi = new Zt, + Ki = new Zt; + class Zi extends ti { + constructor(e = new Oi, t = new Ei) { + super(), this.isMesh = !0, this.type = "Mesh", this.geometry = e, this.material = t, this.morphTargetDictionary = void 0, this.morphTargetInfluences = void 0, this.updateMorphTargets() + } + copy(e, t) { + return super.copy(e, t), void 0 !== e.morphTargetInfluences && (this.morphTargetInfluences = e.morphTargetInfluences.slice()), void 0 !== e.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, e.morphTargetDictionary)), this.material = Array.isArray(e.material) ? e.material.slice() : e.material, this.geometry = e.geometry, this + } + updateMorphTargets() { + const e = this.geometry.morphAttributes, + t = Object.keys(e); + if (t.length > 0) { + const n = e[t[0]]; + if (void 0 !== n) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, t = n.length; e < t; e++) { + const t = n[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[t] = e + } + } + } + } + getVertexPosition(e, t) { + const n = this.geometry, + i = n.attributes.position, + r = n.morphAttributes.position, + a = n.morphTargetsRelative; + t.fromBufferAttribute(i, e); + const s = this.morphTargetInfluences; + if (r && s) { + qi.set(0, 0, 0); + for (let n = 0, i = r.length; n < i; n++) { + const i = s[n], + o = r[n]; + 0 !== i && (ji.fromBufferAttribute(o, e), a ? qi.addScaledVector(ji, i) : qi.addScaledVector(ji.sub(t), i)) + } + t.add(qi) + } + return t + } + raycast(e, t) { + const n = this.geometry, + i = this.material, + r = this.matrixWorld; + if (void 0 !== i) { + if (null === n.boundingSphere && n.computeBoundingSphere(), Hi.copy(n.boundingSphere), Hi.applyMatrix4(r), Wi.copy(e.ray).recast(e.near), !1 === Hi.containsPoint(Wi.origin)) { + if (null === Wi.intersectSphere(Hi, Vi)) return; + if (Wi.origin.distanceToSquared(Vi) > (e.far - e.near) ** 2) return + } + zi.copy(r).invert(), Wi.copy(e.ray).applyMatrix4(zi), null !== n.boundingBox && !1 === Wi.intersectsBox(n.boundingBox) || this._computeIntersections(e, t, Wi) + } + } + _computeIntersections(e, t, n) { + let i; + const r = this.geometry, + a = this.material, + s = r.index, + o = r.attributes.position, + l = r.attributes.uv, + c = r.attributes.uv1, + h = r.attributes.normal, + u = r.groups, + d = r.drawRange; + if (null !== s) + if (Array.isArray(a)) + for (let r = 0, o = u.length; r < o; r++) { + const o = u[r], + f = a[o.materialIndex]; + for (let r = Math.max(o.start, d.start), a = Math.min(s.count, Math.min(o.start + o.count, d.start + d.count)); r < a; r += 3) { + i = Ji(this, f, e, n, l, c, h, s.getX(r), s.getX(r + 1), s.getX(r + 2)), i && (i.faceIndex = Math.floor(r / 3), i.face.materialIndex = o.materialIndex, t.push(i)) + } + } else { + for (let r = Math.max(0, d.start), o = Math.min(s.count, d.start + d.count); r < o; r += 3) { + i = Ji(this, a, e, n, l, c, h, s.getX(r), s.getX(r + 1), s.getX(r + 2)), i && (i.faceIndex = Math.floor(r / 3), t.push(i)) + } + } else if (void 0 !== o) + if (Array.isArray(a)) + for (let r = 0, s = u.length; r < s; r++) { + const s = u[r], + f = a[s.materialIndex]; + for (let r = Math.max(s.start, d.start), a = Math.min(o.count, Math.min(s.start + s.count, d.start + d.count)); r < a; r += 3) { + i = Ji(this, f, e, n, l, c, h, r, r + 1, r + 2), i && (i.faceIndex = Math.floor(r / 3), i.face.materialIndex = s.materialIndex, t.push(i)) + } + } else { + for (let r = Math.max(0, d.start), s = Math.min(o.count, d.start + d.count); r < s; r += 3) { + i = Ji(this, a, e, n, l, c, h, r, r + 1, r + 2), i && (i.faceIndex = Math.floor(r / 3), t.push(i)) + } + } + } + } + + function Ji(e, t, n, i, r, a, s, o, l, c) { + e.getVertexPosition(o, Gi), e.getVertexPosition(l, Qi), e.getVertexPosition(c, Xi); + const h = function(e, t, n, i, r, a, s, o) { + let l; + if (l = 1 === t.side ? i.intersectTriangle(s, a, r, !0, o) : i.intersectTriangle(r, a, s, 0 === t.side, o), null === l) return null; + Ki.copy(o), Ki.applyMatrix4(e.matrixWorld); + const c = n.ray.origin.distanceTo(Ki); + return c < n.near || c > n.far ? null : { + distance: c, + point: Ki.clone(), + object: e + } + }(e, t, n, i, Gi, Qi, Xi, Yi); + if (h) { + const e = new Zt; + mi.getBarycoord(Yi, Gi, Qi, Xi, e), r && (h.uv = mi.getInterpolatedAttribute(r, o, l, c, e, new Et)), a && (h.uv1 = mi.getInterpolatedAttribute(a, o, l, c, e, new Et)), s && (h.normal = mi.getInterpolatedAttribute(s, o, l, c, e, new Zt), h.normal.dot(i.direction) > 0 && h.normal.multiplyScalar(-1)); + const t = { + a: o, + b: l, + c, + normal: new Zt, + materialIndex: 0 + }; + mi.getNormal(Gi, Qi, Xi, t.normal), h.face = t, h.barycoord = e + } + return h + } + class $i extends Oi { + constructor(e = 1, t = 1, n = 1, i = 1, r = 1, a = 1) { + super(), this.type = "BoxGeometry", this.parameters = { + width: e, + height: t, + depth: n, + widthSegments: i, + heightSegments: r, + depthSegments: a + }; + const s = this; + i = Math.floor(i), r = Math.floor(r), a = Math.floor(a); + const o = [], + l = [], + c = [], + h = []; + let u = 0, + d = 0; + + function f(e, t, n, i, r, a, f, p, m, g, A) { + const _ = a / m, + v = f / g, + w = a / 2, + y = f / 2, + x = p / 2, + b = m + 1, + E = g + 1; + let S = 0, + M = 0; + const T = new Zt; + for (let a = 0; a < E; a++) { + const s = a * v - y; + for (let o = 0; o < b; o++) { + const u = o * _ - w; + T[e] = u * i, T[t] = s * r, T[n] = x, l.push(T.x, T.y, T.z), T[e] = 0, T[t] = 0, T[n] = p > 0 ? 1 : -1, c.push(T.x, T.y, T.z), h.push(o / m), h.push(1 - a / g), S += 1 + } + } + for (let e = 0; e < g; e++) + for (let t = 0; t < m; t++) { + const n = u + t + b * e, + i = u + t + b * (e + 1), + r = u + (t + 1) + b * (e + 1), + a = u + (t + 1) + b * e; + o.push(n, i, a), o.push(i, r, a), M += 6 + } + s.addGroup(d, M, A), d += M, u += S + } + f("z", "y", "x", -1, -1, n, t, e, a, r, 0), f("z", "y", "x", 1, -1, n, t, -e, a, r, 1), f("x", "z", "y", 1, 1, e, n, t, i, a, 2), f("x", "z", "y", 1, -1, e, n, -t, i, a, 3), f("x", "y", "z", 1, -1, e, t, n, i, r, 4), f("x", "y", "z", -1, -1, e, t, -n, i, r, 5), this.setIndex(o), this.setAttribute("position", new Pi(l, 3)), this.setAttribute("normal", new Pi(c, 3)), this.setAttribute("uv", new Pi(h, 2)) + } + copy(e) { + return super.copy(e), this.parameters = Object.assign({}, e.parameters), this + } + static fromJSON(e) { + return new $i(e.width, e.height, e.depth, e.widthSegments, e.heightSegments, e.depthSegments) + } + } + + function er(e) { + const t = {}; + for (const n in e) { + t[n] = {}; + for (const i in e[n]) { + const r = e[n][i]; + r && (r.isColor || r.isMatrix3 || r.isMatrix4 || r.isVector2 || r.isVector3 || r.isVector4 || r.isTexture || r.isQuaternion) ? r.isRenderTargetTexture ? (console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."), t[n][i] = null) : t[n][i] = r.clone() : Array.isArray(r) ? t[n][i] = r.slice() : t[n][i] = r + } + } + return t + } + + function tr(e) { + const t = {}; + for (let n = 0; n < e.length; n++) { + const i = er(e[n]); + for (const e in i) t[e] = i[e] + } + return t + } + + function nr(e) { + const t = e.getRenderTarget(); + return null === t ? e.outputColorSpace : !0 === t.isXRRenderTarget ? t.texture.colorSpace : Ut.workingColorSpace + } + const ir = { + clone: er, + merge: tr + }; + class rr extends bi { + constructor(e) { + super(), this.isShaderMaterial = !0, this.type = "ShaderMaterial", this.defines = {}, this.uniforms = {}, this.uniformsGroups = [], this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", this.linewidth = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.lights = !1, this.clipping = !1, this.forceSinglePass = !0, this.extensions = { + clipCullDistance: !1, + multiDraw: !1 + }, this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv1: [0, 0] + }, this.index0AttributeName = void 0, this.uniformsNeedUpdate = !1, this.glslVersion = null, void 0 !== e && this.setValues(e) + } + copy(e) { + return super.copy(e), this.fragmentShader = e.fragmentShader, this.vertexShader = e.vertexShader, this.uniforms = er(e.uniforms), this.uniformsGroups = function(e) { + const t = []; + for (let n = 0; n < e.length; n++) t.push(e[n].clone()); + return t + }(e.uniformsGroups), this.defines = Object.assign({}, e.defines), this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this.fog = e.fog, this.lights = e.lights, this.clipping = e.clipping, this.extensions = Object.assign({}, e.extensions), this.glslVersion = e.glslVersion, this + } + toJSON(e) { + const t = super.toJSON(e); + t.glslVersion = this.glslVersion, t.uniforms = {}; + for (const n in this.uniforms) { + const i = this.uniforms[n].value; + i && i.isTexture ? t.uniforms[n] = { + type: "t", + value: i.toJSON(e).uuid + } : i && i.isColor ? t.uniforms[n] = { + type: "c", + value: i.getHex() + } : i && i.isVector2 ? t.uniforms[n] = { + type: "v2", + value: i.toArray() + } : i && i.isVector3 ? t.uniforms[n] = { + type: "v3", + value: i.toArray() + } : i && i.isVector4 ? t.uniforms[n] = { + type: "v4", + value: i.toArray() + } : i && i.isMatrix3 ? t.uniforms[n] = { + type: "m3", + value: i.toArray() + } : i && i.isMatrix4 ? t.uniforms[n] = { + type: "m4", + value: i.toArray() + } : t.uniforms[n] = { + value: i + } + } + Object.keys(this.defines).length > 0 && (t.defines = this.defines), t.vertexShader = this.vertexShader, t.fragmentShader = this.fragmentShader, t.lights = this.lights, t.clipping = this.clipping; + const n = {}; + for (const e in this.extensions) !0 === this.extensions[e] && (n[e] = !0); + return Object.keys(n).length > 0 && (t.extensions = n), t + } + } + class ar extends ti { + constructor() { + super(), this.isCamera = !0, this.type = "Camera", this.matrixWorldInverse = new Cn, this.projectionMatrix = new Cn, this.projectionMatrixInverse = new Cn, this.coordinateSystem = ht + } + copy(e, t) { + return super.copy(e, t), this.matrixWorldInverse.copy(e.matrixWorldInverse), this.projectionMatrix.copy(e.projectionMatrix), this.projectionMatrixInverse.copy(e.projectionMatrixInverse), this.coordinateSystem = e.coordinateSystem, this + } + getWorldDirection(e) { + return super.getWorldDirection(e).negate() + } + updateMatrixWorld(e) { + super.updateMatrixWorld(e), this.matrixWorldInverse.copy(this.matrixWorld).invert() + } + updateWorldMatrix(e, t) { + super.updateWorldMatrix(e, t), this.matrixWorldInverse.copy(this.matrixWorld).invert() + } + clone() { + return (new this.constructor).copy(this) + } + } + const sr = new Zt, + or = new Et, + lr = new Et; + class cr extends ar { + constructor(e = 50, t = 1, n = .1, i = 2e3) { + super(), this.isPerspectiveCamera = !0, this.type = "PerspectiveCamera", this.fov = e, this.zoom = 1, this.near = n, this.far = i, this.focus = 10, this.aspect = t, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix() + } + copy(e, t) { + return super.copy(e, t), this.fov = e.fov, this.zoom = e.zoom, this.near = e.near, this.far = e.far, this.focus = e.focus, this.aspect = e.aspect, this.view = null === e.view ? null : Object.assign({}, e.view), this.filmGauge = e.filmGauge, this.filmOffset = e.filmOffset, this + } + setFocalLength(e) { + const t = .5 * this.getFilmHeight() / e; + this.fov = 2 * gt * Math.atan(t), this.updateProjectionMatrix() + } + getFocalLength() { + const e = Math.tan(.5 * mt * this.fov); + return .5 * this.getFilmHeight() / e + } + getEffectiveFOV() { + return 2 * gt * Math.atan(Math.tan(.5 * mt * this.fov) / this.zoom) + } + getFilmWidth() { + return this.filmGauge * Math.min(this.aspect, 1) + } + getFilmHeight() { + return this.filmGauge / Math.max(this.aspect, 1) + } + getViewBounds(e, t, n) { + sr.set(-1, -1, .5).applyMatrix4(this.projectionMatrixInverse), t.set(sr.x, sr.y).multiplyScalar(-e / sr.z), sr.set(1, 1, .5).applyMatrix4(this.projectionMatrixInverse), n.set(sr.x, sr.y).multiplyScalar(-e / sr.z) + } + getViewSize(e, t) { + return this.getViewBounds(e, or, lr), t.subVectors(lr, or) + } + setViewOffset(e, t, n, i, r, a) { + this.aspect = e / t, null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = !0, this.view.fullWidth = e, this.view.fullHeight = t, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = a, this.updateProjectionMatrix() + } + clearViewOffset() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + } + updateProjectionMatrix() { + const e = this.near; + let t = e * Math.tan(.5 * mt * this.fov) / this.zoom, + n = 2 * t, + i = this.aspect * n, + r = -.5 * i; + const a = this.view; + if (null !== this.view && this.view.enabled) { + const e = a.fullWidth, + s = a.fullHeight; + r += a.offsetX * i / e, t -= a.offsetY * n / s, i *= a.width / e, n *= a.height / s + } + const s = this.filmOffset; + 0 !== s && (r += e * s / this.getFilmWidth()), this.projectionMatrix.makePerspective(r, r + i, t, t - n, e, this.far, this.coordinateSystem), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + } + toJSON(e) { + const t = super.toJSON(e); + return t.object.fov = this.fov, t.object.zoom = this.zoom, t.object.near = this.near, t.object.far = this.far, t.object.focus = this.focus, t.object.aspect = this.aspect, null !== this.view && (t.object.view = Object.assign({}, this.view)), t.object.filmGauge = this.filmGauge, t.object.filmOffset = this.filmOffset, t + } + } + const hr = -90; + class ur extends ti { + constructor(e, t, n) { + super(), this.type = "CubeCamera", this.renderTarget = n, this.coordinateSystem = null, this.activeMipmapLevel = 0; + const i = new cr(hr, 1, e, t); + i.layers = this.layers, this.add(i); + const r = new cr(hr, 1, e, t); + r.layers = this.layers, this.add(r); + const a = new cr(hr, 1, e, t); + a.layers = this.layers, this.add(a); + const s = new cr(hr, 1, e, t); + s.layers = this.layers, this.add(s); + const o = new cr(hr, 1, e, t); + o.layers = this.layers, this.add(o); + const l = new cr(hr, 1, e, t); + l.layers = this.layers, this.add(l) + } + updateCoordinateSystem() { + const e = this.coordinateSystem, + t = this.children.concat(), + [n, i, r, a, s, o] = t; + for (const e of t) this.remove(e); + if (e === ht) n.up.set(0, 1, 0), n.lookAt(1, 0, 0), i.up.set(0, 1, 0), i.lookAt(-1, 0, 0), r.up.set(0, 0, -1), r.lookAt(0, 1, 0), a.up.set(0, 0, 1), a.lookAt(0, -1, 0), s.up.set(0, 1, 0), s.lookAt(0, 0, 1), o.up.set(0, 1, 0), o.lookAt(0, 0, -1); + else { + if (e !== ut) throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: " + e); + n.up.set(0, -1, 0), n.lookAt(-1, 0, 0), i.up.set(0, -1, 0), i.lookAt(1, 0, 0), r.up.set(0, 0, 1), r.lookAt(0, 1, 0), a.up.set(0, 0, -1), a.lookAt(0, -1, 0), s.up.set(0, -1, 0), s.lookAt(0, 0, 1), o.up.set(0, -1, 0), o.lookAt(0, 0, -1) + } + for (const e of t) this.add(e), e.updateMatrixWorld() + } + update(e, t) { + null === this.parent && this.updateMatrixWorld(); + const { + renderTarget: n, + activeMipmapLevel: i + } = this; + this.coordinateSystem !== e.coordinateSystem && (this.coordinateSystem = e.coordinateSystem, this.updateCoordinateSystem()); + const [r, a, s, o, l, c] = this.children, h = e.getRenderTarget(), u = e.getActiveCubeFace(), d = e.getActiveMipmapLevel(), f = e.xr.enabled; + e.xr.enabled = !1; + const p = n.texture.generateMipmaps; + n.texture.generateMipmaps = !1, e.setRenderTarget(n, 0, i), e.render(t, r), e.setRenderTarget(n, 1, i), e.render(t, a), e.setRenderTarget(n, 2, i), e.render(t, s), e.setRenderTarget(n, 3, i), e.render(t, o), e.setRenderTarget(n, 4, i), e.render(t, l), n.texture.generateMipmaps = p, e.setRenderTarget(n, 5, i), e.render(t, c), e.setRenderTarget(h, u, d), e.xr.enabled = f, n.texture.needsPMREMUpdate = !0 + } + } + class dr extends Gt { + constructor(e, t, n, i, r, a, s, o, l, c) { + super(e = void 0 !== e ? e : [], t = void 0 !== t ? t : B, n, i, r, a, s, o, l, c), this.isCubeTexture = !0, this.flipY = !1 + } + get images() { + return this.image + } + set images(e) { + this.image = e + } + } + class fr extends jt { + constructor(e = 1, t = {}) { + super(e, e, t), this.isWebGLCubeRenderTarget = !0; + const n = { + width: e, + height: e, + depth: 1 + }, + i = [n, n, n, n, n, n]; + this.texture = new dr(i, t.mapping, t.wrapS, t.wrapT, t.magFilter, t.minFilter, t.format, t.type, t.anisotropy, t.colorSpace), this.texture.isRenderTargetTexture = !0, this.texture.generateMipmaps = void 0 !== t.generateMipmaps && t.generateMipmaps, this.texture.minFilter = void 0 !== t.minFilter ? t.minFilter : V + } + fromEquirectangularTexture(e, t) { + this.texture.type = t.type, this.texture.colorSpace = t.colorSpace, this.texture.generateMipmaps = t.generateMipmaps, this.texture.minFilter = t.minFilter, this.texture.magFilter = t.magFilter; + const n = { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: "\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t", + fragmentShader: "\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t" + }, + i = new $i(5, 5, 5), + r = new rr({ + name: "CubemapFromEquirect", + uniforms: er(n.uniforms), + vertexShader: n.vertexShader, + fragmentShader: n.fragmentShader, + side: 1, + blending: 0 + }); + r.uniforms.tEquirect.value = t; + const a = new Zi(i, r), + s = t.minFilter; + t.minFilter === Q && (t.minFilter = V); + return new ur(1, 10, this).update(e, a), t.minFilter = s, a.geometry.dispose(), a.material.dispose(), this + } + clear(e, t, n, i) { + const r = e.getRenderTarget(); + for (let r = 0; r < 6; r++) e.setRenderTarget(this, r), e.clear(t, n, i); + e.setRenderTarget(r) + } + } + class pr extends ti { + constructor() { + super(), this.isGroup = !0, this.type = "Group" + } + } + const mr = { + type: "move" + }; + class gr { + constructor() { + this._targetRay = null, this._grip = null, this._hand = null + } + getHandSpace() { + return null === this._hand && (this._hand = new pr, this._hand.matrixAutoUpdate = !1, this._hand.visible = !1, this._hand.joints = {}, this._hand.inputState = { + pinching: !1 + }), this._hand + } + getTargetRaySpace() { + return null === this._targetRay && (this._targetRay = new pr, this._targetRay.matrixAutoUpdate = !1, this._targetRay.visible = !1, this._targetRay.hasLinearVelocity = !1, this._targetRay.linearVelocity = new Zt, this._targetRay.hasAngularVelocity = !1, this._targetRay.angularVelocity = new Zt), this._targetRay + } + getGripSpace() { + return null === this._grip && (this._grip = new pr, this._grip.matrixAutoUpdate = !1, this._grip.visible = !1, this._grip.hasLinearVelocity = !1, this._grip.linearVelocity = new Zt, this._grip.hasAngularVelocity = !1, this._grip.angularVelocity = new Zt), this._grip + } + dispatchEvent(e) { + return null !== this._targetRay && this._targetRay.dispatchEvent(e), null !== this._grip && this._grip.dispatchEvent(e), null !== this._hand && this._hand.dispatchEvent(e), this + } + connect(e) { + if (e && e.hand) { + const t = this._hand; + if (t) + for (const n of e.hand.values()) this._getHandJoint(t, n) + } + return this.dispatchEvent({ + type: "connected", + data: e + }), this + } + disconnect(e) { + return this.dispatchEvent({ + type: "disconnected", + data: e + }), null !== this._targetRay && (this._targetRay.visible = !1), null !== this._grip && (this._grip.visible = !1), null !== this._hand && (this._hand.visible = !1), this + } + update(e, t, n) { + let i = null, + r = null, + a = null; + const s = this._targetRay, + o = this._grip, + l = this._hand; + if (e && "visible-blurred" !== t.session.visibilityState) { + if (l && e.hand) { + a = !0; + for (const i of e.hand.values()) { + const e = t.getJointPose(i, n), + r = this._getHandJoint(l, i); + null !== e && (r.matrix.fromArray(e.transform.matrix), r.matrix.decompose(r.position, r.rotation, r.scale), r.matrixWorldNeedsUpdate = !0, r.jointRadius = e.radius), r.visible = null !== e + } + const i = l.joints["index-finger-tip"], + r = l.joints["thumb-tip"], + s = i.position.distanceTo(r.position), + o = .02, + c = .005; + l.inputState.pinching && s > o + c ? (l.inputState.pinching = !1, this.dispatchEvent({ + type: "pinchend", + handedness: e.handedness, + target: this + })) : !l.inputState.pinching && s <= o - c && (l.inputState.pinching = !0, this.dispatchEvent({ + type: "pinchstart", + handedness: e.handedness, + target: this + })) + } else null !== o && e.gripSpace && (r = t.getPose(e.gripSpace, n), null !== r && (o.matrix.fromArray(r.transform.matrix), o.matrix.decompose(o.position, o.rotation, o.scale), o.matrixWorldNeedsUpdate = !0, r.linearVelocity ? (o.hasLinearVelocity = !0, o.linearVelocity.copy(r.linearVelocity)) : o.hasLinearVelocity = !1, r.angularVelocity ? (o.hasAngularVelocity = !0, o.angularVelocity.copy(r.angularVelocity)) : o.hasAngularVelocity = !1)); + null !== s && (i = t.getPose(e.targetRaySpace, n), null === i && null !== r && (i = r), null !== i && (s.matrix.fromArray(i.transform.matrix), s.matrix.decompose(s.position, s.rotation, s.scale), s.matrixWorldNeedsUpdate = !0, i.linearVelocity ? (s.hasLinearVelocity = !0, s.linearVelocity.copy(i.linearVelocity)) : s.hasLinearVelocity = !1, i.angularVelocity ? (s.hasAngularVelocity = !0, s.angularVelocity.copy(i.angularVelocity)) : s.hasAngularVelocity = !1, this.dispatchEvent(mr))) + } + return null !== s && (s.visible = null !== i), null !== o && (o.visible = null !== r), null !== l && (l.visible = null !== a), this + } + _getHandJoint(e, t) { + if (void 0 === e.joints[t.jointName]) { + const n = new pr; + n.matrixAutoUpdate = !1, n.visible = !1, e.joints[t.jointName] = n, e.add(n) + } + return e.joints[t.jointName] + } + } + class Ar { + constructor(e, t = 1, n = 1e3) { + this.isFog = !0, this.name = "", this.color = new wi(e), this.near = t, this.far = n + } + clone() { + return new Ar(this.color, this.near, this.far) + } + toJSON() { + return { + type: "Fog", + name: this.name, + color: this.color.getHex(), + near: this.near, + far: this.far + } + } + } + class _r extends ti { + constructor() { + super(), this.isScene = !0, this.type = "Scene", this.background = null, this.environment = null, this.fog = null, this.backgroundBlurriness = 0, this.backgroundIntensity = 1, this.backgroundRotation = new Fn, this.environmentIntensity = 1, this.environmentRotation = new Fn, this.overrideMaterial = null, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + copy(e, t) { + return super.copy(e, t), null !== e.background && (this.background = e.background.clone()), null !== e.environment && (this.environment = e.environment.clone()), null !== e.fog && (this.fog = e.fog.clone()), this.backgroundBlurriness = e.backgroundBlurriness, this.backgroundIntensity = e.backgroundIntensity, this.backgroundRotation.copy(e.backgroundRotation), this.environmentIntensity = e.environmentIntensity, this.environmentRotation.copy(e.environmentRotation), null !== e.overrideMaterial && (this.overrideMaterial = e.overrideMaterial.clone()), this.matrixAutoUpdate = e.matrixAutoUpdate, this + } + toJSON(e) { + const t = super.toJSON(e); + return null !== this.fog && (t.object.fog = this.fog.toJSON()), this.backgroundBlurriness > 0 && (t.object.backgroundBlurriness = this.backgroundBlurriness), 1 !== this.backgroundIntensity && (t.object.backgroundIntensity = this.backgroundIntensity), t.object.backgroundRotation = this.backgroundRotation.toArray(), 1 !== this.environmentIntensity && (t.object.environmentIntensity = this.environmentIntensity), t.object.environmentRotation = this.environmentRotation.toArray(), t + } + } + class vr { + constructor(e, t) { + this.isInterleavedBuffer = !0, this.array = e, this.stride = t, this.count = void 0 !== e ? e.length / t : 0, this.usage = lt, this.updateRanges = [], this.version = 0, this.uuid = At() + } + onUploadCallback() {} + set needsUpdate(e) { + !0 === e && this.version++ + } + setUsage(e) { + return this.usage = e, this + } + addUpdateRange(e, t) { + this.updateRanges.push({ + start: e, + count: t + }) + } + clearUpdateRanges() { + this.updateRanges.length = 0 + } + copy(e) { + return this.array = new e.array.constructor(e.array), this.count = e.count, this.stride = e.stride, this.usage = e.usage, this + } + copyAt(e, t, n) { + e *= this.stride, n *= t.stride; + for (let i = 0, r = this.stride; i < r; i++) this.array[e + i] = t.array[n + i]; + return this + } + set(e, t = 0) { + return this.array.set(e, t), this + } + clone(e) { + void 0 === e.arrayBuffers && (e.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = At()), void 0 === e.arrayBuffers[this.array.buffer._uuid] && (e.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer); + const t = new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]), + n = new this.constructor(t, this.stride); + return n.setUsage(this.usage), n + } + onUpload(e) { + return this.onUploadCallback = e, this + } + toJSON(e) { + return void 0 === e.arrayBuffers && (e.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = At()), void 0 === e.arrayBuffers[this.array.buffer._uuid] && (e.arrayBuffers[this.array.buffer._uuid] = Array.from(new Uint32Array(this.array.buffer))), { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + } + } + } + const wr = new Zt; + class yr { + constructor(e, t, n, i = !1) { + this.isInterleavedBufferAttribute = !0, this.name = "", this.data = e, this.itemSize = t, this.offset = n, this.normalized = i + } + get count() { + return this.data.count + } + get array() { + return this.data.array + } + set needsUpdate(e) { + this.data.needsUpdate = e + } + applyMatrix4(e) { + for (let t = 0, n = this.data.count; t < n; t++) wr.fromBufferAttribute(this, t), wr.applyMatrix4(e), this.setXYZ(t, wr.x, wr.y, wr.z); + return this + } + applyNormalMatrix(e) { + for (let t = 0, n = this.count; t < n; t++) wr.fromBufferAttribute(this, t), wr.applyNormalMatrix(e), this.setXYZ(t, wr.x, wr.y, wr.z); + return this + } + transformDirection(e) { + for (let t = 0, n = this.count; t < n; t++) wr.fromBufferAttribute(this, t), wr.transformDirection(e), this.setXYZ(t, wr.x, wr.y, wr.z); + return this + } + getComponent(e, t) { + let n = this.array[e * this.data.stride + this.offset + t]; + return this.normalized && (n = yt(n, this.array)), n + } + setComponent(e, t, n) { + return this.normalized && (n = xt(n, this.array)), this.data.array[e * this.data.stride + this.offset + t] = n, this + } + setX(e, t) { + return this.normalized && (t = xt(t, this.array)), this.data.array[e * this.data.stride + this.offset] = t, this + } + setY(e, t) { + return this.normalized && (t = xt(t, this.array)), this.data.array[e * this.data.stride + this.offset + 1] = t, this + } + setZ(e, t) { + return this.normalized && (t = xt(t, this.array)), this.data.array[e * this.data.stride + this.offset + 2] = t, this + } + setW(e, t) { + return this.normalized && (t = xt(t, this.array)), this.data.array[e * this.data.stride + this.offset + 3] = t, this + } + getX(e) { + let t = this.data.array[e * this.data.stride + this.offset]; + return this.normalized && (t = yt(t, this.array)), t + } + getY(e) { + let t = this.data.array[e * this.data.stride + this.offset + 1]; + return this.normalized && (t = yt(t, this.array)), t + } + getZ(e) { + let t = this.data.array[e * this.data.stride + this.offset + 2]; + return this.normalized && (t = yt(t, this.array)), t + } + getW(e) { + let t = this.data.array[e * this.data.stride + this.offset + 3]; + return this.normalized && (t = yt(t, this.array)), t + } + setXY(e, t, n) { + return e = e * this.data.stride + this.offset, this.normalized && (t = xt(t, this.array), n = xt(n, this.array)), this.data.array[e + 0] = t, this.data.array[e + 1] = n, this + } + setXYZ(e, t, n, i) { + return e = e * this.data.stride + this.offset, this.normalized && (t = xt(t, this.array), n = xt(n, this.array), i = xt(i, this.array)), this.data.array[e + 0] = t, this.data.array[e + 1] = n, this.data.array[e + 2] = i, this + } + setXYZW(e, t, n, i, r) { + return e = e * this.data.stride + this.offset, this.normalized && (t = xt(t, this.array), n = xt(n, this.array), i = xt(i, this.array), r = xt(r, this.array)), this.data.array[e + 0] = t, this.data.array[e + 1] = n, this.data.array[e + 2] = i, this.data.array[e + 3] = r, this + } + clone(e) { + if (void 0 === e) { + console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data."); + const e = []; + for (let t = 0; t < this.count; t++) { + const n = t * this.data.stride + this.offset; + for (let t = 0; t < this.itemSize; t++) e.push(this.data.array[n + t]) + } + return new Ci(new this.array.constructor(e), this.itemSize, this.normalized) + } + return void 0 === e.interleavedBuffers && (e.interleavedBuffers = {}), void 0 === e.interleavedBuffers[this.data.uuid] && (e.interleavedBuffers[this.data.uuid] = this.data.clone(e)), new yr(e.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized) + } + toJSON(e) { + if (void 0 === e) { + console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data."); + const e = []; + for (let t = 0; t < this.count; t++) { + const n = t * this.data.stride + this.offset; + for (let t = 0; t < this.itemSize; t++) e.push(this.data.array[n + t]) + } + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: e, + normalized: this.normalized + } + } + return void 0 === e.interleavedBuffers && (e.interleavedBuffers = {}), void 0 === e.interleavedBuffers[this.data.uuid] && (e.interleavedBuffers[this.data.uuid] = this.data.toJSON(e)), { + isInterleavedBufferAttribute: !0, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + } + } + } + const xr = new Zt, + br = new Qt, + Er = new Qt, + Sr = new Zt, + Mr = new Cn, + Tr = new Zt, + Cr = new vn, + Ir = new Cn, + Rr = new Tn; + class Pr extends Zi { + constructor(e, t) { + super(e, t), this.isSkinnedMesh = !0, this.type = "SkinnedMesh", this.bindMode = P, this.bindMatrix = new Cn, this.bindMatrixInverse = new Cn, this.boundingBox = null, this.boundingSphere = null + } + computeBoundingBox() { + const e = this.geometry; + null === this.boundingBox && (this.boundingBox = new en), this.boundingBox.makeEmpty(); + const t = e.getAttribute("position"); + for (let e = 0; e < t.count; e++) this.getVertexPosition(e, Tr), this.boundingBox.expandByPoint(Tr) + } + computeBoundingSphere() { + const e = this.geometry; + null === this.boundingSphere && (this.boundingSphere = new vn), this.boundingSphere.makeEmpty(); + const t = e.getAttribute("position"); + for (let e = 0; e < t.count; e++) this.getVertexPosition(e, Tr), this.boundingSphere.expandByPoint(Tr) + } + copy(e, t) { + return super.copy(e, t), this.bindMode = e.bindMode, this.bindMatrix.copy(e.bindMatrix), this.bindMatrixInverse.copy(e.bindMatrixInverse), this.skeleton = e.skeleton, null !== e.boundingBox && (this.boundingBox = e.boundingBox.clone()), null !== e.boundingSphere && (this.boundingSphere = e.boundingSphere.clone()), this + } + raycast(e, t) { + const n = this.material, + i = this.matrixWorld; + void 0 !== n && (null === this.boundingSphere && this.computeBoundingSphere(), Cr.copy(this.boundingSphere), Cr.applyMatrix4(i), !1 !== e.ray.intersectsSphere(Cr) && (Ir.copy(i).invert(), Rr.copy(e.ray).applyMatrix4(Ir), null !== this.boundingBox && !1 === Rr.intersectsBox(this.boundingBox) || this._computeIntersections(e, t, Rr))) + } + getVertexPosition(e, t) { + return super.getVertexPosition(e, t), this.applyBoneTransform(e, t), t + } + bind(e, t) { + this.skeleton = e, void 0 === t && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), t = this.matrixWorld), this.bindMatrix.copy(t), this.bindMatrixInverse.copy(t).invert() + } + pose() { + this.skeleton.pose() + } + normalizeSkinWeights() { + const e = new Qt, + t = this.geometry.attributes.skinWeight; + for (let n = 0, i = t.count; n < i; n++) { + e.fromBufferAttribute(t, n); + const i = 1 / e.manhattanLength(); + i !== 1 / 0 ? e.multiplyScalar(i) : e.set(1, 0, 0, 0), t.setXYZW(n, e.x, e.y, e.z, e.w) + } + } + updateMatrixWorld(e) { + super.updateMatrixWorld(e), this.bindMode === P ? this.bindMatrixInverse.copy(this.matrixWorld).invert() : "detached" === this.bindMode ? this.bindMatrixInverse.copy(this.bindMatrix).invert() : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) + } + applyBoneTransform(e, t) { + const n = this.skeleton, + i = this.geometry; + br.fromBufferAttribute(i.attributes.skinIndex, e), Er.fromBufferAttribute(i.attributes.skinWeight, e), xr.copy(t).applyMatrix4(this.bindMatrix), t.set(0, 0, 0); + for (let e = 0; e < 4; e++) { + const i = Er.getComponent(e); + if (0 !== i) { + const r = br.getComponent(e); + Mr.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]), t.addScaledVector(Sr.copy(xr).applyMatrix4(Mr), i) + } + } + return t.applyMatrix4(this.bindMatrixInverse) + } + } + class Br extends ti { + constructor() { + super(), this.isBone = !0, this.type = "Bone" + } + } + class Dr extends Gt { + constructor(e = null, t = 1, n = 1, i, r, a, s, o, l = 1003, c = 1003, h, u) { + super(null, a, s, o, l, c, i, r, h, u), this.isDataTexture = !0, this.image = { + data: e, + width: t, + height: n + }, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1 + } + } + const Lr = new Cn, + Ur = new Cn; + class kr { + constructor(e = [], t = []) { + this.uuid = At(), this.bones = e.slice(0), this.boneInverses = t, this.boneMatrices = null, this.boneTexture = null, this.init() + } + init() { + const e = this.bones, + t = this.boneInverses; + if (this.boneMatrices = new Float32Array(16 * e.length), 0 === t.length) this.calculateInverses(); + else if (e.length !== t.length) { + console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."), this.boneInverses = []; + for (let e = 0, t = this.bones.length; e < t; e++) this.boneInverses.push(new Cn) + } + } + calculateInverses() { + this.boneInverses.length = 0; + for (let e = 0, t = this.bones.length; e < t; e++) { + const t = new Cn; + this.bones[e] && t.copy(this.bones[e].matrixWorld).invert(), this.boneInverses.push(t) + } + } + pose() { + for (let e = 0, t = this.bones.length; e < t; e++) { + const t = this.bones[e]; + t && t.matrixWorld.copy(this.boneInverses[e]).invert() + } + for (let e = 0, t = this.bones.length; e < t; e++) { + const t = this.bones[e]; + t && (t.parent && t.parent.isBone ? (t.matrix.copy(t.parent.matrixWorld).invert(), t.matrix.multiply(t.matrixWorld)) : t.matrix.copy(t.matrixWorld), t.matrix.decompose(t.position, t.quaternion, t.scale)) + } + } + update() { + const e = this.bones, + t = this.boneInverses, + n = this.boneMatrices, + i = this.boneTexture; + for (let i = 0, r = e.length; i < r; i++) { + const r = e[i] ? e[i].matrixWorld : Ur; + Lr.multiplyMatrices(r, t[i]), Lr.toArray(n, 16 * i) + } + null !== i && (i.needsUpdate = !0) + } + clone() { + return new kr(this.bones, this.boneInverses) + } + computeBoneTexture() { + let e = Math.sqrt(4 * this.bones.length); + e = 4 * Math.ceil(e / 4), e = Math.max(e, 4); + const t = new Float32Array(e * e * 4); + t.set(this.boneMatrices); + const n = new Dr(t, e, e, re, J); + return n.needsUpdate = !0, this.boneMatrices = t, this.boneTexture = n, this + } + getBoneByName(e) { + for (let t = 0, n = this.bones.length; t < n; t++) { + const n = this.bones[t]; + if (n.name === e) return n + } + } + dispose() { + null !== this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = null) + } + fromJSON(e, t) { + this.uuid = e.uuid; + for (let n = 0, i = e.bones.length; n < i; n++) { + const i = e.bones[n]; + let r = t[i]; + void 0 === r && (console.warn("THREE.Skeleton: No bone found with UUID:", i), r = new Br), this.bones.push(r), this.boneInverses.push((new Cn).fromArray(e.boneInverses[n])) + } + return this.init(), this + } + toJSON() { + const e = { + metadata: { + version: 4.6, + type: "Skeleton", + generator: "Skeleton.toJSON" + }, + bones: [], + boneInverses: [] + }; + e.uuid = this.uuid; + const t = this.bones, + n = this.boneInverses; + for (let i = 0, r = t.length; i < r; i++) { + const r = t[i]; + e.bones.push(r.uuid); + const a = n[i]; + e.boneInverses.push(a.toArray()) + } + return e + } + } + class Nr extends Ci { + constructor(e, t, n, i = 1) { + super(e, t, n), this.isInstancedBufferAttribute = !0, this.meshPerAttribute = i + } + copy(e) { + return super.copy(e), this.meshPerAttribute = e.meshPerAttribute, this + } + toJSON() { + const e = super.toJSON(); + return e.meshPerAttribute = this.meshPerAttribute, e.isInstancedBufferAttribute = !0, e + } + } + const Fr = new Cn, + Or = new Cn, + zr = [], + Wr = new en, + Hr = new Cn, + Vr = new Zi, + Gr = new vn; + class Qr extends Zi { + constructor(e, t, n) { + super(e, t), this.isInstancedMesh = !0, this.instanceMatrix = new Nr(new Float32Array(16 * n), 16), this.instanceColor = null, this.morphTexture = null, this.count = n, this.boundingBox = null, this.boundingSphere = null; + for (let e = 0; e < n; e++) this.setMatrixAt(e, Hr) + } + computeBoundingBox() { + const e = this.geometry, + t = this.count; + null === this.boundingBox && (this.boundingBox = new en), null === e.boundingBox && e.computeBoundingBox(), this.boundingBox.makeEmpty(); + for (let n = 0; n < t; n++) this.getMatrixAt(n, Fr), Wr.copy(e.boundingBox).applyMatrix4(Fr), this.boundingBox.union(Wr) + } + computeBoundingSphere() { + const e = this.geometry, + t = this.count; + null === this.boundingSphere && (this.boundingSphere = new vn), null === e.boundingSphere && e.computeBoundingSphere(), this.boundingSphere.makeEmpty(); + for (let n = 0; n < t; n++) this.getMatrixAt(n, Fr), Gr.copy(e.boundingSphere).applyMatrix4(Fr), this.boundingSphere.union(Gr) + } + copy(e, t) { + return super.copy(e, t), this.instanceMatrix.copy(e.instanceMatrix), null !== e.morphTexture && (this.morphTexture = e.morphTexture.clone()), null !== e.instanceColor && (this.instanceColor = e.instanceColor.clone()), this.count = e.count, null !== e.boundingBox && (this.boundingBox = e.boundingBox.clone()), null !== e.boundingSphere && (this.boundingSphere = e.boundingSphere.clone()), this + } + getColorAt(e, t) { + t.fromArray(this.instanceColor.array, 3 * e) + } + getMatrixAt(e, t) { + t.fromArray(this.instanceMatrix.array, 16 * e) + } + getMorphAt(e, t) { + const n = t.morphTargetInfluences, + i = this.morphTexture.source.data.data, + r = e * (n.length + 1) + 1; + for (let e = 0; e < n.length; e++) n[e] = i[r + e] + } + raycast(e, t) { + const n = this.matrixWorld, + i = this.count; + if (Vr.geometry = this.geometry, Vr.material = this.material, void 0 !== Vr.material && (null === this.boundingSphere && this.computeBoundingSphere(), Gr.copy(this.boundingSphere), Gr.applyMatrix4(n), !1 !== e.ray.intersectsSphere(Gr))) + for (let r = 0; r < i; r++) { + this.getMatrixAt(r, Fr), Or.multiplyMatrices(n, Fr), Vr.matrixWorld = Or, Vr.raycast(e, zr); + for (let e = 0, n = zr.length; e < n; e++) { + const n = zr[e]; + n.instanceId = r, n.object = this, t.push(n) + } + zr.length = 0 + } + } + setColorAt(e, t) { + null === this.instanceColor && (this.instanceColor = new Nr(new Float32Array(3 * this.instanceMatrix.count).fill(1), 3)), t.toArray(this.instanceColor.array, 3 * e) + } + setMatrixAt(e, t) { + t.toArray(this.instanceMatrix.array, 16 * e) + } + setMorphAt(e, t) { + const n = t.morphTargetInfluences, + i = n.length + 1; + null === this.morphTexture && (this.morphTexture = new Dr(new Float32Array(i * this.count), i, this.count, oe, J)); + const r = this.morphTexture.source.data.data; + let a = 0; + for (let e = 0; e < n.length; e++) a += n[e]; + const s = this.geometry.morphTargetsRelative ? 1 : 1 - a, + o = i * e; + r[o] = s, r.set(n, o + 1) + } + updateMorphTargets() {} + dispose() { + this.dispatchEvent({ + type: "dispose" + }), null !== this.morphTexture && (this.morphTexture.dispose(), this.morphTexture = null) + } + } + const Xr = new Zt, + jr = new Zt, + qr = new St; + class Yr { + constructor(e = new Zt(1, 0, 0), t = 0) { + this.isPlane = !0, this.normal = e, this.constant = t + } + set(e, t) { + return this.normal.copy(e), this.constant = t, this + } + setComponents(e, t, n, i) { + return this.normal.set(e, t, n), this.constant = i, this + } + setFromNormalAndCoplanarPoint(e, t) { + return this.normal.copy(e), this.constant = -t.dot(this.normal), this + } + setFromCoplanarPoints(e, t, n) { + const i = Xr.subVectors(n, t).cross(jr.subVectors(e, t)).normalize(); + return this.setFromNormalAndCoplanarPoint(i, e), this + } + copy(e) { + return this.normal.copy(e.normal), this.constant = e.constant, this + } + normalize() { + const e = 1 / this.normal.length(); + return this.normal.multiplyScalar(e), this.constant *= e, this + } + negate() { + return this.constant *= -1, this.normal.negate(), this + } + distanceToPoint(e) { + return this.normal.dot(e) + this.constant + } + distanceToSphere(e) { + return this.distanceToPoint(e.center) - e.radius + } + projectPoint(e, t) { + return t.copy(e).addScaledVector(this.normal, -this.distanceToPoint(e)) + } + intersectLine(e, t) { + const n = e.delta(Xr), + i = this.normal.dot(n); + if (0 === i) return 0 === this.distanceToPoint(e.start) ? t.copy(e.start) : null; + const r = -(e.start.dot(this.normal) + this.constant) / i; + return r < 0 || r > 1 ? null : t.copy(e.start).addScaledVector(n, r) + } + intersectsLine(e) { + const t = this.distanceToPoint(e.start), + n = this.distanceToPoint(e.end); + return t < 0 && n > 0 || n < 0 && t > 0 + } + intersectsBox(e) { + return e.intersectsPlane(this) + } + intersectsSphere(e) { + return e.intersectsPlane(this) + } + coplanarPoint(e) { + return e.copy(this.normal).multiplyScalar(-this.constant) + } + applyMatrix4(e, t) { + const n = t || qr.getNormalMatrix(e), + i = this.coplanarPoint(Xr).applyMatrix4(e), + r = this.normal.applyMatrix3(n).normalize(); + return this.constant = -i.dot(r), this + } + translate(e) { + return this.constant -= e.dot(this.normal), this + } + equals(e) { + return e.normal.equals(this.normal) && e.constant === this.constant + } + clone() { + return (new this.constructor).copy(this) + } + } + const Kr = new vn, + Zr = new Zt; + class Jr { + constructor(e = new Yr, t = new Yr, n = new Yr, i = new Yr, r = new Yr, a = new Yr) { + this.planes = [e, t, n, i, r, a] + } + set(e, t, n, i, r, a) { + const s = this.planes; + return s[0].copy(e), s[1].copy(t), s[2].copy(n), s[3].copy(i), s[4].copy(r), s[5].copy(a), this + } + copy(e) { + const t = this.planes; + for (let n = 0; n < 6; n++) t[n].copy(e.planes[n]); + return this + } + setFromProjectionMatrix(e, t = 2e3) { + const n = this.planes, + i = e.elements, + r = i[0], + a = i[1], + s = i[2], + o = i[3], + l = i[4], + c = i[5], + h = i[6], + u = i[7], + d = i[8], + f = i[9], + p = i[10], + m = i[11], + g = i[12], + A = i[13], + _ = i[14], + v = i[15]; + if (n[0].setComponents(o - r, u - l, m - d, v - g).normalize(), n[1].setComponents(o + r, u + l, m + d, v + g).normalize(), n[2].setComponents(o + a, u + c, m + f, v + A).normalize(), n[3].setComponents(o - a, u - c, m - f, v - A).normalize(), n[4].setComponents(o - s, u - h, m - p, v - _).normalize(), t === ht) n[5].setComponents(o + s, u + h, m + p, v + _).normalize(); + else { + if (t !== ut) throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: " + t); + n[5].setComponents(s, h, p, _).normalize() + } + return this + } + intersectsObject(e) { + if (void 0 !== e.boundingSphere) null === e.boundingSphere && e.computeBoundingSphere(), Kr.copy(e.boundingSphere).applyMatrix4(e.matrixWorld); + else { + const t = e.geometry; + null === t.boundingSphere && t.computeBoundingSphere(), Kr.copy(t.boundingSphere).applyMatrix4(e.matrixWorld) + } + return this.intersectsSphere(Kr) + } + intersectsSprite(e) { + return Kr.center.set(0, 0, 0), Kr.radius = .7071067811865476, Kr.applyMatrix4(e.matrixWorld), this.intersectsSphere(Kr) + } + intersectsSphere(e) { + const t = this.planes, + n = e.center, + i = -e.radius; + for (let e = 0; e < 6; e++) { + if (t[e].distanceToPoint(n) < i) return !1 + } + return !0 + } + intersectsBox(e) { + const t = this.planes; + for (let n = 0; n < 6; n++) { + const i = t[n]; + if (Zr.x = i.normal.x > 0 ? e.max.x : e.min.x, Zr.y = i.normal.y > 0 ? e.max.y : e.min.y, Zr.z = i.normal.z > 0 ? e.max.z : e.min.z, i.distanceToPoint(Zr) < 0) return !1 + } + return !0 + } + containsPoint(e) { + const t = this.planes; + for (let n = 0; n < 6; n++) + if (t[n].distanceToPoint(e) < 0) return !1; + return !0 + } + clone() { + return (new this.constructor).copy(this) + } + } + class $r extends bi { + constructor(e) { + super(), this.isLineBasicMaterial = !0, this.type = "LineBasicMaterial", this.color = new wi(16777215), this.map = null, this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.color.copy(e.color), this.map = e.map, this.linewidth = e.linewidth, this.linecap = e.linecap, this.linejoin = e.linejoin, this.fog = e.fog, this + } + } + const ea = new Zt, + ta = new Zt, + na = new Cn, + ia = new Tn, + ra = new vn, + aa = new Zt, + sa = new Zt; + class oa extends ti { + constructor(e = new Oi, t = new $r) { + super(), this.isLine = !0, this.type = "Line", this.geometry = e, this.material = t, this.morphTargetDictionary = void 0, this.morphTargetInfluences = void 0, this.updateMorphTargets() + } + copy(e, t) { + return super.copy(e, t), this.material = Array.isArray(e.material) ? e.material.slice() : e.material, this.geometry = e.geometry, this + } + computeLineDistances() { + const e = this.geometry; + if (null === e.index) { + const t = e.attributes.position, + n = [0]; + for (let e = 1, i = t.count; e < i; e++) ea.fromBufferAttribute(t, e - 1), ta.fromBufferAttribute(t, e), n[e] = n[e - 1], n[e] += ea.distanceTo(ta); + e.setAttribute("lineDistance", new Pi(n, 1)) + } else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + return this + } + raycast(e, t) { + const n = this.geometry, + i = this.matrixWorld, + r = e.params.Line.threshold, + a = n.drawRange; + if (null === n.boundingSphere && n.computeBoundingSphere(), ra.copy(n.boundingSphere), ra.applyMatrix4(i), ra.radius += r, !1 === e.ray.intersectsSphere(ra)) return; + na.copy(i).invert(), ia.copy(e.ray).applyMatrix4(na); + const s = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + o = s * s, + l = this.isLineSegments ? 2 : 1, + c = n.index, + h = n.attributes.position; + if (null !== c) { + const n = Math.max(0, a.start), + i = Math.min(c.count, a.start + a.count); + for (let r = n, a = i - 1; r < a; r += l) { + const n = c.getX(r), + i = c.getX(r + 1), + a = la(this, e, ia, o, n, i, r); + a && t.push(a) + } + if (this.isLineLoop) { + const r = c.getX(i - 1), + a = c.getX(n), + s = la(this, e, ia, o, r, a, i - 1); + s && t.push(s) + } + } else { + const n = Math.max(0, a.start), + i = Math.min(h.count, a.start + a.count); + for (let r = n, a = i - 1; r < a; r += l) { + const n = la(this, e, ia, o, r, r + 1, r); + n && t.push(n) + } + if (this.isLineLoop) { + const r = la(this, e, ia, o, i - 1, n, i - 1); + r && t.push(r) + } + } + } + updateMorphTargets() { + const e = this.geometry.morphAttributes, + t = Object.keys(e); + if (t.length > 0) { + const n = e[t[0]]; + if (void 0 !== n) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, t = n.length; e < t; e++) { + const t = n[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[t] = e + } + } + } + } + } + + function la(e, t, n, i, r, a, s) { + const o = e.geometry.attributes.position; + ea.fromBufferAttribute(o, r), ta.fromBufferAttribute(o, a); + if (n.distanceSqToSegment(ea, ta, aa, sa) > i) return; + aa.applyMatrix4(e.matrixWorld); + const l = t.ray.origin.distanceTo(aa); + return l < t.near || l > t.far ? void 0 : { + distance: l, + point: sa.clone().applyMatrix4(e.matrixWorld), + index: s, + face: null, + faceIndex: null, + barycoord: null, + object: e + } + } + const ca = new Zt, + ha = new Zt; + class ua extends oa { + constructor(e, t) { + super(e, t), this.isLineSegments = !0, this.type = "LineSegments" + } + computeLineDistances() { + const e = this.geometry; + if (null === e.index) { + const t = e.attributes.position, + n = []; + for (let e = 0, i = t.count; e < i; e += 2) ca.fromBufferAttribute(t, e), ha.fromBufferAttribute(t, e + 1), n[e] = 0 === e ? 0 : n[e - 1], n[e + 1] = n[e] + ca.distanceTo(ha); + e.setAttribute("lineDistance", new Pi(n, 1)) + } else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + return this + } + } + class da extends oa { + constructor(e, t) { + super(e, t), this.isLineLoop = !0, this.type = "LineLoop" + } + } + class fa extends bi { + constructor(e) { + super(), this.isPointsMaterial = !0, this.type = "PointsMaterial", this.color = new wi(16777215), this.map = null, this.alphaMap = null, this.size = 1, this.sizeAttenuation = !0, this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.color.copy(e.color), this.map = e.map, this.alphaMap = e.alphaMap, this.size = e.size, this.sizeAttenuation = e.sizeAttenuation, this.fog = e.fog, this + } + } + const pa = new Cn, + ma = new Tn, + ga = new vn, + Aa = new Zt; + class _a extends ti { + constructor(e = new Oi, t = new fa) { + super(), this.isPoints = !0, this.type = "Points", this.geometry = e, this.material = t, this.morphTargetDictionary = void 0, this.morphTargetInfluences = void 0, this.updateMorphTargets() + } + copy(e, t) { + return super.copy(e, t), this.material = Array.isArray(e.material) ? e.material.slice() : e.material, this.geometry = e.geometry, this + } + raycast(e, t) { + const n = this.geometry, + i = this.matrixWorld, + r = e.params.Points.threshold, + a = n.drawRange; + if (null === n.boundingSphere && n.computeBoundingSphere(), ga.copy(n.boundingSphere), ga.applyMatrix4(i), ga.radius += r, !1 === e.ray.intersectsSphere(ga)) return; + pa.copy(i).invert(), ma.copy(e.ray).applyMatrix4(pa); + const s = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + o = s * s, + l = n.index, + c = n.attributes.position; + if (null !== l) { + for (let n = Math.max(0, a.start), r = Math.min(l.count, a.start + a.count); n < r; n++) { + const r = l.getX(n); + Aa.fromBufferAttribute(c, r), va(Aa, r, o, i, e, t, this) + } + } else { + for (let n = Math.max(0, a.start), r = Math.min(c.count, a.start + a.count); n < r; n++) Aa.fromBufferAttribute(c, n), va(Aa, n, o, i, e, t, this) + } + } + updateMorphTargets() { + const e = this.geometry.morphAttributes, + t = Object.keys(e); + if (t.length > 0) { + const n = e[t[0]]; + if (void 0 !== n) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, t = n.length; e < t; e++) { + const t = n[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[t] = e + } + } + } + } + } + + function va(e, t, n, i, r, a, s) { + const o = ma.distanceSqToPoint(e); + if (o < n) { + const n = new Zt; + ma.closestPointToPoint(e, n), n.applyMatrix4(i); + const l = r.ray.origin.distanceTo(n); + if (l < r.near || l > r.far) return; + a.push({ + distance: l, + distanceToRay: Math.sqrt(o), + point: n, + index: t, + face: null, + faceIndex: null, + barycoord: null, + object: s + }) + } + } + class wa extends Gt { + constructor(e, t, n, i, r, a, s, o, l, c = 1026) { + if (c !== ae && c !== se) throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + void 0 === n && c === ae && (n = Z), void 0 === n && c === se && (n = ne), super(null, i, r, a, s, o, c, n, l), this.isDepthTexture = !0, this.image = { + width: e, + height: t + }, this.magFilter = void 0 !== s ? s : z, this.minFilter = void 0 !== o ? o : z, this.flipY = !1, this.generateMipmaps = !1, this.compareFunction = null + } + copy(e) { + return super.copy(e), this.source = new Wt(Object.assign({}, e.image)), this.compareFunction = e.compareFunction, this + } + toJSON(e) { + const t = super.toJSON(e); + return null !== this.compareFunction && (t.compareFunction = this.compareFunction), t + } + } + class ya extends Oi { + constructor(e = 1, t = 1, n = 1, i = 1) { + super(), this.type = "PlaneGeometry", this.parameters = { + width: e, + height: t, + widthSegments: n, + heightSegments: i + }; + const r = e / 2, + a = t / 2, + s = Math.floor(n), + o = Math.floor(i), + l = s + 1, + c = o + 1, + h = e / s, + u = t / o, + d = [], + f = [], + p = [], + m = []; + for (let e = 0; e < c; e++) { + const t = e * u - a; + for (let n = 0; n < l; n++) { + const i = n * h - r; + f.push(i, -t, 0), p.push(0, 0, 1), m.push(n / s), m.push(1 - e / o) + } + } + for (let e = 0; e < o; e++) + for (let t = 0; t < s; t++) { + const n = t + l * e, + i = t + l * (e + 1), + r = t + 1 + l * (e + 1), + a = t + 1 + l * e; + d.push(n, i, a), d.push(i, r, a) + } + this.setIndex(d), this.setAttribute("position", new Pi(f, 3)), this.setAttribute("normal", new Pi(p, 3)), this.setAttribute("uv", new Pi(m, 2)) + } + copy(e) { + return super.copy(e), this.parameters = Object.assign({}, e.parameters), this + } + static fromJSON(e) { + return new ya(e.width, e.height, e.widthSegments, e.heightSegments) + } + } + class xa extends bi { + constructor(e) { + super(), this.isMeshStandardMaterial = !0, this.type = "MeshStandardMaterial", this.defines = { + STANDARD: "" + }, this.color = new wi(16777215), this.roughness = 1, this.metalness = 0, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new wi(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new Et(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapRotation = new Fn, this.envMapIntensity = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.flatShading = !1, this.fog = !0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.defines = { + STANDARD: "" + }, this.color.copy(e.color), this.roughness = e.roughness, this.metalness = e.metalness, this.map = e.map, this.lightMap = e.lightMap, this.lightMapIntensity = e.lightMapIntensity, this.aoMap = e.aoMap, this.aoMapIntensity = e.aoMapIntensity, this.emissive.copy(e.emissive), this.emissiveMap = e.emissiveMap, this.emissiveIntensity = e.emissiveIntensity, this.bumpMap = e.bumpMap, this.bumpScale = e.bumpScale, this.normalMap = e.normalMap, this.normalMapType = e.normalMapType, this.normalScale.copy(e.normalScale), this.displacementMap = e.displacementMap, this.displacementScale = e.displacementScale, this.displacementBias = e.displacementBias, this.roughnessMap = e.roughnessMap, this.metalnessMap = e.metalnessMap, this.alphaMap = e.alphaMap, this.envMap = e.envMap, this.envMapRotation.copy(e.envMapRotation), this.envMapIntensity = e.envMapIntensity, this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this.wireframeLinecap = e.wireframeLinecap, this.wireframeLinejoin = e.wireframeLinejoin, this.flatShading = e.flatShading, this.fog = e.fog, this + } + } + class ba extends xa { + constructor(e) { + super(), this.isMeshPhysicalMaterial = !0, this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.type = "MeshPhysicalMaterial", this.anisotropyRotation = 0, this.anisotropyMap = null, this.clearcoatMap = null, this.clearcoatRoughness = 0, this.clearcoatRoughnessMap = null, this.clearcoatNormalScale = new Et(1, 1), this.clearcoatNormalMap = null, this.ior = 1.5, Object.defineProperty(this, "reflectivity", { + get: function() { + return _t(2.5 * (this.ior - 1) / (this.ior + 1), 0, 1) + }, + set: function(e) { + this.ior = (1 + .4 * e) / (1 - .4 * e) + } + }), this.iridescenceMap = null, this.iridescenceIOR = 1.3, this.iridescenceThicknessRange = [100, 400], this.iridescenceThicknessMap = null, this.sheenColor = new wi(0), this.sheenColorMap = null, this.sheenRoughness = 1, this.sheenRoughnessMap = null, this.transmissionMap = null, this.thickness = 0, this.thicknessMap = null, this.attenuationDistance = 1 / 0, this.attenuationColor = new wi(1, 1, 1), this.specularIntensity = 1, this.specularIntensityMap = null, this.specularColor = new wi(1, 1, 1), this.specularColorMap = null, this._anisotropy = 0, this._clearcoat = 0, this._dispersion = 0, this._iridescence = 0, this._sheen = 0, this._transmission = 0, this.setValues(e) + } + get anisotropy() { + return this._anisotropy + } + set anisotropy(e) { + this._anisotropy > 0 != e > 0 && this.version++, this._anisotropy = e + } + get clearcoat() { + return this._clearcoat + } + set clearcoat(e) { + this._clearcoat > 0 != e > 0 && this.version++, this._clearcoat = e + } + get iridescence() { + return this._iridescence + } + set iridescence(e) { + this._iridescence > 0 != e > 0 && this.version++, this._iridescence = e + } + get dispersion() { + return this._dispersion + } + set dispersion(e) { + this._dispersion > 0 != e > 0 && this.version++, this._dispersion = e + } + get sheen() { + return this._sheen + } + set sheen(e) { + this._sheen > 0 != e > 0 && this.version++, this._sheen = e + } + get transmission() { + return this._transmission + } + set transmission(e) { + this._transmission > 0 != e > 0 && this.version++, this._transmission = e + } + copy(e) { + return super.copy(e), this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.anisotropy = e.anisotropy, this.anisotropyRotation = e.anisotropyRotation, this.anisotropyMap = e.anisotropyMap, this.clearcoat = e.clearcoat, this.clearcoatMap = e.clearcoatMap, this.clearcoatRoughness = e.clearcoatRoughness, this.clearcoatRoughnessMap = e.clearcoatRoughnessMap, this.clearcoatNormalMap = e.clearcoatNormalMap, this.clearcoatNormalScale.copy(e.clearcoatNormalScale), this.dispersion = e.dispersion, this.ior = e.ior, this.iridescence = e.iridescence, this.iridescenceMap = e.iridescenceMap, this.iridescenceIOR = e.iridescenceIOR, this.iridescenceThicknessRange = [...e.iridescenceThicknessRange], this.iridescenceThicknessMap = e.iridescenceThicknessMap, this.sheen = e.sheen, this.sheenColor.copy(e.sheenColor), this.sheenColorMap = e.sheenColorMap, this.sheenRoughness = e.sheenRoughness, this.sheenRoughnessMap = e.sheenRoughnessMap, this.transmission = e.transmission, this.transmissionMap = e.transmissionMap, this.thickness = e.thickness, this.thicknessMap = e.thicknessMap, this.attenuationDistance = e.attenuationDistance, this.attenuationColor.copy(e.attenuationColor), this.specularIntensity = e.specularIntensity, this.specularIntensityMap = e.specularIntensityMap, this.specularColor.copy(e.specularColor), this.specularColorMap = e.specularColorMap, this + } + } + class Ea extends bi { + constructor(e) { + super(), this.isMeshDepthMaterial = !0, this.type = "MeshDepthMaterial", this.depthPacking = 3200, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.setValues(e) + } + copy(e) { + return super.copy(e), this.depthPacking = e.depthPacking, this.map = e.map, this.alphaMap = e.alphaMap, this.displacementMap = e.displacementMap, this.displacementScale = e.displacementScale, this.displacementBias = e.displacementBias, this.wireframe = e.wireframe, this.wireframeLinewidth = e.wireframeLinewidth, this + } + } + class Sa extends bi { + constructor(e) { + super(), this.isMeshDistanceMaterial = !0, this.type = "MeshDistanceMaterial", this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.setValues(e) + } + copy(e) { + return super.copy(e), this.map = e.map, this.alphaMap = e.alphaMap, this.displacementMap = e.displacementMap, this.displacementScale = e.displacementScale, this.displacementBias = e.displacementBias, this + } + } + + function Ma(e, t, n) { + return !e || !n && e.constructor === t ? e : "number" == typeof t.BYTES_PER_ELEMENT ? new t(e) : Array.prototype.slice.call(e) + } + + function Ta(e) { + return ArrayBuffer.isView(e) && !(e instanceof DataView) + } + + function Ca(e) { + const t = e.length, + n = new Array(t); + for (let e = 0; e !== t; ++e) n[e] = e; + return n.sort((function(t, n) { + return e[t] - e[n] + })), n + } + + function Ia(e, t, n) { + const i = e.length, + r = new e.constructor(i); + for (let a = 0, s = 0; s !== i; ++a) { + const i = n[a] * t; + for (let n = 0; n !== t; ++n) r[s++] = e[i + n] + } + return r + } + + function Ra(e, t, n, i) { + let r = 1, + a = e[0]; + for (; void 0 !== a && void 0 === a[i];) a = e[r++]; + if (void 0 === a) return; + let s = a[i]; + if (void 0 !== s) + if (Array.isArray(s)) + do { + s = a[i], void 0 !== s && (t.push(a.time), n.push(...s)), a = e[r++] + } while (void 0 !== a); + else if (void 0 !== s.toArray) + do { + s = a[i], void 0 !== s && (t.push(a.time), s.toArray(n, n.length)), a = e[r++] + } while (void 0 !== a); + else + do { + s = a[i], void 0 !== s && (t.push(a.time), n.push(s)), a = e[r++] + } while (void 0 !== a) + } + class Pa { + constructor(e, t, n, i) { + this.parameterPositions = e, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new t.constructor(n), this.sampleValues = t, this.valueSize = n, this.settings = null, this.DefaultSettings_ = {} + } + evaluate(e) { + const t = this.parameterPositions; + let n = this._cachedIndex, + i = t[n], + r = t[n - 1]; + e: { + t: { + let a;n: { + i: if (!(e < i)) { + for (let a = n + 2;;) { + if (void 0 === i) { + if (e < r) break i; + return n = t.length, this._cachedIndex = n, this.copySampleValue_(n - 1) + } + if (n === a) break; + if (r = i, i = t[++n], e < i) break t + } + a = t.length; + break n + }if (e >= r) break e; + { + const s = t[1]; + e < s && (n = 2, r = s); + for (let a = n - 2;;) { + if (void 0 === r) return this._cachedIndex = 0, this.copySampleValue_(0); + if (n === a) break; + if (i = r, r = t[--n - 1], e >= r) break t + } + a = n, n = 0 + } + } + for (; n < a;) { + const i = n + a >>> 1; + e < t[i] ? a = i : n = i + 1 + } + if (i = t[n], r = t[n - 1], void 0 === r) return this._cachedIndex = 0, + this.copySampleValue_(0); + if (void 0 === i) return n = t.length, + this._cachedIndex = n, + this.copySampleValue_(n - 1) + } + this._cachedIndex = n, + this.intervalChanged_(n, r, i) + } + return this.interpolate_(n, r, e, i) + } + getSettings_() { + return this.settings || this.DefaultSettings_ + } + copySampleValue_(e) { + const t = this.resultBuffer, + n = this.sampleValues, + i = this.valueSize, + r = e * i; + for (let e = 0; e !== i; ++e) t[e] = n[r + e]; + return t + } + interpolate_() { + throw new Error("call to abstract method") + } + intervalChanged_() {} + } + class Ba extends Pa { + constructor(e, t, n, i) { + super(e, t, n, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0, this.DefaultSettings_ = { + endingStart: Qe, + endingEnd: Qe + } + } + intervalChanged_(e, t, n) { + const i = this.parameterPositions; + let r = e - 2, + a = e + 1, + s = i[r], + o = i[a]; + if (void 0 === s) switch (this.getSettings_().endingStart) { + case Xe: + r = e, s = 2 * t - n; + break; + case je: + r = i.length - 2, s = t + i[r] - i[r + 1]; + break; + default: + r = e, s = n + } + if (void 0 === o) switch (this.getSettings_().endingEnd) { + case Xe: + a = e, o = 2 * n - t; + break; + case je: + a = 1, o = n + i[1] - i[0]; + break; + default: + a = e - 1, o = t + } + const l = .5 * (n - t), + c = this.valueSize; + this._weightPrev = l / (t - s), this._weightNext = l / (o - n), this._offsetPrev = r * c, this._offsetNext = a * c + } + interpolate_(e, t, n, i) { + const r = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + o = e * s, + l = o - s, + c = this._offsetPrev, + h = this._offsetNext, + u = this._weightPrev, + d = this._weightNext, + f = (n - t) / (i - t), + p = f * f, + m = p * f, + g = -u * m + 2 * u * p - u * f, + A = (1 + u) * m + (-1.5 - 2 * u) * p + (-.5 + u) * f + 1, + _ = (-1 - d) * m + (1.5 + d) * p + .5 * f, + v = d * m - d * p; + for (let e = 0; e !== s; ++e) r[e] = g * a[c + e] + A * a[l + e] + _ * a[o + e] + v * a[h + e]; + return r + } + } + class Da extends Pa { + constructor(e, t, n, i) { + super(e, t, n, i) + } + interpolate_(e, t, n, i) { + const r = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + o = e * s, + l = o - s, + c = (n - t) / (i - t), + h = 1 - c; + for (let e = 0; e !== s; ++e) r[e] = a[l + e] * h + a[o + e] * c; + return r + } + } + class La extends Pa { + constructor(e, t, n, i) { + super(e, t, n, i) + } + interpolate_(e) { + return this.copySampleValue_(e - 1) + } + } + class Ua { + constructor(e, t, n, i) { + if (void 0 === e) throw new Error("THREE.KeyframeTrack: track name is undefined"); + if (void 0 === t || 0 === t.length) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + e); + this.name = e, this.times = Ma(t, this.TimeBufferType), this.values = Ma(n, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation) + } + static toJSON(e) { + const t = e.constructor; + let n; + if (t.toJSON !== this.toJSON) n = t.toJSON(e); + else { + n = { + name: e.name, + times: Ma(e.times, Array), + values: Ma(e.values, Array) + }; + const t = e.getInterpolation(); + t !== e.DefaultInterpolation && (n.interpolation = t) + } + return n.type = e.ValueTypeName, n + } + InterpolantFactoryMethodDiscrete(e) { + return new La(this.times, this.values, this.getValueSize(), e) + } + InterpolantFactoryMethodLinear(e) { + return new Da(this.times, this.values, this.getValueSize(), e) + } + InterpolantFactoryMethodSmooth(e) { + return new Ba(this.times, this.values, this.getValueSize(), e) + } + setInterpolation(e) { + let t; + switch (e) { + case He: + t = this.InterpolantFactoryMethodDiscrete; + break; + case Ve: + t = this.InterpolantFactoryMethodLinear; + break; + case Ge: + t = this.InterpolantFactoryMethodSmooth + } + if (void 0 === t) { + const t = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; + if (void 0 === this.createInterpolant) { + if (e === this.DefaultInterpolation) throw new Error(t); + this.setInterpolation(this.DefaultInterpolation) + } + return console.warn("THREE.KeyframeTrack:", t), this + } + return this.createInterpolant = t, this + } + getInterpolation() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return He; + case this.InterpolantFactoryMethodLinear: + return Ve; + case this.InterpolantFactoryMethodSmooth: + return Ge + } + } + getValueSize() { + return this.values.length / this.times.length + } + shift(e) { + if (0 !== e) { + const t = this.times; + for (let n = 0, i = t.length; n !== i; ++n) t[n] += e + } + return this + } + scale(e) { + if (1 !== e) { + const t = this.times; + for (let n = 0, i = t.length; n !== i; ++n) t[n] *= e + } + return this + } + trim(e, t) { + const n = this.times, + i = n.length; + let r = 0, + a = i - 1; + for (; r !== i && n[r] < e;) ++r; + for (; - 1 !== a && n[a] > t;) --a; + if (++a, 0 !== r || a !== i) { + r >= a && (a = Math.max(a, 1), r = a - 1); + const e = this.getValueSize(); + this.times = n.slice(r, a), this.values = this.values.slice(r * e, a * e) + } + return this + } + validate() { + let e = !0; + const t = this.getValueSize(); + t - Math.floor(t) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), e = !1); + const n = this.times, + i = this.values, + r = n.length; + 0 === r && (console.error("THREE.KeyframeTrack: Track is empty.", this), e = !1); + let a = null; + for (let t = 0; t !== r; t++) { + const i = n[t]; + if ("number" == typeof i && isNaN(i)) { + console.error("THREE.KeyframeTrack: Time is not a valid number.", this, t, i), e = !1; + break + } + if (null !== a && a > i) { + console.error("THREE.KeyframeTrack: Out of order keys.", this, t, i, a), e = !1; + break + } + a = i + } + if (void 0 !== i && Ta(i)) + for (let t = 0, n = i.length; t !== n; ++t) { + const n = i[t]; + if (isNaN(n)) { + console.error("THREE.KeyframeTrack: Value is not a valid number.", this, t, n), e = !1; + break + } + } + return e + } + optimize() { + const e = this.times.slice(), + t = this.values.slice(), + n = this.getValueSize(), + i = this.getInterpolation() === Ge, + r = e.length - 1; + let a = 1; + for (let s = 1; s < r; ++s) { + let r = !1; + const o = e[s]; + if (o !== e[s + 1] && (1 !== s || o !== e[0])) + if (i) r = !0; + else { + const e = s * n, + i = e - n, + a = e + n; + for (let s = 0; s !== n; ++s) { + const n = t[e + s]; + if (n !== t[i + s] || n !== t[a + s]) { + r = !0; + break + } + } + } if (r) { + if (s !== a) { + e[a] = e[s]; + const i = s * n, + r = a * n; + for (let e = 0; e !== n; ++e) t[r + e] = t[i + e] + }++a + } + } + if (r > 0) { + e[a] = e[r]; + for (let e = r * n, i = a * n, s = 0; s !== n; ++s) t[i + s] = t[e + s]; + ++a + } + return a !== e.length ? (this.times = e.slice(0, a), this.values = t.slice(0, a * n)) : (this.times = e, this.values = t), this + } + clone() { + const e = this.times.slice(), + t = this.values.slice(), + n = new(0, this.constructor)(this.name, e, t); + return n.createInterpolant = this.createInterpolant, n + } + } + Ua.prototype.TimeBufferType = Float32Array, Ua.prototype.ValueBufferType = Float32Array, Ua.prototype.DefaultInterpolation = Ve; + class ka extends Ua { + constructor(e, t, n) { + super(e, t, n) + } + } + ka.prototype.ValueTypeName = "bool", ka.prototype.ValueBufferType = Array, ka.prototype.DefaultInterpolation = He, ka.prototype.InterpolantFactoryMethodLinear = void 0, ka.prototype.InterpolantFactoryMethodSmooth = void 0; + class Na extends Ua {} + Na.prototype.ValueTypeName = "color"; + class Fa extends Ua {} + Fa.prototype.ValueTypeName = "number"; + class Oa extends Pa { + constructor(e, t, n, i) { + super(e, t, n, i) + } + interpolate_(e, t, n, i) { + const r = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + o = (n - t) / (i - t); + let l = e * s; + for (let e = l + s; l !== e; l += 4) Kt.slerpFlat(r, 0, a, l - s, a, l, o); + return r + } + } + class za extends Ua { + InterpolantFactoryMethodLinear(e) { + return new Oa(this.times, this.values, this.getValueSize(), e) + } + } + za.prototype.ValueTypeName = "quaternion", za.prototype.InterpolantFactoryMethodSmooth = void 0; + class Wa extends Ua { + constructor(e, t, n) { + super(e, t, n) + } + } + Wa.prototype.ValueTypeName = "string", Wa.prototype.ValueBufferType = Array, Wa.prototype.DefaultInterpolation = He, Wa.prototype.InterpolantFactoryMethodLinear = void 0, Wa.prototype.InterpolantFactoryMethodSmooth = void 0; + class Ha extends Ua {} + Ha.prototype.ValueTypeName = "vector"; + class Va { + constructor(e = "", t = -1, n = [], i = 2500) { + this.name = e, this.tracks = n, this.duration = t, this.blendMode = i, this.uuid = At(), this.duration < 0 && this.resetDuration() + } + static parse(e) { + const t = [], + n = e.tracks, + i = 1 / (e.fps || 1); + for (let e = 0, r = n.length; e !== r; ++e) t.push(Ga(n[e]).scale(i)); + const r = new this(e.name, e.duration, t, e.blendMode); + return r.uuid = e.uuid, r + } + static toJSON(e) { + const t = [], + n = e.tracks, + i = { + name: e.name, + duration: e.duration, + tracks: t, + uuid: e.uuid, + blendMode: e.blendMode + }; + for (let e = 0, i = n.length; e !== i; ++e) t.push(Ua.toJSON(n[e])); + return i + } + static CreateFromMorphTargetSequence(e, t, n, i) { + const r = t.length, + a = []; + for (let e = 0; e < r; e++) { + let s = [], + o = []; + s.push((e + r - 1) % r, e, (e + 1) % r), o.push(0, 1, 0); + const l = Ca(s); + s = Ia(s, 1, l), o = Ia(o, 1, l), i || 0 !== s[0] || (s.push(r), o.push(o[0])), a.push(new Fa(".morphTargetInfluences[" + t[e].name + "]", s, o).scale(1 / n)) + } + return new this(e, -1, a) + } + static findByName(e, t) { + let n = e; + if (!Array.isArray(e)) { + const t = e; + n = t.geometry && t.geometry.animations || t.animations + } + for (let e = 0; e < n.length; e++) + if (n[e].name === t) return n[e]; + return null + } + static CreateClipsFromMorphTargetSequences(e, t, n) { + const i = {}, + r = /^([\w-]*?)([\d]+)$/; + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t], + a = n.name.match(r); + if (a && a.length > 1) { + const e = a[1]; + let t = i[e]; + t || (i[e] = t = []), t.push(n) + } + } + const a = []; + for (const e in i) a.push(this.CreateFromMorphTargetSequence(e, i[e], t, n)); + return a + } + static parseAnimation(e, t) { + if (!e) return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null; + const n = function(e, t, n, i, r) { + if (0 !== n.length) { + const a = [], + s = []; + Ra(n, a, s, i), 0 !== a.length && r.push(new e(t, a, s)) + } + }, + i = [], + r = e.name || "default", + a = e.fps || 30, + s = e.blendMode; + let o = e.length || -1; + const l = e.hierarchy || []; + for (let e = 0; e < l.length; e++) { + const r = l[e].keys; + if (r && 0 !== r.length) + if (r[0].morphTargets) { + const e = {}; + let t; + for (t = 0; t < r.length; t++) + if (r[t].morphTargets) + for (let n = 0; n < r[t].morphTargets.length; n++) e[r[t].morphTargets[n]] = -1; + for (const n in e) { + const e = [], + a = []; + for (let i = 0; i !== r[t].morphTargets.length; ++i) { + const i = r[t]; + e.push(i.time), a.push(i.morphTarget === n ? 1 : 0) + } + i.push(new Fa(".morphTargetInfluence[" + n + "]", e, a)) + } + o = e.length * a + } else { + const a = ".bones[" + t[e].name + "]"; + n(Ha, a + ".position", r, "pos", i), n(za, a + ".quaternion", r, "rot", i), n(Ha, a + ".scale", r, "scl", i) + } + } + if (0 === i.length) return null; + return new this(r, o, i, s) + } + resetDuration() { + let e = 0; + for (let t = 0, n = this.tracks.length; t !== n; ++t) { + const n = this.tracks[t]; + e = Math.max(e, n.times[n.times.length - 1]) + } + return this.duration = e, this + } + trim() { + for (let e = 0; e < this.tracks.length; e++) this.tracks[e].trim(0, this.duration); + return this + } + validate() { + let e = !0; + for (let t = 0; t < this.tracks.length; t++) e = e && this.tracks[t].validate(); + return e + } + optimize() { + for (let e = 0; e < this.tracks.length; e++) this.tracks[e].optimize(); + return this + } + clone() { + const e = []; + for (let t = 0; t < this.tracks.length; t++) e.push(this.tracks[t].clone()); + return new this.constructor(this.name, this.duration, e, this.blendMode) + } + toJSON() { + return this.constructor.toJSON(this) + } + } + + function Ga(e) { + if (void 0 === e.type) throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); + const t = function(e) { + switch (e.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return Fa; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return Ha; + case "color": + return Na; + case "quaternion": + return za; + case "bool": + case "boolean": + return ka; + case "string": + return Wa + } + throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + e) + }(e.type); + if (void 0 === e.times) { + const t = [], + n = []; + Ra(e.keys, t, n, "value"), e.times = t, e.values = n + } + return void 0 !== t.parse ? t.parse(e) : new t(e.name, e.times, e.values, e.interpolation) + } + const Qa = { + enabled: !1, + files: {}, + add: function(e, t) { + !1 !== this.enabled && (this.files[e] = t) + }, + get: function(e) { + if (!1 !== this.enabled) return this.files[e] + }, + remove: function(e) { + delete this.files[e] + }, + clear: function() { + this.files = {} + } + }; + class Xa { + constructor(e, t, n) { + const i = this; + let r, a = !1, + s = 0, + o = 0; + const l = []; + this.onStart = void 0, this.onLoad = e, this.onProgress = t, this.onError = n, this.itemStart = function(e) { + o++, !1 === a && void 0 !== i.onStart && i.onStart(e, s, o), a = !0 + }, this.itemEnd = function(e) { + s++, void 0 !== i.onProgress && i.onProgress(e, s, o), s === o && (a = !1, void 0 !== i.onLoad && i.onLoad()) + }, this.itemError = function(e) { + void 0 !== i.onError && i.onError(e) + }, this.resolveURL = function(e) { + return r ? r(e) : e + }, this.setURLModifier = function(e) { + return r = e, this + }, this.addHandler = function(e, t) { + return l.push(e, t), this + }, this.removeHandler = function(e) { + const t = l.indexOf(e); + return -1 !== t && l.splice(t, 2), this + }, this.getHandler = function(e) { + for (let t = 0, n = l.length; t < n; t += 2) { + const n = l[t], + i = l[t + 1]; + if (n.global && (n.lastIndex = 0), n.test(e)) return i + } + return null + } + } + } + const ja = new Xa; + class qa { + constructor(e) { + this.manager = void 0 !== e ? e : ja, this.crossOrigin = "anonymous", this.withCredentials = !1, this.path = "", this.resourcePath = "", this.requestHeader = {} + } + load() {} + loadAsync(e, t) { + const n = this; + return new Promise((function(i, r) { + n.load(e, i, t, r) + })) + } + parse() {} + setCrossOrigin(e) { + return this.crossOrigin = e, this + } + setWithCredentials(e) { + return this.withCredentials = e, this + } + setPath(e) { + return this.path = e, this + } + setResourcePath(e) { + return this.resourcePath = e, this + } + setRequestHeader(e) { + return this.requestHeader = e, this + } + } + qa.DEFAULT_MATERIAL_NAME = "__DEFAULT"; + const Ya = {}; + class Ka extends Error { + constructor(e, t) { + super(e), this.response = t + } + } + class Za extends qa { + constructor(e) { + super(e) + } + load(e, t, n, i) { + void 0 === e && (e = ""), void 0 !== this.path && (e = this.path + e), e = this.manager.resolveURL(e); + const r = Qa.get(e); + if (void 0 !== r) return this.manager.itemStart(e), setTimeout((() => { + t && t(r), this.manager.itemEnd(e) + }), 0), r; + if (void 0 !== Ya[e]) return void Ya[e].push({ + onLoad: t, + onProgress: n, + onError: i + }); + Ya[e] = [], Ya[e].push({ + onLoad: t, + onProgress: n, + onError: i + }); + const a = new Request(e, { + headers: new Headers(this.requestHeader), + credentials: this.withCredentials ? "include" : "same-origin" + }), + s = this.mimeType, + o = this.responseType; + fetch(a).then((t => { + if (200 === t.status || 0 === t.status) { + if (0 === t.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), "undefined" == typeof ReadableStream || void 0 === t.body || void 0 === t.body.getReader) return t; + const n = Ya[e], + i = t.body.getReader(), + r = t.headers.get("X-File-Size") || t.headers.get("Content-Length"), + a = r ? parseInt(r) : 0, + s = 0 !== a; + let o = 0; + const l = new ReadableStream({ + start(e) { + ! function t() { + i.read().then((({ + done: i, + value: r + }) => { + if (i) e.close(); + else { + o += r.byteLength; + const i = new ProgressEvent("progress", { + lengthComputable: s, + loaded: o, + total: a + }); + for (let e = 0, t = n.length; e < t; e++) { + const t = n[e]; + t.onProgress && t.onProgress(i) + } + e.enqueue(r), t() + } + }), (t => { + e.error(t) + })) + }() + } + }); + return new Response(l) + } + throw new Ka(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`, t) + })).then((e => { + switch (o) { + case "arraybuffer": + return e.arrayBuffer(); + case "blob": + return e.blob(); + case "document": + return e.text().then((e => (new DOMParser).parseFromString(e, s))); + case "json": + return e.json(); + default: + if (void 0 === s) return e.text(); + { + const t = /charset="?([^;"\s]*)"?/i.exec(s), + n = t && t[1] ? t[1].toLowerCase() : void 0, + i = new TextDecoder(n); + return e.arrayBuffer().then((e => i.decode(e))) + } + } + })).then((t => { + Qa.add(e, t); + const n = Ya[e]; + delete Ya[e]; + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e]; + i.onLoad && i.onLoad(t) + } + })).catch((t => { + const n = Ya[e]; + if (void 0 === n) throw this.manager.itemError(e), t; + delete Ya[e]; + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e]; + i.onError && i.onError(t) + } + this.manager.itemError(e) + })).finally((() => { + this.manager.itemEnd(e) + })), this.manager.itemStart(e) + } + setResponseType(e) { + return this.responseType = e, this + } + setMimeType(e) { + return this.mimeType = e, this + } + } + class Ja extends qa { + constructor(e) { + super(e) + } + load(e, t, n, i) { + void 0 !== this.path && (e = this.path + e), e = this.manager.resolveURL(e); + const r = this, + a = Qa.get(e); + if (void 0 !== a) return r.manager.itemStart(e), setTimeout((function() { + t && t(a), r.manager.itemEnd(e) + }), 0), a; + const s = Ct("img"); + + function o() { + c(), Qa.add(e, this), t && t(this), r.manager.itemEnd(e) + } + + function l(t) { + c(), i && i(t), r.manager.itemError(e), r.manager.itemEnd(e) + } + + function c() { + s.removeEventListener("load", o, !1), s.removeEventListener("error", l, !1) + } + return s.addEventListener("load", o, !1), s.addEventListener("error", l, !1), "data:" !== e.slice(0, 5) && void 0 !== this.crossOrigin && (s.crossOrigin = this.crossOrigin), r.manager.itemStart(e), s.src = e, s + } + } + class $a extends qa { + constructor(e) { + super(e) + } + load(e, t, n, i) { + const r = new Gt, + a = new Ja(this.manager); + return a.setCrossOrigin(this.crossOrigin), a.setPath(this.path), a.load(e, (function(e) { + r.image = e, r.needsUpdate = !0, void 0 !== t && t(r) + }), n, i), r + } + } + class es extends ti { + constructor(e, t = 1) { + super(), this.isLight = !0, this.type = "Light", this.color = new wi(e), this.intensity = t + } + dispose() {} + copy(e, t) { + return super.copy(e, t), this.color.copy(e.color), this.intensity = e.intensity, this + } + toJSON(e) { + const t = super.toJSON(e); + return t.object.color = this.color.getHex(), t.object.intensity = this.intensity, void 0 !== this.groundColor && (t.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (t.object.distance = this.distance), void 0 !== this.angle && (t.object.angle = this.angle), void 0 !== this.decay && (t.object.decay = this.decay), void 0 !== this.penumbra && (t.object.penumbra = this.penumbra), void 0 !== this.shadow && (t.object.shadow = this.shadow.toJSON()), void 0 !== this.target && (t.object.target = this.target.uuid), t + } + } + class ts extends es { + constructor(e, t, n) { + super(e, n), this.isHemisphereLight = !0, this.type = "HemisphereLight", this.position.copy(ti.DEFAULT_UP), this.updateMatrix(), this.groundColor = new wi(t) + } + copy(e, t) { + return super.copy(e, t), this.groundColor.copy(e.groundColor), this + } + } + const ns = new Cn, + is = new Zt, + rs = new Zt; + class as { + constructor(e) { + this.camera = e, this.intensity = 1, this.bias = 0, this.normalBias = 0, this.radius = 1, this.blurSamples = 8, this.mapSize = new Et(512, 512), this.map = null, this.mapPass = null, this.matrix = new Cn, this.autoUpdate = !0, this.needsUpdate = !1, this._frustum = new Jr, this._frameExtents = new Et(1, 1), this._viewportCount = 1, this._viewports = [new Qt(0, 0, 1, 1)] + } + getViewportCount() { + return this._viewportCount + } + getFrustum() { + return this._frustum + } + updateMatrices(e) { + const t = this.camera, + n = this.matrix; + is.setFromMatrixPosition(e.matrixWorld), t.position.copy(is), rs.setFromMatrixPosition(e.target.matrixWorld), t.lookAt(rs), t.updateMatrixWorld(), ns.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), this._frustum.setFromProjectionMatrix(ns), n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), n.multiply(ns) + } + getViewport(e) { + return this._viewports[e] + } + getFrameExtents() { + return this._frameExtents + } + dispose() { + this.map && this.map.dispose(), this.mapPass && this.mapPass.dispose() + } + copy(e) { + return this.camera = e.camera.clone(), this.intensity = e.intensity, this.bias = e.bias, this.radius = e.radius, this.mapSize.copy(e.mapSize), this + } + clone() { + return (new this.constructor).copy(this) + } + toJSON() { + const e = {}; + return 1 !== this.intensity && (e.intensity = this.intensity), 0 !== this.bias && (e.bias = this.bias), 0 !== this.normalBias && (e.normalBias = this.normalBias), 1 !== this.radius && (e.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (e.mapSize = this.mapSize.toArray()), e.camera = this.camera.toJSON(!1).object, delete e.camera.matrix, e + } + } + class ss extends as { + constructor() { + super(new cr(50, 1, .5, 500)), this.isSpotLightShadow = !0, this.focus = 1 + } + updateMatrices(e) { + const t = this.camera, + n = 2 * gt * e.angle * this.focus, + i = this.mapSize.width / this.mapSize.height, + r = e.distance || t.far; + n === t.fov && i === t.aspect && r === t.far || (t.fov = n, t.aspect = i, t.far = r, t.updateProjectionMatrix()), super.updateMatrices(e) + } + copy(e) { + return super.copy(e), this.focus = e.focus, this + } + } + class os extends es { + constructor(e, t, n = 0, i = Math.PI / 3, r = 0, a = 2) { + super(e, t), this.isSpotLight = !0, this.type = "SpotLight", this.position.copy(ti.DEFAULT_UP), this.updateMatrix(), this.target = new ti, this.distance = n, this.angle = i, this.penumbra = r, this.decay = a, this.map = null, this.shadow = new ss + } + get power() { + return this.intensity * Math.PI + } + set power(e) { + this.intensity = e / Math.PI + } + dispose() { + this.shadow.dispose() + } + copy(e, t) { + return super.copy(e, t), this.distance = e.distance, this.angle = e.angle, this.penumbra = e.penumbra, this.decay = e.decay, this.target = e.target.clone(), this.shadow = e.shadow.clone(), this + } + } + const ls = new Cn, + cs = new Zt, + hs = new Zt; + class us extends as { + constructor() { + super(new cr(90, 1, .5, 500)), this.isPointLightShadow = !0, this._frameExtents = new Et(4, 2), this._viewportCount = 6, this._viewports = [new Qt(2, 1, 1, 1), new Qt(0, 1, 1, 1), new Qt(3, 1, 1, 1), new Qt(1, 1, 1, 1), new Qt(3, 0, 1, 1), new Qt(1, 0, 1, 1)], this._cubeDirections = [new Zt(1, 0, 0), new Zt(-1, 0, 0), new Zt(0, 0, 1), new Zt(0, 0, -1), new Zt(0, 1, 0), new Zt(0, -1, 0)], this._cubeUps = [new Zt(0, 1, 0), new Zt(0, 1, 0), new Zt(0, 1, 0), new Zt(0, 1, 0), new Zt(0, 0, 1), new Zt(0, 0, -1)] + } + updateMatrices(e, t = 0) { + const n = this.camera, + i = this.matrix, + r = e.distance || n.far; + r !== n.far && (n.far = r, n.updateProjectionMatrix()), cs.setFromMatrixPosition(e.matrixWorld), n.position.copy(cs), hs.copy(n.position), hs.add(this._cubeDirections[t]), n.up.copy(this._cubeUps[t]), n.lookAt(hs), n.updateMatrixWorld(), i.makeTranslation(-cs.x, -cs.y, -cs.z), ls.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), this._frustum.setFromProjectionMatrix(ls) + } + } + class ds extends es { + constructor(e, t, n = 0, i = 2) { + super(e, t), this.isPointLight = !0, this.type = "PointLight", this.distance = n, this.decay = i, this.shadow = new us + } + get power() { + return 4 * this.intensity * Math.PI + } + set power(e) { + this.intensity = e / (4 * Math.PI) + } + dispose() { + this.shadow.dispose() + } + copy(e, t) { + return super.copy(e, t), this.distance = e.distance, this.decay = e.decay, this.shadow = e.shadow.clone(), this + } + } + class fs extends ar { + constructor(e = -1, t = 1, n = 1, i = -1, r = .1, a = 2e3) { + super(), this.isOrthographicCamera = !0, this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = e, this.right = t, this.top = n, this.bottom = i, this.near = r, this.far = a, this.updateProjectionMatrix() + } + copy(e, t) { + return super.copy(e, t), this.left = e.left, this.right = e.right, this.top = e.top, this.bottom = e.bottom, this.near = e.near, this.far = e.far, this.zoom = e.zoom, this.view = null === e.view ? null : Object.assign({}, e.view), this + } + setViewOffset(e, t, n, i, r, a) { + null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = !0, this.view.fullWidth = e, this.view.fullHeight = t, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = a, this.updateProjectionMatrix() + } + clearViewOffset() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + } + updateProjectionMatrix() { + const e = (this.right - this.left) / (2 * this.zoom), + t = (this.top - this.bottom) / (2 * this.zoom), + n = (this.right + this.left) / 2, + i = (this.top + this.bottom) / 2; + let r = n - e, + a = n + e, + s = i + t, + o = i - t; + if (null !== this.view && this.view.enabled) { + const e = (this.right - this.left) / this.view.fullWidth / this.zoom, + t = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + r += e * this.view.offsetX, a = r + e * this.view.width, s -= t * this.view.offsetY, o = s - t * this.view.height + } + this.projectionMatrix.makeOrthographic(r, a, s, o, this.near, this.far, this.coordinateSystem), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + } + toJSON(e) { + const t = super.toJSON(e); + return t.object.zoom = this.zoom, t.object.left = this.left, t.object.right = this.right, t.object.top = this.top, t.object.bottom = this.bottom, t.object.near = this.near, t.object.far = this.far, null !== this.view && (t.object.view = Object.assign({}, this.view)), t + } + } + class ps extends as { + constructor() { + super(new fs(-5, 5, 5, -5, .5, 500)), this.isDirectionalLightShadow = !0 + } + } + class ms extends es { + constructor(e, t) { + super(e, t), this.isDirectionalLight = !0, this.type = "DirectionalLight", this.position.copy(ti.DEFAULT_UP), this.updateMatrix(), this.target = new ti, this.shadow = new ps + } + dispose() { + this.shadow.dispose() + } + copy(e) { + return super.copy(e), this.target = e.target.clone(), this.shadow = e.shadow.clone(), this + } + } + class gs { + static decodeText(e) { + if (console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."), "undefined" != typeof TextDecoder) return (new TextDecoder).decode(e); + let t = ""; + for (let n = 0, i = e.length; n < i; n++) t += String.fromCharCode(e[n]); + try { + return decodeURIComponent(escape(t)) + } catch (e) { + return t + } + } + static extractUrlBase(e) { + const t = e.lastIndexOf("/"); + return -1 === t ? "./" : e.slice(0, t + 1) + } + static resolveURL(e, t) { + return "string" != typeof e || "" === e ? "" : (/^https?:\/\//i.test(t) && /^\//.test(e) && (t = t.replace(/(^https?:\/\/[^\/]+).*/i, "$1")), /^(https?:)?\/\//i.test(e) || /^data:.*,.*$/i.test(e) || /^blob:.*$/i.test(e) ? e : t + e) + } + } + class As extends qa { + constructor(e) { + super(e), this.isImageBitmapLoader = !0, "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), this.options = { + premultiplyAlpha: "none" + } + } + setOptions(e) { + return this.options = e, this + } + load(e, t, n, i) { + void 0 === e && (e = ""), void 0 !== this.path && (e = this.path + e), e = this.manager.resolveURL(e); + const r = this, + a = Qa.get(e); + if (void 0 !== a) return r.manager.itemStart(e), a.then ? void a.then((n => { + t && t(n), r.manager.itemEnd(e) + })).catch((e => { + i && i(e) + })) : (setTimeout((function() { + t && t(a), r.manager.itemEnd(e) + }), 0), a); + const s = {}; + s.credentials = "anonymous" === this.crossOrigin ? "same-origin" : "include", s.headers = this.requestHeader; + const o = fetch(e, s).then((function(e) { + return e.blob() + })).then((function(e) { + return createImageBitmap(e, Object.assign(r.options, { + colorSpaceConversion: "none" + })) + })).then((function(n) { + return Qa.add(e, n), t && t(n), r.manager.itemEnd(e), n + })).catch((function(t) { + i && i(t), Qa.remove(e), r.manager.itemError(e), r.manager.itemEnd(e) + })); + Qa.add(e, o), r.manager.itemStart(e) + } + } + class _s extends cr { + constructor(e = []) { + super(), this.isArrayCamera = !0, this.cameras = e, this.index = 0 + } + } + const vs = "\\[\\]\\.:\\/", + ws = new RegExp("[" + vs + "]", "g"), + ys = "[^" + vs + "]", + xs = "[^" + vs.replace("\\.", "") + "]", + bs = new RegExp("^" + /((?:WC+[\/:])*)/.source.replace("WC", ys) + /(WCOD+)?/.source.replace("WCOD", xs) + /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", ys) + /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", ys) + "$"), + Es = ["material", "materials", "bones", "map"]; + class Ss { + constructor(e, t, n) { + this.path = t, this.parsedPath = n || Ss.parseTrackName(t), this.node = Ss.findNode(e, this.parsedPath.nodeName), this.rootNode = e, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound + } + static create(e, t, n) { + return e && e.isAnimationObjectGroup ? new Ss.Composite(e, t, n) : new Ss(e, t, n) + } + static sanitizeNodeName(e) { + return e.replace(/\s/g, "_").replace(ws, "") + } + static parseTrackName(e) { + const t = bs.exec(e); + if (null === t) throw new Error("PropertyBinding: Cannot parse trackName: " + e); + const n = { + nodeName: t[2], + objectName: t[3], + objectIndex: t[4], + propertyName: t[5], + propertyIndex: t[6] + }, + i = n.nodeName && n.nodeName.lastIndexOf("."); + if (void 0 !== i && -1 !== i) { + const e = n.nodeName.substring(i + 1); - 1 !== Es.indexOf(e) && (n.nodeName = n.nodeName.substring(0, i), n.objectName = e) + } + if (null === n.propertyName || 0 === n.propertyName.length) throw new Error("PropertyBinding: can not parse propertyName from trackName: " + e); + return n + } + static findNode(e, t) { + if (void 0 === t || "" === t || "." === t || -1 === t || t === e.name || t === e.uuid) return e; + if (e.skeleton) { + const n = e.skeleton.getBoneByName(t); + if (void 0 !== n) return n + } + if (e.children) { + const n = function(e) { + for (let i = 0; i < e.length; i++) { + const r = e[i]; + if (r.name === t || r.uuid === t) return r; + const a = n(r.children); + if (a) return a + } + return null + }, + i = n(e.children); + if (i) return i + } + return null + } + _getValue_unavailable() {} + _setValue_unavailable() {} + _getValue_direct(e, t) { + e[t] = this.targetObject[this.propertyName] + } + _getValue_array(e, t) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) e[t++] = n[i] + } + _getValue_arrayElement(e, t) { + e[t] = this.resolvedProperty[this.propertyIndex] + } + _getValue_toArray(e, t) { + this.resolvedProperty.toArray(e, t) + } + _setValue_direct(e, t) { + this.targetObject[this.propertyName] = e[t] + } + _setValue_direct_setNeedsUpdate(e, t) { + this.targetObject[this.propertyName] = e[t], this.targetObject.needsUpdate = !0 + } + _setValue_direct_setMatrixWorldNeedsUpdate(e, t) { + this.targetObject[this.propertyName] = e[t], this.targetObject.matrixWorldNeedsUpdate = !0 + } + _setValue_array(e, t) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = e[t++] + } + _setValue_array_setNeedsUpdate(e, t) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = e[t++]; + this.targetObject.needsUpdate = !0 + } + _setValue_array_setMatrixWorldNeedsUpdate(e, t) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = e[t++]; + this.targetObject.matrixWorldNeedsUpdate = !0 + } + _setValue_arrayElement(e, t) { + this.resolvedProperty[this.propertyIndex] = e[t] + } + _setValue_arrayElement_setNeedsUpdate(e, t) { + this.resolvedProperty[this.propertyIndex] = e[t], this.targetObject.needsUpdate = !0 + } + _setValue_arrayElement_setMatrixWorldNeedsUpdate(e, t) { + this.resolvedProperty[this.propertyIndex] = e[t], this.targetObject.matrixWorldNeedsUpdate = !0 + } + _setValue_fromArray(e, t) { + this.resolvedProperty.fromArray(e, t) + } + _setValue_fromArray_setNeedsUpdate(e, t) { + this.resolvedProperty.fromArray(e, t), this.targetObject.needsUpdate = !0 + } + _setValue_fromArray_setMatrixWorldNeedsUpdate(e, t) { + this.resolvedProperty.fromArray(e, t), this.targetObject.matrixWorldNeedsUpdate = !0 + } + _getValue_unbound(e, t) { + this.bind(), this.getValue(e, t) + } + _setValue_unbound(e, t) { + this.bind(), this.setValue(e, t) + } + bind() { + let e = this.node; + const t = this.parsedPath, + n = t.objectName, + i = t.propertyName; + let r = t.propertyIndex; + if (e || (e = Ss.findNode(this.rootNode, t.nodeName), this.node = e), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, !e) return void console.warn("THREE.PropertyBinding: No target node found for track: " + this.path + "."); + if (n) { + let i = t.objectIndex; + switch (n) { + case "materials": + if (!e.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + if (!e.material.materials) return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); + e = e.material.materials; + break; + case "bones": + if (!e.skeleton) return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); + e = e.skeleton.bones; + for (let t = 0; t < e.length; t++) + if (e[t].name === i) { + i = t; + break + } break; + case "map": + if ("map" in e) { + e = e.map; + break + } + if (!e.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + if (!e.material.map) return void console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.", this); + e = e.material.map; + break; + default: + if (void 0 === e[n]) return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); + e = e[n] + } + if (void 0 !== i) { + if (void 0 === e[i]) return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, e); + e = e[i] + } + } + const a = e[i]; + if (void 0 === a) { + const n = t.nodeName; + return void console.error("THREE.PropertyBinding: Trying to update property for track: " + n + "." + i + " but it wasn't found.", e) + } + let s = this.Versioning.None; + this.targetObject = e, !0 === e.isMaterial ? s = this.Versioning.NeedsUpdate : !0 === e.isObject3D && (s = this.Versioning.MatrixWorldNeedsUpdate); + let o = this.BindingType.Direct; + if (void 0 !== r) { + if ("morphTargetInfluences" === i) { + if (!e.geometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); + if (!e.geometry.morphAttributes) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); + void 0 !== e.morphTargetDictionary[r] && (r = e.morphTargetDictionary[r]) + } + o = this.BindingType.ArrayElement, this.resolvedProperty = a, this.propertyIndex = r + } else void 0 !== a.fromArray && void 0 !== a.toArray ? (o = this.BindingType.HasFromToArray, this.resolvedProperty = a) : Array.isArray(a) ? (o = this.BindingType.EntireArray, this.resolvedProperty = a) : this.propertyName = i; + this.getValue = this.GetterByBindingType[o], this.setValue = this.SetterByBindingTypeAndVersioning[o][s] + } + unbind() { + this.node = null, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound + } + } + Ss.Composite = class { + constructor(e, t, n) { + const i = n || Ss.parseTrackName(t); + this._targetGroup = e, this._bindings = e.subscribe_(t, i) + } + getValue(e, t) { + this.bind(); + const n = this._targetGroup.nCachedObjects_, + i = this._bindings[n]; + void 0 !== i && i.getValue(e, t) + } + setValue(e, t) { + const n = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i) n[i].setValue(e, t) + } + bind() { + const e = this._bindings; + for (let t = this._targetGroup.nCachedObjects_, n = e.length; t !== n; ++t) e[t].bind() + } + unbind() { + const e = this._bindings; + for (let t = this._targetGroup.nCachedObjects_, n = e.length; t !== n; ++t) e[t].unbind() + } + }, Ss.prototype.BindingType = { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, Ss.prototype.Versioning = { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, Ss.prototype.GetterByBindingType = [Ss.prototype._getValue_direct, Ss.prototype._getValue_array, Ss.prototype._getValue_arrayElement, Ss.prototype._getValue_toArray], Ss.prototype.SetterByBindingTypeAndVersioning = [ + [Ss.prototype._setValue_direct, Ss.prototype._setValue_direct_setNeedsUpdate, Ss.prototype._setValue_direct_setMatrixWorldNeedsUpdate], + [Ss.prototype._setValue_array, Ss.prototype._setValue_array_setNeedsUpdate, Ss.prototype._setValue_array_setMatrixWorldNeedsUpdate], + [Ss.prototype._setValue_arrayElement, Ss.prototype._setValue_arrayElement_setNeedsUpdate, Ss.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate], + [Ss.prototype._setValue_fromArray, Ss.prototype._setValue_fromArray_setNeedsUpdate, Ss.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate] + ]; + new Float32Array(1); + const Ms = new Cn; + class Ts { + constructor(e, t, n = 0, i = 1 / 0) { + this.ray = new Tn(e, t), this.near = n, this.far = i, this.camera = null, this.layers = new On, this.params = { + Mesh: {}, + Line: { + threshold: 1 + }, + LOD: {}, + Points: { + threshold: 1 + }, + Sprite: {} + } + } + set(e, t) { + this.ray.set(e, t) + } + setFromCamera(e, t) { + t.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(t.matrixWorld), this.ray.direction.set(e.x, e.y, .5).unproject(t).sub(this.ray.origin).normalize(), this.camera = t) : t.isOrthographicCamera ? (this.ray.origin.set(e.x, e.y, (t.near + t.far) / (t.near - t.far)).unproject(t), this.ray.direction.set(0, 0, -1).transformDirection(t.matrixWorld), this.camera = t) : console.error("THREE.Raycaster: Unsupported camera type: " + t.type) + } + setFromXRController(e) { + return Ms.identity().extractRotation(e.matrixWorld), this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(0, 0, -1).applyMatrix4(Ms), this + } + intersectObject(e, t = !0, n = []) { + return Is(e, this, n, t), n.sort(Cs), n + } + intersectObjects(e, t = !0, n = []) { + for (let i = 0, r = e.length; i < r; i++) Is(e[i], this, n, t); + return n.sort(Cs), n + } + } + + function Cs(e, t) { + return e.distance - t.distance + } + + function Is(e, t, n, i) { + let r = !0; + if (e.layers.test(t.layers)) { + !1 === e.raycast(t, n) && (r = !1) + } + if (!0 === r && !0 === i) { + const i = e.children; + for (let e = 0, r = i.length; e < r; e++) Is(i[e], t, n, !0) + } + } + + function Rs(e, t, n, i) { + const r = function(e) { + switch (e) { + case X: + case j: + return { + byteLength: 1, components: 1 + }; + case Y: + case q: + case $: + return { + byteLength: 2, components: 1 + }; + case ee: + case te: + return { + byteLength: 2, components: 4 + }; + case Z: + case K: + case J: + return { + byteLength: 4, components: 1 + }; + case ie: + return { + byteLength: 4, components: 3 + } + } + throw new Error(`Unknown texture type ${e}.`) + }(i); + switch (n) { + case 1021: + case 1024: + return e * t; + case 1025: + return e * t * 2; + case oe: + case le: + return e * t / r.components * r.byteLength; + case 1030: + case ce: + return e * t * 2 / r.components * r.byteLength; + case 1022: + return e * t * 3 / r.components * r.byteLength; + case re: + case he: + return e * t * 4 / r.components * r.byteLength; + case ue: + case de: + return Math.floor((e + 3) / 4) * Math.floor((t + 3) / 4) * 8; + case fe: + case pe: + return Math.floor((e + 3) / 4) * Math.floor((t + 3) / 4) * 16; + case ge: + case _e: + return Math.max(e, 16) * Math.max(t, 8) / 4; + case me: + case Ae: + return Math.max(e, 8) * Math.max(t, 8) / 2; + case ve: + case we: + return Math.floor((e + 3) / 4) * Math.floor((t + 3) / 4) * 8; + case ye: + case xe: + return Math.floor((e + 3) / 4) * Math.floor((t + 3) / 4) * 16; + case be: + return Math.floor((e + 4) / 5) * Math.floor((t + 3) / 4) * 16; + case Ee: + return Math.floor((e + 4) / 5) * Math.floor((t + 4) / 5) * 16; + case Se: + return Math.floor((e + 5) / 6) * Math.floor((t + 4) / 5) * 16; + case Me: + return Math.floor((e + 5) / 6) * Math.floor((t + 5) / 6) * 16; + case Te: + return Math.floor((e + 7) / 8) * Math.floor((t + 4) / 5) * 16; + case Ce: + return Math.floor((e + 7) / 8) * Math.floor((t + 5) / 6) * 16; + case Ie: + return Math.floor((e + 7) / 8) * Math.floor((t + 7) / 8) * 16; + case Re: + return Math.floor((e + 9) / 10) * Math.floor((t + 4) / 5) * 16; + case Pe: + return Math.floor((e + 9) / 10) * Math.floor((t + 5) / 6) * 16; + case Be: + return Math.floor((e + 9) / 10) * Math.floor((t + 7) / 8) * 16; + case De: + return Math.floor((e + 9) / 10) * Math.floor((t + 9) / 10) * 16; + case Le: + return Math.floor((e + 11) / 12) * Math.floor((t + 9) / 10) * 16; + case Ue: + return Math.floor((e + 11) / 12) * Math.floor((t + 11) / 12) * 16; + case ke: + case Ne: + case Fe: + return Math.ceil(e / 4) * Math.ceil(t / 4) * 16; + case 36283: + case Oe: + return Math.ceil(e / 4) * Math.ceil(t / 4) * 8; + case ze: + case We: + return Math.ceil(e / 4) * Math.ceil(t / 4) * 16 + } + throw new Error(`Unable to determine texture byte length for ${n} format.`) + } + "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { + detail: { + revision: e + } + })), "undefined" != typeof window && (window.__THREE__ ? console.warn("WARNING: Multiple instances of Three.js being imported.") : window.__THREE__ = e); + const Ps = { + c: null, + u: [new Zt, new Zt, new Zt], + e: [] + }, + Bs = { + c: null, + u: [new Zt, new Zt, new Zt], + e: [] + }, + Ds = [ + [], + [], + [] + ], + Ls = [ + [], + [], + [] + ], + Us = [], + ks = new Zt, + Ns = new Zt, + Fs = new Zt, + Os = new Zt, + zs = new Zt, + Ws = new Zt, + Hs = new St, + Vs = new en, + Gs = new Cn, + Qs = new Cn, + Xs = new Tn; + class js { + constructor(e = new Zt, t = new Zt, n = new St) { + this.center = e, this.halfSize = t, this.rotation = n + } + set(e, t, n) { + return this.center = e, this.halfSize = t, this.rotation = n, this + } + copy(e) { + return this.center.copy(e.center), this.halfSize.copy(e.halfSize), this.rotation.copy(e.rotation), this + } + clone() { + return (new this.constructor).copy(this) + } + getSize(e) { + return e.copy(this.halfSize).multiplyScalar(2) + } + clampPoint(e, t) { + const n = this.halfSize; + Os.subVectors(e, this.center), this.rotation.extractBasis(ks, Ns, Fs), t.copy(this.center); + const i = bt.clamp(Os.dot(ks), -n.x, n.x); + t.add(ks.multiplyScalar(i)); + const r = bt.clamp(Os.dot(Ns), -n.y, n.y); + t.add(Ns.multiplyScalar(r)); + const a = bt.clamp(Os.dot(Fs), -n.z, n.z); + return t.add(Fs.multiplyScalar(a)), t + } + containsPoint(e) { + return Os.subVectors(e, this.center), this.rotation.extractBasis(ks, Ns, Fs), Math.abs(Os.dot(ks)) <= this.halfSize.x && Math.abs(Os.dot(Ns)) <= this.halfSize.y && Math.abs(Os.dot(Fs)) <= this.halfSize.z + } + intersectsBox3(e) { + return this.intersectsOBB(qs.fromBox3(e)) + } + intersectsSphere(e) { + return this.clampPoint(e.center, Ws), Ws.distanceToSquared(e.center) <= e.radius * e.radius + } + intersectsOBB(e, t = Number.EPSILON) { + Ps.c = this.center, Ps.e[0] = this.halfSize.x, Ps.e[1] = this.halfSize.y, Ps.e[2] = this.halfSize.z, this.rotation.extractBasis(Ps.u[0], Ps.u[1], Ps.u[2]), Bs.c = e.center, Bs.e[0] = e.halfSize.x, Bs.e[1] = e.halfSize.y, Bs.e[2] = e.halfSize.z, e.rotation.extractBasis(Bs.u[0], Bs.u[1], Bs.u[2]); + for (let e = 0; e < 3; e++) + for (let t = 0; t < 3; t++) Ds[e][t] = Ps.u[e].dot(Bs.u[t]); + Os.subVectors(Bs.c, Ps.c), Us[0] = Os.dot(Ps.u[0]), Us[1] = Os.dot(Ps.u[1]), Us[2] = Os.dot(Ps.u[2]); + for (let e = 0; e < 3; e++) + for (let n = 0; n < 3; n++) Ls[e][n] = Math.abs(Ds[e][n]) + t; + let n, i; + for (let e = 0; e < 3; e++) + if (n = Ps.e[e], i = Bs.e[0] * Ls[e][0] + Bs.e[1] * Ls[e][1] + Bs.e[2] * Ls[e][2], Math.abs(Us[e]) > n + i) return !1; + for (let e = 0; e < 3; e++) + if (n = Ps.e[0] * Ls[0][e] + Ps.e[1] * Ls[1][e] + Ps.e[2] * Ls[2][e], i = Bs.e[e], Math.abs(Us[0] * Ds[0][e] + Us[1] * Ds[1][e] + Us[2] * Ds[2][e]) > n + i) return !1; + return n = Ps.e[1] * Ls[2][0] + Ps.e[2] * Ls[1][0], i = Bs.e[1] * Ls[0][2] + Bs.e[2] * Ls[0][1], !(Math.abs(Us[2] * Ds[1][0] - Us[1] * Ds[2][0]) > n + i) && (n = Ps.e[1] * Ls[2][1] + Ps.e[2] * Ls[1][1], i = Bs.e[0] * Ls[0][2] + Bs.e[2] * Ls[0][0], !(Math.abs(Us[2] * Ds[1][1] - Us[1] * Ds[2][1]) > n + i) && (n = Ps.e[1] * Ls[2][2] + Ps.e[2] * Ls[1][2], i = Bs.e[0] * Ls[0][1] + Bs.e[1] * Ls[0][0], !(Math.abs(Us[2] * Ds[1][2] - Us[1] * Ds[2][2]) > n + i) && (n = Ps.e[0] * Ls[2][0] + Ps.e[2] * Ls[0][0], i = Bs.e[1] * Ls[1][2] + Bs.e[2] * Ls[1][1], !(Math.abs(Us[0] * Ds[2][0] - Us[2] * Ds[0][0]) > n + i) && (n = Ps.e[0] * Ls[2][1] + Ps.e[2] * Ls[0][1], i = Bs.e[0] * Ls[1][2] + Bs.e[2] * Ls[1][0], !(Math.abs(Us[0] * Ds[2][1] - Us[2] * Ds[0][1]) > n + i) && (n = Ps.e[0] * Ls[2][2] + Ps.e[2] * Ls[0][2], i = Bs.e[0] * Ls[1][1] + Bs.e[1] * Ls[1][0], !(Math.abs(Us[0] * Ds[2][2] - Us[2] * Ds[0][2]) > n + i) && (n = Ps.e[0] * Ls[1][0] + Ps.e[1] * Ls[0][0], i = Bs.e[1] * Ls[2][2] + Bs.e[2] * Ls[2][1], !(Math.abs(Us[1] * Ds[0][0] - Us[0] * Ds[1][0]) > n + i) && (n = Ps.e[0] * Ls[1][1] + Ps.e[1] * Ls[0][1], i = Bs.e[0] * Ls[2][2] + Bs.e[2] * Ls[2][0], !(Math.abs(Us[1] * Ds[0][1] - Us[0] * Ds[1][1]) > n + i) && (n = Ps.e[0] * Ls[1][2] + Ps.e[1] * Ls[0][2], i = Bs.e[0] * Ls[2][1] + Bs.e[1] * Ls[2][0], !(Math.abs(Us[1] * Ds[0][2] - Us[0] * Ds[1][2]) > n + i))))))))) + } + intersectsPlane(e) { + this.rotation.extractBasis(ks, Ns, Fs); + const t = this.halfSize.x * Math.abs(e.normal.dot(ks)) + this.halfSize.y * Math.abs(e.normal.dot(Ns)) + this.halfSize.z * Math.abs(e.normal.dot(Fs)), + n = e.normal.dot(this.center) - e.constant; + return Math.abs(n) <= t + } + intersectRay(e, t) { + return this.getSize(zs), Vs.setFromCenterAndSize(Os.set(0, 0, 0), zs), Gs.setFromMatrix3(this.rotation), Gs.setPosition(this.center), Qs.copy(Gs).invert(), Xs.copy(e).applyMatrix4(Qs), Xs.intersectBox(Vs, t) ? t.applyMatrix4(Gs) : null + } + intersectsRay(e) { + return null !== this.intersectRay(e, Os) + } + fromBox3(e) { + return e.getCenter(this.center), e.getSize(this.halfSize).multiplyScalar(.5), this.rotation.identity(), this + } + equals(e) { + return e.center.equals(this.center) && e.halfSize.equals(this.halfSize) && e.rotation.equals(this.rotation) + } + applyMatrix4(e) { + const t = e.elements; + let n = Os.set(t[0], t[1], t[2]).length(); + const i = Os.set(t[4], t[5], t[6]).length(), + r = Os.set(t[8], t[9], t[10]).length(); + e.determinant() < 0 && (n = -n), Hs.setFromMatrix4(e); + const a = 1 / n, + s = 1 / i, + o = 1 / r; + return Hs.elements[0] *= a, Hs.elements[1] *= a, Hs.elements[2] *= a, Hs.elements[3] *= s, Hs.elements[4] *= s, Hs.elements[5] *= s, Hs.elements[6] *= o, Hs.elements[7] *= o, Hs.elements[8] *= o, this.rotation.multiply(Hs), this.halfSize.x *= n, this.halfSize.y *= i, this.halfSize.z *= r, Os.setFromMatrixPosition(e), this.center.add(Os), this + } + } + const qs = new js; + + function Ys(e) { + let t = e.length; + for (; --t >= 0;) e[t] = 0 + } + const Ks = 256, + Zs = 286, + Js = 30, + $s = 15, + eo = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0]), + to = new Uint8Array([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]), + no = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7]), + io = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), + ro = new Array(576); + Ys(ro); + const ao = new Array(60); + Ys(ao); + const so = new Array(512); + Ys(so); + const oo = new Array(256); + Ys(oo); + const lo = new Array(29); + Ys(lo); + const co = new Array(Js); + + function ho(e, t, n, i, r) { + this.static_tree = e, this.extra_bits = t, this.extra_base = n, this.elems = i, this.max_length = r, this.has_stree = e && e.length + } + let uo, fo, po; + + function mo(e, t) { + this.dyn_tree = e, this.max_code = 0, this.stat_desc = t + } + Ys(co); + const go = e => e < 256 ? so[e] : so[256 + (e >>> 7)], + Ao = (e, t) => { + e.pending_buf[e.pending++] = 255 & t, e.pending_buf[e.pending++] = t >>> 8 & 255 + }, + _o = (e, t, n) => { + e.bi_valid > 16 - n ? (e.bi_buf |= t << e.bi_valid & 65535, Ao(e, e.bi_buf), e.bi_buf = t >> 16 - e.bi_valid, e.bi_valid += n - 16) : (e.bi_buf |= t << e.bi_valid & 65535, e.bi_valid += n) + }, + vo = (e, t, n) => { + _o(e, n[2 * t], n[2 * t + 1]) + }, + wo = (e, t) => { + let n = 0; + do { + n |= 1 & e, e >>>= 1, n <<= 1 + } while (--t > 0); + return n >>> 1 + }, + yo = (e, t, n) => { + const i = new Array(16); + let r, a, s = 0; + for (r = 1; r <= $s; r++) s = s + n[r - 1] << 1, i[r] = s; + for (a = 0; a <= t; a++) { + let t = e[2 * a + 1]; + 0 !== t && (e[2 * a] = wo(i[t]++, t)) + } + }, + xo = e => { + let t; + for (t = 0; t < Zs; t++) e.dyn_ltree[2 * t] = 0; + for (t = 0; t < Js; t++) e.dyn_dtree[2 * t] = 0; + for (t = 0; t < 19; t++) e.bl_tree[2 * t] = 0; + e.dyn_ltree[512] = 1, e.opt_len = e.static_len = 0, e.sym_next = e.matches = 0 + }, + bo = e => { + e.bi_valid > 8 ? Ao(e, e.bi_buf) : e.bi_valid > 0 && (e.pending_buf[e.pending++] = e.bi_buf), e.bi_buf = 0, e.bi_valid = 0 + }, + Eo = (e, t, n, i) => { + const r = 2 * t, + a = 2 * n; + return e[r] < e[a] || e[r] === e[a] && i[t] <= i[n] + }, + So = (e, t, n) => { + const i = e.heap[n]; + let r = n << 1; + for (; r <= e.heap_len && (r < e.heap_len && Eo(t, e.heap[r + 1], e.heap[r], e.depth) && r++, !Eo(t, i, e.heap[r], e.depth));) e.heap[n] = e.heap[r], n = r, r <<= 1; + e.heap[n] = i + }, + Mo = (e, t, n) => { + let i, r, a, s, o = 0; + if (0 !== e.sym_next) + do { + i = 255 & e.pending_buf[e.sym_buf + o++], i += (255 & e.pending_buf[e.sym_buf + o++]) << 8, r = e.pending_buf[e.sym_buf + o++], 0 === i ? vo(e, r, t) : (a = oo[r], vo(e, a + Ks + 1, t), s = eo[a], 0 !== s && (r -= lo[a], _o(e, r, s)), i--, a = go(i), vo(e, a, n), s = to[a], 0 !== s && (i -= co[a], _o(e, i, s))) + } while (o < e.sym_next); + vo(e, 256, t) + }, + To = (e, t) => { + const n = t.dyn_tree, + i = t.stat_desc.static_tree, + r = t.stat_desc.has_stree, + a = t.stat_desc.elems; + let s, o, l, c = -1; + for (e.heap_len = 0, e.heap_max = 573, s = 0; s < a; s++) 0 !== n[2 * s] ? (e.heap[++e.heap_len] = c = s, e.depth[s] = 0) : n[2 * s + 1] = 0; + for (; e.heap_len < 2;) l = e.heap[++e.heap_len] = c < 2 ? ++c : 0, n[2 * l] = 1, e.depth[l] = 0, e.opt_len--, r && (e.static_len -= i[2 * l + 1]); + for (t.max_code = c, s = e.heap_len >> 1; s >= 1; s--) So(e, n, s); + l = a; + do { + s = e.heap[1], e.heap[1] = e.heap[e.heap_len--], So(e, n, 1), o = e.heap[1], e.heap[--e.heap_max] = s, e.heap[--e.heap_max] = o, n[2 * l] = n[2 * s] + n[2 * o], e.depth[l] = (e.depth[s] >= e.depth[o] ? e.depth[s] : e.depth[o]) + 1, n[2 * s + 1] = n[2 * o + 1] = l, e.heap[1] = l++, So(e, n, 1) + } while (e.heap_len >= 2); + e.heap[--e.heap_max] = e.heap[1], ((e, t) => { + const n = t.dyn_tree, + i = t.max_code, + r = t.stat_desc.static_tree, + a = t.stat_desc.has_stree, + s = t.stat_desc.extra_bits, + o = t.stat_desc.extra_base, + l = t.stat_desc.max_length; + let c, h, u, d, f, p, m = 0; + for (d = 0; d <= $s; d++) e.bl_count[d] = 0; + for (n[2 * e.heap[e.heap_max] + 1] = 0, c = e.heap_max + 1; c < 573; c++) h = e.heap[c], d = n[2 * n[2 * h + 1] + 1] + 1, d > l && (d = l, m++), n[2 * h + 1] = d, h > i || (e.bl_count[d]++, f = 0, h >= o && (f = s[h - o]), p = n[2 * h], e.opt_len += p * (d + f), a && (e.static_len += p * (r[2 * h + 1] + f))); + if (0 !== m) { + do { + for (d = l - 1; 0 === e.bl_count[d];) d--; + e.bl_count[d]--, e.bl_count[d + 1] += 2, e.bl_count[l]--, m -= 2 + } while (m > 0); + for (d = l; 0 !== d; d--) + for (h = e.bl_count[d]; 0 !== h;) u = e.heap[--c], u > i || (n[2 * u + 1] !== d && (e.opt_len += (d - n[2 * u + 1]) * n[2 * u], n[2 * u + 1] = d), h--) + } + })(e, t), yo(n, c, e.bl_count) + }, + Co = (e, t, n) => { + let i, r, a = -1, + s = t[1], + o = 0, + l = 7, + c = 4; + for (0 === s && (l = 138, c = 3), t[2 * (n + 1) + 1] = 65535, i = 0; i <= n; i++) r = s, s = t[2 * (i + 1) + 1], ++o < l && r === s || (o < c ? e.bl_tree[2 * r] += o : 0 !== r ? (r !== a && e.bl_tree[2 * r]++, e.bl_tree[32]++) : o <= 10 ? e.bl_tree[34]++ : e.bl_tree[36]++, o = 0, a = r, 0 === s ? (l = 138, c = 3) : r === s ? (l = 6, c = 3) : (l = 7, c = 4)) + }, + Io = (e, t, n) => { + let i, r, a = -1, + s = t[1], + o = 0, + l = 7, + c = 4; + for (0 === s && (l = 138, c = 3), i = 0; i <= n; i++) + if (r = s, s = t[2 * (i + 1) + 1], !(++o < l && r === s)) { + if (o < c) + do { + vo(e, r, e.bl_tree) + } while (0 != --o); + else 0 !== r ? (r !== a && (vo(e, r, e.bl_tree), o--), vo(e, 16, e.bl_tree), _o(e, o - 3, 2)) : o <= 10 ? (vo(e, 17, e.bl_tree), _o(e, o - 3, 3)) : (vo(e, 18, e.bl_tree), _o(e, o - 11, 7)); + o = 0, a = r, 0 === s ? (l = 138, c = 3) : r === s ? (l = 6, c = 3) : (l = 7, c = 4) + } + }; + let Ro = !1; + const Po = (e, t, n, i) => { + _o(e, 0 + (i ? 1 : 0), 3), bo(e), Ao(e, n), Ao(e, ~n), n && e.pending_buf.set(e.window.subarray(t, t + n), e.pending), e.pending += n + }; + var Bo = (e, t, n, i) => { + let r, a, s = 0; + e.level > 0 ? (2 === e.strm.data_type && (e.strm.data_type = (e => { + let t, n = 4093624447; + for (t = 0; t <= 31; t++, n >>>= 1) + if (1 & n && 0 !== e.dyn_ltree[2 * t]) return 0; + if (0 !== e.dyn_ltree[18] || 0 !== e.dyn_ltree[20] || 0 !== e.dyn_ltree[26]) return 1; + for (t = 32; t < Ks; t++) + if (0 !== e.dyn_ltree[2 * t]) return 1; + return 0 + })(e)), To(e, e.l_desc), To(e, e.d_desc), s = (e => { + let t; + for (Co(e, e.dyn_ltree, e.l_desc.max_code), Co(e, e.dyn_dtree, e.d_desc.max_code), To(e, e.bl_desc), t = 18; t >= 3 && 0 === e.bl_tree[2 * io[t] + 1]; t--); + return e.opt_len += 3 * (t + 1) + 5 + 5 + 4, t + })(e), r = e.opt_len + 3 + 7 >>> 3, a = e.static_len + 3 + 7 >>> 3, a <= r && (r = a)) : r = a = n + 5, n + 4 <= r && -1 !== t ? Po(e, t, n, i) : 4 === e.strategy || a === r ? (_o(e, 2 + (i ? 1 : 0), 3), Mo(e, ro, ao)) : (_o(e, 4 + (i ? 1 : 0), 3), ((e, t, n, i) => { + let r; + for (_o(e, t - 257, 5), _o(e, n - 1, 5), _o(e, i - 4, 4), r = 0; r < i; r++) _o(e, e.bl_tree[2 * io[r] + 1], 3); + Io(e, e.dyn_ltree, t - 1), Io(e, e.dyn_dtree, n - 1) + })(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, s + 1), Mo(e, e.dyn_ltree, e.dyn_dtree)), xo(e), i && bo(e) + }, + Do = { + _tr_init: e => { + Ro || ((() => { + let e, t, n, i, r; + const a = new Array(16); + for (n = 0, i = 0; i < 28; i++) + for (lo[i] = n, e = 0; e < 1 << eo[i]; e++) oo[n++] = i; + for (oo[n - 1] = i, r = 0, i = 0; i < 16; i++) + for (co[i] = r, e = 0; e < 1 << to[i]; e++) so[r++] = i; + for (r >>= 7; i < Js; i++) + for (co[i] = r << 7, e = 0; e < 1 << to[i] - 7; e++) so[256 + r++] = i; + for (t = 0; t <= $s; t++) a[t] = 0; + for (e = 0; e <= 143;) ro[2 * e + 1] = 8, e++, a[8]++; + for (; e <= 255;) ro[2 * e + 1] = 9, e++, a[9]++; + for (; e <= 279;) ro[2 * e + 1] = 7, e++, a[7]++; + for (; e <= 287;) ro[2 * e + 1] = 8, e++, a[8]++; + for (yo(ro, 287, a), e = 0; e < Js; e++) ao[2 * e + 1] = 5, ao[2 * e] = wo(e, 5); + uo = new ho(ro, eo, 257, Zs, $s), fo = new ho(ao, to, 0, Js, $s), po = new ho(new Array(0), no, 0, 19, 7) + })(), Ro = !0), e.l_desc = new mo(e.dyn_ltree, uo), e.d_desc = new mo(e.dyn_dtree, fo), e.bl_desc = new mo(e.bl_tree, po), e.bi_buf = 0, e.bi_valid = 0, xo(e) + }, + _tr_stored_block: Po, + _tr_flush_block: Bo, + _tr_tally: (e, t, n) => (e.pending_buf[e.sym_buf + e.sym_next++] = t, e.pending_buf[e.sym_buf + e.sym_next++] = t >> 8, e.pending_buf[e.sym_buf + e.sym_next++] = n, 0 === t ? e.dyn_ltree[2 * n]++ : (e.matches++, t--, e.dyn_ltree[2 * (oo[n] + Ks + 1)]++, e.dyn_dtree[2 * go(t)]++), e.sym_next === e.sym_end), + _tr_align: e => { + _o(e, 2, 3), vo(e, 256, ro), (e => { + 16 === e.bi_valid ? (Ao(e, e.bi_buf), e.bi_buf = 0, e.bi_valid = 0) : e.bi_valid >= 8 && (e.pending_buf[e.pending++] = 255 & e.bi_buf, e.bi_buf >>= 8, e.bi_valid -= 8) + })(e) + } + }; + var Lo = (e, t, n, i) => { + let r = 65535 & e, + a = e >>> 16 & 65535, + s = 0; + for (; 0 !== n;) { + s = n > 2e3 ? 2e3 : n, n -= s; + do { + r = r + t[i++] | 0, a = a + r | 0 + } while (--s); + r %= 65521, a %= 65521 + } + return r | a << 16 + }; + const Uo = new Uint32Array((() => { + let e, t = []; + for (var n = 0; n < 256; n++) { + e = n; + for (var i = 0; i < 8; i++) e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[n] = e + } + return t + })()); + var ko = (e, t, n, i) => { + const r = Uo, + a = i + n; + e ^= -1; + for (let n = i; n < a; n++) e = e >>> 8 ^ r[255 & (e ^ t[n])]; + return ~e + }, + No = { + 2: "need dictionary", + 1: "stream end", + 0: "", + "-1": "file error", + "-2": "stream error", + "-3": "data error", + "-4": "insufficient memory", + "-5": "buffer error", + "-6": "incompatible version" + }, + Fo = { + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + Z_BINARY: 0, + Z_TEXT: 1, + Z_UNKNOWN: 2, + Z_DEFLATED: 8 + }; + const { + _tr_init: Oo, + _tr_stored_block: zo, + _tr_flush_block: Wo, + _tr_tally: Ho, + _tr_align: Vo + } = Do, { + Z_NO_FLUSH: Go, + Z_PARTIAL_FLUSH: Qo, + Z_FULL_FLUSH: Xo, + Z_FINISH: jo, + Z_BLOCK: qo, + Z_OK: Yo, + Z_STREAM_END: Ko, + Z_STREAM_ERROR: Zo, + Z_DATA_ERROR: Jo, + Z_BUF_ERROR: $o, + Z_DEFAULT_COMPRESSION: el, + Z_FILTERED: tl, + Z_HUFFMAN_ONLY: nl, + Z_RLE: il, + Z_FIXED: rl, + Z_DEFAULT_STRATEGY: al, + Z_UNKNOWN: sl, + Z_DEFLATED: ol + } = Fo, ll = 258, cl = 262, hl = 42, ul = 113, dl = 666, fl = (e, t) => (e.msg = No[t], t), pl = e => 2 * e - (e > 4 ? 9 : 0), ml = e => { + let t = e.length; + for (; --t >= 0;) e[t] = 0 + }, gl = e => { + let t, n, i, r = e.w_size; + t = e.hash_size, i = t; + do { + n = e.head[--i], e.head[i] = n >= r ? n - r : 0 + } while (--t); + t = r, i = t; + do { + n = e.prev[--i], e.prev[i] = n >= r ? n - r : 0 + } while (--t) + }; + let Al = (e, t, n) => (t << e.hash_shift ^ n) & e.hash_mask; + const _l = e => { + const t = e.state; + let n = t.pending; + n > e.avail_out && (n = e.avail_out), 0 !== n && (e.output.set(t.pending_buf.subarray(t.pending_out, t.pending_out + n), e.next_out), e.next_out += n, t.pending_out += n, e.total_out += n, e.avail_out -= n, t.pending -= n, 0 === t.pending && (t.pending_out = 0)) + }, + vl = (e, t) => { + Wo(e, e.block_start >= 0 ? e.block_start : -1, e.strstart - e.block_start, t), e.block_start = e.strstart, _l(e.strm) + }, + wl = (e, t) => { + e.pending_buf[e.pending++] = t + }, + yl = (e, t) => { + e.pending_buf[e.pending++] = t >>> 8 & 255, e.pending_buf[e.pending++] = 255 & t + }, + xl = (e, t, n, i) => { + let r = e.avail_in; + return r > i && (r = i), 0 === r ? 0 : (e.avail_in -= r, t.set(e.input.subarray(e.next_in, e.next_in + r), n), 1 === e.state.wrap ? e.adler = Lo(e.adler, t, r, n) : 2 === e.state.wrap && (e.adler = ko(e.adler, t, r, n)), e.next_in += r, e.total_in += r, r) + }, + bl = (e, t) => { + let n, i, r = e.max_chain_length, + a = e.strstart, + s = e.prev_length, + o = e.nice_match; + const l = e.strstart > e.w_size - cl ? e.strstart - (e.w_size - cl) : 0, + c = e.window, + h = e.w_mask, + u = e.prev, + d = e.strstart + ll; + let f = c[a + s - 1], + p = c[a + s]; + e.prev_length >= e.good_match && (r >>= 2), o > e.lookahead && (o = e.lookahead); + do { + if (n = t, c[n + s] === p && c[n + s - 1] === f && c[n] === c[a] && c[++n] === c[a + 1]) { + a += 2, n++; + do {} while (c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && c[++a] === c[++n] && a < d); + if (i = ll - (d - a), a = d - ll, i > s) { + if (e.match_start = t, s = i, i >= o) break; + f = c[a + s - 1], p = c[a + s] + } + } + } while ((t = u[t & h]) > l && 0 != --r); + return s <= e.lookahead ? s : e.lookahead + }, + El = e => { + const t = e.w_size; + let n, i, r; + do { + if (i = e.window_size - e.lookahead - e.strstart, e.strstart >= t + (t - cl) && (e.window.set(e.window.subarray(t, t + t - i), 0), e.match_start -= t, e.strstart -= t, e.block_start -= t, e.insert > e.strstart && (e.insert = e.strstart), gl(e), i += t), 0 === e.strm.avail_in) break; + if (n = xl(e.strm, e.window, e.strstart + e.lookahead, i), e.lookahead += n, e.lookahead + e.insert >= 3) + for (r = e.strstart - e.insert, e.ins_h = e.window[r], e.ins_h = Al(e, e.ins_h, e.window[r + 1]); e.insert && (e.ins_h = Al(e, e.ins_h, e.window[r + 3 - 1]), e.prev[r & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = r, r++, e.insert--, !(e.lookahead + e.insert < 3));); + } while (e.lookahead < cl && 0 !== e.strm.avail_in) + }, + Sl = (e, t) => { + let n, i, r, a = e.pending_buf_size - 5 > e.w_size ? e.w_size : e.pending_buf_size - 5, + s = 0, + o = e.strm.avail_in; + do { + if (n = 65535, r = e.bi_valid + 42 >> 3, e.strm.avail_out < r) break; + if (r = e.strm.avail_out - r, i = e.strstart - e.block_start, n > i + e.strm.avail_in && (n = i + e.strm.avail_in), n > r && (n = r), n < a && (0 === n && t !== jo || t === Go || n !== i + e.strm.avail_in)) break; + s = t === jo && n === i + e.strm.avail_in ? 1 : 0, zo(e, 0, 0, s), e.pending_buf[e.pending - 4] = n, e.pending_buf[e.pending - 3] = n >> 8, e.pending_buf[e.pending - 2] = ~n, e.pending_buf[e.pending - 1] = ~n >> 8, _l(e.strm), i && (i > n && (i = n), e.strm.output.set(e.window.subarray(e.block_start, e.block_start + i), e.strm.next_out), e.strm.next_out += i, e.strm.avail_out -= i, e.strm.total_out += i, e.block_start += i, n -= i), n && (xl(e.strm, e.strm.output, e.strm.next_out, n), e.strm.next_out += n, e.strm.avail_out -= n, e.strm.total_out += n) + } while (0 === s); + return o -= e.strm.avail_in, o && (o >= e.w_size ? (e.matches = 2, e.window.set(e.strm.input.subarray(e.strm.next_in - e.w_size, e.strm.next_in), 0), e.strstart = e.w_size, e.insert = e.strstart) : (e.window_size - e.strstart <= o && (e.strstart -= e.w_size, e.window.set(e.window.subarray(e.w_size, e.w_size + e.strstart), 0), e.matches < 2 && e.matches++, e.insert > e.strstart && (e.insert = e.strstart)), e.window.set(e.strm.input.subarray(e.strm.next_in - o, e.strm.next_in), e.strstart), e.strstart += o, e.insert += o > e.w_size - e.insert ? e.w_size - e.insert : o), e.block_start = e.strstart), e.high_water < e.strstart && (e.high_water = e.strstart), s ? 4 : t !== Go && t !== jo && 0 === e.strm.avail_in && e.strstart === e.block_start ? 2 : (r = e.window_size - e.strstart, e.strm.avail_in > r && e.block_start >= e.w_size && (e.block_start -= e.w_size, e.strstart -= e.w_size, e.window.set(e.window.subarray(e.w_size, e.w_size + e.strstart), 0), e.matches < 2 && e.matches++, r += e.w_size, e.insert > e.strstart && (e.insert = e.strstart)), r > e.strm.avail_in && (r = e.strm.avail_in), r && (xl(e.strm, e.window, e.strstart, r), e.strstart += r, e.insert += r > e.w_size - e.insert ? e.w_size - e.insert : r), e.high_water < e.strstart && (e.high_water = e.strstart), r = e.bi_valid + 42 >> 3, r = e.pending_buf_size - r > 65535 ? 65535 : e.pending_buf_size - r, a = r > e.w_size ? e.w_size : r, i = e.strstart - e.block_start, (i >= a || (i || t === jo) && t !== Go && 0 === e.strm.avail_in && i <= r) && (n = i > r ? r : i, s = t === jo && 0 === e.strm.avail_in && n === i ? 1 : 0, zo(e, e.block_start, n, s), e.block_start += n, _l(e.strm)), s ? 3 : 1) + }, + Ml = (e, t) => { + let n, i; + for (;;) { + if (e.lookahead < cl) { + if (El(e), e.lookahead < cl && t === Go) return 1; + if (0 === e.lookahead) break + } + if (n = 0, e.lookahead >= 3 && (e.ins_h = Al(e, e.ins_h, e.window[e.strstart + 3 - 1]), n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 !== n && e.strstart - n <= e.w_size - cl && (e.match_length = bl(e, n)), e.match_length >= 3) + if (i = Ho(e, e.strstart - e.match_start, e.match_length - 3), e.lookahead -= e.match_length, e.match_length <= e.max_lazy_match && e.lookahead >= 3) { + e.match_length--; + do { + e.strstart++, e.ins_h = Al(e, e.ins_h, e.window[e.strstart + 3 - 1]), n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart + } while (0 != --e.match_length); + e.strstart++ + } else e.strstart += e.match_length, e.match_length = 0, e.ins_h = e.window[e.strstart], e.ins_h = Al(e, e.ins_h, e.window[e.strstart + 1]); + else i = Ho(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++; + if (i && (vl(e, !1), 0 === e.strm.avail_out)) return 1 + } + return e.insert = e.strstart < 2 ? e.strstart : 2, t === jo ? (vl(e, !0), 0 === e.strm.avail_out ? 3 : 4) : e.sym_next && (vl(e, !1), 0 === e.strm.avail_out) ? 1 : 2 + }, + Tl = (e, t) => { + let n, i, r; + for (;;) { + if (e.lookahead < cl) { + if (El(e), e.lookahead < cl && t === Go) return 1; + if (0 === e.lookahead) break + } + if (n = 0, e.lookahead >= 3 && (e.ins_h = Al(e, e.ins_h, e.window[e.strstart + 3 - 1]), n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), e.prev_length = e.match_length, e.prev_match = e.match_start, e.match_length = 2, 0 !== n && e.prev_length < e.max_lazy_match && e.strstart - n <= e.w_size - cl && (e.match_length = bl(e, n), e.match_length <= 5 && (e.strategy === tl || 3 === e.match_length && e.strstart - e.match_start > 4096) && (e.match_length = 2)), e.prev_length >= 3 && e.match_length <= e.prev_length) { + r = e.strstart + e.lookahead - 3, i = Ho(e, e.strstart - 1 - e.prev_match, e.prev_length - 3), e.lookahead -= e.prev_length - 1, e.prev_length -= 2; + do { + ++e.strstart <= r && (e.ins_h = Al(e, e.ins_h, e.window[e.strstart + 3 - 1]), n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart) + } while (0 != --e.prev_length); + if (e.match_available = 0, e.match_length = 2, e.strstart++, i && (vl(e, !1), 0 === e.strm.avail_out)) return 1 + } else if (e.match_available) { + if (i = Ho(e, 0, e.window[e.strstart - 1]), i && vl(e, !1), e.strstart++, e.lookahead--, 0 === e.strm.avail_out) return 1 + } else e.match_available = 1, e.strstart++, e.lookahead-- + } + return e.match_available && (i = Ho(e, 0, e.window[e.strstart - 1]), e.match_available = 0), e.insert = e.strstart < 2 ? e.strstart : 2, t === jo ? (vl(e, !0), 0 === e.strm.avail_out ? 3 : 4) : e.sym_next && (vl(e, !1), 0 === e.strm.avail_out) ? 1 : 2 + }; + + function Cl(e, t, n, i, r) { + this.good_length = e, this.max_lazy = t, this.nice_length = n, this.max_chain = i, this.func = r + } + const Il = [new Cl(0, 0, 0, 0, Sl), new Cl(4, 4, 8, 4, Ml), new Cl(4, 5, 16, 8, Ml), new Cl(4, 6, 32, 32, Ml), new Cl(4, 4, 16, 16, Tl), new Cl(8, 16, 32, 32, Tl), new Cl(8, 16, 128, 128, Tl), new Cl(8, 32, 128, 256, Tl), new Cl(32, 128, 258, 1024, Tl), new Cl(32, 258, 258, 4096, Tl)]; + + function Rl() { + this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = ol, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new Uint16Array(1146), this.dyn_dtree = new Uint16Array(122), this.bl_tree = new Uint16Array(78), ml(this.dyn_ltree), ml(this.dyn_dtree), ml(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new Uint16Array(16), this.heap = new Uint16Array(573), ml(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new Uint16Array(573), ml(this.depth), this.sym_buf = 0, this.lit_bufsize = 0, this.sym_next = 0, this.sym_end = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0 + } + const Pl = e => { + if (!e) return 1; + const t = e.state; + return !t || t.strm !== e || t.status !== hl && 57 !== t.status && 69 !== t.status && 73 !== t.status && 91 !== t.status && 103 !== t.status && t.status !== ul && t.status !== dl ? 1 : 0 + }, + Bl = e => { + if (Pl(e)) return fl(e, Zo); + e.total_in = e.total_out = 0, e.data_type = sl; + const t = e.state; + return t.pending = 0, t.pending_out = 0, t.wrap < 0 && (t.wrap = -t.wrap), t.status = 2 === t.wrap ? 57 : t.wrap ? hl : ul, e.adler = 2 === t.wrap ? 0 : 1, t.last_flush = -2, Oo(t), Yo + }, + Dl = e => { + const t = Bl(e); + var n; + return t === Yo && ((n = e.state).window_size = 2 * n.w_size, ml(n.head), n.max_lazy_match = Il[n.level].max_lazy, n.good_match = Il[n.level].good_length, n.nice_match = Il[n.level].nice_length, n.max_chain_length = Il[n.level].max_chain, n.strstart = 0, n.block_start = 0, n.lookahead = 0, n.insert = 0, n.match_length = n.prev_length = 2, n.match_available = 0, n.ins_h = 0), t + }, + Ll = (e, t, n, i, r, a) => { + if (!e) return Zo; + let s = 1; + if (t === el && (t = 6), i < 0 ? (s = 0, i = -i) : i > 15 && (s = 2, i -= 16), r < 1 || r > 9 || n !== ol || i < 8 || i > 15 || t < 0 || t > 9 || a < 0 || a > rl || 8 === i && 1 !== s) return fl(e, Zo); + 8 === i && (i = 9); + const o = new Rl; + return e.state = o, o.strm = e, o.status = hl, o.wrap = s, o.gzhead = null, o.w_bits = i, o.w_size = 1 << o.w_bits, o.w_mask = o.w_size - 1, o.hash_bits = r + 7, o.hash_size = 1 << o.hash_bits, o.hash_mask = o.hash_size - 1, o.hash_shift = ~~((o.hash_bits + 3 - 1) / 3), o.window = new Uint8Array(2 * o.w_size), o.head = new Uint16Array(o.hash_size), o.prev = new Uint16Array(o.w_size), o.lit_bufsize = 1 << r + 6, o.pending_buf_size = 4 * o.lit_bufsize, o.pending_buf = new Uint8Array(o.pending_buf_size), o.sym_buf = o.lit_bufsize, o.sym_end = 3 * (o.lit_bufsize - 1), o.level = t, o.strategy = a, o.method = n, Dl(e) + }; + var Ul = { + deflateInit: (e, t) => Ll(e, t, ol, 15, 8, al), + deflateInit2: Ll, + deflateReset: Dl, + deflateResetKeep: Bl, + deflateSetHeader: (e, t) => Pl(e) || 2 !== e.state.wrap ? Zo : (e.state.gzhead = t, Yo), + deflate: (e, t) => { + if (Pl(e) || t > qo || t < 0) return e ? fl(e, Zo) : Zo; + const n = e.state; + if (!e.output || 0 !== e.avail_in && !e.input || n.status === dl && t !== jo) return fl(e, 0 === e.avail_out ? $o : Zo); + const i = n.last_flush; + if (n.last_flush = t, 0 !== n.pending) { + if (_l(e), 0 === e.avail_out) return n.last_flush = -1, Yo + } else if (0 === e.avail_in && pl(t) <= pl(i) && t !== jo) return fl(e, $o); + if (n.status === dl && 0 !== e.avail_in) return fl(e, $o); + if (n.status === hl && 0 === n.wrap && (n.status = ul), n.status === hl) { + let t = ol + (n.w_bits - 8 << 4) << 8, + i = -1; + if (i = n.strategy >= nl || n.level < 2 ? 0 : n.level < 6 ? 1 : 6 === n.level ? 2 : 3, t |= i << 6, 0 !== n.strstart && (t |= 32), t += 31 - t % 31, yl(n, t), 0 !== n.strstart && (yl(n, e.adler >>> 16), yl(n, 65535 & e.adler)), e.adler = 1, n.status = ul, _l(e), 0 !== n.pending) return n.last_flush = -1, Yo + } + if (57 === n.status) + if (e.adler = 0, wl(n, 31), wl(n, 139), wl(n, 8), n.gzhead) wl(n, (n.gzhead.text ? 1 : 0) + (n.gzhead.hcrc ? 2 : 0) + (n.gzhead.extra ? 4 : 0) + (n.gzhead.name ? 8 : 0) + (n.gzhead.comment ? 16 : 0)), wl(n, 255 & n.gzhead.time), wl(n, n.gzhead.time >> 8 & 255), wl(n, n.gzhead.time >> 16 & 255), wl(n, n.gzhead.time >> 24 & 255), wl(n, 9 === n.level ? 2 : n.strategy >= nl || n.level < 2 ? 4 : 0), wl(n, 255 & n.gzhead.os), n.gzhead.extra && n.gzhead.extra.length && (wl(n, 255 & n.gzhead.extra.length), wl(n, n.gzhead.extra.length >> 8 & 255)), n.gzhead.hcrc && (e.adler = ko(e.adler, n.pending_buf, n.pending, 0)), n.gzindex = 0, n.status = 69; + else if (wl(n, 0), wl(n, 0), wl(n, 0), wl(n, 0), wl(n, 0), wl(n, 9 === n.level ? 2 : n.strategy >= nl || n.level < 2 ? 4 : 0), wl(n, 3), n.status = ul, _l(e), 0 !== n.pending) return n.last_flush = -1, Yo; + if (69 === n.status) { + if (n.gzhead.extra) { + let t = n.pending, + i = (65535 & n.gzhead.extra.length) - n.gzindex; + for (; n.pending + i > n.pending_buf_size;) { + let r = n.pending_buf_size - n.pending; + if (n.pending_buf.set(n.gzhead.extra.subarray(n.gzindex, n.gzindex + r), n.pending), n.pending = n.pending_buf_size, n.gzhead.hcrc && n.pending > t && (e.adler = ko(e.adler, n.pending_buf, n.pending - t, t)), n.gzindex += r, _l(e), 0 !== n.pending) return n.last_flush = -1, Yo; + t = 0, i -= r + } + let r = new Uint8Array(n.gzhead.extra); + n.pending_buf.set(r.subarray(n.gzindex, n.gzindex + i), n.pending), n.pending += i, n.gzhead.hcrc && n.pending > t && (e.adler = ko(e.adler, n.pending_buf, n.pending - t, t)), n.gzindex = 0 + } + n.status = 73 + } + if (73 === n.status) { + if (n.gzhead.name) { + let t, i = n.pending; + do { + if (n.pending === n.pending_buf_size) { + if (n.gzhead.hcrc && n.pending > i && (e.adler = ko(e.adler, n.pending_buf, n.pending - i, i)), _l(e), 0 !== n.pending) return n.last_flush = -1, Yo; + i = 0 + } + t = n.gzindex < n.gzhead.name.length ? 255 & n.gzhead.name.charCodeAt(n.gzindex++) : 0, wl(n, t) + } while (0 !== t); + n.gzhead.hcrc && n.pending > i && (e.adler = ko(e.adler, n.pending_buf, n.pending - i, i)), n.gzindex = 0 + } + n.status = 91 + } + if (91 === n.status) { + if (n.gzhead.comment) { + let t, i = n.pending; + do { + if (n.pending === n.pending_buf_size) { + if (n.gzhead.hcrc && n.pending > i && (e.adler = ko(e.adler, n.pending_buf, n.pending - i, i)), _l(e), 0 !== n.pending) return n.last_flush = -1, Yo; + i = 0 + } + t = n.gzindex < n.gzhead.comment.length ? 255 & n.gzhead.comment.charCodeAt(n.gzindex++) : 0, wl(n, t) + } while (0 !== t); + n.gzhead.hcrc && n.pending > i && (e.adler = ko(e.adler, n.pending_buf, n.pending - i, i)) + } + n.status = 103 + } + if (103 === n.status) { + if (n.gzhead.hcrc) { + if (n.pending + 2 > n.pending_buf_size && (_l(e), 0 !== n.pending)) return n.last_flush = -1, Yo; + wl(n, 255 & e.adler), wl(n, e.adler >> 8 & 255), e.adler = 0 + } + if (n.status = ul, _l(e), 0 !== n.pending) return n.last_flush = -1, Yo + } + if (0 !== e.avail_in || 0 !== n.lookahead || t !== Go && n.status !== dl) { + let i = 0 === n.level ? Sl(n, t) : n.strategy === nl ? ((e, t) => { + let n; + for (;;) { + if (0 === e.lookahead && (El(e), 0 === e.lookahead)) { + if (t === Go) return 1; + break + } + if (e.match_length = 0, n = Ho(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++, n && (vl(e, !1), 0 === e.strm.avail_out)) return 1 + } + return e.insert = 0, t === jo ? (vl(e, !0), 0 === e.strm.avail_out ? 3 : 4) : e.sym_next && (vl(e, !1), 0 === e.strm.avail_out) ? 1 : 2 + })(n, t) : n.strategy === il ? ((e, t) => { + let n, i, r, a; + const s = e.window; + for (;;) { + if (e.lookahead <= ll) { + if (El(e), e.lookahead <= ll && t === Go) return 1; + if (0 === e.lookahead) break + } + if (e.match_length = 0, e.lookahead >= 3 && e.strstart > 0 && (r = e.strstart - 1, i = s[r], i === s[++r] && i === s[++r] && i === s[++r])) { + a = e.strstart + ll; + do {} while (i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && i === s[++r] && r < a); + e.match_length = ll - (a - r), e.match_length > e.lookahead && (e.match_length = e.lookahead) + } + if (e.match_length >= 3 ? (n = Ho(e, 1, e.match_length - 3), e.lookahead -= e.match_length, e.strstart += e.match_length, e.match_length = 0) : (n = Ho(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++), n && (vl(e, !1), 0 === e.strm.avail_out)) return 1 + } + return e.insert = 0, t === jo ? (vl(e, !0), 0 === e.strm.avail_out ? 3 : 4) : e.sym_next && (vl(e, !1), 0 === e.strm.avail_out) ? 1 : 2 + })(n, t) : Il[n.level].func(n, t); + if (3 !== i && 4 !== i || (n.status = dl), 1 === i || 3 === i) return 0 === e.avail_out && (n.last_flush = -1), Yo; + if (2 === i && (t === Qo ? Vo(n) : t !== qo && (zo(n, 0, 0, !1), t === Xo && (ml(n.head), 0 === n.lookahead && (n.strstart = 0, n.block_start = 0, n.insert = 0))), _l(e), 0 === e.avail_out)) return n.last_flush = -1, Yo + } + return t !== jo ? Yo : n.wrap <= 0 ? Ko : (2 === n.wrap ? (wl(n, 255 & e.adler), wl(n, e.adler >> 8 & 255), wl(n, e.adler >> 16 & 255), wl(n, e.adler >> 24 & 255), wl(n, 255 & e.total_in), wl(n, e.total_in >> 8 & 255), wl(n, e.total_in >> 16 & 255), wl(n, e.total_in >> 24 & 255)) : (yl(n, e.adler >>> 16), yl(n, 65535 & e.adler)), _l(e), n.wrap > 0 && (n.wrap = -n.wrap), 0 !== n.pending ? Yo : Ko) + }, + deflateEnd: e => { + if (Pl(e)) return Zo; + const t = e.state.status; + return e.state = null, t === ul ? fl(e, Jo) : Yo + }, + deflateSetDictionary: (e, t) => { + let n = t.length; + if (Pl(e)) return Zo; + const i = e.state, + r = i.wrap; + if (2 === r || 1 === r && i.status !== hl || i.lookahead) return Zo; + if (1 === r && (e.adler = Lo(e.adler, t, n, 0)), i.wrap = 0, n >= i.w_size) { + 0 === r && (ml(i.head), i.strstart = 0, i.block_start = 0, i.insert = 0); + let e = new Uint8Array(i.w_size); + e.set(t.subarray(n - i.w_size, n), 0), t = e, n = i.w_size + } + const a = e.avail_in, + s = e.next_in, + o = e.input; + for (e.avail_in = n, e.next_in = 0, e.input = t, El(i); i.lookahead >= 3;) { + let e = i.strstart, + t = i.lookahead - 2; + do { + i.ins_h = Al(i, i.ins_h, i.window[e + 3 - 1]), i.prev[e & i.w_mask] = i.head[i.ins_h], i.head[i.ins_h] = e, e++ + } while (--t); + i.strstart = e, i.lookahead = 2, El(i) + } + return i.strstart += i.lookahead, i.block_start = i.strstart, i.insert = i.lookahead, i.lookahead = 0, i.match_length = i.prev_length = 2, i.match_available = 0, e.next_in = s, e.input = o, e.avail_in = a, i.wrap = r, Yo + }, + deflateInfo: "pako deflate (from Nodeca project)" + }; + const kl = (e, t) => Object.prototype.hasOwnProperty.call(e, t); + var Nl = function(e) { + const t = Array.prototype.slice.call(arguments, 1); + for (; t.length;) { + const n = t.shift(); + if (n) { + if ("object" != typeof n) throw new TypeError(n + "must be non-object"); + for (const t in n) kl(n, t) && (e[t] = n[t]) + } + } + return e + }, + Fl = e => { + let t = 0; + for (let n = 0, i = e.length; n < i; n++) t += e[n].length; + const n = new Uint8Array(t); + for (let t = 0, i = 0, r = e.length; t < r; t++) { + let r = e[t]; + n.set(r, i), i += r.length + } + return n + }; + let Ol = !0; + try { + String.fromCharCode.apply(null, new Uint8Array(1)) + } catch (e) { + Ol = !1 + } + const zl = new Uint8Array(256); + for (let e = 0; e < 256; e++) zl[e] = e >= 252 ? 6 : e >= 248 ? 5 : e >= 240 ? 4 : e >= 224 ? 3 : e >= 192 ? 2 : 1; + zl[254] = zl[254] = 1; + var Wl = e => { + if ("function" == typeof TextEncoder && TextEncoder.prototype.encode) return (new TextEncoder).encode(e); + let t, n, i, r, a, s = e.length, + o = 0; + for (r = 0; r < s; r++) n = e.charCodeAt(r), 55296 == (64512 & n) && r + 1 < s && (i = e.charCodeAt(r + 1), 56320 == (64512 & i) && (n = 65536 + (n - 55296 << 10) + (i - 56320), r++)), o += n < 128 ? 1 : n < 2048 ? 2 : n < 65536 ? 3 : 4; + for (t = new Uint8Array(o), a = 0, r = 0; a < o; r++) n = e.charCodeAt(r), 55296 == (64512 & n) && r + 1 < s && (i = e.charCodeAt(r + 1), 56320 == (64512 & i) && (n = 65536 + (n - 55296 << 10) + (i - 56320), r++)), n < 128 ? t[a++] = n : n < 2048 ? (t[a++] = 192 | n >>> 6, t[a++] = 128 | 63 & n) : n < 65536 ? (t[a++] = 224 | n >>> 12, t[a++] = 128 | n >>> 6 & 63, t[a++] = 128 | 63 & n) : (t[a++] = 240 | n >>> 18, t[a++] = 128 | n >>> 12 & 63, t[a++] = 128 | n >>> 6 & 63, t[a++] = 128 | 63 & n); + return t + }, + Hl = (e, t) => { + const n = t || e.length; + if ("function" == typeof TextDecoder && TextDecoder.prototype.decode) return (new TextDecoder).decode(e.subarray(0, t)); + let i, r; + const a = new Array(2 * n); + for (r = 0, i = 0; i < n;) { + let t = e[i++]; + if (t < 128) { + a[r++] = t; + continue + } + let s = zl[t]; + if (s > 4) a[r++] = 65533, i += s - 1; + else { + for (t &= 2 === s ? 31 : 3 === s ? 15 : 7; s > 1 && i < n;) t = t << 6 | 63 & e[i++], s--; + s > 1 ? a[r++] = 65533 : t < 65536 ? a[r++] = t : (t -= 65536, a[r++] = 55296 | t >> 10 & 1023, a[r++] = 56320 | 1023 & t) + } + } + return ((e, t) => { + if (t < 65534 && e.subarray && Ol) return String.fromCharCode.apply(null, e.length === t ? e : e.subarray(0, t)); + let n = ""; + for (let i = 0; i < t; i++) n += String.fromCharCode(e[i]); + return n + })(a, r) + }, + Vl = (e, t) => { + (t = t || e.length) > e.length && (t = e.length); + let n = t - 1; + for (; n >= 0 && 128 == (192 & e[n]);) n--; + return n < 0 || 0 === n ? t : n + zl[e[n]] > t ? n : t + }; + var Gl = function() { + this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0 + }; + const Ql = Object.prototype.toString, + { + Z_NO_FLUSH: Xl, + Z_SYNC_FLUSH: jl, + Z_FULL_FLUSH: ql, + Z_FINISH: Yl, + Z_OK: Kl, + Z_STREAM_END: Zl, + Z_DEFAULT_COMPRESSION: Jl, + Z_DEFAULT_STRATEGY: $l, + Z_DEFLATED: ec + } = Fo; + + function tc(e) { + this.options = Nl({ + level: Jl, + method: ec, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: $l + }, e || {}); + let t = this.options; + t.raw && t.windowBits > 0 ? t.windowBits = -t.windowBits : t.gzip && t.windowBits > 0 && t.windowBits < 16 && (t.windowBits += 16), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new Gl, this.strm.avail_out = 0; + let n = Ul.deflateInit2(this.strm, t.level, t.method, t.windowBits, t.memLevel, t.strategy); + if (n !== Kl) throw new Error(No[n]); + if (t.header && Ul.deflateSetHeader(this.strm, t.header), t.dictionary) { + let e; + if (e = "string" == typeof t.dictionary ? Wl(t.dictionary) : "[object ArrayBuffer]" === Ql.call(t.dictionary) ? new Uint8Array(t.dictionary) : t.dictionary, n = Ul.deflateSetDictionary(this.strm, e), n !== Kl) throw new Error(No[n]); + this._dict_set = !0 + } + } + + function nc(e, t) { + const n = new tc(t); + if (n.push(e, !0), n.err) throw n.msg || No[n.err]; + return n.result + } + tc.prototype.push = function(e, t) { + const n = this.strm, + i = this.options.chunkSize; + let r, a; + if (this.ended) return !1; + for (a = t === ~~t ? t : !0 === t ? Yl : Xl, "string" == typeof e ? n.input = Wl(e) : "[object ArrayBuffer]" === Ql.call(e) ? n.input = new Uint8Array(e) : n.input = e, n.next_in = 0, n.avail_in = n.input.length;;) + if (0 === n.avail_out && (n.output = new Uint8Array(i), n.next_out = 0, n.avail_out = i), (a === jl || a === ql) && n.avail_out <= 6) this.onData(n.output.subarray(0, n.next_out)), n.avail_out = 0; + else { + if (r = Ul.deflate(n, a), r === Zl) return n.next_out > 0 && this.onData(n.output.subarray(0, n.next_out)), r = Ul.deflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === Kl; + if (0 !== n.avail_out) { + if (a > 0 && n.next_out > 0) this.onData(n.output.subarray(0, n.next_out)), n.avail_out = 0; + else if (0 === n.avail_in) break + } else this.onData(n.output) + } return !0 + }, tc.prototype.onData = function(e) { + this.chunks.push(e) + }, tc.prototype.onEnd = function(e) { + e === Kl && (this.result = Fl(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg + }; + var ic = { + Deflate: tc, + deflate: nc, + deflateRaw: function(e, t) { + return (t = t || {}).raw = !0, nc(e, t) + }, + gzip: function(e, t) { + return (t = t || {}).gzip = !0, nc(e, t) + }, + constants: Fo + }; + const rc = 16209; + var ac = function(e, t) { + let n, i, r, a, s, o, l, c, h, u, d, f, p, m, g, A, _, v, w, y, x, b, E, S; + const M = e.state; + n = e.next_in, E = e.input, i = n + (e.avail_in - 5), r = e.next_out, S = e.output, a = r - (t - e.avail_out), s = r + (e.avail_out - 257), o = M.dmax, l = M.wsize, c = M.whave, h = M.wnext, u = M.window, d = M.hold, f = M.bits, p = M.lencode, m = M.distcode, g = (1 << M.lenbits) - 1, A = (1 << M.distbits) - 1; + e: do { + f < 15 && (d += E[n++] << f, f += 8, d += E[n++] << f, f += 8), _ = p[d & g]; + t: for (;;) { + if (v = _ >>> 24, d >>>= v, f -= v, v = _ >>> 16 & 255, 0 === v) S[r++] = 65535 & _; + else { + if (!(16 & v)) { + if (64 & v) { + if (32 & v) { + M.mode = 16191; + break e + } + e.msg = "invalid literal/length code", M.mode = rc; + break e + } + _ = p[(65535 & _) + (d & (1 << v) - 1)]; + continue t + } + for (w = 65535 & _, v &= 15, v && (f < v && (d += E[n++] << f, f += 8), w += d & (1 << v) - 1, d >>>= v, f -= v), f < 15 && (d += E[n++] << f, f += 8, d += E[n++] << f, f += 8), _ = m[d & A];;) { + if (v = _ >>> 24, d >>>= v, f -= v, v = _ >>> 16 & 255, 16 & v) { + if (y = 65535 & _, v &= 15, f < v && (d += E[n++] << f, f += 8, f < v && (d += E[n++] << f, f += 8)), y += d & (1 << v) - 1, y > o) { + e.msg = "invalid distance too far back", M.mode = rc; + break e + } + if (d >>>= v, f -= v, v = r - a, y > v) { + if (v = y - v, v > c && M.sane) { + e.msg = "invalid distance too far back", M.mode = rc; + break e + } + if (x = 0, b = u, 0 === h) { + if (x += l - v, v < w) { + w -= v; + do { + S[r++] = u[x++] + } while (--v); + x = r - y, b = S + } + } else if (h < v) { + if (x += l + h - v, v -= h, v < w) { + w -= v; + do { + S[r++] = u[x++] + } while (--v); + if (x = 0, h < w) { + v = h, w -= v; + do { + S[r++] = u[x++] + } while (--v); + x = r - y, b = S + } + } + } else if (x += h - v, v < w) { + w -= v; + do { + S[r++] = u[x++] + } while (--v); + x = r - y, b = S + } + for (; w > 2;) S[r++] = b[x++], S[r++] = b[x++], S[r++] = b[x++], w -= 3; + w && (S[r++] = b[x++], w > 1 && (S[r++] = b[x++])) + } else { + x = r - y; + do { + S[r++] = S[x++], S[r++] = S[x++], S[r++] = S[x++], w -= 3 + } while (w > 2); + w && (S[r++] = S[x++], w > 1 && (S[r++] = S[x++])) + } + break + } + if (64 & v) { + e.msg = "invalid distance code", M.mode = rc; + break e + } + _ = m[(65535 & _) + (d & (1 << v) - 1)] + } + } + break + } + } while (n < i && r < s); + w = f >> 3, n -= w, f -= w << 3, d &= (1 << f) - 1, e.next_in = n, e.next_out = r, e.avail_in = n < i ? i - n + 5 : 5 - (n - i), e.avail_out = r < s ? s - r + 257 : 257 - (r - s), M.hold = d, M.bits = f + }; + const sc = 15, + oc = new Uint16Array([3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0]), + lc = new Uint8Array([16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78]), + cc = new Uint16Array([1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0]), + hc = new Uint8Array([16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]); + var uc = (e, t, n, i, r, a, s, o) => { + const l = o.bits; + let c, h, u, d, f, p, m = 0, + g = 0, + A = 0, + _ = 0, + v = 0, + w = 0, + y = 0, + x = 0, + b = 0, + E = 0, + S = null; + const M = new Uint16Array(16), + T = new Uint16Array(16); + let C, I, R, P = null; + for (m = 0; m <= sc; m++) M[m] = 0; + for (g = 0; g < i; g++) M[t[n + g]]++; + for (v = l, _ = sc; _ >= 1 && 0 === M[_]; _--); + if (v > _ && (v = _), 0 === _) return r[a++] = 20971520, r[a++] = 20971520, o.bits = 1, 0; + for (A = 1; A < _ && 0 === M[A]; A++); + for (v < A && (v = A), x = 1, m = 1; m <= sc; m++) + if (x <<= 1, x -= M[m], x < 0) return -1; + if (x > 0 && (0 === e || 1 !== _)) return -1; + for (T[1] = 0, m = 1; m < sc; m++) T[m + 1] = T[m] + M[m]; + for (g = 0; g < i; g++) 0 !== t[n + g] && (s[T[t[n + g]]++] = g); + if (0 === e ? (S = P = s, p = 20) : 1 === e ? (S = oc, P = lc, p = 257) : (S = cc, P = hc, p = 0), E = 0, g = 0, m = A, f = a, w = v, y = 0, u = -1, b = 1 << v, d = b - 1, 1 === e && b > 852 || 2 === e && b > 592) return 1; + for (;;) { + C = m - y, s[g] + 1 < p ? (I = 0, R = s[g]) : s[g] >= p ? (I = P[s[g] - p], R = S[s[g] - p]) : (I = 96, R = 0), c = 1 << m - y, h = 1 << w, A = h; + do { + h -= c, r[f + (E >> y) + h] = C << 24 | I << 16 | R + } while (0 !== h); + for (c = 1 << m - 1; E & c;) c >>= 1; + if (0 !== c ? (E &= c - 1, E += c) : E = 0, g++, 0 == --M[m]) { + if (m === _) break; + m = t[n + s[g]] + } + if (m > v && (E & d) !== u) { + for (0 === y && (y = v), f += A, w = m - y, x = 1 << w; w + y < _ && (x -= M[w + y], !(x <= 0));) w++, x <<= 1; + if (b += 1 << w, 1 === e && b > 852 || 2 === e && b > 592) return 1; + u = E & d, r[u] = v << 24 | w << 16 | f - a + } + } + return 0 !== E && (r[f + E] = m - y << 24 | 64 << 16), o.bits = v, 0 + }; + const { + Z_FINISH: dc, + Z_BLOCK: fc, + Z_TREES: pc, + Z_OK: mc, + Z_STREAM_END: gc, + Z_NEED_DICT: Ac, + Z_STREAM_ERROR: _c, + Z_DATA_ERROR: vc, + Z_MEM_ERROR: wc, + Z_BUF_ERROR: yc, + Z_DEFLATED: xc + } = Fo, bc = 16180, Ec = 16190, Sc = 16191, Mc = 16192, Tc = 16194, Cc = 16199, Ic = 16200, Rc = 16206, Pc = 16209, Bc = e => (e >>> 24 & 255) + (e >>> 8 & 65280) + ((65280 & e) << 8) + ((255 & e) << 24); + + function Dc() { + this.strm = null, this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new Uint16Array(320), this.work = new Uint16Array(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0 + } + const Lc = e => { + if (!e) return 1; + const t = e.state; + return !t || t.strm !== e || t.mode < bc || t.mode > 16211 ? 1 : 0 + }, + Uc = e => { + if (Lc(e)) return _c; + const t = e.state; + return e.total_in = e.total_out = t.total = 0, e.msg = "", t.wrap && (e.adler = 1 & t.wrap), t.mode = bc, t.last = 0, t.havedict = 0, t.flags = -1, t.dmax = 32768, t.head = null, t.hold = 0, t.bits = 0, t.lencode = t.lendyn = new Int32Array(852), t.distcode = t.distdyn = new Int32Array(592), t.sane = 1, t.back = -1, mc + }, + kc = e => { + if (Lc(e)) return _c; + const t = e.state; + return t.wsize = 0, t.whave = 0, t.wnext = 0, Uc(e) + }, + Nc = (e, t) => { + let n; + if (Lc(e)) return _c; + const i = e.state; + return t < 0 ? (n = 0, t = -t) : (n = 5 + (t >> 4), t < 48 && (t &= 15)), t && (t < 8 || t > 15) ? _c : (null !== i.window && i.wbits !== t && (i.window = null), i.wrap = n, i.wbits = t, kc(e)) + }, + Fc = (e, t) => { + if (!e) return _c; + const n = new Dc; + e.state = n, n.strm = e, n.window = null, n.mode = bc; + const i = Nc(e, t); + return i !== mc && (e.state = null), i + }; + let Oc, zc, Wc = !0; + const Hc = e => { + if (Wc) { + Oc = new Int32Array(512), zc = new Int32Array(32); + let t = 0; + for (; t < 144;) e.lens[t++] = 8; + for (; t < 256;) e.lens[t++] = 9; + for (; t < 280;) e.lens[t++] = 7; + for (; t < 288;) e.lens[t++] = 8; + for (uc(1, e.lens, 0, 288, Oc, 0, e.work, { + bits: 9 + }), t = 0; t < 32;) e.lens[t++] = 5; + uc(2, e.lens, 0, 32, zc, 0, e.work, { + bits: 5 + }), Wc = !1 + } + e.lencode = Oc, e.lenbits = 9, e.distcode = zc, e.distbits = 5 + }, + Vc = (e, t, n, i) => { + let r; + const a = e.state; + return null === a.window && (a.wsize = 1 << a.wbits, a.wnext = 0, a.whave = 0, a.window = new Uint8Array(a.wsize)), i >= a.wsize ? (a.window.set(t.subarray(n - a.wsize, n), 0), a.wnext = 0, a.whave = a.wsize) : (r = a.wsize - a.wnext, r > i && (r = i), a.window.set(t.subarray(n - i, n - i + r), a.wnext), (i -= r) ? (a.window.set(t.subarray(n - i, n), 0), a.wnext = i, a.whave = a.wsize) : (a.wnext += r, a.wnext === a.wsize && (a.wnext = 0), a.whave < a.wsize && (a.whave += r))), 0 + }; + var Gc = { + inflateReset: kc, + inflateReset2: Nc, + inflateResetKeep: Uc, + inflateInit: e => Fc(e, 15), + inflateInit2: Fc, + inflate: (e, t) => { + let n, i, r, a, s, o, l, c, h, u, d, f, p, m, g, A, _, v, w, y, x, b, E = 0; + const S = new Uint8Array(4); + let M, T; + const C = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); + if (Lc(e) || !e.output || !e.input && 0 !== e.avail_in) return _c; + n = e.state, n.mode === Sc && (n.mode = Mc), s = e.next_out, r = e.output, l = e.avail_out, a = e.next_in, i = e.input, o = e.avail_in, c = n.hold, h = n.bits, u = o, d = l, b = mc; + e: for (;;) switch (n.mode) { + case bc: + if (0 === n.wrap) { + n.mode = Mc; + break + } + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (2 & n.wrap && 35615 === c) { + 0 === n.wbits && (n.wbits = 15), n.check = 0, S[0] = 255 & c, S[1] = c >>> 8 & 255, n.check = ko(n.check, S, 2, 0), c = 0, h = 0, n.mode = 16181; + break + } + if (n.head && (n.head.done = !1), !(1 & n.wrap) || (((255 & c) << 8) + (c >> 8)) % 31) { + e.msg = "incorrect header check", n.mode = Pc; + break + } + if ((15 & c) !== xc) { + e.msg = "unknown compression method", n.mode = Pc; + break + } + if (c >>>= 4, h -= 4, x = 8 + (15 & c), 0 === n.wbits && (n.wbits = x), x > 15 || x > n.wbits) { + e.msg = "invalid window size", n.mode = Pc; + break + } + n.dmax = 1 << n.wbits, n.flags = 0, e.adler = n.check = 1, n.mode = 512 & c ? 16189 : Sc, c = 0, h = 0; + break; + case 16181: + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (n.flags = c, (255 & n.flags) !== xc) { + e.msg = "unknown compression method", n.mode = Pc; + break + } + if (57344 & n.flags) { + e.msg = "unknown header flags set", n.mode = Pc; + break + } + n.head && (n.head.text = c >> 8 & 1), 512 & n.flags && 4 & n.wrap && (S[0] = 255 & c, S[1] = c >>> 8 & 255, n.check = ko(n.check, S, 2, 0)), c = 0, h = 0, n.mode = 16182; + case 16182: + for (; h < 32;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.head && (n.head.time = c), 512 & n.flags && 4 & n.wrap && (S[0] = 255 & c, S[1] = c >>> 8 & 255, S[2] = c >>> 16 & 255, S[3] = c >>> 24 & 255, n.check = ko(n.check, S, 4, 0)), c = 0, h = 0, n.mode = 16183; + case 16183: + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.head && (n.head.xflags = 255 & c, n.head.os = c >> 8), 512 & n.flags && 4 & n.wrap && (S[0] = 255 & c, S[1] = c >>> 8 & 255, n.check = ko(n.check, S, 2, 0)), c = 0, h = 0, n.mode = 16184; + case 16184: + if (1024 & n.flags) { + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.length = c, n.head && (n.head.extra_len = c), 512 & n.flags && 4 & n.wrap && (S[0] = 255 & c, S[1] = c >>> 8 & 255, n.check = ko(n.check, S, 2, 0)), c = 0, h = 0 + } else n.head && (n.head.extra = null); + n.mode = 16185; + case 16185: + if (1024 & n.flags && (f = n.length, f > o && (f = o), f && (n.head && (x = n.head.extra_len - n.length, n.head.extra || (n.head.extra = new Uint8Array(n.head.extra_len)), n.head.extra.set(i.subarray(a, a + f), x)), 512 & n.flags && 4 & n.wrap && (n.check = ko(n.check, i, f, a)), o -= f, a += f, n.length -= f), n.length)) break e; + n.length = 0, n.mode = 16186; + case 16186: + if (2048 & n.flags) { + if (0 === o) break e; + f = 0; + do { + x = i[a + f++], n.head && x && n.length < 65536 && (n.head.name += String.fromCharCode(x)) + } while (x && f < o); + if (512 & n.flags && 4 & n.wrap && (n.check = ko(n.check, i, f, a)), o -= f, a += f, x) break e + } else n.head && (n.head.name = null); + n.length = 0, n.mode = 16187; + case 16187: + if (4096 & n.flags) { + if (0 === o) break e; + f = 0; + do { + x = i[a + f++], n.head && x && n.length < 65536 && (n.head.comment += String.fromCharCode(x)) + } while (x && f < o); + if (512 & n.flags && 4 & n.wrap && (n.check = ko(n.check, i, f, a)), o -= f, a += f, x) break e + } else n.head && (n.head.comment = null); + n.mode = 16188; + case 16188: + if (512 & n.flags) { + for (; h < 16;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (4 & n.wrap && c !== (65535 & n.check)) { + e.msg = "header crc mismatch", n.mode = Pc; + break + } + c = 0, h = 0 + } + n.head && (n.head.hcrc = n.flags >> 9 & 1, n.head.done = !0), e.adler = n.check = 0, n.mode = Sc; + break; + case 16189: + for (; h < 32;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + e.adler = n.check = Bc(c), c = 0, h = 0, n.mode = Ec; + case Ec: + if (0 === n.havedict) return e.next_out = s, e.avail_out = l, e.next_in = a, e.avail_in = o, n.hold = c, n.bits = h, Ac; + e.adler = n.check = 1, n.mode = Sc; + case Sc: + if (t === fc || t === pc) break e; + case Mc: + if (n.last) { + c >>>= 7 & h, h -= 7 & h, n.mode = Rc; + break + } + for (; h < 3;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + switch (n.last = 1 & c, c >>>= 1, h -= 1, 3 & c) { + case 0: + n.mode = 16193; + break; + case 1: + if (Hc(n), n.mode = Cc, t === pc) { + c >>>= 2, h -= 2; + break e + } + break; + case 2: + n.mode = 16196; + break; + case 3: + e.msg = "invalid block type", n.mode = Pc + } + c >>>= 2, h -= 2; + break; + case 16193: + for (c >>>= 7 & h, h -= 7 & h; h < 32;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if ((65535 & c) != (c >>> 16 ^ 65535)) { + e.msg = "invalid stored block lengths", n.mode = Pc; + break + } + if (n.length = 65535 & c, c = 0, h = 0, n.mode = Tc, t === pc) break e; + case Tc: + n.mode = 16195; + case 16195: + if (f = n.length, f) { + if (f > o && (f = o), f > l && (f = l), 0 === f) break e; + r.set(i.subarray(a, a + f), s), o -= f, a += f, l -= f, s += f, n.length -= f; + break + } + n.mode = Sc; + break; + case 16196: + for (; h < 14;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (n.nlen = 257 + (31 & c), c >>>= 5, h -= 5, n.ndist = 1 + (31 & c), c >>>= 5, h -= 5, n.ncode = 4 + (15 & c), c >>>= 4, h -= 4, n.nlen > 286 || n.ndist > 30) { + e.msg = "too many length or distance symbols", n.mode = Pc; + break + } + n.have = 0, n.mode = 16197; + case 16197: + for (; n.have < n.ncode;) { + for (; h < 3;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.lens[C[n.have++]] = 7 & c, c >>>= 3, h -= 3 + } + for (; n.have < 19;) n.lens[C[n.have++]] = 0; + if (n.lencode = n.lendyn, n.lenbits = 7, M = { + bits: n.lenbits + }, b = uc(0, n.lens, 0, 19, n.lencode, 0, n.work, M), n.lenbits = M.bits, b) { + e.msg = "invalid code lengths set", n.mode = Pc; + break + } + n.have = 0, n.mode = 16198; + case 16198: + for (; n.have < n.nlen + n.ndist;) { + for (; E = n.lencode[c & (1 << n.lenbits) - 1], g = E >>> 24, A = E >>> 16 & 255, _ = 65535 & E, !(g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (_ < 16) c >>>= g, h -= g, n.lens[n.have++] = _; + else { + if (16 === _) { + for (T = g + 2; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (c >>>= g, h -= g, 0 === n.have) { + e.msg = "invalid bit length repeat", n.mode = Pc; + break + } + x = n.lens[n.have - 1], f = 3 + (3 & c), c >>>= 2, h -= 2 + } else if (17 === _) { + for (T = g + 3; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + c >>>= g, h -= g, x = 0, f = 3 + (7 & c), c >>>= 3, h -= 3 + } else { + for (T = g + 7; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + c >>>= g, h -= g, x = 0, f = 11 + (127 & c), c >>>= 7, h -= 7 + } + if (n.have + f > n.nlen + n.ndist) { + e.msg = "invalid bit length repeat", n.mode = Pc; + break + } + for (; f--;) n.lens[n.have++] = x + } + } + if (n.mode === Pc) break; + if (0 === n.lens[256]) { + e.msg = "invalid code -- missing end-of-block", n.mode = Pc; + break + } + if (n.lenbits = 9, M = { + bits: n.lenbits + }, b = uc(1, n.lens, 0, n.nlen, n.lencode, 0, n.work, M), n.lenbits = M.bits, b) { + e.msg = "invalid literal/lengths set", n.mode = Pc; + break + } + if (n.distbits = 6, n.distcode = n.distdyn, M = { + bits: n.distbits + }, b = uc(2, n.lens, n.nlen, n.ndist, n.distcode, 0, n.work, M), n.distbits = M.bits, b) { + e.msg = "invalid distances set", n.mode = Pc; + break + } + if (n.mode = Cc, t === pc) break e; + case Cc: + n.mode = Ic; + case Ic: + if (o >= 6 && l >= 258) { + e.next_out = s, e.avail_out = l, e.next_in = a, e.avail_in = o, n.hold = c, n.bits = h, ac(e, d), s = e.next_out, r = e.output, l = e.avail_out, a = e.next_in, i = e.input, o = e.avail_in, c = n.hold, h = n.bits, n.mode === Sc && (n.back = -1); + break + } + for (n.back = 0; E = n.lencode[c & (1 << n.lenbits) - 1], g = E >>> 24, A = E >>> 16 & 255, _ = 65535 & E, !(g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (A && !(240 & A)) { + for (v = g, w = A, y = _; E = n.lencode[y + ((c & (1 << v + w) - 1) >> v)], g = E >>> 24, A = E >>> 16 & 255, _ = 65535 & E, !(v + g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + c >>>= v, h -= v, n.back += v + } + if (c >>>= g, h -= g, n.back += g, n.length = _, 0 === A) { + n.mode = 16205; + break + } + if (32 & A) { + n.back = -1, n.mode = Sc; + break + } + if (64 & A) { + e.msg = "invalid literal/length code", n.mode = Pc; + break + } + n.extra = 15 & A, n.mode = 16201; + case 16201: + if (n.extra) { + for (T = n.extra; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.length += c & (1 << n.extra) - 1, c >>>= n.extra, h -= n.extra, n.back += n.extra + } + n.was = n.length, n.mode = 16202; + case 16202: + for (; E = n.distcode[c & (1 << n.distbits) - 1], g = E >>> 24, A = E >>> 16 & 255, _ = 65535 & E, !(g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (!(240 & A)) { + for (v = g, w = A, y = _; E = n.distcode[y + ((c & (1 << v + w) - 1) >> v)], g = E >>> 24, A = E >>> 16 & 255, _ = 65535 & E, !(v + g <= h);) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + c >>>= v, h -= v, n.back += v + } + if (c >>>= g, h -= g, n.back += g, 64 & A) { + e.msg = "invalid distance code", n.mode = Pc; + break + } + n.offset = _, n.extra = 15 & A, n.mode = 16203; + case 16203: + if (n.extra) { + for (T = n.extra; h < T;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + n.offset += c & (1 << n.extra) - 1, c >>>= n.extra, h -= n.extra, n.back += n.extra + } + if (n.offset > n.dmax) { + e.msg = "invalid distance too far back", n.mode = Pc; + break + } + n.mode = 16204; + case 16204: + if (0 === l) break e; + if (f = d - l, n.offset > f) { + if (f = n.offset - f, f > n.whave && n.sane) { + e.msg = "invalid distance too far back", n.mode = Pc; + break + } + f > n.wnext ? (f -= n.wnext, p = n.wsize - f) : p = n.wnext - f, f > n.length && (f = n.length), m = n.window + } else m = r, p = s - n.offset, f = n.length; + f > l && (f = l), l -= f, n.length -= f; + do { + r[s++] = m[p++] + } while (--f); + 0 === n.length && (n.mode = Ic); + break; + case 16205: + if (0 === l) break e; + r[s++] = n.length, l--, n.mode = Ic; + break; + case Rc: + if (n.wrap) { + for (; h < 32;) { + if (0 === o) break e; + o--, c |= i[a++] << h, h += 8 + } + if (d -= l, e.total_out += d, n.total += d, 4 & n.wrap && d && (e.adler = n.check = n.flags ? ko(n.check, r, d, s - d) : Lo(n.check, r, d, s - d)), d = l, 4 & n.wrap && (n.flags ? c : Bc(c)) !== n.check) { + e.msg = "incorrect data check", n.mode = Pc; + break + } + c = 0, h = 0 + } + n.mode = 16207; + case 16207: + if (n.wrap && n.flags) { + for (; h < 32;) { + if (0 === o) break e; + o--, c += i[a++] << h, h += 8 + } + if (4 & n.wrap && c !== (4294967295 & n.total)) { + e.msg = "incorrect length check", n.mode = Pc; + break + } + c = 0, h = 0 + } + n.mode = 16208; + case 16208: + b = gc; + break e; + case Pc: + b = vc; + break e; + case 16210: + return wc; + default: + return _c + } + return e.next_out = s, e.avail_out = l, e.next_in = a, e.avail_in = o, n.hold = c, n.bits = h, (n.wsize || d !== e.avail_out && n.mode < Pc && (n.mode < Rc || t !== dc)) && Vc(e, e.output, e.next_out, d - e.avail_out), u -= e.avail_in, d -= e.avail_out, e.total_in += u, e.total_out += d, n.total += d, 4 & n.wrap && d && (e.adler = n.check = n.flags ? ko(n.check, r, d, e.next_out - d) : Lo(n.check, r, d, e.next_out - d)), e.data_type = n.bits + (n.last ? 64 : 0) + (n.mode === Sc ? 128 : 0) + (n.mode === Cc || n.mode === Tc ? 256 : 0), (0 === u && 0 === d || t === dc) && b === mc && (b = yc), b + }, + inflateEnd: e => { + if (Lc(e)) return _c; + let t = e.state; + return t.window && (t.window = null), e.state = null, mc + }, + inflateGetHeader: (e, t) => { + if (Lc(e)) return _c; + const n = e.state; + return 2 & n.wrap ? (n.head = t, t.done = !1, mc) : _c + }, + inflateSetDictionary: (e, t) => { + const n = t.length; + let i, r, a; + return Lc(e) ? _c : (i = e.state, 0 !== i.wrap && i.mode !== Ec ? _c : i.mode === Ec && (r = 1, r = Lo(r, t, n, 0), r !== i.check) ? vc : (a = Vc(e, t, n, n), a ? (i.mode = 16210, wc) : (i.havedict = 1, mc))) + }, + inflateInfo: "pako inflate (from Nodeca project)" + }; + var Qc = function() { + this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = !1 + }; + const Xc = Object.prototype.toString, + { + Z_NO_FLUSH: jc, + Z_FINISH: qc, + Z_OK: Yc, + Z_STREAM_END: Kc, + Z_NEED_DICT: Zc, + Z_STREAM_ERROR: Jc, + Z_DATA_ERROR: $c, + Z_MEM_ERROR: eh + } = Fo; + + function th(e) { + this.options = Nl({ + chunkSize: 65536, + windowBits: 15, + to: "" + }, e || {}); + const t = this.options; + t.raw && t.windowBits >= 0 && t.windowBits < 16 && (t.windowBits = -t.windowBits, 0 === t.windowBits && (t.windowBits = -15)), !(t.windowBits >= 0 && t.windowBits < 16) || e && e.windowBits || (t.windowBits += 32), t.windowBits > 15 && t.windowBits < 48 && (15 & t.windowBits || (t.windowBits |= 15)), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new Gl, this.strm.avail_out = 0; + let n = Gc.inflateInit2(this.strm, t.windowBits); + if (n !== Yc) throw new Error(No[n]); + if (this.header = new Qc, Gc.inflateGetHeader(this.strm, this.header), t.dictionary && ("string" == typeof t.dictionary ? t.dictionary = Wl(t.dictionary) : "[object ArrayBuffer]" === Xc.call(t.dictionary) && (t.dictionary = new Uint8Array(t.dictionary)), t.raw && (n = Gc.inflateSetDictionary(this.strm, t.dictionary), n !== Yc))) throw new Error(No[n]) + } + + function nh(e, t) { + const n = new th(t); + if (n.push(e), n.err) throw n.msg || No[n.err]; + return n.result + } + th.prototype.push = function(e, t) { + const n = this.strm, + i = this.options.chunkSize, + r = this.options.dictionary; + let a, s, o; + if (this.ended) return !1; + for (s = t === ~~t ? t : !0 === t ? qc : jc, "[object ArrayBuffer]" === Xc.call(e) ? n.input = new Uint8Array(e) : n.input = e, n.next_in = 0, n.avail_in = n.input.length;;) { + for (0 === n.avail_out && (n.output = new Uint8Array(i), n.next_out = 0, n.avail_out = i), a = Gc.inflate(n, s), a === Zc && r && (a = Gc.inflateSetDictionary(n, r), a === Yc ? a = Gc.inflate(n, s) : a === $c && (a = Zc)); n.avail_in > 0 && a === Kc && n.state.wrap > 0 && 0 !== e[n.next_in];) Gc.inflateReset(n), a = Gc.inflate(n, s); + switch (a) { + case Jc: + case $c: + case Zc: + case eh: + return this.onEnd(a), this.ended = !0, !1 + } + if (o = n.avail_out, n.next_out && (0 === n.avail_out || a === Kc)) + if ("string" === this.options.to) { + let e = Vl(n.output, n.next_out), + t = n.next_out - e, + r = Hl(n.output, e); + n.next_out = t, n.avail_out = i - t, t && n.output.set(n.output.subarray(e, e + t), 0), this.onData(r) + } else this.onData(n.output.length === n.next_out ? n.output : n.output.subarray(0, n.next_out)); + if (a !== Yc || 0 !== o) { + if (a === Kc) return a = Gc.inflateEnd(this.strm), this.onEnd(a), this.ended = !0, !0; + if (0 === n.avail_in) break + } + } + return !0 + }, th.prototype.onData = function(e) { + this.chunks.push(e) + }, th.prototype.onEnd = function(e) { + e === Yc && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = Fl(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg + }; + var ih = { + Inflate: th, + inflate: nh, + inflateRaw: function(e, t) { + return (t = t || {}).raw = !0, nh(e, t) + }, + ungzip: nh, + constants: Fo + }; + const { + Deflate: rh, + deflate: ah, + deflateRaw: sh, + gzip: oh + } = ic, { + Inflate: lh, + inflate: ch, + inflateRaw: hh, + ungzip: uh + } = ih; + var dh = { + Deflate: rh, + deflate: ah, + deflateRaw: sh, + gzip: oh, + Inflate: lh, + inflate: ch, + inflateRaw: hh, + ungzip: uh, + constants: Fo + }; + + function fh(e) { + let t; + e = (e = e.replace(/-/g, "+")).replace(/_/g, "/"); + try { + t = atob(e) + } catch (e) { + return null + } + const n = new Uint8Array(t.length); + for (let e = 0; e < t.length; ++e) { + const i = t.charCodeAt(e); + if (i > 255) return null; + n[e] = i + } + return n + } + var ph, mh, gh, Ah, _h, vh, wh, yh, xh, bh, Eh, Sh = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Mh = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Th { + constructor(e) { + ph.add(this), gh.set(this, []), Ah.set(this, []), _h.set(this, []), vh.set(this, []), wh.set(this, []), yh.set(this, null), null != e && (Sh(this, gh, e.up, "f"), Sh(this, Ah, e.right, "f"), Sh(this, _h, e.down, "f"), Sh(this, vh, e.left, "f"), Sh(this, wh, e.reset, "f")) + } + recordFrame(e, t) { + if (e > mh.maxFrames) throw new Error("Frame number exceeds maximum frame count."); + if (null != Mh(this, yh, "f") && e <= Mh(this, yh, "f")) throw new Error("Frame number must be greater than the previous recorded frame."); + Sh(this, yh, e, "f"); + const n = Mh(this, gh, "f").length % 2 != 0, + i = Mh(this, Ah, "f").length % 2 != 0, + r = Mh(this, _h, "f").length % 2 != 0, + a = Mh(this, vh, "f").length % 2 != 0, + s = Mh(this, wh, "f").length % 2 != 0; + t.up != n && Mh(this, gh, "f").push(e), t.right != i && Mh(this, Ah, "f").push(e), t.down != r && Mh(this, _h, "f").push(e), t.left != a && Mh(this, vh, "f").push(e), t.reset != s && Mh(this, wh, "f").push(e) + } + getFrame(e) { + return { + up: (Mh(this, ph, "m", xh).call(this, e, Mh(this, gh, "f")) + 1) % 2 != 0, + right: (Mh(this, ph, "m", xh).call(this, e, Mh(this, Ah, "f")) + 1) % 2 != 0, + down: (Mh(this, ph, "m", xh).call(this, e, Mh(this, _h, "f")) + 1) % 2 != 0, + left: (Mh(this, ph, "m", xh).call(this, e, Mh(this, vh, "f")) + 1) % 2 != 0, + reset: (Mh(this, ph, "m", xh).call(this, e, Mh(this, wh, "f")) + 1) % 2 != 0 + } + } + serialize() { + const e = new Uint8Array(3 + 3 * Mh(this, gh, "f").length + 3 + 3 * Mh(this, Ah, "f").length + 3 + 3 * Mh(this, _h, "f").length + 3 + 3 * Mh(this, vh, "f").length + 3 + 3 * Mh(this, wh, "f").length); + Mh(this, ph, "m", bh).call(this, Mh(this, gh, "f"), e.subarray(0, 3 + 3 * Mh(this, gh, "f").length)), Mh(this, ph, "m", bh).call(this, Mh(this, Ah, "f"), e.subarray(3 + 3 * Mh(this, gh, "f").length, 3 + 3 * Mh(this, gh, "f").length + 3 + 3 * Mh(this, Ah, "f").length)), Mh(this, ph, "m", bh).call(this, Mh(this, _h, "f"), e.subarray(3 + 3 * Mh(this, gh, "f").length + 3 + 3 * Mh(this, Ah, "f").length, 3 + 3 * Mh(this, gh, "f").length + 3 + 3 * Mh(this, Ah, "f").length + 3 + 3 * Mh(this, _h, "f").length)), Mh(this, ph, "m", bh).call(this, Mh(this, vh, "f"), e.subarray(3 + 3 * Mh(this, gh, "f").length + 3 + 3 * Mh(this, Ah, "f").length + 3 + 3 * Mh(this, _h, "f").length, 3 + 3 * Mh(this, gh, "f").length + 3 + 3 * Mh(this, Ah, "f").length + 3 + 3 * Mh(this, _h, "f").length + 3 + 3 * Mh(this, vh, "f").length)), Mh(this, ph, "m", bh).call(this, Mh(this, wh, "f"), e.subarray(3 + 3 * Mh(this, gh, "f").length + 3 + 3 * Mh(this, Ah, "f").length + 3 + 3 * Mh(this, _h, "f").length + 3 + 3 * Mh(this, vh, "f").length, 3 + 3 * Mh(this, gh, "f").length + 3 + 3 * Mh(this, Ah, "f").length + 3 + 3 * Mh(this, _h, "f").length + 3 + 3 * Mh(this, vh, "f").length + 3 + 3 * Mh(this, wh, "f").length)); + const t = new dh.Deflate({ + level: 9 + }); + return t.push(new Uint8Array(e), !0), + function(e) { + let t = ""; + for (const n of e) t += String.fromCharCode(n); + let n = btoa(t); + return n = n.replace(/\+/g, "-"), n = n.replace(/\//g, "_"), n = n.replace(/=/g, ""), n + }(t.result) + } + static deserialize(e) { + const t = fh(e); + if (null == t) return null; + const n = new dh.Inflate; + if (n.push(t, !0), n.err) return null; + const i = n.result; + if (!(i instanceof Uint8Array)) return null; + const r = Mh(mh, mh, "m", Eh).call(mh, i); + if (null == r) return null; + const a = Mh(mh, mh, "m", Eh).call(mh, i.subarray(3 + 3 * r.length)); + if (null == a) return null; + const s = Mh(mh, mh, "m", Eh).call(mh, i.subarray(3 + 3 * r.length + 3 + 3 * a.length)); + if (null == s) return null; + const o = Mh(mh, mh, "m", Eh).call(mh, i.subarray(3 + 3 * r.length + 3 + 3 * a.length + 3 + 3 * s.length)); + if (null == o) return null; + const l = Mh(mh, mh, "m", Eh).call(mh, i.subarray(3 + 3 * r.length + 3 + 3 * a.length + 3 + 3 * s.length + 3 + 3 * o.length)); + return null == l ? null : new mh({ + up: r, + right: a, + down: s, + left: o, + reset: l + }) + } + } + mh = Th, gh = new WeakMap, Ah = new WeakMap, _h = new WeakMap, vh = new WeakMap, wh = new WeakMap, yh = new WeakMap, ph = new WeakSet, xh = function(e, t) { + let n = -1; + for (let i = 0; i < t.length; ++i) { + const r = t[i]; + if (r == e) { + n = i; + break + } + if (r > e) break; + n = i + } + return n + }, bh = function(e, t) { + t[0] = 255 & e.length, t[1] = e.length >>> 8 & 255, t[2] = e.length >>> 16 & 255; + for (let n = 0; n < e.length; ++n) { + let i; + i = 0 == n ? e[n] : e[n] - e[n - 1], t[3 + 3 * n] = 255 & i, t[3 + 3 * n + 1] = i >>> 8 & 255, t[3 + 3 * n + 2] = i >>> 16 & 255 + } + }, Eh = function(e) { + if (e.length < 3) return null; + const t = e[0] | e[1] << 8 | e[2] << 16; + if (e.length < 3 + 3 * t) return null; + const n = []; + for (let i = 0; i < t; ++i) { + const t = e[3 + 3 * i] | e[3 + 3 * i + 1] << 8 | e[3 + 3 * i + 2] << 16; + 0 == i ? n.push(t) : n.push(n[i - 1] + t) + } + return n + }, Th.maxFrames = 5999999; + const Ch = Th; + var Ih, Rh, Ph, Bh, Dh, Lh, Uh, kh, Nh, Fh, Oh, zh, Wh, Hh = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Vh = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Gh { + constructor() { + Rh.set(this, void 0), Ph.set(this, void 0), Bh.set(this, void 0), Dh.set(this, void 0), Lh.set(this, void 0), Uh.set(this, []), kh.set(this, new Map), Fh.set(this, []), Oh.set(this, new Map), zh.set(this, null), Wh.set(this, null), Hh(this, Rh, new Ammo.btDefaultCollisionConfiguration, "f"), Hh(this, Ph, new Ammo.btCollisionDispatcher(Vh(this, Rh, "f")), "f"), Hh(this, Bh, new Ammo.btDbvtBroadphase, "f"), Hh(this, Dh, new Ammo.btSequentialImpulseConstraintSolver, "f"), Hh(this, Lh, new Ammo.btDiscreteDynamicsWorld(Vh(this, Ph, "f"), Vh(this, Bh, "f"), Vh(this, Dh, "f"), Vh(this, Rh, "f")), "f"); + const e = new Ammo.btVector3(0, -9.82, 0); + Vh(this, Lh, "f").setGravity(e), Ammo.destroy(e) + } + dispose() { + for (const { + body: e + } + of Vh(this, Fh, "f")) null != e && Vh(this, Lh, "f").removeRigidBody(e); + Vh(this, Fh, "f").length = 0; + for (const { + body: e + } + of Vh(this, Uh, "f")) null != e && (Ammo.destroy(e.getMotionState()), Ammo.destroy(e)); + Vh(this, Uh, "f").length = 0, Vh(this, kh, "f").clear(); + for (const e of Vh(this, Oh, "f").values()) + for (const t of e) Ammo.destroy(t.getMotionState()), Ammo.destroy(t); + Vh(this, Oh, "f").clear(), null != Vh(this, zh, "f") && (Vh(this, zh, "f").isActive && Vh(this, Lh, "f").removeRigidBody(Vh(this, zh, "f").body), Ammo.destroy(Vh(this, zh, "f").body.getMotionState()), Ammo.destroy(Vh(this, zh, "f").body), Ammo.destroy(Vh(this, zh, "f").shape)), null != Vh(this, Wh, "f") && (Vh(this, Wh, "f").isActive && Vh(this, Lh, "f").removeRigidBody(Vh(this, Wh, "f").body), Ammo.destroy(Vh(this, Wh, "f").body.getMotionState()), Ammo.destroy(Vh(this, Wh, "f").body), Ammo.destroy(Vh(this, Wh, "f").shape), Ammo.destroy(Vh(this, Wh, "f").triangleMesh)), Ammo.destroy(Vh(this, Lh, "f")), Ammo.destroy(Vh(this, Dh, "f")), Ammo.destroy(Vh(this, Bh, "f")), Ammo.destroy(Vh(this, Ph, "f")), Ammo.destroy(Vh(this, Rh, "f")) + } + createGroundPlane() { + if (null != Vh(this, zh, "f")) throw new Error("Ground is already initialized"); + const e = new Ammo.btVector3(0, 1, 0), + t = new Ammo.btStaticPlaneShape(e, 0); + t.setMargin(.01), Ammo.destroy(e); + const n = new Ammo.btTransform; + n.setIdentity(); + const i = new Ammo.btDefaultMotionState(n); + Ammo.destroy(n); + const r = new Ammo.btVector3; + t.calculateLocalInertia(0, r); + const a = new Ammo.btRigidBodyConstructionInfo(0, i, t, r), + s = new Ammo.btRigidBody(a); + s.setFriction(1), Ammo.destroy(r), Ammo.destroy(a), Hh(this, zh, { + body: s, + shape: t, + isActive: !1 + }, "f") + } + createMountains(e, t) { + if (e.length % 9 != 0) throw new Error("Number of mountain vertices is not dividable by 9"); + if (e.length > 0) { + if (null != Vh(this, Wh, "f")) throw new Error("Mountains are already initialized"); + let n = 1 / 0; + const i = new Ammo.btTriangleMesh; + for (let t = 0; t < e.length; t += 9) { + const r = e[t + 0], + a = e[t + 1], + s = e[t + 2], + o = e[t + 3], + l = e[t + 4], + c = e[t + 5], + h = e[t + 6], + u = e[t + 7], + d = e[t + 8], + f = new Ammo.btVector3(r, a, s), + p = new Ammo.btVector3(o, l, c), + m = new Ammo.btVector3(h, u, d); + i.addTriangle(f, p, m), Ammo.destroy(f), Ammo.destroy(p), Ammo.destroy(m), n = Math.min(n, new Zt(r, a, s).lengthSq(), new Zt(o, l, c).lengthSq(), new Zt(h, u, d).lengthSq()) + } + const r = new Ammo.btBvhTriangleMeshShape(i); + r.setMargin(.02); + const a = new Ammo.btVector3(t.x, t.y, t.z), + s = new Ammo.btTransform; + s.setIdentity(), s.setOrigin(a), Ammo.destroy(a); + const o = new Ammo.btVector3; + r.calculateLocalInertia(0, o); + const l = new Ammo.btDefaultMotionState(s); + Ammo.destroy(s); + const c = new Ammo.btRigidBodyConstructionInfo(0, l, r, o), + h = new Ammo.btRigidBody(c); + h.setFriction(1), Ammo.destroy(o), Ammo.destroy(c); + const u = Math.sqrt(n); + Hh(this, Wh, { + body: h, + shape: r, + triangleMesh: i, + offset: t, + minimumRadius: u, + isActive: !1 + }, "f") + } + } + addStaticBody(e, t, n) { + const i = Vh(Ih, Ih, "f", Nh); + (t = t.clone()).applyMatrix4(e); + const r = { + active: !1, + matrix: e, + shape: n, + body: null, + min: t.min.clone(), + max: t.max.clone() + }; + Vh(this, Uh, "f").push(r); + for (let e = Math.floor((t.min.x - 3) / i); e <= Math.ceil((t.max.x + 3) / i); ++e) + for (let n = Math.floor((t.min.y - 3) / i); n <= Math.ceil((t.max.y + 3) / i); ++n) + for (let a = Math.floor((t.min.z - 3) / i); a <= Math.ceil((t.max.z + 3) / i); ++a) { + const t = Vh(this, kh, "f").get(e); + if (null == t) Vh(this, kh, "f").set(e, new Map([ + [n, new Map([ + [a, [r]] + ])] + ])); + else { + const e = t.get(n); + if (null == e) t.set(n, new Map([ + [a, [r]] + ])); + else { + const t = e.get(a); + null == t ? e.set(a, [r]) : t.push(r) + } + } + } + } + activePhysicsAt(e) { + if (null != Vh(this, zh, "f") && (e.y < 4 ? Vh(this, zh, "f").isActive || (Vh(this, Lh, "f").addRigidBody(Vh(this, zh, "f").body), Vh(this, zh, "f").isActive = !0) : e.y > 5 && Vh(this, zh, "f").isActive && (Vh(this, Lh, "f").removeRigidBody(Vh(this, zh, "f").body), Vh(this, zh, "f").isActive = !1)), null != Vh(this, Wh, "f")) { + const t = e.distanceTo(Vh(this, Wh, "f").offset); + t > Vh(this, Wh, "f").minimumRadius - 10 ? Vh(this, Wh, "f").isActive || (Vh(this, Lh, "f").addRigidBody(Vh(this, Wh, "f").body), Vh(this, Wh, "f").isActive = !0) : t < Vh(this, Wh, "f").minimumRadius - 20 && Vh(this, Wh, "f").isActive && (Vh(this, Lh, "f").removeRigidBody(Vh(this, Wh, "f").body), Vh(this, Wh, "f").isActive = !1) + } + const t = new Ammo.btVector3, + n = new Ammo.btVector3; + Hh(this, Fh, Vh(this, Fh, "f").filter((t => { + if (t.active && (e.x < t.min.x - 3 || e.x > t.max.x + 3 || e.y < t.min.y - 3 || e.y > t.max.y + 3 || e.z < t.min.z - 3 || e.z > t.max.z + 3)) { + const e = Vh(this, Oh, "f").get(t.shape); + return null == e ? Vh(this, Oh, "f").set(t.shape, [t.body]) : e.push(t.body), Vh(this, Lh, "f").removeRigidBody(t.body), t.body = null, t.active = !1, !1 + } + return !0 + })), "f"); + const i = e.clone().divideScalar(Vh(Ih, Ih, "f", Nh)).floor(), + r = Vh(this, kh, "f").get(i.x); + if (null != r) { + const t = r.get(i.y); + if (null != t) { + const n = t.get(i.z); + if (null != n) + for (const t of n) + if (!t.active && e.x >= t.min.x - 3 && e.x <= t.max.x + 3 && e.y >= t.min.y - 3 && e.y <= t.max.y + 3 && e.z >= t.min.z - 3 && e.z <= t.max.z + 3) { + let e = Vh(this, Oh, "f").get(t.shape); + null == e && (e = [], Vh(this, Oh, "f").set(t.shape, e)); + const n = new Ammo.btTransform; + let i; + if (n.setFromOpenGLMatrix(t.matrix.elements), e.length > 0) i = e.pop(), i.setWorldTransform(n), Ammo.destroy(n), Vh(this, Lh, "f").addRigidBody(i); + else { + const e = new Ammo.btDefaultMotionState(n); + Ammo.destroy(n); + const r = new Ammo.btVector3; + t.shape.calculateLocalInertia(0, r); + const a = new Ammo.btRigidBodyConstructionInfo(0, e, t.shape, r); + i = new Ammo.btRigidBody(a), i.setFriction(1), Ammo.destroy(r), Ammo.destroy(a), Vh(this, Lh, "f").addRigidBody(i) + } + if (null != t.body) throw new Error("Activating already active rigid body"); + t.body = i, t.active = !0, Vh(this, Fh, "f").push(t) + } + } + } + Ammo.destroy(t), Ammo.destroy(n) + } + step() { + Vh(this, Lh, "f").stepSimulation(1 / Ih.stepsPerSecond, 0, 1 / Ih.stepsPerSecond) + } + get world() { + return Vh(this, Lh, "f") + } + get dispatcher() { + return Vh(this, Ph, "f") + } + } + Ih = Gh, Rh = new WeakMap, Ph = new WeakMap, Bh = new WeakMap, Dh = new WeakMap, Lh = new WeakMap, Uh = new WeakMap, kh = new WeakMap, Fh = new WeakMap, Oh = new WeakMap, zh = new WeakMap, Wh = new WeakMap, Nh = { + value: 20 + }, Gh.stepsPerSecond = 1e3; + const Qh = Gh; + var Xh, jh = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + qh = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Yh { + constructor(e) { + if (Xh.set(this, 0), null != e) { + if (!Number.isSafeInteger(e)) throw new Error("Frames is not a safe integer"); + jh(this, Xh, e, "f") + } + } + get numberOfFrames() { + return qh(this, Xh, "f") + } + get time() { + return qh(this, Xh, "f") / 1e3 + } + increment() { + var e; + jh(this, Xh, (e = qh(this, Xh, "f"), ++e), "f") + } + difference(e) { + return new Yh(qh(this, Xh, "f") - qh(e, Xh, "f")) + } + lessThan(e) { + return qh(this, Xh, "f") < qh(e, Xh, "f") + } + greaterThan(e) { + return qh(this, Xh, "f") > qh(e, Xh, "f") + } + lessOrEqual(e) { + return qh(this, Xh, "f") <= qh(e, Xh, "f") + } + greaterOrEqual(e) { + return qh(this, Xh, "f") >= qh(e, Xh, "f") + } + equals(e) { + return qh(this, Xh, "f") == qh(e, Xh, "f") + } + isNegative() { + return qh(this, Xh, "f") < 0 + } + clone() { + const e = new Yh; + return jh(e, Xh, qh(this, Xh, "f"), "f"), e + } + } + Xh = new WeakMap; + const Kh = Yh; + var Zh; + ! function(e) { + e[e.Checkpoint = 0] = "Checkpoint", e[e.Finish = 1] = "Finish" + }(Zh || (Zh = {})); + const Jh = Zh, + $h = [ + [new Kt(0, 0, 0, 1), new Kt(0, .7071067811865475, 0, .7071067811865476), new Kt(0, 1, 0, 0), new Kt(0, .7071067811865476, 0, -.7071067811865475)], + [new Kt(0, 0, 1, 0), new Kt(.7071067811865475, 0, .7071067811865476, 0), new Kt(1, 0, 0, 0), new Kt(.7071067811865476, 0, -.7071067811865475, 0)], + [new Kt(0, 0, -.7071067811865477, .7071067811865475), new Kt(.5, .5, -.5, .5), new Kt(.7071067811865475, .7071067811865477, 0, 0), new Kt(.5, .5, .5, -.5)], + [new Kt(0, 0, .7071067811865475, .7071067811865476), new Kt(.5, -.5, .5, .5), new Kt(.7071067811865476, -.7071067811865475, 0, 0), new Kt(.5, -.5, -.5, -.5)], + [new Kt(.7071067811865475, 0, 0, .7071067811865476), new Kt(.5, .5, .5, .5), new Kt(0, .7071067811865476, .7071067811865475, 0), new Kt(-.5, .5, .5, -.5)], + [new Kt(-.7071067811865477, 0, 0, .7071067811865475), new Kt(-.5, -.5, .5, .5), new Kt(0, -.7071067811865475, .7071067811865477, 0), new Kt(.5, -.5, .5, -.5)] + ]; + + function eu(e, t) { + return $h[t][e].clone() + } + var tu, nu, iu, ru, au, su, ou, lu, cu, hu = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + uu = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class du { + constructor(e, t, n) { + tu.add(this), iu.set(this, void 0), ru.set(this, new Map), au.set(this, []), su.set(this, []), ou.set(this, []), hu(this, iu, t, "f"), n.forEachPart(((n, i, r, a, s, o, l, c) => { + uu(this, tu, "m", lu).call(this, n, i, r, s, o, a, e, t); + const h = uu(this, ru, "f").get(a); + null == h ? uu(this, ru, "f").set(a, [{ + x: n, + y: i, + z: r, + rotation: s, + rotationAxis: o, + type: a, + checkpointOrder: c + }]) : h.push({ + x: n, + y: i, + z: r, + rotation: s, + rotationAxis: o, + type: a, + checkpointOrder: c + }) + })); + const i = uu(this, iu, "f").getPartTypesWithDetector(Jh.Finish); + for (const e of i) { + const t = uu(this, iu, "f").getDetector(e); + if (null == t) throw new Error("Part detector is missing"); + const n = uu(this, ru, "f").get(e); + null != n && hu(this, au, uu(this, au, "f").concat(n.map((({ + x: e, + y: n, + z: i, + rotation: r, + rotationAxis: a, + type: s, + checkpointOrder: o + }) => ({ + x: e, + y: n, + z: i, + rotation: r, + rotationAxis: a, + type: s, + checkpointOrder: o, + detector: t + })))), "f") + } + const r = uu(this, iu, "f").getPartTypesWithDetector(Jh.Checkpoint); + for (const e of r) { + const t = uu(this, iu, "f").getDetector(e); + if (null == t) throw new Error("Part detector is missing"); + const n = uu(this, ru, "f").get(e); + null != n && hu(this, su, uu(this, su, "f").concat(n.map((({ + x: e, + y: n, + z: i, + rotation: r, + rotationAxis: a, + type: s, + checkpointOrder: o + }) => { + if (null == o) throw new Error("Checkpoint has no checkpoint order"); + return { + x: e, + y: n, + z: i, + rotation: r, + rotationAxis: a, + type: s, + checkpointOrder: o, + detector: t + } + }))), "f") + } + hu(this, ou, uu(this, su, "f").map((e => e.checkpointOrder)).filter(((e, t, n) => n.indexOf(e) == t)).sort(((e, t) => e - t)), "f") + } + checkCheckpoint(e, t) { + return uu(this, tu, "m", cu).call(this, e, t) + } + checkFinish(e) { + return uu(this, tu, "m", cu).call(this, e) + } + getTotalNumberOfCheckpointIndices() { + return uu(this, ou, "f").length + } + } + nu = du, iu = new WeakMap, ru = new WeakMap, au = new WeakMap, su = new WeakMap, ou = new WeakMap, tu = new WeakSet, lu = function(e, t, n, i, r, a, s, o) { + const l = eu(i, r), + c = new Zt(e * nu.partSize, t * nu.partSize, n * nu.partSize), + h = (new Cn).compose(c, l, new Zt(1, 1, 1)), + { + boundingBox: u, + shape: d + } = o.getPhysicsShape(a); + s.addStaticBody(h, u, d) + }, cu = function(e, t) { + let n = [], + i = null; + null == t ? n = uu(this, au, "f") : (n = uu(this, su, "f"), t < uu(this, ou, "f").length && (i = uu(this, ou, "f")[t])); + for (const { + x: t, + y: r, + z: a, + rotation: s, + rotationAxis: o, + type: l, + checkpointOrder: c, + detector: h + } + of n) + if (c == i) { + const n = eu(s, o), + i = h.center.clone().applyQuaternion(n).add(new Zt(t * nu.partSize, r * nu.partSize, a * nu.partSize)), + c = h.size.clone().applyQuaternion(n); + c.x = Math.abs(c.x), c.y = Math.abs(c.y), c.z = Math.abs(c.z); + const u = (new en).setFromCenterAndSize(i, c); + if (e.intersectsBox3(u)) return { + x: t, + y: r, + z: a, + rotation: s, + rotationAxis: o, + type: l + } + } return null + }, du.partSize = 5; + const fu = du; + var pu; + ! function(e) { + e[e.Straight = 0] = "Straight", e[e.TurnSharp = 1] = "TurnSharp", e[e.SlopeUp = 2] = "SlopeUp", e[e.SlopeDown = 3] = "SlopeDown", e[e.Slope = 4] = "Slope", e[e.Start = 5] = "Start", e[e.Finish = 6] = "Finish", e[e.ToWideMiddle = 7] = "ToWideMiddle", e[e.ToWideLeft = 8] = "ToWideLeft", e[e.ToWideRight = 9] = "ToWideRight", e[e.StraightWide = 10] = "StraightWide", e[e.InnerCornerWide = 11] = "InnerCornerWide", e[e.OuterCornerWide = 12] = "OuterCornerWide", e[e.SlopeUpLeftWide = 13] = "SlopeUpLeftWide", e[e.SlopeUpRightWide = 14] = "SlopeUpRightWide", e[e.SlopeDownLeftWide = 15] = "SlopeDownLeftWide", e[e.SlopeDownRightWide = 16] = "SlopeDownRightWide", e[e.SlopeLeftWide = 17] = "SlopeLeftWide", e[e.SlopeRightWide = 18] = "SlopeRightWide", e[e.PillarTop = 19] = "PillarTop", e[e.PillarMiddle = 20] = "PillarMiddle", e[e.PillarBottom = 21] = "PillarBottom", e[e.PillarShort = 22] = "PillarShort", e[e.PlanePillarBottom = 23] = "PlanePillarBottom", e[e.PlanePillarShort = 24] = "PlanePillarShort", e[e.Plane = 25] = "Plane", e[e.PlaneWall = 26] = "PlaneWall", e[e.PlaneWallCorner = 27] = "PlaneWallCorner", e[e.PlaneWallInnerCorner = 28] = "PlaneWallInnerCorner", e[e.Block = 29] = "Block", e[e.WallTrackTop = 30] = "WallTrackTop", e[e.WallTrackMiddle = 31] = "WallTrackMiddle", e[e.WallTrackBottom = 32] = "WallTrackBottom", e[e.PlaneSlopeUp = 33] = "PlaneSlopeUp", e[e.PlaneSlopeDown = 34] = "PlaneSlopeDown", e[e.PlaneSlope = 35] = "PlaneSlope", e[e.TurnShort = 36] = "TurnShort", e[e.TurnLong = 37] = "TurnLong", e[e.SlopeUpLong = 38] = "SlopeUpLong", e[e.SlopeDownLong = 39] = "SlopeDownLong", e[e.SlopePillar = 40] = "SlopePillar", e[e.TurnSLeft = 41] = "TurnSLeft", e[e.TurnSRight = 42] = "TurnSRight", e[e.IntersectionT = 43] = "IntersectionT", e[e.IntersectionCross = 44] = "IntersectionCross", e[e.PillarBranch1 = 45] = "PillarBranch1", e[e.PillarBranch2 = 46] = "PillarBranch2", e[e.PillarBranch3 = 47] = "PillarBranch3", e[e.PillarBranch4 = 48] = "PillarBranch4", e[e.WallTrackBottomCorner = 49] = "WallTrackBottomCorner", e[e.WallTrackMiddleCorner = 50] = "WallTrackMiddleCorner", e[e.WallTrackTopCorner = 51] = "WallTrackTopCorner", e[e.Checkpoint = 52] = "Checkpoint", e[e.HalfBlock = 53] = "HalfBlock", e[e.QuarterBlock = 54] = "QuarterBlock", e[e.HalfPlane = 55] = "HalfPlane", e[e.QuarterPlane = 56] = "QuarterPlane", e[e.PlaneBridge = 57] = "PlaneBridge", e[e.SignArrowLeft = 58] = "SignArrowLeft", e[e.SignArrowRight = 59] = "SignArrowRight", e[e.SignArrowUp = 61] = "SignArrowUp", e[e.SignArrowDown = 62] = "SignArrowDown", e[e.SignWarning = 63] = "SignWarning", e[e.SignWrongWay = 64] = "SignWrongWay", e[e.CheckpointWide = 65] = "CheckpointWide", e[e.WallTrackCeiling = 66] = "WallTrackCeiling", e[e.WallTrackFloor = 67] = "WallTrackFloor", e[e.BlockSlopedDown = 68] = "BlockSlopedDown", e[e.BlockSlopedDownInnerCorner = 69] = "BlockSlopedDownInnerCorner", e[e.BlockSlopedDownOuterCorner = 70] = "BlockSlopedDownOuterCorner", e[e.BlockSlopedUp = 71] = "BlockSlopedUp", e[e.BlockSlopedUpInnerCorner = 72] = "BlockSlopedUpInnerCorner", e[e.BlockSlopedUpOuterCorner = 73] = "BlockSlopedUpOuterCorner", e[e.FinishWide = 74] = "FinishWide", e[e.PlaneCheckpoint = 75] = "PlaneCheckpoint", e[e.PlaneFinish = 76] = "PlaneFinish", e[e.PlaneCheckpointWide = 77] = "PlaneCheckpointWide", e[e.PlaneFinishWide = 78] = "PlaneFinishWide", e[e.WallTrackBottomInnerCorner = 79] = "WallTrackBottomInnerCorner", e[e.WallTrackInnerCorner = 80] = "WallTrackInnerCorner", e[e.WallTrackTopInnerCorner = 81] = "WallTrackTopInnerCorner", e[e.TurnLong2 = 82] = "TurnLong2", e[e.TurnLong3 = 83] = "TurnLong3", e[e.SlopePillarShort = 84] = "SlopePillarShort", e[e.BlockSlopeUp = 85] = "BlockSlopeUp", e[e.BlockSlopeDown = 86] = "BlockSlopeDown", e[e.BlockSlopeVerticalTop = 87] = "BlockSlopeVerticalTop", e[e.BlockSlopeVerticalBottom = 88] = "BlockSlopeVerticalBottom", e[e.PlaneSlopeVerticalBottom = 90] = "PlaneSlopeVerticalBottom", e[e.StartWide = 91] = "StartWide", e[e.PlaneStart = 92] = "PlaneStart", e[e.PlaneStartWide = 93] = "PlaneStartWide", e[e.TurnShortLeftWide = 94] = "TurnShortLeftWide", e[e.TurnShortRightWide = 95] = "TurnShortRightWide", e[e.TurnLongLeftWide = 96] = "TurnLongLeftWide", e[e.TurnLongRightWide = 97] = "TurnLongRightWide", e[e.SlopeUpVertical = 98] = "SlopeUpVertical", e[e.PlaneSlopePillar = 99] = "PlaneSlopePillar", e[e.PlaneSlopePillarShort = 100] = "PlaneSlopePillarShort", e[e.PillarBranch1Top = 101] = "PillarBranch1Top", e[e.PillarBranch1Bottom = 102] = "PillarBranch1Bottom", e[e.PillarBranch1Middle = 103] = "PillarBranch1Middle", e[e.PillarBranch2Top = 104] = "PillarBranch2Top", e[e.PillarBranch2Middle = 105] = "PillarBranch2Middle", e[e.PillarBranch2Bottom = 106] = "PillarBranch2Bottom", e[e.PillarBranch3Top = 107] = "PillarBranch3Top", e[e.PillarBranch3Middle = 108] = "PillarBranch3Middle", e[e.PillarBranch3Bottom = 109] = "PillarBranch3Bottom", e[e.PillarBranch4Top = 110] = "PillarBranch4Top", e[e.PillarBranch4Middle = 111] = "PillarBranch4Middle", e[e.PillarBranch4Bottom = 112] = "PillarBranch4Bottom", e[e.PillarBranch5 = 113] = "PillarBranch5", e[e.PillarBranch5Top = 114] = "PillarBranch5Top", e[e.PillarBranch5Middle = 115] = "PillarBranch5Middle", e[e.PillarBranch5Bottom = 116] = "PillarBranch5Bottom", e[e.ToWideDouble = 117] = "ToWideDouble", e[e.ToWideDiagonal = 118] = "ToWideDiagonal", e[e.StraightPillarBottom = 119] = "StraightPillarBottom", e[e.StraightPillarShort = 120] = "StraightPillarShort", e[e.TurnSharpPillarBottom = 121] = "TurnSharpPillarBottom", e[e.TurnSharpPillarShort = 122] = "TurnSharpPillarShort", e[e.IntersectionTPillarBottom = 123] = "IntersectionTPillarBottom", e[e.IntersectionTPillarShort = 124] = "IntersectionTPillarShort", e[e.IntersectionCrossPillarBottom = 125] = "IntersectionCrossPillarBottom", e[e.IntersectionCrossPillarShort = 126] = "IntersectionCrossPillarShort", e[e.PlaneBridgeCorner = 127] = "PlaneBridgeCorner", e[e.PlaneBridgeIntersectionT = 128] = "PlaneBridgeIntersectionT", e[e.PlaneBridgeIntersectionCross = 129] = "PlaneBridgeIntersectionCross", e[e.BlockBridge = 130] = "BlockBridge", e[e.BlockBridgeCorner = 131] = "BlockBridgeCorner", e[e.BlockBridgeIntersectionT = 132] = "BlockBridgeIntersectionT", e[e.BlockBridgeIntersectionCross = 133] = "BlockBridgeIntersectionCross", e[e.WallTrackCeilingCorner = 134] = "WallTrackCeilingCorner", e[e.WallTrackCeilingPlaneCorner = 135] = "WallTrackCeilingPlaneCorner", e[e.WallTrackFloorCorner = 136] = "WallTrackFloorCorner", e[e.WallTrackFloorPlaneCorner = 137] = "WallTrackFloorPlaneCorner", e[e.SlopeUpVerticalLeftWide = 138] = "SlopeUpVerticalLeftWide", e[e.SlopeUpVerticalRightWide = 139] = "SlopeUpVerticalRightWide", e[e.BlockSlopeVerticalCornerTop = 140] = "BlockSlopeVerticalCornerTop", e[e.BlockSlopeVerticalCornerBottom = 141] = "BlockSlopeVerticalCornerBottom", e[e.WallTrackSlopeToVertical = 142] = "WallTrackSlopeToVertical", e[e.PlaneSlopeToVertical = 143] = "PlaneSlopeToVertical", e[e.BlockSlopeToVertical = 144] = "BlockSlopeToVertical", e[e.PlaneSlopeUpLong = 145] = "PlaneSlopeUpLong", e[e.PlaneSlopeDownLong = 146] = "PlaneSlopeDownLong", e[e.SlopeUpLongLeftWide = 147] = "SlopeUpLongLeftWide", e[e.SlopeUpLongRightWide = 148] = "SlopeUpLongRightWide", e[e.SlopeDownLongLeftWide = 149] = "SlopeDownLongLeftWide", e[e.SlopeDownLongRightWide = 150] = "SlopeDownLongRightWide", e[e.BlockSlopeUpLong = 151] = "BlockSlopeUpLong", e[e.BlockSlopeDownLong = 152] = "BlockSlopeDownLong", e[e.BlockSlopeVerticalInnerCornerBottom = 153] = "BlockSlopeVerticalInnerCornerBottom", e[e.BlockSlopeVerticalInnerCornerTop = 154] = "BlockSlopeVerticalInnerCornerTop", e[e.BlockInnerCorner = 155] = "BlockInnerCorner" + }(pu || (pu = {})); + const mu = pu; + var gu; + ! function(e) { + e[e.YPositive = 0] = "YPositive", e[e.YNegative = 1] = "YNegative", e[e.XPositive = 2] = "XPositive", e[e.XNegative = 3] = "XNegative", e[e.ZPositive = 4] = "ZPositive", e[e.ZNegative = 5] = "ZNegative" + }(gu || (gu = {})); + const Au = gu; + + function _u(e) { + let t, n, i, r = -1, + a = 0; + for (let s = 0; s < e.length; ++s) { + const o = e[s]; + if (void 0 === t && (t = o.array.constructor), t !== o.array.constructor) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."), null; + if (void 0 === n && (n = o.itemSize), n !== o.itemSize) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."), null; + if (void 0 === i && (i = o.normalized), i !== o.normalized) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."), null; + if (-1 === r && (r = o.gpuType), r !== o.gpuType) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."), null; + a += o.count * n + } + const s = new t(a), + o = new Ci(s, n, i); + let l = 0; + for (let t = 0; t < e.length; ++t) { + const i = e[t]; + if (i.isInterleavedBufferAttribute) { + const e = l / n; + for (let t = 0, r = i.count; t < r; t++) + for (let r = 0; r < n; r++) { + const n = i.getComponent(t, r); + o.setComponent(t + e, r, n) + } + } else s.set(i.array, l); + l += i.count * n + } + return void 0 !== r && (o.gpuType = r), o + } + + function vu(e, t) { + if (0 === t) return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), e; + if (2 === t || 1 === t) { + let n = e.getIndex(); + if (null === n) { + const t = [], + i = e.getAttribute("position"); + if (void 0 === i) return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), e; + for (let e = 0; e < i.count; e++) t.push(e); + e.setIndex(t), n = e.getIndex() + } + const i = n.count - 2, + r = []; + if (2 === t) + for (let e = 1; e <= i; e++) r.push(n.getX(0)), r.push(n.getX(e)), r.push(n.getX(e + 1)); + else + for (let e = 0; e < i; e++) e % 2 == 0 ? (r.push(n.getX(e)), r.push(n.getX(e + 1)), r.push(n.getX(e + 2))) : (r.push(n.getX(e + 2)), r.push(n.getX(e + 1)), r.push(n.getX(e))); + r.length / 3 !== i && console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + const a = e.clone(); + return a.setIndex(r), a.clearGroups(), a + } + return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", t), e + } + class wu extends qa { + constructor(e) { + super(e), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register((function(e) { + return new Mu(e) + })), this.register((function(e) { + return new Tu(e) + })), this.register((function(e) { + return new ku(e) + })), this.register((function(e) { + return new Nu(e) + })), this.register((function(e) { + return new Fu(e) + })), this.register((function(e) { + return new Iu(e) + })), this.register((function(e) { + return new Ru(e) + })), this.register((function(e) { + return new Pu(e) + })), this.register((function(e) { + return new Bu(e) + })), this.register((function(e) { + return new Su(e) + })), this.register((function(e) { + return new Du(e) + })), this.register((function(e) { + return new Cu(e) + })), this.register((function(e) { + return new Uu(e) + })), this.register((function(e) { + return new Lu(e) + })), this.register((function(e) { + return new bu(e) + })), this.register((function(e) { + return new Ou(e) + })), this.register((function(e) { + return new zu(e) + })) + } + load(e, t, n, i) { + const r = this; + let a; + if ("" !== this.resourcePath) a = this.resourcePath; + else if ("" !== this.path) { + const t = gs.extractUrlBase(e); + a = gs.resolveURL(t, this.path) + } else a = gs.extractUrlBase(e); + this.manager.itemStart(e); + const s = function(t) { + i ? i(t) : console.error(t), r.manager.itemError(e), r.manager.itemEnd(e) + }, + o = new Za(this.manager); + o.setPath(this.path), o.setResponseType("arraybuffer"), o.setRequestHeader(this.requestHeader), o.setWithCredentials(this.withCredentials), o.load(e, (function(n) { + try { + r.parse(n, a, (function(n) { + t(n), r.manager.itemEnd(e) + }), s) + } catch (e) { + s(e) + } + }), n, s) + } + setDRACOLoader(e) { + return this.dracoLoader = e, this + } + setKTX2Loader(e) { + return this.ktx2Loader = e, this + } + setMeshoptDecoder(e) { + return this.meshoptDecoder = e, this + } + register(e) { + return -1 === this.pluginCallbacks.indexOf(e) && this.pluginCallbacks.push(e), this + } + unregister(e) { + return -1 !== this.pluginCallbacks.indexOf(e) && this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e), 1), this + } + parse(e, t, n, i) { + let r; + const a = {}, + s = {}, + o = new TextDecoder; + if ("string" == typeof e) r = JSON.parse(e); + else if (e instanceof ArrayBuffer) { + if (o.decode(new Uint8Array(e, 0, 4)) === Wu) { + try { + a[xu.KHR_BINARY_GLTF] = new Gu(e) + } catch (e) { + return void(i && i(e)) + } + r = JSON.parse(a[xu.KHR_BINARY_GLTF].content) + } else r = JSON.parse(o.decode(e)) + } else r = e; + if (void 0 === r.asset || r.asset.version[0] < 2) return void(i && i(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."))); + const l = new md(r, { + path: t || this.resourcePath || "", + crossOrigin: this.crossOrigin, + requestHeader: this.requestHeader, + manager: this.manager, + ktx2Loader: this.ktx2Loader, + meshoptDecoder: this.meshoptDecoder + }); + l.fileLoader.setRequestHeader(this.requestHeader); + for (let e = 0; e < this.pluginCallbacks.length; e++) { + const t = this.pluginCallbacks[e](l); + t.name || console.error("THREE.GLTFLoader: Invalid plugin found: missing name"), s[t.name] = t, a[t.name] = !0 + } + if (r.extensionsUsed) + for (let e = 0; e < r.extensionsUsed.length; ++e) { + const t = r.extensionsUsed[e], + n = r.extensionsRequired || []; + switch (t) { + case xu.KHR_MATERIALS_UNLIT: + a[t] = new Eu; + break; + case xu.KHR_DRACO_MESH_COMPRESSION: + a[t] = new Qu(r, this.dracoLoader); + break; + case xu.KHR_TEXTURE_TRANSFORM: + a[t] = new Xu; + break; + case xu.KHR_MESH_QUANTIZATION: + a[t] = new ju; + break; + default: + n.indexOf(t) >= 0 && void 0 === s[t] && console.warn('THREE.GLTFLoader: Unknown extension "' + t + '".') + } + } + l.setExtensions(a), l.setPlugins(s), l.parse(n, i) + } + parseAsync(e, t) { + const n = this; + return new Promise((function(i, r) { + n.parse(e, t, i, r) + })) + } + } + + function yu() { + let e = {}; + return { + get: function(t) { + return e[t] + }, + add: function(t, n) { + e[t] = n + }, + remove: function(t) { + delete e[t] + }, + removeAll: function() { + e = {} + } + } + } + const xu = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", + KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", + KHR_MATERIALS_IOR: "KHR_materials_ior", + KHR_MATERIALS_SHEEN: "KHR_materials_sheen", + KHR_MATERIALS_SPECULAR: "KHR_materials_specular", + KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", + KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", + KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_MATERIALS_VOLUME: "KHR_materials_volume", + KHR_TEXTURE_BASISU: "KHR_texture_basisu", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", + EXT_MATERIALS_BUMP: "EXT_materials_bump", + EXT_TEXTURE_WEBP: "EXT_texture_webp", + EXT_TEXTURE_AVIF: "EXT_texture_avif", + EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", + EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" + }; + class bu { + constructor(e) { + this.parser = e, this.name = xu.KHR_LIGHTS_PUNCTUAL, this.cache = { + refs: {}, + uses: {} + } + } + _markDefs() { + const e = this.parser, + t = this.parser.json.nodes || []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + i.extensions && i.extensions[this.name] && void 0 !== i.extensions[this.name].light && e._addNodeRef(this.cache, i.extensions[this.name].light) + } + } + _loadLight(e) { + const t = this.parser, + n = "light:" + e; + let i = t.cache.get(n); + if (i) return i; + const r = t.json, + a = ((r.extensions && r.extensions[this.name] || {}).lights || [])[e]; + let s; + const o = new wi(16777215); + void 0 !== a.color && o.setRGB(a.color[0], a.color[1], a.color[2], Ke); + const l = void 0 !== a.range ? a.range : 0; + switch (a.type) { + case "directional": + s = new ms(o), s.target.position.set(0, 0, -1), s.add(s.target); + break; + case "point": + s = new ds(o), s.distance = l; + break; + case "spot": + s = new os(o), s.distance = l, a.spot = a.spot || {}, a.spot.innerConeAngle = void 0 !== a.spot.innerConeAngle ? a.spot.innerConeAngle : 0, a.spot.outerConeAngle = void 0 !== a.spot.outerConeAngle ? a.spot.outerConeAngle : Math.PI / 4, s.angle = a.spot.outerConeAngle, s.penumbra = 1 - a.spot.innerConeAngle / a.spot.outerConeAngle, s.target.position.set(0, 0, -1), s.add(s.target); + break; + default: + throw new Error("THREE.GLTFLoader: Unexpected light type: " + a.type) + } + return s.position.set(0, 0, 0), cd(s, a), void 0 !== a.intensity && (s.intensity = a.intensity), s.name = t.createUniqueName(a.name || "light_" + e), i = Promise.resolve(s), t.cache.add(n, i), i + } + getDependency(e, t) { + if ("light" === e) return this._loadLight(t) + } + createNodeAttachment(e) { + const t = this, + n = this.parser, + i = n.json.nodes[e], + r = (i.extensions && i.extensions[this.name] || {}).light; + return void 0 === r ? null : this._loadLight(r).then((function(e) { + return n._getNodeRef(t.cache, r, e) + })) + } + } + class Eu { + constructor() { + this.name = xu.KHR_MATERIALS_UNLIT + } + getMaterialType() { + return Ei + } + extendParams(e, t, n) { + const i = []; + e.color = new wi(1, 1, 1), e.opacity = 1; + const r = t.pbrMetallicRoughness; + if (r) { + if (Array.isArray(r.baseColorFactor)) { + const t = r.baseColorFactor; + e.color.setRGB(t[0], t[1], t[2], Ke), e.opacity = t[3] + } + void 0 !== r.baseColorTexture && i.push(n.assignTexture(e, "map", r.baseColorTexture, Ye)) + } + return Promise.all(i) + } + } + class Su { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_EMISSIVE_STRENGTH + } + extendMaterialParams(e, t) { + const n = this.parser.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const i = n.extensions[this.name].emissiveStrength; + return void 0 !== i && (t.emissiveIntensity = i), Promise.resolve() + } + } + class Mu { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_CLEARCOAT + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + if (void 0 !== a.clearcoatFactor && (t.clearcoat = a.clearcoatFactor), void 0 !== a.clearcoatTexture && r.push(n.assignTexture(t, "clearcoatMap", a.clearcoatTexture)), void 0 !== a.clearcoatRoughnessFactor && (t.clearcoatRoughness = a.clearcoatRoughnessFactor), void 0 !== a.clearcoatRoughnessTexture && r.push(n.assignTexture(t, "clearcoatRoughnessMap", a.clearcoatRoughnessTexture)), void 0 !== a.clearcoatNormalTexture && (r.push(n.assignTexture(t, "clearcoatNormalMap", a.clearcoatNormalTexture)), void 0 !== a.clearcoatNormalTexture.scale)) { + const e = a.clearcoatNormalTexture.scale; + t.clearcoatNormalScale = new Et(e, e) + } + return Promise.all(r) + } + } + class Tu { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_DISPERSION + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const i = n.extensions[this.name]; + return t.dispersion = void 0 !== i.dispersion ? i.dispersion : 0, Promise.resolve() + } + } + class Cu { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_IRIDESCENCE + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + return void 0 !== a.iridescenceFactor && (t.iridescence = a.iridescenceFactor), void 0 !== a.iridescenceTexture && r.push(n.assignTexture(t, "iridescenceMap", a.iridescenceTexture)), void 0 !== a.iridescenceIor && (t.iridescenceIOR = a.iridescenceIor), void 0 === t.iridescenceThicknessRange && (t.iridescenceThicknessRange = [100, 400]), void 0 !== a.iridescenceThicknessMinimum && (t.iridescenceThicknessRange[0] = a.iridescenceThicknessMinimum), void 0 !== a.iridescenceThicknessMaximum && (t.iridescenceThicknessRange[1] = a.iridescenceThicknessMaximum), void 0 !== a.iridescenceThicknessTexture && r.push(n.assignTexture(t, "iridescenceThicknessMap", a.iridescenceThicknessTexture)), Promise.all(r) + } + } + class Iu { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_SHEEN + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = []; + t.sheenColor = new wi(0, 0, 0), t.sheenRoughness = 0, t.sheen = 1; + const a = i.extensions[this.name]; + if (void 0 !== a.sheenColorFactor) { + const e = a.sheenColorFactor; + t.sheenColor.setRGB(e[0], e[1], e[2], Ke) + } + return void 0 !== a.sheenRoughnessFactor && (t.sheenRoughness = a.sheenRoughnessFactor), void 0 !== a.sheenColorTexture && r.push(n.assignTexture(t, "sheenColorMap", a.sheenColorTexture, Ye)), void 0 !== a.sheenRoughnessTexture && r.push(n.assignTexture(t, "sheenRoughnessMap", a.sheenRoughnessTexture)), Promise.all(r) + } + } + class Ru { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_TRANSMISSION + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + return void 0 !== a.transmissionFactor && (t.transmission = a.transmissionFactor), void 0 !== a.transmissionTexture && r.push(n.assignTexture(t, "transmissionMap", a.transmissionTexture)), Promise.all(r) + } + } + class Pu { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_VOLUME + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + t.thickness = void 0 !== a.thicknessFactor ? a.thicknessFactor : 0, void 0 !== a.thicknessTexture && r.push(n.assignTexture(t, "thicknessMap", a.thicknessTexture)), t.attenuationDistance = a.attenuationDistance || 1 / 0; + const s = a.attenuationColor || [1, 1, 1]; + return t.attenuationColor = (new wi).setRGB(s[0], s[1], s[2], Ke), Promise.all(r) + } + } + class Bu { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_IOR + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const i = n.extensions[this.name]; + return t.ior = void 0 !== i.ior ? i.ior : 1.5, Promise.resolve() + } + } + class Du { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_SPECULAR + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + t.specularIntensity = void 0 !== a.specularFactor ? a.specularFactor : 1, void 0 !== a.specularTexture && r.push(n.assignTexture(t, "specularIntensityMap", a.specularTexture)); + const s = a.specularColorFactor || [1, 1, 1]; + return t.specularColor = (new wi).setRGB(s[0], s[1], s[2], Ke), void 0 !== a.specularColorTexture && r.push(n.assignTexture(t, "specularColorMap", a.specularColorTexture, Ye)), Promise.all(r) + } + } + class Lu { + constructor(e) { + this.parser = e, this.name = xu.EXT_MATERIALS_BUMP + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + return t.bumpScale = void 0 !== a.bumpFactor ? a.bumpFactor : 1, void 0 !== a.bumpTexture && r.push(n.assignTexture(t, "bumpMap", a.bumpTexture)), Promise.all(r) + } + } + class Uu { + constructor(e) { + this.parser = e, this.name = xu.KHR_MATERIALS_ANISOTROPY + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? ba : null + } + extendMaterialParams(e, t) { + const n = this.parser, + i = n.json.materials[e]; + if (!i.extensions || !i.extensions[this.name]) return Promise.resolve(); + const r = [], + a = i.extensions[this.name]; + return void 0 !== a.anisotropyStrength && (t.anisotropy = a.anisotropyStrength), void 0 !== a.anisotropyRotation && (t.anisotropyRotation = a.anisotropyRotation), void 0 !== a.anisotropyTexture && r.push(n.assignTexture(t, "anisotropyMap", a.anisotropyTexture)), Promise.all(r) + } + } + class ku { + constructor(e) { + this.parser = e, this.name = xu.KHR_TEXTURE_BASISU + } + loadTexture(e) { + const t = this.parser, + n = t.json, + i = n.textures[e]; + if (!i.extensions || !i.extensions[this.name]) return null; + const r = i.extensions[this.name], + a = t.options.ktx2Loader; + if (!a) { + if (n.extensionsRequired && n.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); + return null + } + return t.loadTextureImage(e, r.source, a) + } + } + class Nu { + constructor(e) { + this.parser = e, this.name = xu.EXT_TEXTURE_WEBP, this.isSupported = null + } + loadTexture(e) { + const t = this.name, + n = this.parser, + i = n.json, + r = i.textures[e]; + if (!r.extensions || !r.extensions[t]) return null; + const a = r.extensions[t], + s = i.images[a.source]; + let o = n.textureLoader; + if (s.uri) { + const e = n.options.manager.getHandler(s.uri); + null !== e && (o = e) + } + return this.detectSupport().then((function(r) { + if (r) return n.loadTextureImage(e, a.source, o); + if (i.extensionsRequired && i.extensionsRequired.indexOf(t) >= 0) throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); + return n.loadTexture(e) + })) + } + detectSupport() { + return this.isSupported || (this.isSupported = new Promise((function(e) { + const t = new Image; + t.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA", t.onload = t.onerror = function() { + e(1 === t.height) + } + }))), this.isSupported + } + } + class Fu { + constructor(e) { + this.parser = e, this.name = xu.EXT_TEXTURE_AVIF, this.isSupported = null + } + loadTexture(e) { + const t = this.name, + n = this.parser, + i = n.json, + r = i.textures[e]; + if (!r.extensions || !r.extensions[t]) return null; + const a = r.extensions[t], + s = i.images[a.source]; + let o = n.textureLoader; + if (s.uri) { + const e = n.options.manager.getHandler(s.uri); + null !== e && (o = e) + } + return this.detectSupport().then((function(r) { + if (r) return n.loadTextureImage(e, a.source, o); + if (i.extensionsRequired && i.extensionsRequired.indexOf(t) >= 0) throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); + return n.loadTexture(e) + })) + } + detectSupport() { + return this.isSupported || (this.isSupported = new Promise((function(e) { + const t = new Image; + t.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=", t.onload = t.onerror = function() { + e(1 === t.height) + } + }))), this.isSupported + } + } + class Ou { + constructor(e) { + this.name = xu.EXT_MESHOPT_COMPRESSION, this.parser = e + } + loadBufferView(e) { + const t = this.parser.json, + n = t.bufferViews[e]; + if (n.extensions && n.extensions[this.name]) { + const e = n.extensions[this.name], + i = this.parser.getDependency("buffer", e.buffer), + r = this.parser.options.meshoptDecoder; + if (!r || !r.supported) { + if (t.extensionsRequired && t.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); + return null + } + return i.then((function(t) { + const n = e.byteOffset || 0, + i = e.byteLength || 0, + a = e.count, + s = e.byteStride, + o = new Uint8Array(t, n, i); + return r.decodeGltfBufferAsync ? r.decodeGltfBufferAsync(a, s, o, e.mode, e.filter).then((function(e) { + return e.buffer + })) : r.ready.then((function() { + const t = new ArrayBuffer(a * s); + return r.decodeGltfBuffer(new Uint8Array(t), a, s, o, e.mode, e.filter), t + })) + })) + } + return null + } + } + class zu { + constructor(e) { + this.name = xu.EXT_MESH_GPU_INSTANCING, this.parser = e + } + createNodeMesh(e) { + const t = this.parser.json, + n = t.nodes[e]; + if (!n.extensions || !n.extensions[this.name] || void 0 === n.mesh) return null; + const i = t.meshes[n.mesh]; + for (const e of i.primitives) + if (e.mode !== Zu.TRIANGLES && e.mode !== Zu.TRIANGLE_STRIP && e.mode !== Zu.TRIANGLE_FAN && void 0 !== e.mode) return null; + const r = n.extensions[this.name].attributes, + a = [], + s = {}; + for (const e in r) a.push(this.parser.getDependency("accessor", r[e]).then((t => (s[e] = t, s[e])))); + return a.length < 1 ? null : (a.push(this.parser.createNodeMesh(e)), Promise.all(a).then((e => { + const t = e.pop(), + n = t.isGroup ? t.children : [t], + i = e[0].count, + r = []; + for (const e of n) { + const t = new Cn, + n = new Zt, + a = new Kt, + o = new Zt(1, 1, 1), + l = new Qr(e.geometry, e.material, i); + for (let e = 0; e < i; e++) s.TRANSLATION && n.fromBufferAttribute(s.TRANSLATION, e), s.ROTATION && a.fromBufferAttribute(s.ROTATION, e), s.SCALE && o.fromBufferAttribute(s.SCALE, e), l.setMatrixAt(e, t.compose(n, a, o)); + for (const t in s) + if ("_COLOR_0" === t) { + const e = s[t]; + l.instanceColor = new Nr(e.array, e.itemSize, e.normalized) + } else "TRANSLATION" !== t && "ROTATION" !== t && "SCALE" !== t && e.geometry.setAttribute(t, s[t]); + ti.prototype.copy.call(l, e), this.parser.assignFinalMaterial(l), r.push(l) + } + return t.isGroup ? (t.clear(), t.add(...r), t) : r[0] + }))) + } + } + const Wu = "glTF", + Hu = 1313821514, + Vu = 5130562; + class Gu { + constructor(e) { + this.name = xu.KHR_BINARY_GLTF, this.content = null, this.body = null; + const t = new DataView(e, 0, 12), + n = new TextDecoder; + if (this.header = { + magic: n.decode(new Uint8Array(e.slice(0, 4))), + version: t.getUint32(4, !0), + length: t.getUint32(8, !0) + }, this.header.magic !== Wu) throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + if (this.header.version < 2) throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + const i = this.header.length - 12, + r = new DataView(e, 12); + let a = 0; + for (; a < i;) { + const t = r.getUint32(a, !0); + a += 4; + const i = r.getUint32(a, !0); + if (a += 4, i === Hu) { + const i = new Uint8Array(e, 12 + a, t); + this.content = n.decode(i) + } else if (i === Vu) { + const n = 12 + a; + this.body = e.slice(n, n + t) + } + a += t + } + if (null === this.content) throw new Error("THREE.GLTFLoader: JSON content not found.") + } + } + class Qu { + constructor(e, t) { + if (!t) throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + this.name = xu.KHR_DRACO_MESH_COMPRESSION, this.json = e, this.dracoLoader = t, this.dracoLoader.preload() + } + decodePrimitive(e, t) { + const n = this.json, + i = this.dracoLoader, + r = e.extensions[this.name].bufferView, + a = e.extensions[this.name].attributes, + s = {}, + o = {}, + l = {}; + for (const e in a) { + const t = nd[e] || e.toLowerCase(); + s[t] = a[e] + } + for (const t in e.attributes) { + const i = nd[t] || t.toLowerCase(); + if (void 0 !== a[t]) { + const r = n.accessors[e.attributes[t]], + a = Ju[r.componentType]; + l[i] = a.name, o[i] = !0 === r.normalized + } + } + return t.getDependency("bufferView", r).then((function(e) { + return new Promise((function(t, n) { + i.decodeDracoFile(e, (function(e) { + for (const t in e.attributes) { + const n = e.attributes[t], + i = o[t]; + void 0 !== i && (n.normalized = i) + } + t(e) + }), s, l, Ke, n) + })) + })) + } + } + class Xu { + constructor() { + this.name = xu.KHR_TEXTURE_TRANSFORM + } + extendTexture(e, t) { + return void 0 !== t.texCoord && t.texCoord !== e.channel || void 0 !== t.offset || void 0 !== t.rotation || void 0 !== t.scale ? (e = e.clone(), void 0 !== t.texCoord && (e.channel = t.texCoord), void 0 !== t.offset && e.offset.fromArray(t.offset), void 0 !== t.rotation && (e.rotation = t.rotation), void 0 !== t.scale && e.repeat.fromArray(t.scale), e.needsUpdate = !0, e) : e + } + } + class ju { + constructor() { + this.name = xu.KHR_MESH_QUANTIZATION + } + } + class qu extends Pa { + constructor(e, t, n, i) { + super(e, t, n, i) + } + copySampleValue_(e) { + const t = this.resultBuffer, + n = this.sampleValues, + i = this.valueSize, + r = e * i * 3 + i; + for (let e = 0; e !== i; e++) t[e] = n[r + e]; + return t + } + interpolate_(e, t, n, i) { + const r = this.resultBuffer, + a = this.sampleValues, + s = this.valueSize, + o = 2 * s, + l = 3 * s, + c = i - t, + h = (n - t) / c, + u = h * h, + d = u * h, + f = e * l, + p = f - l, + m = -2 * d + 3 * u, + g = d - u, + A = 1 - m, + _ = g - u + h; + for (let e = 0; e !== s; e++) { + const t = a[p + e + s], + n = a[p + e + o] * c, + i = a[f + e + s], + l = a[f + e] * c; + r[e] = A * t + _ * n + m * i + g * l + } + return r + } + } + const Yu = new Kt; + class Ku extends qu { + interpolate_(e, t, n, i) { + const r = super.interpolate_(e, t, n, i); + return Yu.fromArray(r).normalize().toArray(r), r + } + } + const Zu = { + FLOAT: 5126, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 + }, + Ju = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }, + $u = { + 9728: z, + 9729: V, + 9984: W, + 9985: G, + 9986: H, + 9987: Q + }, + ed = { + 33071: F, + 33648: O, + 10497: N + }, + td = { + SCALAR: 1, + VEC2: 2, + VEC3: 3, + VEC4: 4, + MAT2: 4, + MAT3: 9, + MAT4: 16 + }, + nd = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + TEXCOORD_0: "uv", + TEXCOORD_1: "uv1", + TEXCOORD_2: "uv2", + TEXCOORD_3: "uv3", + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" + }, + id = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" + }, + rd = { + CUBICSPLINE: void 0, + LINEAR: Ve, + STEP: He + }, + ad = "OPAQUE", + sd = "MASK", + od = "BLEND"; + + function ld(e, t, n) { + for (const i in n.extensions) void 0 === e[i] && (t.userData.gltfExtensions = t.userData.gltfExtensions || {}, t.userData.gltfExtensions[i] = n.extensions[i]) + } + + function cd(e, t) { + void 0 !== t.extras && ("object" == typeof t.extras ? Object.assign(e.userData, t.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + t.extras)) + } + + function hd(e, t) { + if (e.updateMorphTargets(), void 0 !== t.weights) + for (let n = 0, i = t.weights.length; n < i; n++) e.morphTargetInfluences[n] = t.weights[n]; + if (t.extras && Array.isArray(t.extras.targetNames)) { + const n = t.extras.targetNames; + if (e.morphTargetInfluences.length === n.length) { + e.morphTargetDictionary = {}; + for (let t = 0, i = n.length; t < i; t++) e.morphTargetDictionary[n[t]] = t + } else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.") + } + } + + function ud(e) { + let t; + const n = e.extensions && e.extensions[xu.KHR_DRACO_MESH_COMPRESSION]; + if (t = n ? "draco:" + n.bufferView + ":" + n.indices + ":" + dd(n.attributes) : e.indices + ":" + dd(e.attributes) + ":" + e.mode, void 0 !== e.targets) + for (let n = 0, i = e.targets.length; n < i; n++) t += ":" + dd(e.targets[n]); + return t + } + + function dd(e) { + let t = ""; + const n = Object.keys(e).sort(); + for (let i = 0, r = n.length; i < r; i++) t += n[i] + ":" + e[n[i]] + ";"; + return t + } + + function fd(e) { + switch (e) { + case Int8Array: + return 1 / 127; + case Uint8Array: + return 1 / 255; + case Int16Array: + return 1 / 32767; + case Uint16Array: + return 1 / 65535; + default: + throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.") + } + } + const pd = new Cn; + class md { + constructor(e = {}, t = {}) { + this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new yu, this.associations = new Map, this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { + refs: {}, + uses: {} + }, this.cameraCache = { + refs: {}, + uses: {} + }, this.lightCache = { + refs: {}, + uses: {} + }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {}; + let n = !1, + i = -1, + r = !1, + a = -1; + if ("undefined" != typeof navigator) { + const e = navigator.userAgent; + n = !0 === /^((?!chrome|android).)*safari/i.test(e); + const t = e.match(/Version\/(\d+)/); + i = n && t ? parseInt(t[1], 10) : -1, r = e.indexOf("Firefox") > -1, a = r ? e.match(/Firefox\/([0-9]+)\./)[1] : -1 + } + "undefined" == typeof createImageBitmap || n && i < 17 || r && a < 98 ? this.textureLoader = new $a(this.options.manager) : this.textureLoader = new As(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new Za(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), "use-credentials" === this.options.crossOrigin && this.fileLoader.setWithCredentials(!0) + } + setExtensions(e) { + this.extensions = e + } + setPlugins(e) { + this.plugins = e + } + parse(e, t) { + const n = this, + i = this.json, + r = this.extensions; + this.cache.removeAll(), this.nodeCache = {}, this._invokeAll((function(e) { + return e._markDefs && e._markDefs() + })), Promise.all(this._invokeAll((function(e) { + return e.beforeRoot && e.beforeRoot() + }))).then((function() { + return Promise.all([n.getDependencies("scene"), n.getDependencies("animation"), n.getDependencies("camera")]) + })).then((function(t) { + const a = { + scene: t[0][i.scene || 0], + scenes: t[0], + animations: t[1], + cameras: t[2], + asset: i.asset, + parser: n, + userData: {} + }; + return ld(r, a, i), cd(a, i), Promise.all(n._invokeAll((function(e) { + return e.afterRoot && e.afterRoot(a) + }))).then((function() { + for (const e of a.scenes) e.updateMatrixWorld(); + e(a) + })) + })).catch(t) + } + _markDefs() { + const e = this.json.nodes || [], + t = this.json.skins || [], + n = this.json.meshes || []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n].joints; + for (let t = 0, n = i.length; t < n; t++) e[i[t]].isBone = !0 + } + for (let t = 0, i = e.length; t < i; t++) { + const i = e[t]; + void 0 !== i.mesh && (this._addNodeRef(this.meshCache, i.mesh), void 0 !== i.skin && (n[i.mesh].isSkinnedMesh = !0)), void 0 !== i.camera && this._addNodeRef(this.cameraCache, i.camera) + } + } + _addNodeRef(e, t) { + void 0 !== t && (void 0 === e.refs[t] && (e.refs[t] = e.uses[t] = 0), e.refs[t]++) + } + _getNodeRef(e, t, n) { + if (e.refs[t] <= 1) return n; + const i = n.clone(), + r = (e, t) => { + const n = this.associations.get(e); + null != n && this.associations.set(t, n); + for (const [n, i] of e.children.entries()) r(i, t.children[n]) + }; + return r(n, i), i.name += "_instance_" + e.uses[t]++, i + } + _invokeOne(e) { + const t = Object.values(this.plugins); + t.push(this); + for (let n = 0; n < t.length; n++) { + const i = e(t[n]); + if (i) return i + } + return null + } + _invokeAll(e) { + const t = Object.values(this.plugins); + t.unshift(this); + const n = []; + for (let i = 0; i < t.length; i++) { + const r = e(t[i]); + r && n.push(r) + } + return n + } + getDependency(e, t) { + const n = e + ":" + t; + let i = this.cache.get(n); + if (!i) { + switch (e) { + case "scene": + i = this.loadScene(t); + break; + case "node": + i = this._invokeOne((function(e) { + return e.loadNode && e.loadNode(t) + })); + break; + case "mesh": + i = this._invokeOne((function(e) { + return e.loadMesh && e.loadMesh(t) + })); + break; + case "accessor": + i = this.loadAccessor(t); + break; + case "bufferView": + i = this._invokeOne((function(e) { + return e.loadBufferView && e.loadBufferView(t) + })); + break; + case "buffer": + i = this.loadBuffer(t); + break; + case "material": + i = this._invokeOne((function(e) { + return e.loadMaterial && e.loadMaterial(t) + })); + break; + case "texture": + i = this._invokeOne((function(e) { + return e.loadTexture && e.loadTexture(t) + })); + break; + case "skin": + i = this.loadSkin(t); + break; + case "animation": + i = this._invokeOne((function(e) { + return e.loadAnimation && e.loadAnimation(t) + })); + break; + case "camera": + i = this.loadCamera(t); + break; + default: + if (i = this._invokeOne((function(n) { + return n != this && n.getDependency && n.getDependency(e, t) + })), !i) throw new Error("Unknown type: " + e) + } + this.cache.add(n, i) + } + return i + } + getDependencies(e) { + let t = this.cache.get(e); + if (!t) { + const n = this, + i = this.json[e + ("mesh" === e ? "es" : "s")] || []; + t = Promise.all(i.map((function(t, i) { + return n.getDependency(e, i) + }))), this.cache.add(e, t) + } + return t + } + loadBuffer(e) { + const t = this.json.buffers[e], + n = this.fileLoader; + if (t.type && "arraybuffer" !== t.type) throw new Error("THREE.GLTFLoader: " + t.type + " buffer type is not supported."); + if (void 0 === t.uri && 0 === e) return Promise.resolve(this.extensions[xu.KHR_BINARY_GLTF].body); + const i = this.options; + return new Promise((function(e, r) { + n.load(gs.resolveURL(t.uri, i.path), e, void 0, (function() { + r(new Error('THREE.GLTFLoader: Failed to load buffer "' + t.uri + '".')) + })) + })) + } + loadBufferView(e) { + const t = this.json.bufferViews[e]; + return this.getDependency("buffer", t.buffer).then((function(e) { + const n = t.byteLength || 0, + i = t.byteOffset || 0; + return e.slice(i, i + n) + })) + } + loadAccessor(e) { + const t = this, + n = this.json, + i = this.json.accessors[e]; + if (void 0 === i.bufferView && void 0 === i.sparse) { + const e = td[i.type], + t = Ju[i.componentType], + n = !0 === i.normalized, + r = new t(i.count * e); + return Promise.resolve(new Ci(r, e, n)) + } + const r = []; + return void 0 !== i.bufferView ? r.push(this.getDependency("bufferView", i.bufferView)) : r.push(null), void 0 !== i.sparse && (r.push(this.getDependency("bufferView", i.sparse.indices.bufferView)), r.push(this.getDependency("bufferView", i.sparse.values.bufferView))), Promise.all(r).then((function(e) { + const r = e[0], + a = td[i.type], + s = Ju[i.componentType], + o = s.BYTES_PER_ELEMENT, + l = o * a, + c = i.byteOffset || 0, + h = void 0 !== i.bufferView ? n.bufferViews[i.bufferView].byteStride : void 0, + u = !0 === i.normalized; + let d, f; + if (h && h !== l) { + const e = Math.floor(c / h), + n = "InterleavedBuffer:" + i.bufferView + ":" + i.componentType + ":" + e + ":" + i.count; + let l = t.cache.get(n); + l || (d = new s(r, e * h, i.count * h / o), l = new vr(d, h / o), t.cache.add(n, l)), f = new yr(l, a, c % h / o, u) + } else d = null === r ? new s(i.count * a) : new s(r, c, i.count * a), f = new Ci(d, a, u); + if (void 0 !== i.sparse) { + const t = td.SCALAR, + n = Ju[i.sparse.indices.componentType], + o = i.sparse.indices.byteOffset || 0, + l = i.sparse.values.byteOffset || 0, + c = new n(e[1], o, i.sparse.count * t), + h = new s(e[2], l, i.sparse.count * a); + null !== r && (f = new Ci(f.array.slice(), f.itemSize, f.normalized)), f.normalized = !1; + for (let e = 0, t = c.length; e < t; e++) { + const t = c[e]; + if (f.setX(t, h[e * a]), a >= 2 && f.setY(t, h[e * a + 1]), a >= 3 && f.setZ(t, h[e * a + 2]), a >= 4 && f.setW(t, h[e * a + 3]), a >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.") + } + f.normalized = u + } + return f + })) + } + loadTexture(e) { + const t = this.json, + n = this.options, + i = t.textures[e].source, + r = t.images[i]; + let a = this.textureLoader; + if (r.uri) { + const e = n.manager.getHandler(r.uri); + null !== e && (a = e) + } + return this.loadTextureImage(e, i, a) + } + loadTextureImage(e, t, n) { + const i = this, + r = this.json, + a = r.textures[e], + s = r.images[t], + o = (s.uri || s.bufferView) + ":" + a.sampler; + if (this.textureCache[o]) return this.textureCache[o]; + const l = this.loadImageSource(t, n).then((function(t) { + t.flipY = !1, t.name = a.name || s.name || "", "" === t.name && "string" == typeof s.uri && !1 === s.uri.startsWith("data:image/") && (t.name = s.uri); + const n = (r.samplers || {})[a.sampler] || {}; + return t.magFilter = $u[n.magFilter] || V, t.minFilter = $u[n.minFilter] || Q, t.wrapS = ed[n.wrapS] || N, t.wrapT = ed[n.wrapT] || N, t.generateMipmaps = !t.isCompressedTexture && t.minFilter !== z && t.minFilter !== V, i.associations.set(t, { + textures: e + }), t + })).catch((function() { + return null + })); + return this.textureCache[o] = l, l + } + loadImageSource(e, t) { + const n = this, + i = this.json, + r = this.options; + if (void 0 !== this.sourceCache[e]) return this.sourceCache[e].then((e => e.clone())); + const a = i.images[e], + s = self.URL || self.webkitURL; + let o = a.uri || "", + l = !1; + if (void 0 !== a.bufferView) o = n.getDependency("bufferView", a.bufferView).then((function(e) { + l = !0; + const t = new Blob([e], { + type: a.mimeType + }); + return o = s.createObjectURL(t), o + })); + else if (void 0 === a.uri) throw new Error("THREE.GLTFLoader: Image " + e + " is missing URI and bufferView"); + const c = Promise.resolve(o).then((function(e) { + return new Promise((function(n, i) { + let a = n; + !0 === t.isImageBitmapLoader && (a = function(e) { + const t = new Gt(e); + t.needsUpdate = !0, n(t) + }), t.load(gs.resolveURL(e, r.path), a, void 0, i) + })) + })).then((function(e) { + var t; + return !0 === l && s.revokeObjectURL(o), cd(e, a), e.userData.mimeType = a.mimeType || ((t = a.uri).search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/) ? "image/jpeg" : t.search(/\.webp($|\?)/i) > 0 || 0 === t.search(/^data\:image\/webp/) ? "image/webp" : t.search(/\.ktx2($|\?)/i) > 0 || 0 === t.search(/^data\:image\/ktx2/) ? "image/ktx2" : "image/png"), e + })).catch((function(e) { + throw console.error("THREE.GLTFLoader: Couldn't load texture", o), e + })); + return this.sourceCache[e] = c, c + } + assignTexture(e, t, n, i) { + const r = this; + return this.getDependency("texture", n.index).then((function(a) { + if (!a) return null; + if (void 0 !== n.texCoord && n.texCoord > 0 && ((a = a.clone()).channel = n.texCoord), r.extensions[xu.KHR_TEXTURE_TRANSFORM]) { + const e = void 0 !== n.extensions ? n.extensions[xu.KHR_TEXTURE_TRANSFORM] : void 0; + if (e) { + const t = r.associations.get(a); + a = r.extensions[xu.KHR_TEXTURE_TRANSFORM].extendTexture(a, e), r.associations.set(a, t) + } + } + return void 0 !== i && (a.colorSpace = i), e[t] = a, a + })) + } + assignFinalMaterial(e) { + const t = e.geometry; + let n = e.material; + const i = void 0 === t.attributes.tangent, + r = void 0 !== t.attributes.color, + a = void 0 === t.attributes.normal; + if (e.isPoints) { + const e = "PointsMaterial:" + n.uuid; + let t = this.cache.get(e); + t || (t = new fa, bi.prototype.copy.call(t, n), t.color.copy(n.color), t.map = n.map, t.sizeAttenuation = !1, this.cache.add(e, t)), n = t + } else if (e.isLine) { + const e = "LineBasicMaterial:" + n.uuid; + let t = this.cache.get(e); + t || (t = new $r, bi.prototype.copy.call(t, n), t.color.copy(n.color), t.map = n.map, this.cache.add(e, t)), n = t + } + if (i || r || a) { + let e = "ClonedMaterial:" + n.uuid + ":"; + i && (e += "derivative-tangents:"), r && (e += "vertex-colors:"), a && (e += "flat-shading:"); + let t = this.cache.get(e); + t || (t = n.clone(), r && (t.vertexColors = !0), a && (t.flatShading = !0), i && (t.normalScale && (t.normalScale.y *= -1), t.clearcoatNormalScale && (t.clearcoatNormalScale.y *= -1)), this.cache.add(e, t), this.associations.set(t, this.associations.get(n))), n = t + } + e.material = n + } + getMaterialType() { + return xa + } + loadMaterial(e) { + const t = this, + n = this.json, + i = this.extensions, + r = n.materials[e]; + let a; + const s = {}, + o = []; + if ((r.extensions || {})[xu.KHR_MATERIALS_UNLIT]) { + const e = i[xu.KHR_MATERIALS_UNLIT]; + a = e.getMaterialType(), o.push(e.extendParams(s, r, t)) + } else { + const n = r.pbrMetallicRoughness || {}; + if (s.color = new wi(1, 1, 1), s.opacity = 1, Array.isArray(n.baseColorFactor)) { + const e = n.baseColorFactor; + s.color.setRGB(e[0], e[1], e[2], Ke), s.opacity = e[3] + } + void 0 !== n.baseColorTexture && o.push(t.assignTexture(s, "map", n.baseColorTexture, Ye)), s.metalness = void 0 !== n.metallicFactor ? n.metallicFactor : 1, s.roughness = void 0 !== n.roughnessFactor ? n.roughnessFactor : 1, void 0 !== n.metallicRoughnessTexture && (o.push(t.assignTexture(s, "metalnessMap", n.metallicRoughnessTexture)), o.push(t.assignTexture(s, "roughnessMap", n.metallicRoughnessTexture))), a = this._invokeOne((function(t) { + return t.getMaterialType && t.getMaterialType(e) + })), o.push(Promise.all(this._invokeAll((function(t) { + return t.extendMaterialParams && t.extendMaterialParams(e, s) + })))) + }!0 === r.doubleSided && (s.side = 2); + const l = r.alphaMode || ad; + if (l === od ? (s.transparent = !0, s.depthWrite = !1) : (s.transparent = !1, l === sd && (s.alphaTest = void 0 !== r.alphaCutoff ? r.alphaCutoff : .5)), void 0 !== r.normalTexture && a !== Ei && (o.push(t.assignTexture(s, "normalMap", r.normalTexture)), s.normalScale = new Et(1, 1), void 0 !== r.normalTexture.scale)) { + const e = r.normalTexture.scale; + s.normalScale.set(e, e) + } + if (void 0 !== r.occlusionTexture && a !== Ei && (o.push(t.assignTexture(s, "aoMap", r.occlusionTexture)), void 0 !== r.occlusionTexture.strength && (s.aoMapIntensity = r.occlusionTexture.strength)), void 0 !== r.emissiveFactor && a !== Ei) { + const e = r.emissiveFactor; + s.emissive = (new wi).setRGB(e[0], e[1], e[2], Ke) + } + return void 0 !== r.emissiveTexture && a !== Ei && o.push(t.assignTexture(s, "emissiveMap", r.emissiveTexture, Ye)), Promise.all(o).then((function() { + const n = new a(s); + return r.name && (n.name = r.name), cd(n, r), t.associations.set(n, { + materials: e + }), r.extensions && ld(i, n, r), n + })) + } + createUniqueName(e) { + const t = Ss.sanitizeNodeName(e || ""); + return t in this.nodeNamesUsed ? t + "_" + ++this.nodeNamesUsed[t] : (this.nodeNamesUsed[t] = 0, t) + } + loadGeometries(e) { + const t = this, + n = this.extensions, + i = this.primitiveCache; + + function r(e) { + return n[xu.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e, t).then((function(n) { + return gd(n, e, t) + })) + } + const a = []; + for (let n = 0, s = e.length; n < s; n++) { + const s = e[n], + o = ud(s), + l = i[o]; + if (l) a.push(l.promise); + else { + let e; + e = s.extensions && s.extensions[xu.KHR_DRACO_MESH_COMPRESSION] ? r(s) : gd(new Oi, s, t), i[o] = { + primitive: s, + promise: e + }, a.push(e) + } + } + return Promise.all(a) + } + loadMesh(e) { + const t = this, + n = this.json, + i = this.extensions, + r = n.meshes[e], + a = r.primitives, + s = []; + for (let e = 0, t = a.length; e < t; e++) { + const t = void 0 === a[e].material ? (void 0 === (o = this.cache).DefaultMaterial && (o.DefaultMaterial = new xa({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: !1, + depthTest: !0, + side: 0 + })), o.DefaultMaterial) : this.getDependency("material", a[e].material); + s.push(t) + } + var o; + return s.push(t.loadGeometries(a)), Promise.all(s).then((function(n) { + const s = n.slice(0, n.length - 1), + o = n[n.length - 1], + l = []; + for (let n = 0, c = o.length; n < c; n++) { + const c = o[n], + h = a[n]; + let u; + const d = s[n]; + if (h.mode === Zu.TRIANGLES || h.mode === Zu.TRIANGLE_STRIP || h.mode === Zu.TRIANGLE_FAN || void 0 === h.mode) u = !0 === r.isSkinnedMesh ? new Pr(c, d) : new Zi(c, d), !0 === u.isSkinnedMesh && u.normalizeSkinWeights(), h.mode === Zu.TRIANGLE_STRIP ? u.geometry = vu(u.geometry, 1) : h.mode === Zu.TRIANGLE_FAN && (u.geometry = vu(u.geometry, 2)); + else if (h.mode === Zu.LINES) u = new ua(c, d); + else if (h.mode === Zu.LINE_STRIP) u = new oa(c, d); + else if (h.mode === Zu.LINE_LOOP) u = new da(c, d); + else { + if (h.mode !== Zu.POINTS) throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + h.mode); + u = new _a(c, d) + } + Object.keys(u.geometry.morphAttributes).length > 0 && hd(u, r), u.name = t.createUniqueName(r.name || "mesh_" + e), cd(u, r), h.extensions && ld(i, u, h), t.assignFinalMaterial(u), l.push(u) + } + for (let n = 0, i = l.length; n < i; n++) t.associations.set(l[n], { + meshes: e, + primitives: n + }); + if (1 === l.length) return r.extensions && ld(i, l[0], r), l[0]; + const c = new pr; + r.extensions && ld(i, c, r), t.associations.set(c, { + meshes: e + }); + for (let e = 0, t = l.length; e < t; e++) c.add(l[e]); + return c + })) + } + loadCamera(e) { + let t; + const n = this.json.cameras[e], + i = n[n.type]; + if (i) return "perspective" === n.type ? t = new cr(bt.radToDeg(i.yfov), i.aspectRatio || 1, i.znear || 1, i.zfar || 2e6) : "orthographic" === n.type && (t = new fs(-i.xmag, i.xmag, i.ymag, -i.ymag, i.znear, i.zfar)), n.name && (t.name = this.createUniqueName(n.name)), cd(t, n), Promise.resolve(t); + console.warn("THREE.GLTFLoader: Missing camera parameters.") + } + loadSkin(e) { + const t = this.json.skins[e], + n = []; + for (let e = 0, i = t.joints.length; e < i; e++) n.push(this._loadNodeShallow(t.joints[e])); + return void 0 !== t.inverseBindMatrices ? n.push(this.getDependency("accessor", t.inverseBindMatrices)) : n.push(null), Promise.all(n).then((function(e) { + const n = e.pop(), + i = e, + r = [], + a = []; + for (let e = 0, s = i.length; e < s; e++) { + const s = i[e]; + if (s) { + r.push(s); + const t = new Cn; + null !== n && t.fromArray(n.array, 16 * e), a.push(t) + } else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', t.joints[e]) + } + return new kr(r, a) + })) + } + loadAnimation(e) { + const t = this.json, + n = this, + i = t.animations[e], + r = i.name ? i.name : "animation_" + e, + a = [], + s = [], + o = [], + l = [], + c = []; + for (let e = 0, t = i.channels.length; e < t; e++) { + const t = i.channels[e], + n = i.samplers[t.sampler], + r = t.target, + h = r.node, + u = void 0 !== i.parameters ? i.parameters[n.input] : n.input, + d = void 0 !== i.parameters ? i.parameters[n.output] : n.output; + void 0 !== r.node && (a.push(this.getDependency("node", h)), s.push(this.getDependency("accessor", u)), o.push(this.getDependency("accessor", d)), l.push(n), c.push(r)) + } + return Promise.all([Promise.all(a), Promise.all(s), Promise.all(o), Promise.all(l), Promise.all(c)]).then((function(e) { + const t = e[0], + i = e[1], + a = e[2], + s = e[3], + o = e[4], + l = []; + for (let e = 0, r = t.length; e < r; e++) { + const r = t[e], + c = i[e], + h = a[e], + u = s[e], + d = o[e]; + if (void 0 === r) continue; + r.updateMatrix && r.updateMatrix(); + const f = n._createAnimationTracks(r, c, h, u, d); + if (f) + for (let e = 0; e < f.length; e++) l.push(f[e]) + } + return new Va(r, void 0, l) + })) + } + createNodeMesh(e) { + const t = this.json, + n = this, + i = t.nodes[e]; + return void 0 === i.mesh ? null : n.getDependency("mesh", i.mesh).then((function(e) { + const t = n._getNodeRef(n.meshCache, i.mesh, e); + return void 0 !== i.weights && t.traverse((function(e) { + if (e.isMesh) + for (let t = 0, n = i.weights.length; t < n; t++) e.morphTargetInfluences[t] = i.weights[t] + })), t + })) + } + loadNode(e) { + const t = this, + n = this.json.nodes[e], + i = t._loadNodeShallow(e), + r = [], + a = n.children || []; + for (let e = 0, n = a.length; e < n; e++) r.push(t.getDependency("node", a[e])); + const s = void 0 === n.skin ? Promise.resolve(null) : t.getDependency("skin", n.skin); + return Promise.all([i, Promise.all(r), s]).then((function(e) { + const t = e[0], + n = e[1], + i = e[2]; + null !== i && t.traverse((function(e) { + e.isSkinnedMesh && e.bind(i, pd) + })); + for (let e = 0, i = n.length; e < i; e++) t.add(n[e]); + return t + })) + } + _loadNodeShallow(e) { + const t = this.json, + n = this.extensions, + i = this; + if (void 0 !== this.nodeCache[e]) return this.nodeCache[e]; + const r = t.nodes[e], + a = r.name ? i.createUniqueName(r.name) : "", + s = [], + o = i._invokeOne((function(t) { + return t.createNodeMesh && t.createNodeMesh(e) + })); + return o && s.push(o), void 0 !== r.camera && s.push(i.getDependency("camera", r.camera).then((function(e) { + return i._getNodeRef(i.cameraCache, r.camera, e) + }))), i._invokeAll((function(t) { + return t.createNodeAttachment && t.createNodeAttachment(e) + })).forEach((function(e) { + s.push(e) + })), this.nodeCache[e] = Promise.all(s).then((function(t) { + let s; + if (s = !0 === r.isBone ? new Br : t.length > 1 ? new pr : 1 === t.length ? t[0] : new ti, s !== t[0]) + for (let e = 0, n = t.length; e < n; e++) s.add(t[e]); + if (r.name && (s.userData.name = r.name, s.name = a), cd(s, r), r.extensions && ld(n, s, r), void 0 !== r.matrix) { + const e = new Cn; + e.fromArray(r.matrix), s.applyMatrix4(e) + } else void 0 !== r.translation && s.position.fromArray(r.translation), void 0 !== r.rotation && s.quaternion.fromArray(r.rotation), void 0 !== r.scale && s.scale.fromArray(r.scale); + return i.associations.has(s) || i.associations.set(s, {}), i.associations.get(s).nodes = e, s + })), this.nodeCache[e] + } + loadScene(e) { + const t = this.extensions, + n = this.json.scenes[e], + i = this, + r = new pr; + n.name && (r.name = i.createUniqueName(n.name)), cd(r, n), n.extensions && ld(t, r, n); + const a = n.nodes || [], + s = []; + for (let e = 0, t = a.length; e < t; e++) s.push(i.getDependency("node", a[e])); + return Promise.all(s).then((function(e) { + for (let t = 0, n = e.length; t < n; t++) r.add(e[t]); + return i.associations = (e => { + const t = new Map; + for (const [e, n] of i.associations)(e instanceof bi || e instanceof Gt) && t.set(e, n); + return e.traverse((e => { + const n = i.associations.get(e); + null != n && t.set(e, n) + })), t + })(r), r + })) + } + _createAnimationTracks(e, t, n, i, r) { + const a = [], + s = e.name ? e.name : e.uuid, + o = []; + let l; + switch (id[r.path] === id.weights ? e.traverse((function(e) { + e.morphTargetInfluences && o.push(e.name ? e.name : e.uuid) + })) : o.push(s), id[r.path]) { + case id.weights: + l = Fa; + break; + case id.rotation: + l = za; + break; + case id.position: + case id.scale: + l = Ha; + break; + default: + if (1 === n.itemSize) l = Fa; + else l = Ha + } + const c = void 0 !== i.interpolation ? rd[i.interpolation] : Ve, + h = this._getArrayFromAccessor(n); + for (let e = 0, n = o.length; e < n; e++) { + const n = new l(o[e] + "." + id[r.path], t.array, h, c); + "CUBICSPLINE" === i.interpolation && this._createCubicSplineTrackInterpolant(n), a.push(n) + } + return a + } + _getArrayFromAccessor(e) { + let t = e.array; + if (e.normalized) { + const e = fd(t.constructor), + n = new Float32Array(t.length); + for (let i = 0, r = t.length; i < r; i++) n[i] = t[i] * e; + t = n + } + return t + } + _createCubicSplineTrackInterpolant(e) { + e.createInterpolant = function(e) { + return new(this instanceof za ? Ku : qu)(this.times, this.values, this.getValueSize() / 3, e) + }, e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0 + } + } + + function gd(e, t, n) { + const i = t.attributes, + r = []; + + function a(t, i) { + return n.getDependency("accessor", t).then((function(t) { + e.setAttribute(i, t) + })) + } + for (const t in i) { + const n = nd[t] || t.toLowerCase(); + n in e.attributes || r.push(a(i[t], n)) + } + if (void 0 !== t.indices && !e.index) { + const i = n.getDependency("accessor", t.indices).then((function(t) { + e.setIndex(t) + })); + r.push(i) + } + return Ut.workingColorSpace !== Ke && "COLOR_0" in i && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${Ut.workingColorSpace}" not supported.`), cd(e, t), + function(e, t, n) { + const i = t.attributes, + r = new en; + if (void 0 === i.POSITION) return; + { + const e = n.json.accessors[i.POSITION], + t = e.min, + a = e.max; + if (void 0 === t || void 0 === a) return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + if (r.set(new Zt(t[0], t[1], t[2]), new Zt(a[0], a[1], a[2])), e.normalized) { + const t = fd(Ju[e.componentType]); + r.min.multiplyScalar(t), r.max.multiplyScalar(t) + } + } + const a = t.targets; + if (void 0 !== a) { + const e = new Zt, + t = new Zt; + for (let i = 0, r = a.length; i < r; i++) { + const r = a[i]; + if (void 0 !== r.POSITION) { + const i = n.json.accessors[r.POSITION], + a = i.min, + s = i.max; + if (void 0 !== a && void 0 !== s) { + if (t.setX(Math.max(Math.abs(a[0]), Math.abs(s[0]))), t.setY(Math.max(Math.abs(a[1]), Math.abs(s[1]))), t.setZ(Math.max(Math.abs(a[2]), Math.abs(s[2]))), i.normalized) { + const e = fd(Ju[i.componentType]); + t.multiplyScalar(e) + } + e.max(t) + } else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") + } + } + r.expandByVector(e) + } + e.boundingBox = r; + const s = new vn; + r.getCenter(s.center), s.radius = r.min.distanceTo(r.max) / 2, e.boundingSphere = s + }(e, t, n), Promise.all(r).then((function() { + return void 0 !== t.targets ? function(e, t, n) { + let i = !1, + r = !1, + a = !1; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e]; + if (void 0 !== n.POSITION && (i = !0), void 0 !== n.NORMAL && (r = !0), void 0 !== n.COLOR_0 && (a = !0), i && r && a) break + } + if (!i && !r && !a) return Promise.resolve(e); + const s = [], + o = [], + l = []; + for (let c = 0, h = t.length; c < h; c++) { + const h = t[c]; + if (i) { + const t = void 0 !== h.POSITION ? n.getDependency("accessor", h.POSITION) : e.attributes.position; + s.push(t) + } + if (r) { + const t = void 0 !== h.NORMAL ? n.getDependency("accessor", h.NORMAL) : e.attributes.normal; + o.push(t) + } + if (a) { + const t = void 0 !== h.COLOR_0 ? n.getDependency("accessor", h.COLOR_0) : e.attributes.color; + l.push(t) + } + } + return Promise.all([Promise.all(s), Promise.all(o), Promise.all(l)]).then((function(t) { + const n = t[0], + s = t[1], + o = t[2]; + return i && (e.morphAttributes.position = n), r && (e.morphAttributes.normal = s), a && (e.morphAttributes.color = o), e.morphTargetsRelative = !0, e + })) + }(e, t.targets, n) : e + })) + } + /** + * @license + * Copyright 2010-2025 Three.js Authors + * SPDX-License-Identifier: MIT + */ + function Ad() { + let e = null, + t = !1, + n = null, + i = null; + + function r(t, a) { + n(t, a), i = e.requestAnimationFrame(r) + } + return { + start: function() { + !0 !== t && null !== n && (i = e.requestAnimationFrame(r), t = !0) + }, + stop: function() { + e.cancelAnimationFrame(i), t = !1 + }, + setAnimationLoop: function(e) { + n = e + }, + setContext: function(t) { + e = t + } + } + } + + function _d(e) { + const t = new WeakMap; + return { + get: function(e) { + return e.isInterleavedBufferAttribute && (e = e.data), t.get(e) + }, + remove: function(n) { + n.isInterleavedBufferAttribute && (n = n.data); + const i = t.get(n); + i && (e.deleteBuffer(i.buffer), t.delete(n)) + }, + update: function(n, i) { + if (n.isInterleavedBufferAttribute && (n = n.data), n.isGLBufferAttribute) { + const e = t.get(n); + return void((!e || e.version < n.version) && t.set(n, { + buffer: n.buffer, + type: n.type, + bytesPerElement: n.elementSize, + version: n.version + })) + } + const r = t.get(n); + if (void 0 === r) t.set(n, function(t, n) { + const i = t.array, + r = t.usage, + a = i.byteLength, + s = e.createBuffer(); + let o; + if (e.bindBuffer(n, s), e.bufferData(n, i, r), t.onUploadCallback(), i instanceof Float32Array) o = e.FLOAT; + else if (i instanceof Uint16Array) o = t.isFloat16BufferAttribute ? e.HALF_FLOAT : e.UNSIGNED_SHORT; + else if (i instanceof Int16Array) o = e.SHORT; + else if (i instanceof Uint32Array) o = e.UNSIGNED_INT; + else if (i instanceof Int32Array) o = e.INT; + else if (i instanceof Int8Array) o = e.BYTE; + else if (i instanceof Uint8Array) o = e.UNSIGNED_BYTE; + else { + if (!(i instanceof Uint8ClampedArray)) throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: " + i); + o = e.UNSIGNED_BYTE + } + return { + buffer: s, + type: o, + bytesPerElement: i.BYTES_PER_ELEMENT, + version: t.version, + size: a + } + }(n, i)); + else if (r.version < n.version) { + if (r.size !== n.array.byteLength) throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported."); + ! function(t, n, i) { + const r = n.array, + a = n.updateRanges; + if (e.bindBuffer(i, t), 0 === a.length) e.bufferSubData(i, 0, r); + else { + a.sort(((e, t) => e.start - t.start)); + let t = 0; + for (let e = 1; e < a.length; e++) { + const n = a[t], + i = a[e]; + i.start <= n.start + n.count + 1 ? n.count = Math.max(n.count, i.start + i.count - n.start) : (++t, a[t] = i) + } + a.length = t + 1; + for (let t = 0, n = a.length; t < n; t++) { + const n = a[t]; + e.bufferSubData(i, n.start * r.BYTES_PER_ELEMENT, r, n.start, n.count) + } + n.clearUpdateRanges() + } + n.onUploadCallback() + }(r.buffer, n, i), r.version = n.version + } + } + } + } + const vd = { + alphahash_fragment: "#ifdef USE_ALPHAHASH\n\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif", + alphahash_pars_fragment: "#ifdef USE_ALPHAHASH\n\tconst float ALPHA_HASH_SCALE = 0.05;\n\tfloat hash2D( vec2 value ) {\n\t\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n\t}\n\tfloat hash3D( vec3 value ) {\n\t\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\n\t}\n\tfloat getAlphaHashThreshold( vec3 position ) {\n\t\tfloat maxDeriv = max(\n\t\t\tlength( dFdx( position.xyz ) ),\n\t\t\tlength( dFdy( position.xyz ) )\n\t\t);\n\t\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n\t\tvec2 pixScales = vec2(\n\t\t\texp2( floor( log2( pixScale ) ) ),\n\t\t\texp2( ceil( log2( pixScale ) ) )\n\t\t);\n\t\tvec2 alpha = vec2(\n\t\t\thash3D( floor( pixScales.x * position.xyz ) ),\n\t\t\thash3D( floor( pixScales.y * position.xyz ) )\n\t\t);\n\t\tfloat lerpFactor = fract( log2( pixScale ) );\n\t\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n\t\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\n\t\tvec3 cases = vec3(\n\t\t\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\n\t\t\t( x - 0.5 * a ) / ( 1.0 - a ),\n\t\t\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n\t\t);\n\t\tfloat threshold = ( x < ( 1.0 - a ) )\n\t\t\t? ( ( x < a ) ? cases.x : cases.y )\n\t\t\t: cases.z;\n\t\treturn clamp( threshold , 1.0e-6, 1.0 );\n\t}\n#endif", + alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif", + alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + alphatest_fragment: "#ifdef USE_ALPHATEST\n\t#ifdef ALPHA_TO_COVERAGE\n\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\tif ( diffuseColor.a < alphaTest ) discard;\n\t#endif\n#endif", + alphatest_pars_fragment: "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif", + aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_CLEARCOAT ) \n\t\tclearcoatSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_SHEEN ) \n\t\tsheenSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif", + aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", + batching_pars_vertex: "#ifdef USE_BATCHING\n\t#if ! defined( GL_ANGLE_multi_draw )\n\t#define gl_DrawID _gl_DrawID\n\tuniform int _gl_DrawID;\n\t#endif\n\tuniform highp sampler2D batchingTexture;\n\tuniform highp usampler2D batchingIdTexture;\n\tmat4 getBatchingMatrix( const in float i ) {\n\t\tint size = textureSize( batchingTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n\tfloat getIndirectIndex( const in int i ) {\n\t\tint size = textureSize( batchingIdTexture, 0 ).x;\n\t\tint x = i % size;\n\t\tint y = i / size;\n\t\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n\t}\n#endif\n#ifdef USE_BATCHING_COLOR\n\tuniform sampler2D batchingColorTexture;\n\tvec3 getBatchingColor( const in float i ) {\n\t\tint size = textureSize( batchingColorTexture, 0 ).x;\n\t\tint j = int( i );\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n\t}\n#endif", + batching_vertex: "#ifdef USE_BATCHING\n\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif", + begin_vertex: "vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n\tvPosition = vec3( position );\n#endif", + beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", + bsdfs: "float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n} // validated", + iridescence_fragment: "#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\treturn vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif", + bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n\t\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", + clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif", + clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", + clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif", + clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif", + color_fragment: "#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif", + color_pars_fragment: "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif", + color_pars_vertex: "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec3 vColor;\n#endif", + color_vertex: "#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n\tvColor.xyz *= batchingColor.xyz;\n#endif", + common: "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated", + cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif", + defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", + displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", + displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif", + emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n\t\temissiveColor = sRGBTransferEOTF( emissiveColor );\n\t#endif\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", + emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", + colorspace_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", + colorspace_pars_fragment: "vec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}", + envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", + envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", + envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", + envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", + envmap_physical_pars_fragment: "#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif", + envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", + fog_vertex: "#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif", + fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif", + fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif", + fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", + gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}", + lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", + lights_lambert_fragment: "LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;", + lights_lambert_pars_fragment: "varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert", + lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif", + lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;", + lights_toon_pars_fragment: "varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon", + lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + lights_phong_pars_fragment: "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong", + lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif", + lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", + lights_fragment_begin: "\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", + lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif", + lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif", + logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif", + logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif", + map_fragment: "#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif", + map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", + map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", + map_particle_pars_fragment: "#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", + metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", + morphinstance_vertex: "#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif", + morphcolor_vertex: "#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif", + morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif", + morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif", + morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif", + normal_fragment_begin: "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;", + normal_fragment_maps: "#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif", + normal_pars_fragment: "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif", + normal_pars_vertex: "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif", + normal_vertex: "#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif", + normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif", + clearcoat_normal_fragment_begin: "#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif", + clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif", + clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif", + iridescence_pars_fragment: "#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif", + opaque_fragment: "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );", + packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec4( 0., 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec4( 1., 1., 1., 1. );\n\tfloat vuf;\n\tfloat af = modf( v * PackFactors.a, vuf );\n\tfloat bf = modf( vuf * ShiftRight8, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec3( 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec3( 1., 1., 1. );\n\tfloat vuf;\n\tfloat bf = modf( v * PackFactors.b, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec2( 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec2( 1., 1. );\n\tfloat vuf;\n\tfloat gf = modf( v * 256., vuf );\n\treturn vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n\treturn dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}", + premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", + project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", + dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", + dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", + roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", + roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", + shadowmap_pars_fragment: "#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n#endif", + shadowmap_pars_vertex: "#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", + shadowmap_vertex: "#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif", + shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", + skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif", + skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif", + skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif", + skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", + specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif", + specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", + tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", + tonemapping_pars_fragment: "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", + transmission_fragment: "#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif", + transmission_pars_fragment: "#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t#else\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif", + uv_pars_fragment: "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif", + uv_pars_vertex: "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif", + uv_vertex: "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif", + worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", + background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", + background_frag: "uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}", + backgroundCube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + backgroundCube_frag: "#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}", + cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + cube_frag: "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", + depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", + depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}", + distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", + distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", + equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", + equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}", + linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_vert: "#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_frag: "#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", + meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshnormal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", + meshnormal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}", + meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}", + meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", + sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix[ 3 ];\n\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}", + sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}" + }, + wd = { + common: { + diffuse: { + value: new wi(16777215) + }, + opacity: { + value: 1 + }, + map: { + value: null + }, + mapTransform: { + value: new St + }, + alphaMap: { + value: null + }, + alphaMapTransform: { + value: new St + }, + alphaTest: { + value: 0 + } + }, + specularmap: { + specularMap: { + value: null + }, + specularMapTransform: { + value: new St + } + }, + envmap: { + envMap: { + value: null + }, + envMapRotation: { + value: new St + }, + flipEnvMap: { + value: -1 + }, + reflectivity: { + value: 1 + }, + ior: { + value: 1.5 + }, + refractionRatio: { + value: .98 + } + }, + aomap: { + aoMap: { + value: null + }, + aoMapIntensity: { + value: 1 + }, + aoMapTransform: { + value: new St + } + }, + lightmap: { + lightMap: { + value: null + }, + lightMapIntensity: { + value: 1 + }, + lightMapTransform: { + value: new St + } + }, + bumpmap: { + bumpMap: { + value: null + }, + bumpMapTransform: { + value: new St + }, + bumpScale: { + value: 1 + } + }, + normalmap: { + normalMap: { + value: null + }, + normalMapTransform: { + value: new St + }, + normalScale: { + value: new Et(1, 1) + } + }, + displacementmap: { + displacementMap: { + value: null + }, + displacementMapTransform: { + value: new St + }, + displacementScale: { + value: 1 + }, + displacementBias: { + value: 0 + } + }, + emissivemap: { + emissiveMap: { + value: null + }, + emissiveMapTransform: { + value: new St + } + }, + metalnessmap: { + metalnessMap: { + value: null + }, + metalnessMapTransform: { + value: new St + } + }, + roughnessmap: { + roughnessMap: { + value: null + }, + roughnessMapTransform: { + value: new St + } + }, + gradientmap: { + gradientMap: { + value: null + } + }, + fog: { + fogDensity: { + value: 25e-5 + }, + fogNear: { + value: 1 + }, + fogFar: { + value: 2e3 + }, + fogColor: { + value: new wi(16777215) + } + }, + lights: { + ambientLightColor: { + value: [] + }, + lightProbe: { + value: [] + }, + directionalLights: { + value: [], + properties: { + direction: {}, + color: {} + } + }, + directionalLightShadows: { + value: [], + properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + directionalShadowMap: { + value: [] + }, + directionalShadowMatrix: { + value: [] + }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } + }, + spotLightShadows: { + value: [], + properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + spotLightMap: { + value: [] + }, + spotShadowMap: { + value: [] + }, + spotLightMatrix: { + value: [] + }, + pointLights: { + value: [], + properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } + }, + pointLightShadows: { + value: [], + properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } + }, + pointShadowMap: { + value: [] + }, + pointShadowMatrix: { + value: [] + }, + hemisphereLights: { + value: [], + properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } + }, + rectAreaLights: { + value: [], + properties: { + color: {}, + position: {}, + width: {}, + height: {} + } + }, + ltc_1: { + value: null + }, + ltc_2: { + value: null + } + }, + points: { + diffuse: { + value: new wi(16777215) + }, + opacity: { + value: 1 + }, + size: { + value: 1 + }, + scale: { + value: 1 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + alphaMapTransform: { + value: new St + }, + alphaTest: { + value: 0 + }, + uvTransform: { + value: new St + } + }, + sprite: { + diffuse: { + value: new wi(16777215) + }, + opacity: { + value: 1 + }, + center: { + value: new Et(.5, .5) + }, + rotation: { + value: 0 + }, + map: { + value: null + }, + mapTransform: { + value: new St + }, + alphaMap: { + value: null + }, + alphaMapTransform: { + value: new St + }, + alphaTest: { + value: 0 + } + } + }, + yd = { + basic: { + uniforms: tr([wd.common, wd.specularmap, wd.envmap, wd.aomap, wd.lightmap, wd.fog]), + vertexShader: vd.meshbasic_vert, + fragmentShader: vd.meshbasic_frag + }, + lambert: { + uniforms: tr([wd.common, wd.specularmap, wd.envmap, wd.aomap, wd.lightmap, wd.emissivemap, wd.bumpmap, wd.normalmap, wd.displacementmap, wd.fog, wd.lights, { + emissive: { + value: new wi(0) + } + }]), + vertexShader: vd.meshlambert_vert, + fragmentShader: vd.meshlambert_frag + }, + phong: { + uniforms: tr([wd.common, wd.specularmap, wd.envmap, wd.aomap, wd.lightmap, wd.emissivemap, wd.bumpmap, wd.normalmap, wd.displacementmap, wd.fog, wd.lights, { + emissive: { + value: new wi(0) + }, + specular: { + value: new wi(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: vd.meshphong_vert, + fragmentShader: vd.meshphong_frag + }, + standard: { + uniforms: tr([wd.common, wd.envmap, wd.aomap, wd.lightmap, wd.emissivemap, wd.bumpmap, wd.normalmap, wd.displacementmap, wd.roughnessmap, wd.metalnessmap, wd.fog, wd.lights, { + emissive: { + value: new wi(0) + }, + roughness: { + value: 1 + }, + metalness: { + value: 0 + }, + envMapIntensity: { + value: 1 + } + }]), + vertexShader: vd.meshphysical_vert, + fragmentShader: vd.meshphysical_frag + }, + toon: { + uniforms: tr([wd.common, wd.aomap, wd.lightmap, wd.emissivemap, wd.bumpmap, wd.normalmap, wd.displacementmap, wd.gradientmap, wd.fog, wd.lights, { + emissive: { + value: new wi(0) + } + }]), + vertexShader: vd.meshtoon_vert, + fragmentShader: vd.meshtoon_frag + }, + matcap: { + uniforms: tr([wd.common, wd.bumpmap, wd.normalmap, wd.displacementmap, wd.fog, { + matcap: { + value: null + } + }]), + vertexShader: vd.meshmatcap_vert, + fragmentShader: vd.meshmatcap_frag + }, + points: { + uniforms: tr([wd.points, wd.fog]), + vertexShader: vd.points_vert, + fragmentShader: vd.points_frag + }, + dashed: { + uniforms: tr([wd.common, wd.fog, { + scale: { + value: 1 + }, + dashSize: { + value: 1 + }, + totalSize: { + value: 2 + } + }]), + vertexShader: vd.linedashed_vert, + fragmentShader: vd.linedashed_frag + }, + depth: { + uniforms: tr([wd.common, wd.displacementmap]), + vertexShader: vd.depth_vert, + fragmentShader: vd.depth_frag + }, + normal: { + uniforms: tr([wd.common, wd.bumpmap, wd.normalmap, wd.displacementmap, { + opacity: { + value: 1 + } + }]), + vertexShader: vd.meshnormal_vert, + fragmentShader: vd.meshnormal_frag + }, + sprite: { + uniforms: tr([wd.sprite, wd.fog]), + vertexShader: vd.sprite_vert, + fragmentShader: vd.sprite_frag + }, + background: { + uniforms: { + uvTransform: { + value: new St + }, + t2D: { + value: null + }, + backgroundIntensity: { + value: 1 + } + }, + vertexShader: vd.background_vert, + fragmentShader: vd.background_frag + }, + backgroundCube: { + uniforms: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + }, + backgroundBlurriness: { + value: 0 + }, + backgroundIntensity: { + value: 1 + }, + backgroundRotation: { + value: new St + } + }, + vertexShader: vd.backgroundCube_vert, + fragmentShader: vd.backgroundCube_frag + }, + cube: { + uniforms: { + tCube: { + value: null + }, + tFlip: { + value: -1 + }, + opacity: { + value: 1 + } + }, + vertexShader: vd.cube_vert, + fragmentShader: vd.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: vd.equirect_vert, + fragmentShader: vd.equirect_frag + }, + distanceRGBA: { + uniforms: tr([wd.common, wd.displacementmap, { + referencePosition: { + value: new Zt + }, + nearDistance: { + value: 1 + }, + farDistance: { + value: 1e3 + } + }]), + vertexShader: vd.distanceRGBA_vert, + fragmentShader: vd.distanceRGBA_frag + }, + shadow: { + uniforms: tr([wd.lights, wd.fog, { + color: { + value: new wi(0) + }, + opacity: { + value: 1 + } + }]), + vertexShader: vd.shadow_vert, + fragmentShader: vd.shadow_frag + } + }; + yd.physical = { + uniforms: tr([yd.standard.uniforms, { + clearcoat: { + value: 0 + }, + clearcoatMap: { + value: null + }, + clearcoatMapTransform: { + value: new St + }, + clearcoatNormalMap: { + value: null + }, + clearcoatNormalMapTransform: { + value: new St + }, + clearcoatNormalScale: { + value: new Et(1, 1) + }, + clearcoatRoughness: { + value: 0 + }, + clearcoatRoughnessMap: { + value: null + }, + clearcoatRoughnessMapTransform: { + value: new St + }, + dispersion: { + value: 0 + }, + iridescence: { + value: 0 + }, + iridescenceMap: { + value: null + }, + iridescenceMapTransform: { + value: new St + }, + iridescenceIOR: { + value: 1.3 + }, + iridescenceThicknessMinimum: { + value: 100 + }, + iridescenceThicknessMaximum: { + value: 400 + }, + iridescenceThicknessMap: { + value: null + }, + iridescenceThicknessMapTransform: { + value: new St + }, + sheen: { + value: 0 + }, + sheenColor: { + value: new wi(0) + }, + sheenColorMap: { + value: null + }, + sheenColorMapTransform: { + value: new St + }, + sheenRoughness: { + value: 1 + }, + sheenRoughnessMap: { + value: null + }, + sheenRoughnessMapTransform: { + value: new St + }, + transmission: { + value: 0 + }, + transmissionMap: { + value: null + }, + transmissionMapTransform: { + value: new St + }, + transmissionSamplerSize: { + value: new Et + }, + transmissionSamplerMap: { + value: null + }, + thickness: { + value: 0 + }, + thicknessMap: { + value: null + }, + thicknessMapTransform: { + value: new St + }, + attenuationDistance: { + value: 0 + }, + attenuationColor: { + value: new wi(0) + }, + specularColor: { + value: new wi(1, 1, 1) + }, + specularColorMap: { + value: null + }, + specularColorMapTransform: { + value: new St + }, + specularIntensity: { + value: 1 + }, + specularIntensityMap: { + value: null + }, + specularIntensityMapTransform: { + value: new St + }, + anisotropyVector: { + value: new Et + }, + anisotropyMap: { + value: null + }, + anisotropyMapTransform: { + value: new St + } + }]), + vertexShader: vd.meshphysical_vert, + fragmentShader: vd.meshphysical_frag + }; + const xd = { + r: 0, + b: 0, + g: 0 + }, + bd = new Fn, + Ed = new Cn; + + function Sd(e, t, n, i, r, a, s) { + const o = new wi(0); + let l, c, h = !0 === a ? 0 : 1, + u = null, + d = 0, + f = null; + + function p(e) { + let i = !0 === e.isScene ? e.background : null; + if (i && i.isTexture) { + i = (e.backgroundBlurriness > 0 ? n : t).get(i) + } + return i + } + + function m(t, n) { + t.getRGB(xd, nr(e)), i.buffers.color.setClear(xd.r, xd.g, xd.b, n, s) + } + return { + getClearColor: function() { + return o + }, + setClearColor: function(e, t = 1) { + o.set(e), h = t, m(o, h) + }, + getClearAlpha: function() { + return h + }, + setClearAlpha: function(e) { + h = e, m(o, h) + }, + render: function(t) { + let n = !1; + const r = p(t); + null === r ? m(o, h) : r && r.isColor && (m(r, 1), n = !0); + const a = e.xr.getEnvironmentBlendMode(); + "additive" === a ? i.buffers.color.setClear(0, 0, 0, 1, s) : "alpha-blend" === a && i.buffers.color.setClear(0, 0, 0, 0, s), (e.autoClear || n) && (i.buffers.depth.setTest(!0), i.buffers.depth.setMask(!0), i.buffers.color.setMask(!0), e.clear(e.autoClearColor, e.autoClearDepth, e.autoClearStencil)) + }, + addToRenderList: function(t, n) { + const i = p(n); + i && (i.isCubeTexture || i.mapping === k) ? (void 0 === c && (c = new Zi(new $i(1, 1, 1), new rr({ + name: "BackgroundCubeMaterial", + uniforms: er(yd.backgroundCube.uniforms), + vertexShader: yd.backgroundCube.vertexShader, + fragmentShader: yd.backgroundCube.fragmentShader, + side: 1, + depthTest: !1, + depthWrite: !1, + fog: !1 + })), c.geometry.deleteAttribute("normal"), c.geometry.deleteAttribute("uv"), c.onBeforeRender = function(e, t, n) { + this.matrixWorld.copyPosition(n.matrixWorld) + }, Object.defineProperty(c.material, "envMap", { + get: function() { + return this.uniforms.envMap.value + } + }), r.update(c)), bd.copy(n.backgroundRotation), bd.x *= -1, bd.y *= -1, bd.z *= -1, i.isCubeTexture && !1 === i.isRenderTargetTexture && (bd.y *= -1, bd.z *= -1), c.material.uniforms.envMap.value = i, c.material.uniforms.flipEnvMap.value = i.isCubeTexture && !1 === i.isRenderTargetTexture ? -1 : 1, c.material.uniforms.backgroundBlurriness.value = n.backgroundBlurriness, c.material.uniforms.backgroundIntensity.value = n.backgroundIntensity, c.material.uniforms.backgroundRotation.value.setFromMatrix4(Ed.makeRotationFromEuler(bd)), c.material.toneMapped = Ut.getTransfer(i.colorSpace) !== Je, u === i && d === i.version && f === e.toneMapping || (c.material.needsUpdate = !0, u = i, d = i.version, f = e.toneMapping), c.layers.enableAll(), t.unshift(c, c.geometry, c.material, 0, 0, null)) : i && i.isTexture && (void 0 === l && (l = new Zi(new ya(2, 2), new rr({ + name: "BackgroundMaterial", + uniforms: er(yd.background.uniforms), + vertexShader: yd.background.vertexShader, + fragmentShader: yd.background.fragmentShader, + side: 0, + depthTest: !1, + depthWrite: !1, + fog: !1 + })), l.geometry.deleteAttribute("normal"), Object.defineProperty(l.material, "map", { + get: function() { + return this.uniforms.t2D.value + } + }), r.update(l)), l.material.uniforms.t2D.value = i, l.material.uniforms.backgroundIntensity.value = n.backgroundIntensity, l.material.toneMapped = Ut.getTransfer(i.colorSpace) !== Je, !0 === i.matrixAutoUpdate && i.updateMatrix(), l.material.uniforms.uvTransform.value.copy(i.matrix), u === i && d === i.version && f === e.toneMapping || (l.material.needsUpdate = !0, u = i, d = i.version, f = e.toneMapping), l.layers.enableAll(), t.unshift(l, l.geometry, l.material, 0, 0, null)) + }, + dispose: function() { + void 0 !== c && (c.geometry.dispose(), c.material.dispose(), c = void 0), void 0 !== l && (l.geometry.dispose(), l.material.dispose(), l = void 0) + } + } + } + + function Md(e, t) { + const n = e.getParameter(e.MAX_VERTEX_ATTRIBS), + i = {}, + r = c(null); + let a = r, + s = !1; + + function o(t) { + return e.bindVertexArray(t) + } + + function l(t) { + return e.deleteVertexArray(t) + } + + function c(e) { + const t = [], + i = [], + r = []; + for (let e = 0; e < n; e++) t[e] = 0, i[e] = 0, r[e] = 0; + return { + geometry: null, + program: null, + wireframe: !1, + newAttributes: t, + enabledAttributes: i, + attributeDivisors: r, + object: e, + attributes: {}, + index: null + } + } + + function h() { + const e = a.newAttributes; + for (let t = 0, n = e.length; t < n; t++) e[t] = 0 + } + + function u(e) { + d(e, 0) + } + + function d(t, n) { + const i = a.newAttributes, + r = a.enabledAttributes, + s = a.attributeDivisors; + i[t] = 1, 0 === r[t] && (e.enableVertexAttribArray(t), r[t] = 1), s[t] !== n && (e.vertexAttribDivisor(t, n), s[t] = n) + } + + function f() { + const t = a.newAttributes, + n = a.enabledAttributes; + for (let i = 0, r = n.length; i < r; i++) n[i] !== t[i] && (e.disableVertexAttribArray(i), n[i] = 0) + } + + function p(t, n, i, r, a, s, o) { + !0 === o ? e.vertexAttribIPointer(t, n, i, a, s) : e.vertexAttribPointer(t, n, i, r, a, s) + } + + function m() { + g(), s = !0, a !== r && (a = r, o(a.object)) + } + + function g() { + r.geometry = null, r.program = null, r.wireframe = !1 + } + return { + setup: function(n, r, l, m, g) { + let A = !1; + const _ = function(t, n, r) { + const a = !0 === r.wireframe; + let s = i[t.id]; + void 0 === s && (s = {}, i[t.id] = s); + let o = s[n.id]; + void 0 === o && (o = {}, s[n.id] = o); + let l = o[a]; + void 0 === l && (l = c(e.createVertexArray()), o[a] = l); + return l + }(m, l, r); + a !== _ && (a = _, o(a.object)), A = function(e, t, n, i) { + const r = a.attributes, + s = t.attributes; + let o = 0; + const l = n.getAttributes(); + for (const t in l) { + if (l[t].location >= 0) { + const n = r[t]; + let i = s[t]; + if (void 0 === i && ("instanceMatrix" === t && e.instanceMatrix && (i = e.instanceMatrix), "instanceColor" === t && e.instanceColor && (i = e.instanceColor)), void 0 === n) return !0; + if (n.attribute !== i) return !0; + if (i && n.data !== i.data) return !0; + o++ + } + } + return a.attributesNum !== o || a.index !== i + }(n, m, l, g), A && function(e, t, n, i) { + const r = {}, + s = t.attributes; + let o = 0; + const l = n.getAttributes(); + for (const t in l) { + if (l[t].location >= 0) { + let n = s[t]; + void 0 === n && ("instanceMatrix" === t && e.instanceMatrix && (n = e.instanceMatrix), "instanceColor" === t && e.instanceColor && (n = e.instanceColor)); + const i = {}; + i.attribute = n, n && n.data && (i.data = n.data), r[t] = i, o++ + } + } + a.attributes = r, a.attributesNum = o, a.index = i + }(n, m, l, g), null !== g && t.update(g, e.ELEMENT_ARRAY_BUFFER), (A || s) && (s = !1, function(n, i, r, a) { + h(); + const s = a.attributes, + o = r.getAttributes(), + l = i.defaultAttributeValues; + for (const i in o) { + const r = o[i]; + if (r.location >= 0) { + let o = s[i]; + if (void 0 === o && ("instanceMatrix" === i && n.instanceMatrix && (o = n.instanceMatrix), "instanceColor" === i && n.instanceColor && (o = n.instanceColor)), void 0 !== o) { + const i = o.normalized, + s = o.itemSize, + l = t.get(o); + if (void 0 === l) continue; + const c = l.buffer, + h = l.type, + f = l.bytesPerElement, + m = h === e.INT || h === e.UNSIGNED_INT || o.gpuType === K; + if (o.isInterleavedBufferAttribute) { + const t = o.data, + l = t.stride, + g = o.offset; + if (t.isInstancedInterleavedBuffer) { + for (let e = 0; e < r.locationSize; e++) d(r.location + e, t.meshPerAttribute); + !0 !== n.isInstancedMesh && void 0 === a._maxInstanceCount && (a._maxInstanceCount = t.meshPerAttribute * t.count) + } else + for (let e = 0; e < r.locationSize; e++) u(r.location + e); + e.bindBuffer(e.ARRAY_BUFFER, c); + for (let e = 0; e < r.locationSize; e++) p(r.location + e, s / r.locationSize, h, i, l * f, (g + s / r.locationSize * e) * f, m) + } else { + if (o.isInstancedBufferAttribute) { + for (let e = 0; e < r.locationSize; e++) d(r.location + e, o.meshPerAttribute); + !0 !== n.isInstancedMesh && void 0 === a._maxInstanceCount && (a._maxInstanceCount = o.meshPerAttribute * o.count) + } else + for (let e = 0; e < r.locationSize; e++) u(r.location + e); + e.bindBuffer(e.ARRAY_BUFFER, c); + for (let e = 0; e < r.locationSize; e++) p(r.location + e, s / r.locationSize, h, i, s * f, s / r.locationSize * e * f, m) + } + } else if (void 0 !== l) { + const t = l[i]; + if (void 0 !== t) switch (t.length) { + case 2: + e.vertexAttrib2fv(r.location, t); + break; + case 3: + e.vertexAttrib3fv(r.location, t); + break; + case 4: + e.vertexAttrib4fv(r.location, t); + break; + default: + e.vertexAttrib1fv(r.location, t) + } + } + } + } + f() + }(n, r, l, m), null !== g && e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, t.get(g).buffer)) + }, + reset: m, + resetDefaultState: g, + dispose: function() { + m(); + for (const e in i) { + const t = i[e]; + for (const e in t) { + const n = t[e]; + for (const e in n) l(n[e].object), delete n[e]; + delete t[e] + } + delete i[e] + } + }, + releaseStatesOfGeometry: function(e) { + if (void 0 === i[e.id]) return; + const t = i[e.id]; + for (const e in t) { + const n = t[e]; + for (const e in n) l(n[e].object), delete n[e]; + delete t[e] + } + delete i[e.id] + }, + releaseStatesOfProgram: function(e) { + for (const t in i) { + const n = i[t]; + if (void 0 === n[e.id]) continue; + const r = n[e.id]; + for (const e in r) l(r[e].object), delete r[e]; + delete n[e.id] + } + }, + initAttributes: h, + enableAttribute: u, + disableUnusedAttributes: f + } + } + + function Td(e, t, n) { + let i; + + function r(t, r, a) { + 0 !== a && (e.drawArraysInstanced(i, t, r, a), n.update(r, i, a)) + } + this.setMode = function(e) { + i = e + }, this.render = function(t, r) { + e.drawArrays(i, t, r), n.update(r, i, 1) + }, this.renderInstances = r, this.renderMultiDraw = function(e, r, a) { + if (0 === a) return; + t.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i, e, 0, r, 0, a); + let s = 0; + for (let e = 0; e < a; e++) s += r[e]; + n.update(s, i, 1) + }, this.renderMultiDrawInstances = function(e, a, s, o) { + if (0 === s) return; + const l = t.get("WEBGL_multi_draw"); + if (null === l) + for (let t = 0; t < e.length; t++) r(e[t], a[t], o[t]); + else { + l.multiDrawArraysInstancedWEBGL(i, e, 0, a, 0, o, 0, s); + let t = 0; + for (let e = 0; e < s; e++) t += a[e] * o[e]; + n.update(t, i, 1) + } + } + } + + function Cd(e, t, n, i) { + let r; + + function a(t) { + if ("highp" === t) { + if (e.getShaderPrecisionFormat(e.VERTEX_SHADER, e.HIGH_FLOAT).precision > 0 && e.getShaderPrecisionFormat(e.FRAGMENT_SHADER, e.HIGH_FLOAT).precision > 0) return "highp"; + t = "mediump" + } + return "mediump" === t && e.getShaderPrecisionFormat(e.VERTEX_SHADER, e.MEDIUM_FLOAT).precision > 0 && e.getShaderPrecisionFormat(e.FRAGMENT_SHADER, e.MEDIUM_FLOAT).precision > 0 ? "mediump" : "lowp" + } + let s = void 0 !== n.precision ? n.precision : "highp"; + const o = a(s); + o !== s && (console.warn("THREE.WebGLRenderer:", s, "not supported, using", o, "instead."), s = o); + const l = !0 === n.logarithmicDepthBuffer, + c = !0 === n.reverseDepthBuffer && t.has("EXT_clip_control"), + h = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS), + u = e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS); + return { + isWebGL2: !0, + getMaxAnisotropy: function() { + if (void 0 !== r) return r; + if (!0 === t.has("EXT_texture_filter_anisotropic")) { + const n = t.get("EXT_texture_filter_anisotropic"); + r = e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) + } else r = 0; + return r + }, + getMaxPrecision: a, + textureFormatReadable: function(t) { + return t === re || i.convert(t) === e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT) + }, + textureTypeReadable: function(n) { + const r = n === $ && (t.has("EXT_color_buffer_half_float") || t.has("EXT_color_buffer_float")); + return !(n !== X && i.convert(n) !== e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE) && n !== J && !r) + }, + precision: s, + logarithmicDepthBuffer: l, + reverseDepthBuffer: c, + maxTextures: h, + maxVertexTextures: u, + maxTextureSize: e.getParameter(e.MAX_TEXTURE_SIZE), + maxCubemapSize: e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE), + maxAttributes: e.getParameter(e.MAX_VERTEX_ATTRIBS), + maxVertexUniforms: e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS), + maxVaryings: e.getParameter(e.MAX_VARYING_VECTORS), + maxFragmentUniforms: e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS), + vertexTextures: u > 0, + maxSamples: e.getParameter(e.MAX_SAMPLES) + } + } + + function Id(e) { + const t = this; + let n = null, + i = 0, + r = !1, + a = !1; + const s = new Yr, + o = new St, + l = { + value: null, + needsUpdate: !1 + }; + + function c(e, n, i, r) { + const a = null !== e ? e.length : 0; + let c = null; + if (0 !== a) { + if (c = l.value, !0 !== r || null === c) { + const t = i + 4 * a, + r = n.matrixWorldInverse; + o.getNormalMatrix(r), (null === c || c.length < t) && (c = new Float32Array(t)); + for (let t = 0, n = i; t !== a; ++t, n += 4) s.copy(e[t]).applyMatrix4(r, o), s.normal.toArray(c, n), c[n + 3] = s.constant + } + l.value = c, l.needsUpdate = !0 + } + return t.numPlanes = a, t.numIntersection = 0, c + } + this.uniform = l, this.numPlanes = 0, this.numIntersection = 0, this.init = function(e, t) { + const n = 0 !== e.length || t || 0 !== i || r; + return r = t, i = e.length, n + }, this.beginShadows = function() { + a = !0, c(null) + }, this.endShadows = function() { + a = !1 + }, this.setGlobalState = function(e, t) { + n = c(e, t, 0) + }, this.setState = function(s, o, h) { + const u = s.clippingPlanes, + d = s.clipIntersection, + f = s.clipShadows, + p = e.get(s); + if (!r || null === u || 0 === u.length || a && !f) a ? c(null) : function() { + l.value !== n && (l.value = n, l.needsUpdate = i > 0); + t.numPlanes = i, t.numIntersection = 0 + }(); + else { + const e = a ? 0 : i, + t = 4 * e; + let r = p.clippingState || null; + l.value = r, r = c(u, o, t, h); + for (let e = 0; e !== t; ++e) r[e] = n[e]; + p.clippingState = r, this.numIntersection = d ? this.numPlanes : 0, this.numPlanes += e + } + } + } + + function Rd(e) { + let t = new WeakMap; + + function n(e, t) { + return t === L ? e.mapping = B : t === U && (e.mapping = D), e + } + + function i(e) { + const n = e.target; + n.removeEventListener("dispose", i); + const r = t.get(n); + void 0 !== r && (t.delete(n), r.dispose()) + } + return { + get: function(r) { + if (r && r.isTexture) { + const a = r.mapping; + if (a === L || a === U) { + if (t.has(r)) { + return n(t.get(r).texture, r.mapping) + } { + const a = r.image; + if (a && a.height > 0) { + const s = new fr(a.height); + return s.fromEquirectangularTexture(e, r), t.set(r, s), r.addEventListener("dispose", i), n(s.texture, r.mapping) + } + return null + } + } + } + return r + }, + dispose: function() { + t = new WeakMap + } + } + } + const Pd = [.125, .215, .35, .446, .526, .582], + Bd = 20, + Dd = new fs, + Ld = new wi; + let Ud = null, + kd = 0, + Nd = 0, + Fd = !1; + const Od = (1 + Math.sqrt(5)) / 2, + zd = 1 / Od, + Wd = [new Zt(-Od, zd, 0), new Zt(Od, zd, 0), new Zt(-zd, 0, Od), new Zt(zd, 0, Od), new Zt(0, Od, -zd), new Zt(0, Od, zd), new Zt(-1, 1, -1), new Zt(1, 1, -1), new Zt(-1, 1, 1), new Zt(1, 1, 1)], + Hd = new Zt; + class Vd { + constructor(e) { + this._renderer = e, this._pingPongRenderTarget = null, this._lodMax = 0, this._cubeSize = 0, this._lodPlanes = [], this._sizeLods = [], this._sigmas = [], this._blurMaterial = null, this._cubemapMaterial = null, this._equirectMaterial = null, this._compileMaterial(this._blurMaterial) + } + fromScene(e, t = 0, n = .1, i = 100, r = {}) { + const { + size: a = 256, + position: s = Hd + } = r; + Ud = this._renderer.getRenderTarget(), kd = this._renderer.getActiveCubeFace(), Nd = this._renderer.getActiveMipmapLevel(), Fd = this._renderer.xr.enabled, this._renderer.xr.enabled = !1, this._setSize(a); + const o = this._allocateTargets(); + return o.depthBuffer = !0, this._sceneToCubeUV(e, n, i, o, s), t > 0 && this._blur(o, 0, 0, t), this._applyPMREM(o), this._cleanup(o), o + } + fromEquirectangular(e, t = null) { + return this._fromTexture(e, t) + } + fromCubemap(e, t = null) { + return this._fromTexture(e, t) + } + compileCubemapShader() { + null === this._cubemapMaterial && (this._cubemapMaterial = jd(), this._compileMaterial(this._cubemapMaterial)) + } + compileEquirectangularShader() { + null === this._equirectMaterial && (this._equirectMaterial = Xd(), this._compileMaterial(this._equirectMaterial)) + } + dispose() { + this._dispose(), null !== this._cubemapMaterial && this._cubemapMaterial.dispose(), null !== this._equirectMaterial && this._equirectMaterial.dispose() + } + _setSize(e) { + this._lodMax = Math.floor(Math.log2(e)), this._cubeSize = Math.pow(2, this._lodMax) + } + _dispose() { + null !== this._blurMaterial && this._blurMaterial.dispose(), null !== this._pingPongRenderTarget && this._pingPongRenderTarget.dispose(); + for (let e = 0; e < this._lodPlanes.length; e++) this._lodPlanes[e].dispose() + } + _cleanup(e) { + this._renderer.setRenderTarget(Ud, kd, Nd), this._renderer.xr.enabled = Fd, e.scissorTest = !1, Qd(e, 0, 0, e.width, e.height) + } + _fromTexture(e, t) { + e.mapping === B || e.mapping === D ? this._setSize(0 === e.image.length ? 16 : e.image[0].width || e.image[0].image.width) : this._setSize(e.image.width / 4), Ud = this._renderer.getRenderTarget(), kd = this._renderer.getActiveCubeFace(), Nd = this._renderer.getActiveMipmapLevel(), Fd = this._renderer.xr.enabled, this._renderer.xr.enabled = !1; + const n = t || this._allocateTargets(); + return this._textureToCubeUV(e, n), this._applyPMREM(n), this._cleanup(n), n + } + _allocateTargets() { + const e = 3 * Math.max(this._cubeSize, 112), + t = 4 * this._cubeSize, + n = { + magFilter: V, + minFilter: V, + generateMipmaps: !1, + type: $, + format: re, + colorSpace: Ke, + depthBuffer: !1 + }, + i = Gd(e, t, n); + if (null === this._pingPongRenderTarget || this._pingPongRenderTarget.width !== e || this._pingPongRenderTarget.height !== t) { + null !== this._pingPongRenderTarget && this._dispose(), this._pingPongRenderTarget = Gd(e, t, n); + const { + _lodMax: i + } = this; + ({ + sizeLods: this._sizeLods, + lodPlanes: this._lodPlanes, + sigmas: this._sigmas + } = function(e) { + const t = [], + n = [], + i = []; + let r = e; + const a = e - 4 + 1 + Pd.length; + for (let s = 0; s < a; s++) { + const a = Math.pow(2, r); + n.push(a); + let o = 1 / a; + s > e - 4 ? o = Pd[s - e + 4 - 1] : 0 === s && (o = 0), i.push(o); + const l = 1 / (a - 2), + c = -l, + h = 1 + l, + u = [c, c, h, c, h, h, c, c, h, h, c, h], + d = 6, + f = 6, + p = 3, + m = 2, + g = 1, + A = new Float32Array(p * f * d), + _ = new Float32Array(m * f * d), + v = new Float32Array(g * f * d); + for (let e = 0; e < d; e++) { + const t = e % 3 * 2 / 3 - 1, + n = e > 2 ? 0 : -1, + i = [t, n, 0, t + 2 / 3, n, 0, t + 2 / 3, n + 1, 0, t, n, 0, t + 2 / 3, n + 1, 0, t, n + 1, 0]; + A.set(i, p * f * e), _.set(u, m * f * e); + const r = [e, e, e, e, e, e]; + v.set(r, g * f * e) + } + const w = new Oi; + w.setAttribute("position", new Ci(A, p)), w.setAttribute("uv", new Ci(_, m)), w.setAttribute("faceIndex", new Ci(v, g)), t.push(w), r > 4 && r-- + } + return { + lodPlanes: t, + sizeLods: n, + sigmas: i + } + }(i)), this._blurMaterial = function(e, t, n) { + const i = new Float32Array(Bd), + r = new Zt(0, 1, 0), + a = new rr({ + name: "SphericalGaussianBlur", + defines: { + n: Bd, + CUBEUV_TEXEL_WIDTH: 1 / t, + CUBEUV_TEXEL_HEIGHT: 1 / n, + CUBEUV_MAX_MIP: `${e}.0` + }, + uniforms: { + envMap: { + value: null + }, + samples: { + value: 1 + }, + weights: { + value: i + }, + latitudinal: { + value: !1 + }, + dTheta: { + value: 0 + }, + mipInt: { + value: 0 + }, + poleAxis: { + value: r + } + }, + vertexShader: qd(), + fragmentShader: "\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t", + blending: 0, + depthTest: !1, + depthWrite: !1 + }); + return a + }(i, e, t) + } + return i + } + _compileMaterial(e) { + const t = new Zi(this._lodPlanes[0], e); + this._renderer.compile(t, Dd) + } + _sceneToCubeUV(e, t, n, i, r) { + const a = new cr(90, 1, t, n), + s = [1, -1, 1, 1, 1, 1], + o = [1, 1, 1, -1, -1, -1], + l = this._renderer, + c = l.autoClear, + h = l.toneMapping; + l.getClearColor(Ld), l.toneMapping = 0, l.autoClear = !1; + const u = new Ei({ + name: "PMREM.Background", + side: 1, + depthWrite: !1, + depthTest: !1 + }), + d = new Zi(new $i, u); + let f = !1; + const p = e.background; + p ? p.isColor && (u.color.copy(p), e.background = null, f = !0) : (u.color.copy(Ld), f = !0); + for (let t = 0; t < 6; t++) { + const n = t % 3; + 0 === n ? (a.up.set(0, s[t], 0), a.position.set(r.x, r.y, r.z), a.lookAt(r.x + o[t], r.y, r.z)) : 1 === n ? (a.up.set(0, 0, s[t]), a.position.set(r.x, r.y, r.z), a.lookAt(r.x, r.y + o[t], r.z)) : (a.up.set(0, s[t], 0), a.position.set(r.x, r.y, r.z), a.lookAt(r.x, r.y, r.z + o[t])); + const c = this._cubeSize; + Qd(i, n * c, t > 2 ? c : 0, c, c), l.setRenderTarget(i), f && l.render(d, a), l.render(e, a) + } + d.geometry.dispose(), d.material.dispose(), l.toneMapping = h, l.autoClear = c, e.background = p + } + _textureToCubeUV(e, t) { + const n = this._renderer, + i = e.mapping === B || e.mapping === D; + i ? (null === this._cubemapMaterial && (this._cubemapMaterial = jd()), this._cubemapMaterial.uniforms.flipEnvMap.value = !1 === e.isRenderTargetTexture ? -1 : 1) : null === this._equirectMaterial && (this._equirectMaterial = Xd()); + const r = i ? this._cubemapMaterial : this._equirectMaterial, + a = new Zi(this._lodPlanes[0], r); + r.uniforms.envMap.value = e; + const s = this._cubeSize; + Qd(t, 0, 0, 3 * s, 2 * s), n.setRenderTarget(t), n.render(a, Dd) + } + _applyPMREM(e) { + const t = this._renderer, + n = t.autoClear; + t.autoClear = !1; + const i = this._lodPlanes.length; + for (let t = 1; t < i; t++) { + const n = Math.sqrt(this._sigmas[t] * this._sigmas[t] - this._sigmas[t - 1] * this._sigmas[t - 1]), + r = Wd[(i - t - 1) % Wd.length]; + this._blur(e, t - 1, t, n, r) + } + t.autoClear = n + } + _blur(e, t, n, i, r) { + const a = this._pingPongRenderTarget; + this._halfBlur(e, a, t, n, i, "latitudinal", r), this._halfBlur(a, e, n, n, i, "longitudinal", r) + } + _halfBlur(e, t, n, i, r, a, s) { + const o = this._renderer, + l = this._blurMaterial; + "latitudinal" !== a && "longitudinal" !== a && console.error("blur direction must be either latitudinal or longitudinal!"); + const c = new Zi(this._lodPlanes[i], l), + h = l.uniforms, + u = this._sizeLods[n] - 1, + d = isFinite(r) ? Math.PI / (2 * u) : 2 * Math.PI / 39, + f = r / d, + p = isFinite(r) ? 1 + Math.floor(3 * f) : Bd; + p > Bd && console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${p} samples when the maximum is set to 20`); + const m = []; + let g = 0; + for (let e = 0; e < Bd; ++e) { + const t = e / f, + n = Math.exp(-t * t / 2); + m.push(n), 0 === e ? g += n : e < p && (g += 2 * n) + } + for (let e = 0; e < m.length; e++) m[e] = m[e] / g; + h.envMap.value = e.texture, h.samples.value = p, h.weights.value = m, h.latitudinal.value = "latitudinal" === a, s && (h.poleAxis.value = s); + const { + _lodMax: A + } = this; + h.dTheta.value = d, h.mipInt.value = A - n; + const _ = this._sizeLods[i]; + Qd(t, 3 * _ * (i > A - 4 ? i - A + 4 : 0), 4 * (this._cubeSize - _), 3 * _, 2 * _), o.setRenderTarget(t), o.render(c, Dd) + } + } + + function Gd(e, t, n) { + const i = new jt(e, t, n); + return i.texture.mapping = k, i.texture.name = "PMREM.cubeUv", i.scissorTest = !0, i + } + + function Qd(e, t, n, i, r) { + e.viewport.set(t, n, i, r), e.scissor.set(t, n, i, r) + } + + function Xd() { + return new rr({ + name: "EquirectangularToCubeUV", + uniforms: { + envMap: { + value: null + } + }, + vertexShader: qd(), + fragmentShader: "\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t", + blending: 0, + depthTest: !1, + depthWrite: !1 + }) + } + + function jd() { + return new rr({ + name: "CubemapToCubeUV", + uniforms: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + } + }, + vertexShader: qd(), + fragmentShader: "\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t", + blending: 0, + depthTest: !1, + depthWrite: !1 + }) + } + + function qd() { + return "\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t" + } + + function Yd(e) { + let t = new WeakMap, + n = null; + + function i(e) { + const n = e.target; + n.removeEventListener("dispose", i); + const r = t.get(n); + void 0 !== r && (t.delete(n), r.dispose()) + } + return { + get: function(r) { + if (r && r.isTexture) { + const a = r.mapping, + s = a === L || a === U, + o = a === B || a === D; + if (s || o) { + let a = t.get(r); + const l = void 0 !== a ? a.texture.pmremVersion : 0; + if (r.isRenderTargetTexture && r.pmremVersion !== l) return null === n && (n = new Vd(e)), a = s ? n.fromEquirectangular(r, a) : n.fromCubemap(r, a), a.texture.pmremVersion = r.pmremVersion, t.set(r, a), a.texture; + if (void 0 !== a) return a.texture; + { + const l = r.image; + return s && l && l.height > 0 || o && l && function(e) { + let t = 0; + const n = 6; + for (let i = 0; i < n; i++) void 0 !== e[i] && t++; + return t === n + }(l) ? (null === n && (n = new Vd(e)), a = s ? n.fromEquirectangular(r) : n.fromCubemap(r), a.texture.pmremVersion = r.pmremVersion, t.set(r, a), r.addEventListener("dispose", i), a.texture) : null + } + } + } + return r + }, + dispose: function() { + t = new WeakMap, null !== n && (n.dispose(), n = null) + } + } + } + + function Kd(e) { + const t = {}; + + function n(n) { + if (void 0 !== t[n]) return t[n]; + let i; + switch (n) { + case "WEBGL_depth_texture": + i = e.getExtension("WEBGL_depth_texture") || e.getExtension("MOZ_WEBGL_depth_texture") || e.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + i = e.getExtension("EXT_texture_filter_anisotropic") || e.getExtension("MOZ_EXT_texture_filter_anisotropic") || e.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + i = e.getExtension("WEBGL_compressed_texture_s3tc") || e.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + i = e.getExtension("WEBGL_compressed_texture_pvrtc") || e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + i = e.getExtension(n) + } + return t[n] = i, i + } + return { + has: function(e) { + return null !== n(e) + }, + init: function() { + n("EXT_color_buffer_float"), n("WEBGL_clip_cull_distance"), n("OES_texture_float_linear"), n("EXT_color_buffer_half_float"), n("WEBGL_multisampled_render_to_texture"), n("WEBGL_render_shared_exponent") + }, + get: function(e) { + const t = n(e); + return null === t && Pt("THREE.WebGLRenderer: " + e + " extension not supported."), t + } + } + } + + function Zd(e, t, n, i) { + const r = {}, + a = new WeakMap; + + function s(e) { + const o = e.target; + null !== o.index && t.remove(o.index); + for (const e in o.attributes) t.remove(o.attributes[e]); + o.removeEventListener("dispose", s), delete r[o.id]; + const l = a.get(o); + l && (t.remove(l), a.delete(o)), i.releaseStatesOfGeometry(o), !0 === o.isInstancedBufferGeometry && delete o._maxInstanceCount, n.memory.geometries-- + } + + function o(e) { + const n = [], + i = e.index, + r = e.attributes.position; + let s = 0; + if (null !== i) { + const e = i.array; + s = i.version; + for (let t = 0, i = e.length; t < i; t += 3) { + const i = e[t + 0], + r = e[t + 1], + a = e[t + 2]; + n.push(i, r, r, a, a, i) + } + } else { + if (void 0 === r) return; + { + const e = r.array; + s = r.version; + for (let t = 0, i = e.length / 3 - 1; t < i; t += 3) { + const e = t + 0, + i = t + 1, + r = t + 2; + n.push(e, i, i, r, r, e) + } + } + } + const o = new(Tt(n) ? Ri : Ii)(n, 1); + o.version = s; + const l = a.get(e); + l && t.remove(l), a.set(e, o) + } + return { + get: function(e, t) { + return !0 === r[t.id] || (t.addEventListener("dispose", s), r[t.id] = !0, n.memory.geometries++), t + }, + update: function(n) { + const i = n.attributes; + for (const n in i) t.update(i[n], e.ARRAY_BUFFER) + }, + getWireframeAttribute: function(e) { + const t = a.get(e); + if (t) { + const n = e.index; + null !== n && t.version < n.version && o(e) + } else o(e); + return a.get(e) + } + } + } + + function Jd(e, t, n) { + let i, r, a; + + function s(t, s, o) { + 0 !== o && (e.drawElementsInstanced(i, s, r, t * a, o), n.update(s, i, o)) + } + this.setMode = function(e) { + i = e + }, this.setIndex = function(e) { + r = e.type, a = e.bytesPerElement + }, this.render = function(t, s) { + e.drawElements(i, s, r, t * a), n.update(s, i, 1) + }, this.renderInstances = s, this.renderMultiDraw = function(e, a, s) { + if (0 === s) return; + t.get("WEBGL_multi_draw").multiDrawElementsWEBGL(i, a, 0, r, e, 0, s); + let o = 0; + for (let e = 0; e < s; e++) o += a[e]; + n.update(o, i, 1) + }, this.renderMultiDrawInstances = function(e, o, l, c) { + if (0 === l) return; + const h = t.get("WEBGL_multi_draw"); + if (null === h) + for (let t = 0; t < e.length; t++) s(e[t] / a, o[t], c[t]); + else { + h.multiDrawElementsInstancedWEBGL(i, o, 0, r, e, 0, c, 0, l); + let t = 0; + for (let e = 0; e < l; e++) t += o[e] * c[e]; + n.update(t, i, 1) + } + } + } + + function $d(e) { + const t = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + return { + memory: { + geometries: 0, + textures: 0 + }, + render: t, + programs: null, + autoReset: !0, + reset: function() { + t.calls = 0, t.triangles = 0, t.points = 0, t.lines = 0 + }, + update: function(n, i, r) { + switch (t.calls++, i) { + case e.TRIANGLES: + t.triangles += r * (n / 3); + break; + case e.LINES: + t.lines += r * (n / 2); + break; + case e.LINE_STRIP: + t.lines += r * (n - 1); + break; + case e.LINE_LOOP: + t.lines += r * n; + break; + case e.POINTS: + t.points += r * n; + break; + default: + console.error("THREE.WebGLInfo: Unknown draw mode:", i) + } + } + } + } + + function ef(e, t, n) { + const i = new WeakMap, + r = new Qt; + return { + update: function(a, s, o) { + const l = a.morphTargetInfluences, + c = s.morphAttributes.position || s.morphAttributes.normal || s.morphAttributes.color, + h = void 0 !== c ? c.length : 0; + let u = i.get(s); + if (void 0 === u || u.count !== h) { + void 0 !== u && u.texture.dispose(); + const d = void 0 !== s.morphAttributes.position, + f = void 0 !== s.morphAttributes.normal, + p = void 0 !== s.morphAttributes.color, + m = s.morphAttributes.position || [], + g = s.morphAttributes.normal || [], + A = s.morphAttributes.color || []; + let _ = 0; + !0 === d && (_ = 1), !0 === f && (_ = 2), !0 === p && (_ = 3); + let v = s.attributes.position.count * _, + w = 1; + v > t.maxTextureSize && (w = Math.ceil(v / t.maxTextureSize), v = t.maxTextureSize); + const y = new Float32Array(v * w * 4 * h), + x = new qt(y, v, w, h); + x.type = J, x.needsUpdate = !0; + const b = 4 * _; + for (let S = 0; S < h; S++) { + const M = m[S], + T = g[S], + C = A[S], + I = v * w * 4 * S; + for (let R = 0; R < M.count; R++) { + const P = R * b; + !0 === d && (r.fromBufferAttribute(M, R), y[I + P + 0] = r.x, y[I + P + 1] = r.y, y[I + P + 2] = r.z, y[I + P + 3] = 0), !0 === f && (r.fromBufferAttribute(T, R), y[I + P + 4] = r.x, y[I + P + 5] = r.y, y[I + P + 6] = r.z, y[I + P + 7] = 0), !0 === p && (r.fromBufferAttribute(C, R), y[I + P + 8] = r.x, y[I + P + 9] = r.y, y[I + P + 10] = r.z, y[I + P + 11] = 4 === C.itemSize ? r.w : 1) + } + } + + function E() { + x.dispose(), i.delete(s), s.removeEventListener("dispose", E) + } + u = { + count: h, + texture: x, + size: new Et(v, w) + }, i.set(s, u), s.addEventListener("dispose", E) + } + if (!0 === a.isInstancedMesh && null !== a.morphTexture) o.getUniforms().setValue(e, "morphTexture", a.morphTexture, n); + else { + let B = 0; + for (let L = 0; L < l.length; L++) B += l[L]; + const D = s.morphTargetsRelative ? 1 : 1 - B; + o.getUniforms().setValue(e, "morphTargetBaseInfluence", D), o.getUniforms().setValue(e, "morphTargetInfluences", l) + } + o.getUniforms().setValue(e, "morphTargetsTexture", u.texture, n), o.getUniforms().setValue(e, "morphTargetsTextureSize", u.size) + } + } + } + + function tf(e, t, n, i) { + let r = new WeakMap; + + function a(e) { + const t = e.target; + t.removeEventListener("dispose", a), n.remove(t.instanceMatrix), null !== t.instanceColor && n.remove(t.instanceColor) + } + return { + update: function(s) { + const o = i.render.frame, + l = s.geometry, + c = t.get(s, l); + if (r.get(c) !== o && (t.update(c), r.set(c, o)), s.isInstancedMesh && (!1 === s.hasEventListener("dispose", a) && s.addEventListener("dispose", a), r.get(s) !== o && (n.update(s.instanceMatrix, e.ARRAY_BUFFER), null !== s.instanceColor && n.update(s.instanceColor, e.ARRAY_BUFFER), r.set(s, o))), s.isSkinnedMesh) { + const e = s.skeleton; + r.get(e) !== o && (e.update(), r.set(e, o)) + } + return c + }, + dispose: function() { + r = new WeakMap + } + } + } + const nf = new Gt, + rf = new wa(1, 1), + af = new qt, + sf = new Yt, + of = new dr, + lf = [], + cf = [], + hf = new Float32Array(16), + uf = new Float32Array(9), + df = new Float32Array(4); + + function ff(e, t, n) { + const i = e[0]; + if (i <= 0 || i > 0) return e; + const r = t * n; + let a = lf[r]; + if (void 0 === a && (a = new Float32Array(r), lf[r] = a), 0 !== t) { + i.toArray(a, 0); + for (let i = 1, r = 0; i !== t; ++i) r += n, e[i].toArray(a, r) + } + return a + } + + function pf(e, t) { + if (e.length !== t.length) return !1; + for (let n = 0, i = e.length; n < i; n++) + if (e[n] !== t[n]) return !1; + return !0 + } + + function mf(e, t) { + for (let n = 0, i = t.length; n < i; n++) e[n] = t[n] + } + + function gf(e, t) { + let n = cf[t]; + void 0 === n && (n = new Int32Array(t), cf[t] = n); + for (let i = 0; i !== t; ++i) n[i] = e.allocateTextureUnit(); + return n + } + + function Af(e, t) { + const n = this.cache; + n[0] !== t && (e.uniform1f(this.addr, t), n[0] = t) + } + + function _f(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y || (e.uniform2f(this.addr, t.x, t.y), n[0] = t.x, n[1] = t.y); + else { + if (pf(n, t)) return; + e.uniform2fv(this.addr, t), mf(n, t) + } + } + + function vf(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z || (e.uniform3f(this.addr, t.x, t.y, t.z), n[0] = t.x, n[1] = t.y, n[2] = t.z); + else if (void 0 !== t.r) n[0] === t.r && n[1] === t.g && n[2] === t.b || (e.uniform3f(this.addr, t.r, t.g, t.b), n[0] = t.r, n[1] = t.g, n[2] = t.b); + else { + if (pf(n, t)) return; + e.uniform3fv(this.addr, t), mf(n, t) + } + } + + function wf(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z && n[3] === t.w || (e.uniform4f(this.addr, t.x, t.y, t.z, t.w), n[0] = t.x, n[1] = t.y, n[2] = t.z, n[3] = t.w); + else { + if (pf(n, t)) return; + e.uniform4fv(this.addr, t), mf(n, t) + } + } + + function yf(e, t) { + const n = this.cache, + i = t.elements; + if (void 0 === i) { + if (pf(n, t)) return; + e.uniformMatrix2fv(this.addr, !1, t), mf(n, t) + } else { + if (pf(n, i)) return; + df.set(i), e.uniformMatrix2fv(this.addr, !1, df), mf(n, i) + } + } + + function xf(e, t) { + const n = this.cache, + i = t.elements; + if (void 0 === i) { + if (pf(n, t)) return; + e.uniformMatrix3fv(this.addr, !1, t), mf(n, t) + } else { + if (pf(n, i)) return; + uf.set(i), e.uniformMatrix3fv(this.addr, !1, uf), mf(n, i) + } + } + + function bf(e, t) { + const n = this.cache, + i = t.elements; + if (void 0 === i) { + if (pf(n, t)) return; + e.uniformMatrix4fv(this.addr, !1, t), mf(n, t) + } else { + if (pf(n, i)) return; + hf.set(i), e.uniformMatrix4fv(this.addr, !1, hf), mf(n, i) + } + } + + function Ef(e, t) { + const n = this.cache; + n[0] !== t && (e.uniform1i(this.addr, t), n[0] = t) + } + + function Sf(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y || (e.uniform2i(this.addr, t.x, t.y), n[0] = t.x, n[1] = t.y); + else { + if (pf(n, t)) return; + e.uniform2iv(this.addr, t), mf(n, t) + } + } + + function Mf(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z || (e.uniform3i(this.addr, t.x, t.y, t.z), n[0] = t.x, n[1] = t.y, n[2] = t.z); + else { + if (pf(n, t)) return; + e.uniform3iv(this.addr, t), mf(n, t) + } + } + + function Tf(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z && n[3] === t.w || (e.uniform4i(this.addr, t.x, t.y, t.z, t.w), n[0] = t.x, n[1] = t.y, n[2] = t.z, n[3] = t.w); + else { + if (pf(n, t)) return; + e.uniform4iv(this.addr, t), mf(n, t) + } + } + + function Cf(e, t) { + const n = this.cache; + n[0] !== t && (e.uniform1ui(this.addr, t), n[0] = t) + } + + function If(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y || (e.uniform2ui(this.addr, t.x, t.y), n[0] = t.x, n[1] = t.y); + else { + if (pf(n, t)) return; + e.uniform2uiv(this.addr, t), mf(n, t) + } + } + + function Rf(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z || (e.uniform3ui(this.addr, t.x, t.y, t.z), n[0] = t.x, n[1] = t.y, n[2] = t.z); + else { + if (pf(n, t)) return; + e.uniform3uiv(this.addr, t), mf(n, t) + } + } + + function Pf(e, t) { + const n = this.cache; + if (void 0 !== t.x) n[0] === t.x && n[1] === t.y && n[2] === t.z && n[3] === t.w || (e.uniform4ui(this.addr, t.x, t.y, t.z, t.w), n[0] = t.x, n[1] = t.y, n[2] = t.z, n[3] = t.w); + else { + if (pf(n, t)) return; + e.uniform4uiv(this.addr, t), mf(n, t) + } + } + + function Bf(e, t, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + let a; + i[0] !== r && (e.uniform1i(this.addr, r), i[0] = r), this.type === e.SAMPLER_2D_SHADOW ? (rf.compareFunction = 515, a = rf) : a = nf, n.setTexture2D(t || a, r) + } + + function Df(e, t, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (e.uniform1i(this.addr, r), i[0] = r), n.setTexture3D(t || sf, r) + } + + function Lf(e, t, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (e.uniform1i(this.addr, r), i[0] = r), n.setTextureCube(t || of, r) + } + + function Uf(e, t, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (e.uniform1i(this.addr, r), i[0] = r), n.setTexture2DArray(t || af, r) + } + + function kf(e, t) { + e.uniform1fv(this.addr, t) + } + + function Nf(e, t) { + const n = ff(t, this.size, 2); + e.uniform2fv(this.addr, n) + } + + function Ff(e, t) { + const n = ff(t, this.size, 3); + e.uniform3fv(this.addr, n) + } + + function Of(e, t) { + const n = ff(t, this.size, 4); + e.uniform4fv(this.addr, n) + } + + function zf(e, t) { + const n = ff(t, this.size, 4); + e.uniformMatrix2fv(this.addr, !1, n) + } + + function Wf(e, t) { + const n = ff(t, this.size, 9); + e.uniformMatrix3fv(this.addr, !1, n) + } + + function Hf(e, t) { + const n = ff(t, this.size, 16); + e.uniformMatrix4fv(this.addr, !1, n) + } + + function Vf(e, t) { + e.uniform1iv(this.addr, t) + } + + function Gf(e, t) { + e.uniform2iv(this.addr, t) + } + + function Qf(e, t) { + e.uniform3iv(this.addr, t) + } + + function Xf(e, t) { + e.uniform4iv(this.addr, t) + } + + function jf(e, t) { + e.uniform1uiv(this.addr, t) + } + + function qf(e, t) { + e.uniform2uiv(this.addr, t) + } + + function Yf(e, t) { + e.uniform3uiv(this.addr, t) + } + + function Kf(e, t) { + e.uniform4uiv(this.addr, t) + } + + function Zf(e, t, n) { + const i = this.cache, + r = t.length, + a = gf(n, r); + pf(i, a) || (e.uniform1iv(this.addr, a), mf(i, a)); + for (let e = 0; e !== r; ++e) n.setTexture2D(t[e] || nf, a[e]) + } + + function Jf(e, t, n) { + const i = this.cache, + r = t.length, + a = gf(n, r); + pf(i, a) || (e.uniform1iv(this.addr, a), mf(i, a)); + for (let e = 0; e !== r; ++e) n.setTexture3D(t[e] || sf, a[e]) + } + + function $f(e, t, n) { + const i = this.cache, + r = t.length, + a = gf(n, r); + pf(i, a) || (e.uniform1iv(this.addr, a), mf(i, a)); + for (let e = 0; e !== r; ++e) n.setTextureCube(t[e] || of, a[e]) + } + + function ep(e, t, n) { + const i = this.cache, + r = t.length, + a = gf(n, r); + pf(i, a) || (e.uniform1iv(this.addr, a), mf(i, a)); + for (let e = 0; e !== r; ++e) n.setTexture2DArray(t[e] || af, a[e]) + } + class tp { + constructor(e, t, n) { + this.id = e, this.addr = n, this.cache = [], this.type = t.type, this.setValue = function(e) { + switch (e) { + case 5126: + return Af; + case 35664: + return _f; + case 35665: + return vf; + case 35666: + return wf; + case 35674: + return yf; + case 35675: + return xf; + case 35676: + return bf; + case 5124: + case 35670: + return Ef; + case 35667: + case 35671: + return Sf; + case 35668: + case 35672: + return Mf; + case 35669: + case 35673: + return Tf; + case 5125: + return Cf; + case 36294: + return If; + case 36295: + return Rf; + case 36296: + return Pf; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return Bf; + case 35679: + case 36299: + case 36307: + return Df; + case 35680: + case 36300: + case 36308: + case 36293: + return Lf; + case 36289: + case 36303: + case 36311: + case 36292: + return Uf + } + }(t.type) + } + } + class np { + constructor(e, t, n) { + this.id = e, this.addr = n, this.cache = [], this.type = t.type, this.size = t.size, this.setValue = function(e) { + switch (e) { + case 5126: + return kf; + case 35664: + return Nf; + case 35665: + return Ff; + case 35666: + return Of; + case 35674: + return zf; + case 35675: + return Wf; + case 35676: + return Hf; + case 5124: + case 35670: + return Vf; + case 35667: + case 35671: + return Gf; + case 35668: + case 35672: + return Qf; + case 35669: + case 35673: + return Xf; + case 5125: + return jf; + case 36294: + return qf; + case 36295: + return Yf; + case 36296: + return Kf; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return Zf; + case 35679: + case 36299: + case 36307: + return Jf; + case 35680: + case 36300: + case 36308: + case 36293: + return $f; + case 36289: + case 36303: + case 36311: + case 36292: + return ep + } + }(t.type) + } + } + class ip { + constructor(e) { + this.id = e, this.seq = [], this.map = {} + } + setValue(e, t, n) { + const i = this.seq; + for (let r = 0, a = i.length; r !== a; ++r) { + const a = i[r]; + a.setValue(e, t[a.id], n) + } + } + } + const rp = /(\w+)(\])?(\[|\.)?/g; + + function ap(e, t) { + e.seq.push(t), e.map[t.id] = t + } + + function sp(e, t, n) { + const i = e.name, + r = i.length; + for (rp.lastIndex = 0;;) { + const a = rp.exec(i), + s = rp.lastIndex; + let o = a[1]; + const l = "]" === a[2], + c = a[3]; + if (l && (o |= 0), void 0 === c || "[" === c && s + 2 === r) { + ap(n, void 0 === c ? new tp(o, e, t) : new np(o, e, t)); + break + } { + let e = n.map[o]; + void 0 === e && (e = new ip(o), ap(n, e)), n = e + } + } + } + class op { + constructor(e, t) { + this.seq = [], this.map = {}; + const n = e.getProgramParameter(t, e.ACTIVE_UNIFORMS); + for (let i = 0; i < n; ++i) { + const n = e.getActiveUniform(t, i); + sp(n, e.getUniformLocation(t, n.name), this) + } + } + setValue(e, t, n, i) { + const r = this.map[t]; + void 0 !== r && r.setValue(e, n, i) + } + setOptional(e, t, n) { + const i = t[n]; + void 0 !== i && this.setValue(e, n, i) + } + static upload(e, t, n, i) { + for (let r = 0, a = t.length; r !== a; ++r) { + const a = t[r], + s = n[a.id]; + !1 !== s.needsUpdate && a.setValue(e, s.value, i) + } + } + static seqWithValue(e, t) { + const n = []; + for (let i = 0, r = e.length; i !== r; ++i) { + const r = e[i]; + r.id in t && n.push(r) + } + return n + } + } + + function lp(e, t, n) { + const i = e.createShader(t); + return e.shaderSource(i, n), e.compileShader(i), i + } + let cp = 0; + const hp = new St; + + function up(e, t, n) { + const i = e.getShaderParameter(t, e.COMPILE_STATUS), + r = e.getShaderInfoLog(t).trim(); + if (i && "" === r) return ""; + const a = /ERROR: 0:(\d+)/.exec(r); + if (a) { + const i = parseInt(a[1]); + return n.toUpperCase() + "\n\n" + r + "\n\n" + function(e, t) { + const n = e.split("\n"), + i = [], + r = Math.max(t - 6, 0), + a = Math.min(t + 6, n.length); + for (let e = r; e < a; e++) { + const r = e + 1; + i.push(`${r===t?">":" "} ${r}: ${n[e]}`) + } + return i.join("\n") + }(e.getShaderSource(t), i) + } + return r + } + + function dp(e, t) { + const n = function(e) { + Ut._getMatrix(hp, Ut.workingColorSpace, e); + const t = `mat3( ${hp.elements.map((e=>e.toFixed(4)))} )`; + switch (Ut.getTransfer(e)) { + case Ze: + return [t, "LinearTransferOETF"]; + case Je: + return [t, "sRGBTransferOETF"]; + default: + return console.warn("THREE.WebGLProgram: Unsupported color space: ", e), [t, "LinearTransferOETF"] + } + }(t); + return [`vec4 ${e}( vec4 value ) {`, `\treturn ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`, "}"].join("\n") + } + + function fp(e, t) { + let n; + switch (t) { + case 1: + n = "Linear"; + break; + case 2: + n = "Reinhard"; + break; + case 3: + n = "Cineon"; + break; + case 4: + n = "ACESFilmic"; + break; + case 6: + n = "AgX"; + break; + case 7: + n = "Neutral"; + break; + case 5: + n = "Custom"; + break; + default: + console.warn("THREE.WebGLProgram: Unsupported toneMapping:", t), n = "Linear" + } + return "vec3 " + e + "( vec3 color ) { return " + n + "ToneMapping( color ); }" + } + const pp = new Zt; + + function mp() { + Ut.getLuminanceCoefficients(pp); + return ["float luminance( const in vec3 rgb ) {", `\tconst vec3 weights = vec3( ${pp.x.toFixed(4)}, ${pp.y.toFixed(4)}, ${pp.z.toFixed(4)} );`, "\treturn dot( weights, rgb );", "}"].join("\n") + } + + function gp(e) { + return "" !== e + } + + function Ap(e, t) { + const n = t.numSpotLightShadows + t.numSpotLightMaps - t.numSpotLightShadowsWithMaps; + return e.replace(/NUM_DIR_LIGHTS/g, t.numDirLights).replace(/NUM_SPOT_LIGHTS/g, t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g, t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g, n).replace(/NUM_RECT_AREA_LIGHTS/g, t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, t.numPointLights).replace(/NUM_HEMI_LIGHTS/g, t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g, t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, t.numPointLightShadows) + } + + function _p(e, t) { + return e.replace(/NUM_CLIPPING_PLANES/g, t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, t.numClippingPlanes - t.numClipIntersection) + } + const vp = /^[ \t]*#include +<([\w\d./]+)>/gm; + + function wp(e) { + return e.replace(vp, xp) + } + const yp = new Map; + + function xp(e, t) { + let n = vd[t]; + if (void 0 === n) { + const e = yp.get(t); + if (void 0 === e) throw new Error("Can not resolve #include <" + t + ">"); + n = vd[e], console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.', t, e) + } + return wp(n) + } + const bp = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; + + function Ep(e) { + return e.replace(bp, Sp) + } + + function Sp(e, t, n, i) { + let r = ""; + for (let e = parseInt(t); e < parseInt(n); e++) r += i.replace(/\[\s*i\s*\]/g, "[ " + e + " ]").replace(/UNROLLED_LOOP_INDEX/g, e); + return r + } + + function Mp(e) { + let t = `precision ${e.precision} float;\n\tprecision ${e.precision} int;\n\tprecision ${e.precision} sampler2D;\n\tprecision ${e.precision} samplerCube;\n\tprecision ${e.precision} sampler3D;\n\tprecision ${e.precision} sampler2DArray;\n\tprecision ${e.precision} sampler2DShadow;\n\tprecision ${e.precision} samplerCubeShadow;\n\tprecision ${e.precision} sampler2DArrayShadow;\n\tprecision ${e.precision} isampler2D;\n\tprecision ${e.precision} isampler3D;\n\tprecision ${e.precision} isamplerCube;\n\tprecision ${e.precision} isampler2DArray;\n\tprecision ${e.precision} usampler2D;\n\tprecision ${e.precision} usampler3D;\n\tprecision ${e.precision} usamplerCube;\n\tprecision ${e.precision} usampler2DArray;\n\t`; + return "highp" === e.precision ? t += "\n#define HIGH_PRECISION" : "mediump" === e.precision ? t += "\n#define MEDIUM_PRECISION" : "lowp" === e.precision && (t += "\n#define LOW_PRECISION"), t + } + + function Tp(e, t, n, i) { + const r = e.getContext(), + a = n.defines; + let s = n.vertexShader, + o = n.fragmentShader; + const l = function(e) { + let t = "SHADOWMAP_TYPE_BASIC"; + return 1 === e.shadowMapType ? t = "SHADOWMAP_TYPE_PCF" : 2 === e.shadowMapType ? t = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === e.shadowMapType && (t = "SHADOWMAP_TYPE_VSM"), t + }(n), + c = function(e) { + let t = "ENVMAP_TYPE_CUBE"; + if (e.envMap) switch (e.envMapMode) { + case B: + case D: + t = "ENVMAP_TYPE_CUBE"; + break; + case k: + t = "ENVMAP_TYPE_CUBE_UV" + } + return t + }(n), + h = function(e) { + let t = "ENVMAP_MODE_REFLECTION"; + e.envMap && e.envMapMode === D && (t = "ENVMAP_MODE_REFRACTION"); + return t + }(n), + u = function(e) { + let t = "ENVMAP_BLENDING_NONE"; + if (e.envMap) switch (e.combine) { + case 0: + t = "ENVMAP_BLENDING_MULTIPLY"; + break; + case 1: + t = "ENVMAP_BLENDING_MIX"; + break; + case 2: + t = "ENVMAP_BLENDING_ADD" + } + return t + }(n), + d = function(e) { + const t = e.envMapCubeUVHeight; + if (null === t) return null; + const n = Math.log2(t) - 2, + i = 1 / t; + return { + texelWidth: 1 / (3 * Math.max(Math.pow(2, n), 112)), + texelHeight: i, + maxMip: n + } + }(n), + f = function(e) { + return [e.extensionClipCullDistance ? "#extension GL_ANGLE_clip_cull_distance : require" : "", e.extensionMultiDraw ? "#extension GL_ANGLE_multi_draw : require" : ""].filter(gp).join("\n") + }(n), + p = function(e) { + const t = []; + for (const n in e) { + const i = e[n]; + !1 !== i && t.push("#define " + n + " " + i) + } + return t.join("\n") + }(a), + m = r.createProgram(); + let g, A, _ = n.glslVersion ? "#version " + n.glslVersion + "\n" : ""; + n.isRawShaderMaterial ? (g = ["#define SHADER_TYPE " + n.shaderType, "#define SHADER_NAME " + n.shaderName, p].filter(gp).join("\n"), g.length > 0 && (g += "\n"), A = ["#define SHADER_TYPE " + n.shaderType, "#define SHADER_NAME " + n.shaderName, p].filter(gp).join("\n"), A.length > 0 && (A += "\n")) : (g = [Mp(n), "#define SHADER_TYPE " + n.shaderType, "#define SHADER_NAME " + n.shaderName, p, n.extensionClipCullDistance ? "#define USE_CLIP_DISTANCE" : "", n.batching ? "#define USE_BATCHING" : "", n.batchingColor ? "#define USE_BATCHING_COLOR" : "", n.instancing ? "#define USE_INSTANCING" : "", n.instancingColor ? "#define USE_INSTANCING_COLOR" : "", n.instancingMorph ? "#define USE_INSTANCING_MORPH" : "", n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + h : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", n.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", n.displacementMap ? "#define USE_DISPLACEMENTMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.anisotropy ? "#define USE_ANISOTROPY" : "", n.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", n.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", n.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.alphaHash ? "#define USE_ALPHAHASH" : "", n.transmission ? "#define USE_TRANSMISSION" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.thicknessMap ? "#define USE_THICKNESSMAP" : "", n.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", n.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", n.mapUv ? "#define MAP_UV " + n.mapUv : "", n.alphaMapUv ? "#define ALPHAMAP_UV " + n.alphaMapUv : "", n.lightMapUv ? "#define LIGHTMAP_UV " + n.lightMapUv : "", n.aoMapUv ? "#define AOMAP_UV " + n.aoMapUv : "", n.emissiveMapUv ? "#define EMISSIVEMAP_UV " + n.emissiveMapUv : "", n.bumpMapUv ? "#define BUMPMAP_UV " + n.bumpMapUv : "", n.normalMapUv ? "#define NORMALMAP_UV " + n.normalMapUv : "", n.displacementMapUv ? "#define DISPLACEMENTMAP_UV " + n.displacementMapUv : "", n.metalnessMapUv ? "#define METALNESSMAP_UV " + n.metalnessMapUv : "", n.roughnessMapUv ? "#define ROUGHNESSMAP_UV " + n.roughnessMapUv : "", n.anisotropyMapUv ? "#define ANISOTROPYMAP_UV " + n.anisotropyMapUv : "", n.clearcoatMapUv ? "#define CLEARCOATMAP_UV " + n.clearcoatMapUv : "", n.clearcoatNormalMapUv ? "#define CLEARCOAT_NORMALMAP_UV " + n.clearcoatNormalMapUv : "", n.clearcoatRoughnessMapUv ? "#define CLEARCOAT_ROUGHNESSMAP_UV " + n.clearcoatRoughnessMapUv : "", n.iridescenceMapUv ? "#define IRIDESCENCEMAP_UV " + n.iridescenceMapUv : "", n.iridescenceThicknessMapUv ? "#define IRIDESCENCE_THICKNESSMAP_UV " + n.iridescenceThicknessMapUv : "", n.sheenColorMapUv ? "#define SHEEN_COLORMAP_UV " + n.sheenColorMapUv : "", n.sheenRoughnessMapUv ? "#define SHEEN_ROUGHNESSMAP_UV " + n.sheenRoughnessMapUv : "", n.specularMapUv ? "#define SPECULARMAP_UV " + n.specularMapUv : "", n.specularColorMapUv ? "#define SPECULAR_COLORMAP_UV " + n.specularColorMapUv : "", n.specularIntensityMapUv ? "#define SPECULAR_INTENSITYMAP_UV " + n.specularIntensityMapUv : "", n.transmissionMapUv ? "#define TRANSMISSIONMAP_UV " + n.transmissionMapUv : "", n.thicknessMapUv ? "#define THICKNESSMAP_UV " + n.thicknessMapUv : "", n.vertexTangents && !1 === n.flatShading ? "#define USE_TANGENT" : "", n.vertexColors ? "#define USE_COLOR" : "", n.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", n.vertexUv1s ? "#define USE_UV1" : "", n.vertexUv2s ? "#define USE_UV2" : "", n.vertexUv3s ? "#define USE_UV3" : "", n.pointsUvs ? "#define USE_POINTS_UV" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.skinning ? "#define USE_SKINNING" : "", n.morphTargets ? "#define USE_MORPHTARGETS" : "", n.morphNormals && !1 === n.flatShading ? "#define USE_MORPHNORMALS" : "", n.morphColors ? "#define USE_MORPHCOLORS" : "", n.morphTargetsCount > 0 ? "#define MORPHTARGETS_TEXTURE_STRIDE " + n.morphTextureStride : "", n.morphTargetsCount > 0 ? "#define MORPHTARGETS_COUNT " + n.morphTargetsCount : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", n.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.reverseDepthBuffer ? "#define USE_REVERSEDEPTHBUF" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", "\tattribute mat4 instanceMatrix;", "#endif", "#ifdef USE_INSTANCING_COLOR", "\tattribute vec3 instanceColor;", "#endif", "#ifdef USE_INSTANCING_MORPH", "\tuniform sampler2D morphTexture;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_UV1", "\tattribute vec2 uv1;", "#endif", "#ifdef USE_UV2", "\tattribute vec2 uv2;", "#endif", "#ifdef USE_UV3", "\tattribute vec2 uv3;", "#endif", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#if defined( USE_COLOR_ALPHA )", "\tattribute vec4 color;", "#elif defined( USE_COLOR )", "\tattribute vec3 color;", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(gp).join("\n"), A = [Mp(n), "#define SHADER_TYPE " + n.shaderType, "#define SHADER_NAME " + n.shaderName, p, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.alphaToCoverage ? "#define ALPHA_TO_COVERAGE" : "", n.map ? "#define USE_MAP" : "", n.matcap ? "#define USE_MATCAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + c : "", n.envMap ? "#define " + h : "", n.envMap ? "#define " + u : "", d ? "#define CUBEUV_TEXEL_WIDTH " + d.texelWidth : "", d ? "#define CUBEUV_TEXEL_HEIGHT " + d.texelHeight : "", d ? "#define CUBEUV_MAX_MIP " + d.maxMip + ".0" : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", n.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.anisotropy ? "#define USE_ANISOTROPY" : "", n.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", n.clearcoat ? "#define USE_CLEARCOAT" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.dispersion ? "#define USE_DISPERSION" : "", n.iridescence ? "#define USE_IRIDESCENCE" : "", n.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", n.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", n.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.alphaTest ? "#define USE_ALPHATEST" : "", n.alphaHash ? "#define USE_ALPHAHASH" : "", n.sheen ? "#define USE_SHEEN" : "", n.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", n.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", n.transmission ? "#define USE_TRANSMISSION" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.thicknessMap ? "#define USE_THICKNESSMAP" : "", n.vertexTangents && !1 === n.flatShading ? "#define USE_TANGENT" : "", n.vertexColors || n.instancingColor || n.batchingColor ? "#define USE_COLOR" : "", n.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", n.vertexUv1s ? "#define USE_UV1" : "", n.vertexUv2s ? "#define USE_UV2" : "", n.vertexUv3s ? "#define USE_UV3" : "", n.pointsUvs ? "#define USE_POINTS_UV" : "", n.gradientMap ? "#define USE_GRADIENTMAP" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", n.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", n.decodeVideoTexture ? "#define DECODE_VIDEO_TEXTURE" : "", n.decodeVideoTextureEmissive ? "#define DECODE_VIDEO_TEXTURE_EMISSIVE" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.reverseDepthBuffer ? "#define USE_REVERSEDEPTHBUF" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== n.toneMapping ? "#define TONE_MAPPING" : "", 0 !== n.toneMapping ? vd.tonemapping_pars_fragment : "", 0 !== n.toneMapping ? fp("toneMapping", n.toneMapping) : "", n.dithering ? "#define DITHERING" : "", n.opaque ? "#define OPAQUE" : "", vd.colorspace_pars_fragment, dp("linearToOutputTexel", n.outputColorSpace), mp(), n.useDepthPacking ? "#define DEPTH_PACKING " + n.depthPacking : "", "\n"].filter(gp).join("\n")), s = wp(s), s = Ap(s, n), s = _p(s, n), o = wp(o), o = Ap(o, n), o = _p(o, n), s = Ep(s), o = Ep(o), !0 !== n.isRawShaderMaterial && (_ = "#version 300 es\n", g = [f, "#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + g, A = ["#define varying in", n.glslVersion === ct ? "" : "layout(location = 0) out highp vec4 pc_fragColor;", n.glslVersion === ct ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + A); + const v = _ + g + s, + w = _ + A + o, + y = lp(r, r.VERTEX_SHADER, v), + x = lp(r, r.FRAGMENT_SHADER, w); + + function b(t) { + if (e.debug.checkShaderErrors) { + const n = r.getProgramInfoLog(m).trim(), + i = r.getShaderInfoLog(y).trim(), + a = r.getShaderInfoLog(x).trim(); + let s = !0, + o = !0; + if (!1 === r.getProgramParameter(m, r.LINK_STATUS)) + if (s = !1, "function" == typeof e.debug.onShaderError) e.debug.onShaderError(r, m, y, x); + else { + const e = up(r, y, "vertex"), + i = up(r, x, "fragment"); + console.error("THREE.WebGLProgram: Shader Error " + r.getError() + " - VALIDATE_STATUS " + r.getProgramParameter(m, r.VALIDATE_STATUS) + "\n\nMaterial Name: " + t.name + "\nMaterial Type: " + t.type + "\n\nProgram Info Log: " + n + "\n" + e + "\n" + i) + } + else "" !== n ? console.warn("THREE.WebGLProgram: Program Info Log:", n) : "" !== i && "" !== a || (o = !1); + o && (t.diagnostics = { + runnable: s, + programLog: n, + vertexShader: { + log: i, + prefix: g + }, + fragmentShader: { + log: a, + prefix: A + } + }) + } + r.deleteShader(y), r.deleteShader(x), E = new op(r, m), S = function(e, t) { + const n = {}, + i = e.getProgramParameter(t, e.ACTIVE_ATTRIBUTES); + for (let r = 0; r < i; r++) { + const i = e.getActiveAttrib(t, r), + a = i.name; + let s = 1; + i.type === e.FLOAT_MAT2 && (s = 2), i.type === e.FLOAT_MAT3 && (s = 3), i.type === e.FLOAT_MAT4 && (s = 4), n[a] = { + type: i.type, + location: e.getAttribLocation(t, a), + locationSize: s + } + } + return n + }(r, m) + } + let E, S; + r.attachShader(m, y), r.attachShader(m, x), void 0 !== n.index0AttributeName ? r.bindAttribLocation(m, 0, n.index0AttributeName) : !0 === n.morphTargets && r.bindAttribLocation(m, 0, "position"), r.linkProgram(m), this.getUniforms = function() { + return void 0 === E && b(this), E + }, this.getAttributes = function() { + return void 0 === S && b(this), S + }; + let M = !1 === n.rendererExtensionParallelShaderCompile; + return this.isReady = function() { + return !1 === M && (M = r.getProgramParameter(m, 37297)), M + }, this.destroy = function() { + i.releaseStatesOfProgram(this), r.deleteProgram(m), this.program = void 0 + }, this.type = n.shaderType, this.name = n.shaderName, this.id = cp++, this.cacheKey = t, this.usedTimes = 1, this.program = m, this.vertexShader = y, this.fragmentShader = x, this + } + let Cp = 0; + class Ip { + constructor() { + this.shaderCache = new Map, this.materialCache = new Map + } + update(e) { + const t = e.vertexShader, + n = e.fragmentShader, + i = this._getShaderStage(t), + r = this._getShaderStage(n), + a = this._getShaderCacheForMaterial(e); + return !1 === a.has(i) && (a.add(i), i.usedTimes++), !1 === a.has(r) && (a.add(r), r.usedTimes++), this + } + remove(e) { + const t = this.materialCache.get(e); + for (const e of t) e.usedTimes--, 0 === e.usedTimes && this.shaderCache.delete(e.code); + return this.materialCache.delete(e), this + } + getVertexShaderID(e) { + return this._getShaderStage(e.vertexShader).id + } + getFragmentShaderID(e) { + return this._getShaderStage(e.fragmentShader).id + } + dispose() { + this.shaderCache.clear(), this.materialCache.clear() + } + _getShaderCacheForMaterial(e) { + const t = this.materialCache; + let n = t.get(e); + return void 0 === n && (n = new Set, t.set(e, n)), n + } + _getShaderStage(e) { + const t = this.shaderCache; + let n = t.get(e); + return void 0 === n && (n = new Rp(e), t.set(e, n)), n + } + } + class Rp { + constructor(e) { + this.id = Cp++, this.code = e, this.usedTimes = 0 + } + } + + function Pp(e, t, n, i, r, a, s) { + const o = new On, + l = new Ip, + c = new Set, + h = [], + u = r.logarithmicDepthBuffer, + d = r.vertexTextures; + let f = r.precision; + const p = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "toon", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + }; + + function m(e) { + return c.add(e), 0 === e ? "uv" : `uv${e}` + } + return { + getParameters: function(a, o, h, g, A) { + const _ = g.fog, + v = A.geometry, + w = a.isMeshStandardMaterial ? g.environment : null, + y = (a.isMeshStandardMaterial ? n : t).get(a.envMap || w), + x = y && y.mapping === k ? y.image.height : null, + b = p[a.type]; + null !== a.precision && (f = r.getMaxPrecision(a.precision), f !== a.precision && console.warn("THREE.WebGLProgram.getParameters:", a.precision, "not supported, using", f, "instead.")); + const E = v.morphAttributes.position || v.morphAttributes.normal || v.morphAttributes.color, + S = void 0 !== E ? E.length : 0; + let M, T, C, I, R = 0; + if (void 0 !== v.morphAttributes.position && (R = 1), void 0 !== v.morphAttributes.normal && (R = 2), void 0 !== v.morphAttributes.color && (R = 3), b) { + const e = yd[b]; + M = e.vertexShader, T = e.fragmentShader + } else M = a.vertexShader, T = a.fragmentShader, l.update(a), C = l.getVertexShaderID(a), I = l.getFragmentShaderID(a); + const P = e.getRenderTarget(), + B = e.state.buffers.depth.getReversed(), + D = !0 === A.isInstancedMesh, + L = !0 === A.isBatchedMesh, + U = !!a.map, + N = !!a.matcap, + F = !!y, + O = !!a.aoMap, + z = !!a.lightMap, + W = !!a.bumpMap, + H = !!a.normalMap, + V = !!a.displacementMap, + G = !!a.emissiveMap, + Q = !!a.metalnessMap, + X = !!a.roughnessMap, + j = a.anisotropy > 0, + q = a.clearcoat > 0, + Y = a.dispersion > 0, + K = a.iridescence > 0, + Z = a.sheen > 0, + J = a.transmission > 0, + $ = j && !!a.anisotropyMap, + ee = q && !!a.clearcoatMap, + te = q && !!a.clearcoatNormalMap, + ne = q && !!a.clearcoatRoughnessMap, + ie = K && !!a.iridescenceMap, + re = K && !!a.iridescenceThicknessMap, + ae = Z && !!a.sheenColorMap, + se = Z && !!a.sheenRoughnessMap, + oe = !!a.specularMap, + le = !!a.specularColorMap, + ce = !!a.specularIntensityMap, + he = J && !!a.transmissionMap, + ue = J && !!a.thicknessMap, + de = !!a.gradientMap, + fe = !!a.alphaMap, + pe = a.alphaTest > 0, + me = !!a.alphaHash, + ge = !!a.extensions; + let Ae = 0; + a.toneMapped && (null !== P && !0 !== P.isXRRenderTarget || (Ae = e.toneMapping)); + const _e = { + shaderID: b, + shaderType: a.type, + shaderName: a.name, + vertexShader: M, + fragmentShader: T, + defines: a.defines, + customVertexShaderID: C, + customFragmentShaderID: I, + isRawShaderMaterial: !0 === a.isRawShaderMaterial, + glslVersion: a.glslVersion, + precision: f, + batching: L, + batchingColor: L && null !== A._colorsTexture, + instancing: D, + instancingColor: D && null !== A.instanceColor, + instancingMorph: D && null !== A.morphTexture, + supportsVertexTextures: d, + outputColorSpace: null === P ? e.outputColorSpace : !0 === P.isXRRenderTarget ? P.texture.colorSpace : Ke, + alphaToCoverage: !!a.alphaToCoverage, + map: U, + matcap: N, + envMap: F, + envMapMode: F && y.mapping, + envMapCubeUVHeight: x, + aoMap: O, + lightMap: z, + bumpMap: W, + normalMap: H, + displacementMap: d && V, + emissiveMap: G, + normalMapObjectSpace: H && 1 === a.normalMapType, + normalMapTangentSpace: H && 0 === a.normalMapType, + metalnessMap: Q, + roughnessMap: X, + anisotropy: j, + anisotropyMap: $, + clearcoat: q, + clearcoatMap: ee, + clearcoatNormalMap: te, + clearcoatRoughnessMap: ne, + dispersion: Y, + iridescence: K, + iridescenceMap: ie, + iridescenceThicknessMap: re, + sheen: Z, + sheenColorMap: ae, + sheenRoughnessMap: se, + specularMap: oe, + specularColorMap: le, + specularIntensityMap: ce, + transmission: J, + transmissionMap: he, + thicknessMap: ue, + gradientMap: de, + opaque: !1 === a.transparent && 1 === a.blending && !1 === a.alphaToCoverage, + alphaMap: fe, + alphaTest: pe, + alphaHash: me, + combine: a.combine, + mapUv: U && m(a.map.channel), + aoMapUv: O && m(a.aoMap.channel), + lightMapUv: z && m(a.lightMap.channel), + bumpMapUv: W && m(a.bumpMap.channel), + normalMapUv: H && m(a.normalMap.channel), + displacementMapUv: V && m(a.displacementMap.channel), + emissiveMapUv: G && m(a.emissiveMap.channel), + metalnessMapUv: Q && m(a.metalnessMap.channel), + roughnessMapUv: X && m(a.roughnessMap.channel), + anisotropyMapUv: $ && m(a.anisotropyMap.channel), + clearcoatMapUv: ee && m(a.clearcoatMap.channel), + clearcoatNormalMapUv: te && m(a.clearcoatNormalMap.channel), + clearcoatRoughnessMapUv: ne && m(a.clearcoatRoughnessMap.channel), + iridescenceMapUv: ie && m(a.iridescenceMap.channel), + iridescenceThicknessMapUv: re && m(a.iridescenceThicknessMap.channel), + sheenColorMapUv: ae && m(a.sheenColorMap.channel), + sheenRoughnessMapUv: se && m(a.sheenRoughnessMap.channel), + specularMapUv: oe && m(a.specularMap.channel), + specularColorMapUv: le && m(a.specularColorMap.channel), + specularIntensityMapUv: ce && m(a.specularIntensityMap.channel), + transmissionMapUv: he && m(a.transmissionMap.channel), + thicknessMapUv: ue && m(a.thicknessMap.channel), + alphaMapUv: fe && m(a.alphaMap.channel), + vertexTangents: !!v.attributes.tangent && (H || j), + vertexColors: a.vertexColors, + vertexAlphas: !0 === a.vertexColors && !!v.attributes.color && 4 === v.attributes.color.itemSize, + pointsUvs: !0 === A.isPoints && !!v.attributes.uv && (U || fe), + fog: !!_, + useFog: !0 === a.fog, + fogExp2: !!_ && _.isFogExp2, + flatShading: !0 === a.flatShading, + sizeAttenuation: !0 === a.sizeAttenuation, + logarithmicDepthBuffer: u, + reverseDepthBuffer: B, + skinning: !0 === A.isSkinnedMesh, + morphTargets: void 0 !== v.morphAttributes.position, + morphNormals: void 0 !== v.morphAttributes.normal, + morphColors: void 0 !== v.morphAttributes.color, + morphTargetsCount: S, + morphTextureStride: R, + numDirLights: o.directional.length, + numPointLights: o.point.length, + numSpotLights: o.spot.length, + numSpotLightMaps: o.spotLightMap.length, + numRectAreaLights: o.rectArea.length, + numHemiLights: o.hemi.length, + numDirLightShadows: o.directionalShadowMap.length, + numPointLightShadows: o.pointShadowMap.length, + numSpotLightShadows: o.spotShadowMap.length, + numSpotLightShadowsWithMaps: o.numSpotLightShadowsWithMaps, + numLightProbes: o.numLightProbes, + numClippingPlanes: s.numPlanes, + numClipIntersection: s.numIntersection, + dithering: a.dithering, + shadowMapEnabled: e.shadowMap.enabled && h.length > 0, + shadowMapType: e.shadowMap.type, + toneMapping: Ae, + decodeVideoTexture: U && !0 === a.map.isVideoTexture && Ut.getTransfer(a.map.colorSpace) === Je, + decodeVideoTextureEmissive: G && !0 === a.emissiveMap.isVideoTexture && Ut.getTransfer(a.emissiveMap.colorSpace) === Je, + premultipliedAlpha: a.premultipliedAlpha, + doubleSided: 2 === a.side, + flipSided: 1 === a.side, + useDepthPacking: a.depthPacking >= 0, + depthPacking: a.depthPacking || 0, + index0AttributeName: a.index0AttributeName, + extensionClipCullDistance: ge && !0 === a.extensions.clipCullDistance && i.has("WEBGL_clip_cull_distance"), + extensionMultiDraw: (ge && !0 === a.extensions.multiDraw || L) && i.has("WEBGL_multi_draw"), + rendererExtensionParallelShaderCompile: i.has("KHR_parallel_shader_compile"), + customProgramCacheKey: a.customProgramCacheKey() + }; + return _e.vertexUv1s = c.has(1), _e.vertexUv2s = c.has(2), _e.vertexUv3s = c.has(3), c.clear(), _e + }, + getProgramCacheKey: function(t) { + const n = []; + if (t.shaderID ? n.push(t.shaderID) : (n.push(t.customVertexShaderID), n.push(t.customFragmentShaderID)), void 0 !== t.defines) + for (const e in t.defines) n.push(e), n.push(t.defines[e]); + return !1 === t.isRawShaderMaterial && (! function(e, t) { + e.push(t.precision), e.push(t.outputColorSpace), e.push(t.envMapMode), e.push(t.envMapCubeUVHeight), e.push(t.mapUv), e.push(t.alphaMapUv), e.push(t.lightMapUv), e.push(t.aoMapUv), e.push(t.bumpMapUv), e.push(t.normalMapUv), e.push(t.displacementMapUv), e.push(t.emissiveMapUv), e.push(t.metalnessMapUv), e.push(t.roughnessMapUv), e.push(t.anisotropyMapUv), e.push(t.clearcoatMapUv), e.push(t.clearcoatNormalMapUv), e.push(t.clearcoatRoughnessMapUv), e.push(t.iridescenceMapUv), e.push(t.iridescenceThicknessMapUv), e.push(t.sheenColorMapUv), e.push(t.sheenRoughnessMapUv), e.push(t.specularMapUv), e.push(t.specularColorMapUv), e.push(t.specularIntensityMapUv), e.push(t.transmissionMapUv), e.push(t.thicknessMapUv), e.push(t.combine), e.push(t.fogExp2), e.push(t.sizeAttenuation), e.push(t.morphTargetsCount), e.push(t.morphAttributeCount), e.push(t.numDirLights), e.push(t.numPointLights), e.push(t.numSpotLights), e.push(t.numSpotLightMaps), e.push(t.numHemiLights), e.push(t.numRectAreaLights), e.push(t.numDirLightShadows), e.push(t.numPointLightShadows), e.push(t.numSpotLightShadows), e.push(t.numSpotLightShadowsWithMaps), e.push(t.numLightProbes), e.push(t.shadowMapType), e.push(t.toneMapping), e.push(t.numClippingPlanes), e.push(t.numClipIntersection), e.push(t.depthPacking) + }(n, t), function(e, t) { + o.disableAll(), t.supportsVertexTextures && o.enable(0); + t.instancing && o.enable(1); + t.instancingColor && o.enable(2); + t.instancingMorph && o.enable(3); + t.matcap && o.enable(4); + t.envMap && o.enable(5); + t.normalMapObjectSpace && o.enable(6); + t.normalMapTangentSpace && o.enable(7); + t.clearcoat && o.enable(8); + t.iridescence && o.enable(9); + t.alphaTest && o.enable(10); + t.vertexColors && o.enable(11); + t.vertexAlphas && o.enable(12); + t.vertexUv1s && o.enable(13); + t.vertexUv2s && o.enable(14); + t.vertexUv3s && o.enable(15); + t.vertexTangents && o.enable(16); + t.anisotropy && o.enable(17); + t.alphaHash && o.enable(18); + t.batching && o.enable(19); + t.dispersion && o.enable(20); + t.batchingColor && o.enable(21); + e.push(o.mask), o.disableAll(), t.fog && o.enable(0); + t.useFog && o.enable(1); + t.flatShading && o.enable(2); + t.logarithmicDepthBuffer && o.enable(3); + t.reverseDepthBuffer && o.enable(4); + t.skinning && o.enable(5); + t.morphTargets && o.enable(6); + t.morphNormals && o.enable(7); + t.morphColors && o.enable(8); + t.premultipliedAlpha && o.enable(9); + t.shadowMapEnabled && o.enable(10); + t.doubleSided && o.enable(11); + t.flipSided && o.enable(12); + t.useDepthPacking && o.enable(13); + t.dithering && o.enable(14); + t.transmission && o.enable(15); + t.sheen && o.enable(16); + t.opaque && o.enable(17); + t.pointsUvs && o.enable(18); + t.decodeVideoTexture && o.enable(19); + t.decodeVideoTextureEmissive && o.enable(20); + t.alphaToCoverage && o.enable(21); + e.push(o.mask) + }(n, t), n.push(e.outputColorSpace)), n.push(t.customProgramCacheKey), n.join() + }, + getUniforms: function(e) { + const t = p[e.type]; + let n; + if (t) { + const e = yd[t]; + n = ir.clone(e.uniforms) + } else n = e.uniforms; + return n + }, + acquireProgram: function(t, n) { + let i; + for (let e = 0, t = h.length; e < t; e++) { + const t = h[e]; + if (t.cacheKey === n) { + i = t, ++i.usedTimes; + break + } + } + return void 0 === i && (i = new Tp(e, n, t, a), h.push(i)), i + }, + releaseProgram: function(e) { + if (0 == --e.usedTimes) { + const t = h.indexOf(e); + h[t] = h[h.length - 1], h.pop(), e.destroy() + } + }, + releaseShaderCache: function(e) { + l.remove(e) + }, + programs: h, + dispose: function() { + l.dispose() + } + } + } + + function Bp() { + let e = new WeakMap; + return { + has: function(t) { + return e.has(t) + }, + get: function(t) { + let n = e.get(t); + return void 0 === n && (n = {}, e.set(t, n)), n + }, + remove: function(t) { + e.delete(t) + }, + update: function(t, n, i) { + e.get(t)[n] = i + }, + dispose: function() { + e = new WeakMap + } + } + } + + function Dp(e, t) { + return e.groupOrder !== t.groupOrder ? e.groupOrder - t.groupOrder : e.renderOrder !== t.renderOrder ? e.renderOrder - t.renderOrder : e.material.id !== t.material.id ? e.material.id - t.material.id : e.z !== t.z ? e.z - t.z : e.id - t.id + } + + function Lp(e, t) { + return e.groupOrder !== t.groupOrder ? e.groupOrder - t.groupOrder : e.renderOrder !== t.renderOrder ? e.renderOrder - t.renderOrder : e.z !== t.z ? t.z - e.z : e.id - t.id + } + + function Up() { + const e = []; + let t = 0; + const n = [], + i = [], + r = []; + + function a(n, i, r, a, s, o) { + let l = e[t]; + return void 0 === l ? (l = { + id: n.id, + object: n, + geometry: i, + material: r, + groupOrder: a, + renderOrder: n.renderOrder, + z: s, + group: o + }, e[t] = l) : (l.id = n.id, l.object = n, l.geometry = i, l.material = r, l.groupOrder = a, l.renderOrder = n.renderOrder, l.z = s, l.group = o), t++, l + } + return { + opaque: n, + transmissive: i, + transparent: r, + init: function() { + t = 0, n.length = 0, i.length = 0, r.length = 0 + }, + push: function(e, t, s, o, l, c) { + const h = a(e, t, s, o, l, c); + s.transmission > 0 ? i.push(h) : !0 === s.transparent ? r.push(h) : n.push(h) + }, + unshift: function(e, t, s, o, l, c) { + const h = a(e, t, s, o, l, c); + s.transmission > 0 ? i.unshift(h) : !0 === s.transparent ? r.unshift(h) : n.unshift(h) + }, + finish: function() { + for (let n = t, i = e.length; n < i; n++) { + const t = e[n]; + if (null === t.id) break; + t.id = null, t.object = null, t.geometry = null, t.material = null, t.group = null + } + }, + sort: function(e, t) { + n.length > 1 && n.sort(e || Dp), i.length > 1 && i.sort(t || Lp), r.length > 1 && r.sort(t || Lp) + } + } + } + + function kp() { + let e = new WeakMap; + return { + get: function(t, n) { + const i = e.get(t); + let r; + return void 0 === i ? (r = new Up, e.set(t, [r])) : n >= i.length ? (r = new Up, i.push(r)) : r = i[n], r + }, + dispose: function() { + e = new WeakMap + } + } + } + + function Np() { + const e = {}; + return { + get: function(t) { + if (void 0 !== e[t.id]) return e[t.id]; + let n; + switch (t.type) { + case "DirectionalLight": + n = { + direction: new Zt, + color: new wi + }; + break; + case "SpotLight": + n = { + position: new Zt, + direction: new Zt, + color: new wi, + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + case "PointLight": + n = { + position: new Zt, + color: new wi, + distance: 0, + decay: 0 + }; + break; + case "HemisphereLight": + n = { + direction: new Zt, + skyColor: new wi, + groundColor: new wi + }; + break; + case "RectAreaLight": + n = { + color: new wi, + position: new Zt, + halfWidth: new Zt, + halfHeight: new Zt + } + } + return e[t.id] = n, n + } + } + } + let Fp = 0; + + function Op(e, t) { + return (t.castShadow ? 2 : 0) - (e.castShadow ? 2 : 0) + (t.map ? 1 : 0) - (e.map ? 1 : 0) + } + + function zp(e) { + const t = new Np, + n = function() { + const e = {}; + return { + get: function(t) { + if (void 0 !== e[t.id]) return e[t.id]; + let n; + switch (t.type) { + case "DirectionalLight": + case "SpotLight": + n = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Et + }; + break; + case "PointLight": + n = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Et, + shadowCameraNear: 1, + shadowCameraFar: 1e3 + } + } + return e[t.id] = n, n + } + } + }(), + i = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1, + numSpotMaps: -1, + numLightProbes: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotLightMap: [], + spotShadow: [], + spotShadowMap: [], + spotLightMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [], + numSpotLightShadowsWithMaps: 0, + numLightProbes: 0 + }; + for (let e = 0; e < 9; e++) i.probe.push(new Zt); + const r = new Zt, + a = new Cn, + s = new Cn; + return { + setup: function(r) { + let a = 0, + s = 0, + o = 0; + for (let e = 0; e < 9; e++) i.probe[e].set(0, 0, 0); + let l = 0, + c = 0, + h = 0, + u = 0, + d = 0, + f = 0, + p = 0, + m = 0, + g = 0, + A = 0, + _ = 0; + r.sort(Op); + for (let e = 0, v = r.length; e < v; e++) { + const v = r[e], + w = v.color, + y = v.intensity, + x = v.distance, + b = v.shadow && v.shadow.map ? v.shadow.map.texture : null; + if (v.isAmbientLight) a += w.r * y, s += w.g * y, o += w.b * y; + else if (v.isLightProbe) { + for (let e = 0; e < 9; e++) i.probe[e].addScaledVector(v.sh.coefficients[e], y); + _++ + } else if (v.isDirectionalLight) { + const e = t.get(v); + if (e.color.copy(v.color).multiplyScalar(v.intensity), v.castShadow) { + const e = v.shadow, + t = n.get(v); + t.shadowIntensity = e.intensity, t.shadowBias = e.bias, t.shadowNormalBias = e.normalBias, t.shadowRadius = e.radius, t.shadowMapSize = e.mapSize, i.directionalShadow[l] = t, i.directionalShadowMap[l] = b, i.directionalShadowMatrix[l] = v.shadow.matrix, f++ + } + i.directional[l] = e, l++ + } else if (v.isSpotLight) { + const e = t.get(v); + e.position.setFromMatrixPosition(v.matrixWorld), e.color.copy(w).multiplyScalar(y), e.distance = x, e.coneCos = Math.cos(v.angle), e.penumbraCos = Math.cos(v.angle * (1 - v.penumbra)), e.decay = v.decay, i.spot[h] = e; + const r = v.shadow; + if (v.map && (i.spotLightMap[g] = v.map, g++, r.updateMatrices(v), v.castShadow && A++), i.spotLightMatrix[h] = r.matrix, v.castShadow) { + const e = n.get(v); + e.shadowIntensity = r.intensity, e.shadowBias = r.bias, e.shadowNormalBias = r.normalBias, e.shadowRadius = r.radius, e.shadowMapSize = r.mapSize, i.spotShadow[h] = e, i.spotShadowMap[h] = b, m++ + } + h++ + } else if (v.isRectAreaLight) { + const e = t.get(v); + e.color.copy(w).multiplyScalar(y), e.halfWidth.set(.5 * v.width, 0, 0), e.halfHeight.set(0, .5 * v.height, 0), i.rectArea[u] = e, u++ + } else if (v.isPointLight) { + const e = t.get(v); + if (e.color.copy(v.color).multiplyScalar(v.intensity), e.distance = v.distance, e.decay = v.decay, v.castShadow) { + const e = v.shadow, + t = n.get(v); + t.shadowIntensity = e.intensity, t.shadowBias = e.bias, t.shadowNormalBias = e.normalBias, t.shadowRadius = e.radius, t.shadowMapSize = e.mapSize, t.shadowCameraNear = e.camera.near, t.shadowCameraFar = e.camera.far, i.pointShadow[c] = t, i.pointShadowMap[c] = b, i.pointShadowMatrix[c] = v.shadow.matrix, p++ + } + i.point[c] = e, c++ + } else if (v.isHemisphereLight) { + const e = t.get(v); + e.skyColor.copy(v.color).multiplyScalar(y), e.groundColor.copy(v.groundColor).multiplyScalar(y), i.hemi[d] = e, d++ + } + } + u > 0 && (!0 === e.has("OES_texture_float_linear") ? (i.rectAreaLTC1 = wd.LTC_FLOAT_1, i.rectAreaLTC2 = wd.LTC_FLOAT_2) : (i.rectAreaLTC1 = wd.LTC_HALF_1, i.rectAreaLTC2 = wd.LTC_HALF_2)), i.ambient[0] = a, i.ambient[1] = s, i.ambient[2] = o; + const v = i.hash; + v.directionalLength === l && v.pointLength === c && v.spotLength === h && v.rectAreaLength === u && v.hemiLength === d && v.numDirectionalShadows === f && v.numPointShadows === p && v.numSpotShadows === m && v.numSpotMaps === g && v.numLightProbes === _ || (i.directional.length = l, i.spot.length = h, i.rectArea.length = u, i.point.length = c, i.hemi.length = d, i.directionalShadow.length = f, i.directionalShadowMap.length = f, i.pointShadow.length = p, i.pointShadowMap.length = p, i.spotShadow.length = m, i.spotShadowMap.length = m, i.directionalShadowMatrix.length = f, i.pointShadowMatrix.length = p, i.spotLightMatrix.length = m + g - A, i.spotLightMap.length = g, i.numSpotLightShadowsWithMaps = A, i.numLightProbes = _, v.directionalLength = l, v.pointLength = c, v.spotLength = h, v.rectAreaLength = u, v.hemiLength = d, v.numDirectionalShadows = f, v.numPointShadows = p, v.numSpotShadows = m, v.numSpotMaps = g, v.numLightProbes = _, i.version = Fp++) + }, + setupView: function(e, t) { + let n = 0, + o = 0, + l = 0, + c = 0, + h = 0; + const u = t.matrixWorldInverse; + for (let t = 0, d = e.length; t < d; t++) { + const d = e[t]; + if (d.isDirectionalLight) { + const e = i.directional[n]; + e.direction.setFromMatrixPosition(d.matrixWorld), r.setFromMatrixPosition(d.target.matrixWorld), e.direction.sub(r), e.direction.transformDirection(u), n++ + } else if (d.isSpotLight) { + const e = i.spot[l]; + e.position.setFromMatrixPosition(d.matrixWorld), e.position.applyMatrix4(u), e.direction.setFromMatrixPosition(d.matrixWorld), r.setFromMatrixPosition(d.target.matrixWorld), e.direction.sub(r), e.direction.transformDirection(u), l++ + } else if (d.isRectAreaLight) { + const e = i.rectArea[c]; + e.position.setFromMatrixPosition(d.matrixWorld), e.position.applyMatrix4(u), s.identity(), a.copy(d.matrixWorld), a.premultiply(u), s.extractRotation(a), e.halfWidth.set(.5 * d.width, 0, 0), e.halfHeight.set(0, .5 * d.height, 0), e.halfWidth.applyMatrix4(s), e.halfHeight.applyMatrix4(s), c++ + } else if (d.isPointLight) { + const e = i.point[o]; + e.position.setFromMatrixPosition(d.matrixWorld), e.position.applyMatrix4(u), o++ + } else if (d.isHemisphereLight) { + const e = i.hemi[h]; + e.direction.setFromMatrixPosition(d.matrixWorld), e.direction.transformDirection(u), h++ + } + } + }, + state: i + } + } + + function Wp(e) { + const t = new zp(e), + n = [], + i = []; + const r = { + lightsArray: n, + shadowsArray: i, + camera: null, + lights: t, + transmissionRenderTarget: {} + }; + return { + init: function(e) { + r.camera = e, n.length = 0, i.length = 0 + }, + state: r, + setupLights: function() { + t.setup(n) + }, + setupLightsView: function(e) { + t.setupView(n, e) + }, + pushLight: function(e) { + n.push(e) + }, + pushShadow: function(e) { + i.push(e) + } + } + } + + function Hp(e) { + let t = new WeakMap; + return { + get: function(n, i = 0) { + const r = t.get(n); + let a; + return void 0 === r ? (a = new Wp(e), t.set(n, [a])) : i >= r.length ? (a = new Wp(e), r.push(a)) : a = r[i], a + }, + dispose: function() { + t = new WeakMap + } + } + } + + function Vp(e, n, a) { + let s = new Jr; + const o = new Et, + l = new Et, + c = new Qt, + h = new Ea({ + depthPacking: 3201 + }), + u = new Sa, + d = {}, + f = a.maxTextureSize, + p = { + [t]: 1, + [i]: 0, + [r]: 2 + }, + m = new rr({ + defines: { + VSM_SAMPLES: 8 + }, + uniforms: { + shadow_pass: { + value: null + }, + resolution: { + value: new Et + }, + radius: { + value: 4 + } + }, + vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", + fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" + }), + g = m.clone(); + g.defines.HORIZONTAL_PASS = 1; + const A = new Oi; + A.setAttribute("position", new Ci(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)); + const _ = new Zi(A, m), + v = this; + this.enabled = !1, this.autoUpdate = !0, this.needsUpdate = !1, this.type = 1; + let w = this.type; + + function y(t, i) { + const r = n.update(_); + m.defines.VSM_SAMPLES !== t.blurSamples && (m.defines.VSM_SAMPLES = t.blurSamples, g.defines.VSM_SAMPLES = t.blurSamples, m.needsUpdate = !0, g.needsUpdate = !0), null === t.mapPass && (t.mapPass = new jt(o.x, o.y)), m.uniforms.shadow_pass.value = t.map.texture, m.uniforms.resolution.value = t.mapSize, m.uniforms.radius.value = t.radius, e.setRenderTarget(t.mapPass), e.clear(), e.renderBufferDirect(i, null, r, m, _, null), g.uniforms.shadow_pass.value = t.mapPass.texture, g.uniforms.resolution.value = t.mapSize, g.uniforms.radius.value = t.radius, e.setRenderTarget(t.map), e.clear(), e.renderBufferDirect(i, null, r, g, _, null) + } + + function x(t, n, i, r) { + let a = null; + const s = !0 === i.isPointLight ? t.customDistanceMaterial : t.customDepthMaterial; + if (void 0 !== s) a = s; + else if (a = !0 === i.isPointLight ? u : h, e.localClippingEnabled && !0 === n.clipShadows && Array.isArray(n.clippingPlanes) && 0 !== n.clippingPlanes.length || n.displacementMap && 0 !== n.displacementScale || n.alphaMap && n.alphaTest > 0 || n.map && n.alphaTest > 0) { + const e = a.uuid, + t = n.uuid; + let i = d[e]; + void 0 === i && (i = {}, d[e] = i); + let r = i[t]; + void 0 === r && (r = a.clone(), i[t] = r, n.addEventListener("dispose", E)), a = r + } + if (a.visible = n.visible, a.wireframe = n.wireframe, a.side = 3 === r ? null !== n.shadowSide ? n.shadowSide : n.side : null !== n.shadowSide ? n.shadowSide : p[n.side], a.alphaMap = n.alphaMap, a.alphaTest = n.alphaTest, a.map = n.map, a.clipShadows = n.clipShadows, a.clippingPlanes = n.clippingPlanes, a.clipIntersection = n.clipIntersection, a.displacementMap = n.displacementMap, a.displacementScale = n.displacementScale, a.displacementBias = n.displacementBias, a.wireframeLinewidth = n.wireframeLinewidth, a.linewidth = n.linewidth, !0 === i.isPointLight && !0 === a.isMeshDistanceMaterial) { + e.properties.get(a).light = i + } + return a + } + + function b(t, i, r, a, o) { + if (!1 === t.visible) return; + if (t.layers.test(i.layers) && (t.isMesh || t.isLine || t.isPoints) && (t.castShadow || t.receiveShadow && 3 === o) && (!t.frustumCulled || s.intersectsObject(t))) { + t.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse, t.matrixWorld); + const s = n.update(t), + l = t.material; + if (Array.isArray(l)) { + const n = s.groups; + for (let c = 0, h = n.length; c < h; c++) { + const h = n[c], + u = l[h.materialIndex]; + if (u && u.visible) { + const n = x(t, u, a, o); + t.onBeforeShadow(e, t, i, r, s, n, h), e.renderBufferDirect(r, null, s, n, t, h), t.onAfterShadow(e, t, i, r, s, n, h) + } + } + } else if (l.visible) { + const n = x(t, l, a, o); + t.onBeforeShadow(e, t, i, r, s, n, null), e.renderBufferDirect(r, null, s, n, t, null), t.onAfterShadow(e, t, i, r, s, n, null) + } + } + const l = t.children; + for (let e = 0, t = l.length; e < t; e++) b(l[e], i, r, a, o) + } + + function E(e) { + e.target.removeEventListener("dispose", E); + for (const t in d) { + const n = d[t], + i = e.target.uuid; + if (i in n) { + n[i].dispose(), delete n[i] + } + } + } + this.render = function(t, n, i) { + if (!1 === v.enabled) return; + if (!1 === v.autoUpdate && !1 === v.needsUpdate) return; + if (0 === t.length) return; + const r = e.getRenderTarget(), + a = e.getActiveCubeFace(), + h = e.getActiveMipmapLevel(), + u = e.state; + u.setBlending(0), u.buffers.color.setClear(1, 1, 1, 1), u.buffers.depth.setTest(!0), u.setScissorTest(!1); + const d = 3 !== w && 3 === this.type, + p = 3 === w && 3 !== this.type; + for (let r = 0, a = t.length; r < a; r++) { + const a = t[r], + h = a.shadow; + if (void 0 === h) { + console.warn("THREE.WebGLShadowMap:", a, "has no shadow."); + continue + } + if (!1 === h.autoUpdate && !1 === h.needsUpdate) continue; + o.copy(h.mapSize); + const m = h.getFrameExtents(); + if (o.multiply(m), l.copy(h.mapSize), (o.x > f || o.y > f) && (o.x > f && (l.x = Math.floor(f / m.x), o.x = l.x * m.x, h.mapSize.x = l.x), o.y > f && (l.y = Math.floor(f / m.y), o.y = l.y * m.y, h.mapSize.y = l.y)), null === h.map || !0 === d || !0 === p) { + const e = 3 !== this.type ? { + minFilter: z, + magFilter: z + } : {}; + null !== h.map && h.map.dispose(), h.map = new jt(o.x, o.y, e), h.map.texture.name = a.name + ".shadowMap", h.camera.updateProjectionMatrix() + } + e.setRenderTarget(h.map), e.clear(); + const g = h.getViewportCount(); + for (let e = 0; e < g; e++) { + const t = h.getViewport(e); + c.set(l.x * t.x, l.y * t.y, l.x * t.z, l.y * t.w), u.viewport(c), h.updateMatrices(a, e), s = h.getFrustum(), b(n, i, h.camera, a, this.type) + }!0 !== h.isPointLightShadow && 3 === this.type && y(h, i), h.needsUpdate = !1 + } + w = this.type, v.needsUpdate = !1, e.setRenderTarget(r, a, h) + } + } + const Gp = { + [b]: 1, + [S]: 6, + [T]: 7, + [M]: 5, + [E]: 0, + [I]: 2, + [R]: 4, + [C]: 3 + }; + + function Qp(e, t) { + const n = new function() { + let t = !1; + const n = new Qt; + let i = null; + const r = new Qt(0, 0, 0, 0); + return { + setMask: function(n) { + i === n || t || (e.colorMask(n, n, n, n), i = n) + }, + setLocked: function(e) { + t = e + }, + setClear: function(t, i, a, s, o) { + !0 === o && (t *= s, i *= s, a *= s), n.set(t, i, a, s), !1 === r.equals(n) && (e.clearColor(t, i, a, s), r.copy(n)) + }, + reset: function() { + t = !1, i = null, r.set(-1, 0, 0, 0) + } + } + }, + i = new function() { + let n = !1, + i = !1, + r = null, + a = null, + s = null; + return { + setReversed: function(e) { + if (i !== e) { + const e = t.get("EXT_clip_control"); + i ? e.clipControlEXT(e.LOWER_LEFT_EXT, e.ZERO_TO_ONE_EXT) : e.clipControlEXT(e.LOWER_LEFT_EXT, e.NEGATIVE_ONE_TO_ONE_EXT); + const n = s; + s = null, this.setClear(n) + } + i = e + }, + getReversed: function() { + return i + }, + setTest: function(t) { + t ? re(e.DEPTH_TEST) : ae(e.DEPTH_TEST) + }, + setMask: function(t) { + r === t || n || (e.depthMask(t), r = t) + }, + setFunc: function(t) { + if (i && (t = Gp[t]), a !== t) { + switch (t) { + case 0: + e.depthFunc(e.NEVER); + break; + case 1: + e.depthFunc(e.ALWAYS); + break; + case 2: + e.depthFunc(e.LESS); + break; + case 3: + default: + e.depthFunc(e.LEQUAL); + break; + case 4: + e.depthFunc(e.EQUAL); + break; + case 5: + e.depthFunc(e.GEQUAL); + break; + case 6: + e.depthFunc(e.GREATER); + break; + case 7: + e.depthFunc(e.NOTEQUAL) + } + a = t + } + }, + setLocked: function(e) { + n = e + }, + setClear: function(t) { + s !== t && (i && (t = 1 - t), e.clearDepth(t), s = t) + }, + reset: function() { + n = !1, r = null, a = null, s = null, i = !1 + } + } + }, + r = new function() { + let t = !1, + n = null, + i = null, + r = null, + a = null, + s = null, + o = null, + l = null, + c = null; + return { + setTest: function(n) { + t || (n ? re(e.STENCIL_TEST) : ae(e.STENCIL_TEST)) + }, + setMask: function(i) { + n === i || t || (e.stencilMask(i), n = i) + }, + setFunc: function(t, n, s) { + i === t && r === n && a === s || (e.stencilFunc(t, n, s), i = t, r = n, a = s) + }, + setOp: function(t, n, i) { + s === t && o === n && l === i || (e.stencilOp(t, n, i), s = t, o = n, l = i) + }, + setLocked: function(e) { + t = e + }, + setClear: function(t) { + c !== t && (e.clearStencil(t), c = t) + }, + reset: function() { + t = !1, n = null, i = null, r = null, a = null, s = null, o = null, l = null, c = null + } + } + }, + b = new WeakMap, + E = new WeakMap; + let S = {}, + M = {}, + T = new WeakMap, + C = [], + I = null, + R = !1, + P = null, + B = null, + D = null, + L = null, + U = null, + k = null, + N = null, + F = new wi(0, 0, 0), + O = 0, + z = !1, + W = null, + H = null, + V = null, + G = null, + Q = null; + const X = e.getParameter(e.MAX_COMBINED_TEXTURE_IMAGE_UNITS); + let j = !1, + q = 0; + const Y = e.getParameter(e.VERSION); - 1 !== Y.indexOf("WebGL") ? (q = parseFloat(/^WebGL (\d)/.exec(Y)[1]), j = q >= 1) : -1 !== Y.indexOf("OpenGL ES") && (q = parseFloat(/^OpenGL ES (\d)/.exec(Y)[1]), j = q >= 2); + let K = null, + Z = {}; + const J = e.getParameter(e.SCISSOR_BOX), + $ = e.getParameter(e.VIEWPORT), + ee = (new Qt).fromArray(J), + te = (new Qt).fromArray($); + + function ne(t, n, i, r) { + const a = new Uint8Array(4), + s = e.createTexture(); + e.bindTexture(t, s), e.texParameteri(t, e.TEXTURE_MIN_FILTER, e.NEAREST), e.texParameteri(t, e.TEXTURE_MAG_FILTER, e.NEAREST); + for (let s = 0; s < i; s++) t === e.TEXTURE_3D || t === e.TEXTURE_2D_ARRAY ? e.texImage3D(n, 0, e.RGBA, 1, 1, r, 0, e.RGBA, e.UNSIGNED_BYTE, a) : e.texImage2D(n + s, 0, e.RGBA, 1, 1, 0, e.RGBA, e.UNSIGNED_BYTE, a); + return s + } + const ie = {}; + + function re(t) { + !0 !== S[t] && (e.enable(t), S[t] = !0) + } + + function ae(t) { + !1 !== S[t] && (e.disable(t), S[t] = !1) + } + ie[e.TEXTURE_2D] = ne(e.TEXTURE_2D, e.TEXTURE_2D, 1), ie[e.TEXTURE_CUBE_MAP] = ne(e.TEXTURE_CUBE_MAP, e.TEXTURE_CUBE_MAP_POSITIVE_X, 6), ie[e.TEXTURE_2D_ARRAY] = ne(e.TEXTURE_2D_ARRAY, e.TEXTURE_2D_ARRAY, 1, 1), ie[e.TEXTURE_3D] = ne(e.TEXTURE_3D, e.TEXTURE_3D, 1, 1), n.setClear(0, 0, 0, 1), i.setClear(1), r.setClear(0), re(e.DEPTH_TEST), i.setFunc(3), ce(!1), he(1), re(e.CULL_FACE), le(0); + const se = { + [a]: e.FUNC_ADD, + [s]: e.FUNC_SUBTRACT, + [o]: e.FUNC_REVERSE_SUBTRACT + }; + se[103] = e.MIN, se[104] = e.MAX; + const oe = { + [l]: e.ZERO, + [c]: e.ONE, + [h]: e.SRC_COLOR, + [d]: e.SRC_ALPHA, + [_]: e.SRC_ALPHA_SATURATE, + [g]: e.DST_COLOR, + [p]: e.DST_ALPHA, + [u]: e.ONE_MINUS_SRC_COLOR, + [f]: e.ONE_MINUS_SRC_ALPHA, + [A]: e.ONE_MINUS_DST_COLOR, + [m]: e.ONE_MINUS_DST_ALPHA, + [v]: e.CONSTANT_COLOR, + [w]: e.ONE_MINUS_CONSTANT_COLOR, + [y]: e.CONSTANT_ALPHA, + [x]: e.ONE_MINUS_CONSTANT_ALPHA + }; + + function le(t, n, i, r, s, o, l, c, h, u) { + if (0 !== t) { + if (!1 === R && (re(e.BLEND), R = !0), 5 === t) s = s || n, o = o || i, l = l || r, n === B && s === U || (e.blendEquationSeparate(se[n], se[s]), B = n, U = s), i === D && r === L && o === k && l === N || (e.blendFuncSeparate(oe[i], oe[r], oe[o], oe[l]), D = i, L = r, k = o, N = l), !1 !== c.equals(F) && h === O || (e.blendColor(c.r, c.g, c.b, h), F.copy(c), O = h), P = t, z = !1; + else if (t !== P || u !== z) { + if (B === a && U === a || (e.blendEquation(e.FUNC_ADD), B = a, U = a), u) switch (t) { + case 1: + e.blendFuncSeparate(e.ONE, e.ONE_MINUS_SRC_ALPHA, e.ONE, e.ONE_MINUS_SRC_ALPHA); + break; + case 2: + e.blendFunc(e.ONE, e.ONE); + break; + case 3: + e.blendFuncSeparate(e.ZERO, e.ONE_MINUS_SRC_COLOR, e.ZERO, e.ONE); + break; + case 4: + e.blendFuncSeparate(e.ZERO, e.SRC_COLOR, e.ZERO, e.SRC_ALPHA); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", t) + } else switch (t) { + case 1: + e.blendFuncSeparate(e.SRC_ALPHA, e.ONE_MINUS_SRC_ALPHA, e.ONE, e.ONE_MINUS_SRC_ALPHA); + break; + case 2: + e.blendFunc(e.SRC_ALPHA, e.ONE); + break; + case 3: + e.blendFuncSeparate(e.ZERO, e.ONE_MINUS_SRC_COLOR, e.ZERO, e.ONE); + break; + case 4: + e.blendFunc(e.ZERO, e.SRC_COLOR); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", t) + } + D = null, L = null, k = null, N = null, F.set(0, 0, 0), O = 0, P = t, z = u + } + } else !0 === R && (ae(e.BLEND), R = !1) + } + + function ce(t) { + W !== t && (t ? e.frontFace(e.CW) : e.frontFace(e.CCW), W = t) + } + + function he(t) { + 0 !== t ? (re(e.CULL_FACE), t !== H && (1 === t ? e.cullFace(e.BACK) : 2 === t ? e.cullFace(e.FRONT) : e.cullFace(e.FRONT_AND_BACK))) : ae(e.CULL_FACE), H = t + } + + function ue(t, n, i) { + t ? (re(e.POLYGON_OFFSET_FILL), G === n && Q === i || (e.polygonOffset(n, i), G = n, Q = i)) : ae(e.POLYGON_OFFSET_FILL) + } + return { + buffers: { + color: n, + depth: i, + stencil: r + }, + enable: re, + disable: ae, + bindFramebuffer: function(t, n) { + return M[t] !== n && (e.bindFramebuffer(t, n), M[t] = n, t === e.DRAW_FRAMEBUFFER && (M[e.FRAMEBUFFER] = n), t === e.FRAMEBUFFER && (M[e.DRAW_FRAMEBUFFER] = n), !0) + }, + drawBuffers: function(t, n) { + let i = C, + r = !1; + if (t) { + i = T.get(n), void 0 === i && (i = [], T.set(n, i)); + const a = t.textures; + if (i.length !== a.length || i[0] !== e.COLOR_ATTACHMENT0) { + for (let t = 0, n = a.length; t < n; t++) i[t] = e.COLOR_ATTACHMENT0 + t; + i.length = a.length, r = !0 + } + } else i[0] !== e.BACK && (i[0] = e.BACK, r = !0); + r && e.drawBuffers(i) + }, + useProgram: function(t) { + return I !== t && (e.useProgram(t), I = t, !0) + }, + setBlending: le, + setMaterial: function(t, a) { + 2 === t.side ? ae(e.CULL_FACE) : re(e.CULL_FACE); + let s = 1 === t.side; + a && (s = !s), ce(s), 1 === t.blending && !1 === t.transparent ? le(0) : le(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.blendColor, t.blendAlpha, t.premultipliedAlpha), i.setFunc(t.depthFunc), i.setTest(t.depthTest), i.setMask(t.depthWrite), n.setMask(t.colorWrite); + const o = t.stencilWrite; + r.setTest(o), o && (r.setMask(t.stencilWriteMask), r.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), r.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), ue(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits), !0 === t.alphaToCoverage ? re(e.SAMPLE_ALPHA_TO_COVERAGE) : ae(e.SAMPLE_ALPHA_TO_COVERAGE) + }, + setFlipSided: ce, + setCullFace: he, + setLineWidth: function(t) { + t !== V && (j && e.lineWidth(t), V = t) + }, + setPolygonOffset: ue, + setScissorTest: function(t) { + t ? re(e.SCISSOR_TEST) : ae(e.SCISSOR_TEST) + }, + activeTexture: function(t) { + void 0 === t && (t = e.TEXTURE0 + X - 1), K !== t && (e.activeTexture(t), K = t) + }, + bindTexture: function(t, n, i) { + void 0 === i && (i = null === K ? e.TEXTURE0 + X - 1 : K); + let r = Z[i]; + void 0 === r && (r = { + type: void 0, + texture: void 0 + }, Z[i] = r), r.type === t && r.texture === n || (K !== i && (e.activeTexture(i), K = i), e.bindTexture(t, n || ie[t]), r.type = t, r.texture = n) + }, + unbindTexture: function() { + const t = Z[K]; + void 0 !== t && void 0 !== t.type && (e.bindTexture(t.type, null), t.type = void 0, t.texture = void 0) + }, + compressedTexImage2D: function() { + try { + e.compressedTexImage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + compressedTexImage3D: function() { + try { + e.compressedTexImage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texImage2D: function() { + try { + e.texImage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texImage3D: function() { + try { + e.texImage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + updateUBOMapping: function(t, n) { + let i = E.get(n); + void 0 === i && (i = new WeakMap, E.set(n, i)); + let r = i.get(t); + void 0 === r && (r = e.getUniformBlockIndex(n, t.name), i.set(t, r)) + }, + uniformBlockBinding: function(t, n) { + const i = E.get(n).get(t); + b.get(n) !== i && (e.uniformBlockBinding(n, i, t.__bindingPointIndex), b.set(n, i)) + }, + texStorage2D: function() { + try { + e.texStorage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texStorage3D: function() { + try { + e.texStorage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texSubImage2D: function() { + try { + e.texSubImage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + texSubImage3D: function() { + try { + e.texSubImage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + compressedTexSubImage2D: function() { + try { + e.compressedTexSubImage2D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + compressedTexSubImage3D: function() { + try { + e.compressedTexSubImage3D(...arguments) + } catch (e) { + console.error("THREE.WebGLState:", e) + } + }, + scissor: function(t) { + !1 === ee.equals(t) && (e.scissor(t.x, t.y, t.z, t.w), ee.copy(t)) + }, + viewport: function(t) { + !1 === te.equals(t) && (e.viewport(t.x, t.y, t.z, t.w), te.copy(t)) + }, + reset: function() { + e.disable(e.BLEND), e.disable(e.CULL_FACE), e.disable(e.DEPTH_TEST), e.disable(e.POLYGON_OFFSET_FILL), e.disable(e.SCISSOR_TEST), e.disable(e.STENCIL_TEST), e.disable(e.SAMPLE_ALPHA_TO_COVERAGE), e.blendEquation(e.FUNC_ADD), e.blendFunc(e.ONE, e.ZERO), e.blendFuncSeparate(e.ONE, e.ZERO, e.ONE, e.ZERO), e.blendColor(0, 0, 0, 0), e.colorMask(!0, !0, !0, !0), e.clearColor(0, 0, 0, 0), e.depthMask(!0), e.depthFunc(e.LESS), i.setReversed(!1), e.clearDepth(1), e.stencilMask(4294967295), e.stencilFunc(e.ALWAYS, 0, 4294967295), e.stencilOp(e.KEEP, e.KEEP, e.KEEP), e.clearStencil(0), e.cullFace(e.BACK), e.frontFace(e.CCW), e.polygonOffset(0, 0), e.activeTexture(e.TEXTURE0), e.bindFramebuffer(e.FRAMEBUFFER, null), e.bindFramebuffer(e.DRAW_FRAMEBUFFER, null), e.bindFramebuffer(e.READ_FRAMEBUFFER, null), e.useProgram(null), e.lineWidth(1), e.scissor(0, 0, e.canvas.width, e.canvas.height), e.viewport(0, 0, e.canvas.width, e.canvas.height), S = {}, K = null, Z = {}, M = {}, T = new WeakMap, C = [], I = null, R = !1, P = null, B = null, D = null, L = null, U = null, k = null, N = null, F = new wi(0, 0, 0), O = 0, z = !1, W = null, H = null, V = null, G = null, Q = null, ee.set(0, 0, e.canvas.width, e.canvas.height), te.set(0, 0, e.canvas.width, e.canvas.height), n.reset(), i.reset(), r.reset() + } + } + } + + function Xp(e, t, n, i, r, a, s) { + const o = t.has("WEBGL_multisampled_render_to_texture") ? t.get("WEBGL_multisampled_render_to_texture") : null, + l = "undefined" != typeof navigator && /OculusBrowser/g.test(navigator.userAgent), + c = new Et, + h = new WeakMap; + let u; + const d = new WeakMap; + let f = !1; + try { + f = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d") + } catch (e) {} + + function p(e, t) { + return f ? new OffscreenCanvas(e, t) : Ct("canvas") + } + + function m(e, t, n) { + let i = 1; + const r = ee(e); + if ((r.width > n || r.height > n) && (i = n / Math.max(r.width, r.height)), i < 1) { + if ("undefined" != typeof HTMLImageElement && e instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && e instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && e instanceof ImageBitmap || "undefined" != typeof VideoFrame && e instanceof VideoFrame) { + const n = Math.floor(i * r.width), + a = Math.floor(i * r.height); + void 0 === u && (u = p(n, a)); + const s = t ? p(n, a) : u; + s.width = n, s.height = a; + return s.getContext("2d").drawImage(e, 0, 0, n, a), console.warn("THREE.WebGLRenderer: Texture has been resized from (" + r.width + "x" + r.height + ") to (" + n + "x" + a + ")."), s + } + return "data" in e && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + r.width + "x" + r.height + ")."), e + } + return e + } + + function g(e) { + return e.generateMipmaps + } + + function A(t) { + e.generateMipmap(t) + } + + function _(t) { + return t.isWebGLCubeRenderTarget ? e.TEXTURE_CUBE_MAP : t.isWebGL3DRenderTarget ? e.TEXTURE_3D : t.isWebGLArrayRenderTarget || t.isCompressedArrayTexture ? e.TEXTURE_2D_ARRAY : e.TEXTURE_2D + } + + function v(n, i, r, a, s = !1) { + if (null !== n) { + if (void 0 !== e[n]) return e[n]; + console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'") + } + let o = i; + if (i === e.RED && (r === e.FLOAT && (o = e.R32F), r === e.HALF_FLOAT && (o = e.R16F), r === e.UNSIGNED_BYTE && (o = e.R8)), i === e.RED_INTEGER && (r === e.UNSIGNED_BYTE && (o = e.R8UI), r === e.UNSIGNED_SHORT && (o = e.R16UI), r === e.UNSIGNED_INT && (o = e.R32UI), r === e.BYTE && (o = e.R8I), r === e.SHORT && (o = e.R16I), r === e.INT && (o = e.R32I)), i === e.RG && (r === e.FLOAT && (o = e.RG32F), r === e.HALF_FLOAT && (o = e.RG16F), r === e.UNSIGNED_BYTE && (o = e.RG8)), i === e.RG_INTEGER && (r === e.UNSIGNED_BYTE && (o = e.RG8UI), r === e.UNSIGNED_SHORT && (o = e.RG16UI), r === e.UNSIGNED_INT && (o = e.RG32UI), r === e.BYTE && (o = e.RG8I), r === e.SHORT && (o = e.RG16I), r === e.INT && (o = e.RG32I)), i === e.RGB_INTEGER && (r === e.UNSIGNED_BYTE && (o = e.RGB8UI), r === e.UNSIGNED_SHORT && (o = e.RGB16UI), r === e.UNSIGNED_INT && (o = e.RGB32UI), r === e.BYTE && (o = e.RGB8I), r === e.SHORT && (o = e.RGB16I), r === e.INT && (o = e.RGB32I)), i === e.RGBA_INTEGER && (r === e.UNSIGNED_BYTE && (o = e.RGBA8UI), r === e.UNSIGNED_SHORT && (o = e.RGBA16UI), r === e.UNSIGNED_INT && (o = e.RGBA32UI), r === e.BYTE && (o = e.RGBA8I), r === e.SHORT && (o = e.RGBA16I), r === e.INT && (o = e.RGBA32I)), i === e.RGB && r === e.UNSIGNED_INT_5_9_9_9_REV && (o = e.RGB9_E5), i === e.RGBA) { + const t = s ? Ze : Ut.getTransfer(a); + r === e.FLOAT && (o = e.RGBA32F), r === e.HALF_FLOAT && (o = e.RGBA16F), r === e.UNSIGNED_BYTE && (o = t === Je ? e.SRGB8_ALPHA8 : e.RGBA8), r === e.UNSIGNED_SHORT_4_4_4_4 && (o = e.RGBA4), r === e.UNSIGNED_SHORT_5_5_5_1 && (o = e.RGB5_A1) + } + return o !== e.R16F && o !== e.R32F && o !== e.RG16F && o !== e.RG32F && o !== e.RGBA16F && o !== e.RGBA32F || t.get("EXT_color_buffer_float"), o + } + + function w(t, n) { + let i; + return t ? null === n || n === Z || n === ne ? i = e.DEPTH24_STENCIL8 : n === J ? i = e.DEPTH32F_STENCIL8 : n === Y && (i = e.DEPTH24_STENCIL8, console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")) : null === n || n === Z || n === ne ? i = e.DEPTH_COMPONENT24 : n === J ? i = e.DEPTH_COMPONENT32F : n === Y && (i = e.DEPTH_COMPONENT16), i + } + + function y(e, t) { + return !0 === g(e) || e.isFramebufferTexture && e.minFilter !== z && e.minFilter !== V ? Math.log2(Math.max(t.width, t.height)) + 1 : void 0 !== e.mipmaps && e.mipmaps.length > 0 ? e.mipmaps.length : e.isCompressedTexture && Array.isArray(e.image) ? t.mipmaps.length : 1 + } + + function x(e) { + const t = e.target; + t.removeEventListener("dispose", x), + function(e) { + const t = i.get(e); + if (void 0 === t.__webglInit) return; + const n = e.source, + r = d.get(n); + if (r) { + const i = r[t.__cacheKey]; + i.usedTimes--, 0 === i.usedTimes && E(e), 0 === Object.keys(r).length && d.delete(n) + } + i.remove(e) + }(t), t.isVideoTexture && h.delete(t) + } + + function b(t) { + const n = t.target; + n.removeEventListener("dispose", b), + function(t) { + const n = i.get(t); + t.depthTexture && (t.depthTexture.dispose(), i.remove(t.depthTexture)); + if (t.isWebGLCubeRenderTarget) + for (let t = 0; t < 6; t++) { + if (Array.isArray(n.__webglFramebuffer[t])) + for (let i = 0; i < n.__webglFramebuffer[t].length; i++) e.deleteFramebuffer(n.__webglFramebuffer[t][i]); + else e.deleteFramebuffer(n.__webglFramebuffer[t]); + n.__webglDepthbuffer && e.deleteRenderbuffer(n.__webglDepthbuffer[t]) + } else { + if (Array.isArray(n.__webglFramebuffer)) + for (let t = 0; t < n.__webglFramebuffer.length; t++) e.deleteFramebuffer(n.__webglFramebuffer[t]); + else e.deleteFramebuffer(n.__webglFramebuffer); + if (n.__webglDepthbuffer && e.deleteRenderbuffer(n.__webglDepthbuffer), n.__webglMultisampledFramebuffer && e.deleteFramebuffer(n.__webglMultisampledFramebuffer), n.__webglColorRenderbuffer) + for (let t = 0; t < n.__webglColorRenderbuffer.length; t++) n.__webglColorRenderbuffer[t] && e.deleteRenderbuffer(n.__webglColorRenderbuffer[t]); + n.__webglDepthRenderbuffer && e.deleteRenderbuffer(n.__webglDepthRenderbuffer) + } + const r = t.textures; + for (let t = 0, n = r.length; t < n; t++) { + const n = i.get(r[t]); + n.__webglTexture && (e.deleteTexture(n.__webglTexture), s.memory.textures--), i.remove(r[t]) + } + i.remove(t) + }(n) + } + + function E(t) { + const n = i.get(t); + e.deleteTexture(n.__webglTexture); + const r = t.source; + delete d.get(r)[n.__cacheKey], s.memory.textures-- + } + let S = 0; + + function M(t, r) { + const a = i.get(t); + if (t.isVideoTexture && function(e) { + const t = s.render.frame; + h.get(e) !== t && (h.set(e, t), e.update()) + }(t), !1 === t.isRenderTargetTexture && t.version > 0 && a.__version !== t.version) { + const e = t.image; + if (null === e) console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found."); + else { + if (!1 !== e.complete) return void B(a, t, r); + console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") + } + } + n.bindTexture(e.TEXTURE_2D, a.__webglTexture, e.TEXTURE0 + r) + } + const T = { + [N]: e.REPEAT, + [F]: e.CLAMP_TO_EDGE, + [O]: e.MIRRORED_REPEAT + }, + C = { + [z]: e.NEAREST, + [W]: e.NEAREST_MIPMAP_NEAREST, + [H]: e.NEAREST_MIPMAP_LINEAR, + [V]: e.LINEAR, + [G]: e.LINEAR_MIPMAP_NEAREST, + [Q]: e.LINEAR_MIPMAP_LINEAR + }, + I = { + [et]: e.NEVER, + [ot]: e.ALWAYS, + [tt]: e.LESS, + [it]: e.LEQUAL, + [nt]: e.EQUAL, + [st]: e.GEQUAL, + [rt]: e.GREATER, + [at]: e.NOTEQUAL + }; + + function R(n, a) { + if (a.type !== J || !1 !== t.has("OES_texture_float_linear") || a.magFilter !== V && a.magFilter !== G && a.magFilter !== H && a.magFilter !== Q && a.minFilter !== V && a.minFilter !== G && a.minFilter !== H && a.minFilter !== Q || console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."), e.texParameteri(n, e.TEXTURE_WRAP_S, T[a.wrapS]), e.texParameteri(n, e.TEXTURE_WRAP_T, T[a.wrapT]), n !== e.TEXTURE_3D && n !== e.TEXTURE_2D_ARRAY || e.texParameteri(n, e.TEXTURE_WRAP_R, T[a.wrapR]), e.texParameteri(n, e.TEXTURE_MAG_FILTER, C[a.magFilter]), e.texParameteri(n, e.TEXTURE_MIN_FILTER, C[a.minFilter]), a.compareFunction && (e.texParameteri(n, e.TEXTURE_COMPARE_MODE, e.COMPARE_REF_TO_TEXTURE), e.texParameteri(n, e.TEXTURE_COMPARE_FUNC, I[a.compareFunction])), !0 === t.has("EXT_texture_filter_anisotropic")) { + if (a.magFilter === z) return; + if (a.minFilter !== H && a.minFilter !== Q) return; + if (a.type === J && !1 === t.has("OES_texture_float_linear")) return; + if (a.anisotropy > 1 || i.get(a).__currentAnisotropy) { + const s = t.get("EXT_texture_filter_anisotropic"); + e.texParameterf(n, s.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(a.anisotropy, r.getMaxAnisotropy())), i.get(a).__currentAnisotropy = a.anisotropy + } + } + } + + function P(t, n) { + let i = !1; + void 0 === t.__webglInit && (t.__webglInit = !0, n.addEventListener("dispose", x)); + const r = n.source; + let a = d.get(r); + void 0 === a && (a = {}, d.set(r, a)); + const o = function(e) { + const t = []; + return t.push(e.wrapS), t.push(e.wrapT), t.push(e.wrapR || 0), t.push(e.magFilter), t.push(e.minFilter), t.push(e.anisotropy), t.push(e.internalFormat), t.push(e.format), t.push(e.type), t.push(e.generateMipmaps), t.push(e.premultiplyAlpha), t.push(e.flipY), t.push(e.unpackAlignment), t.push(e.colorSpace), t.join() + }(n); + if (o !== t.__cacheKey) { + void 0 === a[o] && (a[o] = { + texture: e.createTexture(), + usedTimes: 0 + }, s.memory.textures++, i = !0), a[o].usedTimes++; + const r = a[t.__cacheKey]; + void 0 !== r && (a[t.__cacheKey].usedTimes--, 0 === r.usedTimes && E(n)), t.__cacheKey = o, t.__webglTexture = a[o].texture + } + return i + } + + function B(t, s, o) { + let l = e.TEXTURE_2D; + (s.isDataArrayTexture || s.isCompressedArrayTexture) && (l = e.TEXTURE_2D_ARRAY), s.isData3DTexture && (l = e.TEXTURE_3D); + const c = P(t, s), + h = s.source; + n.bindTexture(l, t.__webglTexture, e.TEXTURE0 + o); + const u = i.get(h); + if (h.version !== u.__version || !0 === c) { + n.activeTexture(e.TEXTURE0 + o); + const t = Ut.getPrimaries(Ut.workingColorSpace), + i = s.colorSpace === qe ? null : Ut.getPrimaries(s.colorSpace), + d = s.colorSpace === qe || t === i ? e.NONE : e.BROWSER_DEFAULT_WEBGL; + e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, s.flipY), e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL, s.premultiplyAlpha), e.pixelStorei(e.UNPACK_ALIGNMENT, s.unpackAlignment), e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL, d); + let f = m(s.image, !1, r.maxTextureSize); + f = $(s, f); + const p = a.convert(s.format, s.colorSpace), + _ = a.convert(s.type); + let x, b = v(s.internalFormat, p, _, s.colorSpace, s.isVideoTexture); + R(l, s); + const E = s.mipmaps, + S = !0 !== s.isVideoTexture, + M = void 0 === u.__version || !0 === c, + T = h.dataReady, + C = y(s, f); + if (s.isDepthTexture) b = w(s.format === se, s.type), M && (S ? n.texStorage2D(e.TEXTURE_2D, 1, b, f.width, f.height) : n.texImage2D(e.TEXTURE_2D, 0, b, f.width, f.height, 0, p, _, null)); + else if (s.isDataTexture) + if (E.length > 0) { + S && M && n.texStorage2D(e.TEXTURE_2D, C, b, E[0].width, E[0].height); + for (let t = 0, i = E.length; t < i; t++) x = E[t], S ? T && n.texSubImage2D(e.TEXTURE_2D, t, 0, 0, x.width, x.height, p, _, x.data) : n.texImage2D(e.TEXTURE_2D, t, b, x.width, x.height, 0, p, _, x.data); + s.generateMipmaps = !1 + } else S ? (M && n.texStorage2D(e.TEXTURE_2D, C, b, f.width, f.height), T && n.texSubImage2D(e.TEXTURE_2D, 0, 0, 0, f.width, f.height, p, _, f.data)) : n.texImage2D(e.TEXTURE_2D, 0, b, f.width, f.height, 0, p, _, f.data); + else if (s.isCompressedTexture) + if (s.isCompressedArrayTexture) { + S && M && n.texStorage3D(e.TEXTURE_2D_ARRAY, C, b, E[0].width, E[0].height, f.depth); + for (let t = 0, i = E.length; t < i; t++) + if (x = E[t], s.format !== re) + if (null !== p) + if (S) { + if (T) + if (s.layerUpdates.size > 0) { + const i = Rs(x.width, x.height, s.format, s.type); + for (const r of s.layerUpdates) { + const a = x.data.subarray(r * i / x.data.BYTES_PER_ELEMENT, (r + 1) * i / x.data.BYTES_PER_ELEMENT); + n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY, t, 0, 0, r, x.width, x.height, 1, p, a) + } + s.clearLayerUpdates() + } else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY, t, 0, 0, 0, x.width, x.height, f.depth, p, x.data) + } else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY, t, b, x.width, x.height, f.depth, 0, x.data, 0, 0); + else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"); + else S ? T && n.texSubImage3D(e.TEXTURE_2D_ARRAY, t, 0, 0, 0, x.width, x.height, f.depth, p, _, x.data) : n.texImage3D(e.TEXTURE_2D_ARRAY, t, b, x.width, x.height, f.depth, 0, p, _, x.data) + } else { + S && M && n.texStorage2D(e.TEXTURE_2D, C, b, E[0].width, E[0].height); + for (let t = 0, i = E.length; t < i; t++) x = E[t], s.format !== re ? null !== p ? S ? T && n.compressedTexSubImage2D(e.TEXTURE_2D, t, 0, 0, x.width, x.height, p, x.data) : n.compressedTexImage2D(e.TEXTURE_2D, t, b, x.width, x.height, 0, x.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : S ? T && n.texSubImage2D(e.TEXTURE_2D, t, 0, 0, x.width, x.height, p, _, x.data) : n.texImage2D(e.TEXTURE_2D, t, b, x.width, x.height, 0, p, _, x.data) + } + else if (s.isDataArrayTexture) + if (S) { + if (M && n.texStorage3D(e.TEXTURE_2D_ARRAY, C, b, f.width, f.height, f.depth), T) + if (s.layerUpdates.size > 0) { + const t = Rs(f.width, f.height, s.format, s.type); + for (const i of s.layerUpdates) { + const r = f.data.subarray(i * t / f.data.BYTES_PER_ELEMENT, (i + 1) * t / f.data.BYTES_PER_ELEMENT); + n.texSubImage3D(e.TEXTURE_2D_ARRAY, 0, 0, 0, i, f.width, f.height, 1, p, _, r) + } + s.clearLayerUpdates() + } else n.texSubImage3D(e.TEXTURE_2D_ARRAY, 0, 0, 0, 0, f.width, f.height, f.depth, p, _, f.data) + } else n.texImage3D(e.TEXTURE_2D_ARRAY, 0, b, f.width, f.height, f.depth, 0, p, _, f.data); + else if (s.isData3DTexture) S ? (M && n.texStorage3D(e.TEXTURE_3D, C, b, f.width, f.height, f.depth), T && n.texSubImage3D(e.TEXTURE_3D, 0, 0, 0, 0, f.width, f.height, f.depth, p, _, f.data)) : n.texImage3D(e.TEXTURE_3D, 0, b, f.width, f.height, f.depth, 0, p, _, f.data); + else if (s.isFramebufferTexture) { + if (M) + if (S) n.texStorage2D(e.TEXTURE_2D, C, b, f.width, f.height); + else { + let t = f.width, + i = f.height; + for (let r = 0; r < C; r++) n.texImage2D(e.TEXTURE_2D, r, b, t, i, 0, p, _, null), t >>= 1, i >>= 1 + } + } else if (E.length > 0) { + if (S && M) { + const t = ee(E[0]); + n.texStorage2D(e.TEXTURE_2D, C, b, t.width, t.height) + } + for (let t = 0, i = E.length; t < i; t++) x = E[t], S ? T && n.texSubImage2D(e.TEXTURE_2D, t, 0, 0, p, _, x) : n.texImage2D(e.TEXTURE_2D, t, b, p, _, x); + s.generateMipmaps = !1 + } else if (S) { + if (M) { + const t = ee(f); + n.texStorage2D(e.TEXTURE_2D, C, b, t.width, t.height) + } + T && n.texSubImage2D(e.TEXTURE_2D, 0, 0, 0, p, _, f) + } else n.texImage2D(e.TEXTURE_2D, 0, b, p, _, f); + g(s) && A(l), u.__version = h.version, s.onUpdate && s.onUpdate(s) + } + t.__version = s.version + } + + function D(t, r, s, l, c, h) { + const u = a.convert(s.format, s.colorSpace), + d = a.convert(s.type), + f = v(s.internalFormat, u, d, s.colorSpace), + p = i.get(r), + m = i.get(s); + if (m.__renderTarget = r, !p.__hasExternalTextures) { + const t = Math.max(1, r.width >> h), + i = Math.max(1, r.height >> h); + c === e.TEXTURE_3D || c === e.TEXTURE_2D_ARRAY ? n.texImage3D(c, h, f, t, i, r.depth, 0, u, d, null) : n.texImage2D(c, h, f, t, i, 0, u, d, null) + } + n.bindFramebuffer(e.FRAMEBUFFER, t), K(r) ? o.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER, l, c, m.__webglTexture, 0, q(r)) : (c === e.TEXTURE_2D || c >= e.TEXTURE_CUBE_MAP_POSITIVE_X && c <= e.TEXTURE_CUBE_MAP_NEGATIVE_Z) && e.framebufferTexture2D(e.FRAMEBUFFER, l, c, m.__webglTexture, h), n.bindFramebuffer(e.FRAMEBUFFER, null) + } + + function L(t, n, i) { + if (e.bindRenderbuffer(e.RENDERBUFFER, t), n.depthBuffer) { + const r = n.depthTexture, + a = r && r.isDepthTexture ? r.type : null, + s = w(n.stencilBuffer, a), + l = n.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT, + c = q(n); + K(n) ? o.renderbufferStorageMultisampleEXT(e.RENDERBUFFER, c, s, n.width, n.height) : i ? e.renderbufferStorageMultisample(e.RENDERBUFFER, c, s, n.width, n.height) : e.renderbufferStorage(e.RENDERBUFFER, s, n.width, n.height), e.framebufferRenderbuffer(e.FRAMEBUFFER, l, e.RENDERBUFFER, t) + } else { + const t = n.textures; + for (let r = 0; r < t.length; r++) { + const s = t[r], + l = a.convert(s.format, s.colorSpace), + c = a.convert(s.type), + h = v(s.internalFormat, l, c, s.colorSpace), + u = q(n); + i && !1 === K(n) ? e.renderbufferStorageMultisample(e.RENDERBUFFER, u, h, n.width, n.height) : K(n) ? o.renderbufferStorageMultisampleEXT(e.RENDERBUFFER, u, h, n.width, n.height) : e.renderbufferStorage(e.RENDERBUFFER, h, n.width, n.height) + } + } + e.bindRenderbuffer(e.RENDERBUFFER, null) + } + + function U(t) { + const r = i.get(t), + a = !0 === t.isWebGLCubeRenderTarget; + if (r.__boundDepthTexture !== t.depthTexture) { + const e = t.depthTexture; + if (r.__depthDisposeCallback && r.__depthDisposeCallback(), e) { + const t = () => { + delete r.__boundDepthTexture, delete r.__depthDisposeCallback, e.removeEventListener("dispose", t) + }; + e.addEventListener("dispose", t), r.__depthDisposeCallback = t + } + r.__boundDepthTexture = e + } + if (t.depthTexture && !r.__autoAllocateDepthBuffer) { + if (a) throw new Error("target.depthTexture not supported in Cube render targets"); + ! function(t, r) { + if (r && r.isWebGLCubeRenderTarget) throw new Error("Depth Texture with cube render targets is not supported"); + if (n.bindFramebuffer(e.FRAMEBUFFER, t), !r.depthTexture || !r.depthTexture.isDepthTexture) throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + const a = i.get(r.depthTexture); + a.__renderTarget = r, a.__webglTexture && r.depthTexture.image.width === r.width && r.depthTexture.image.height === r.height || (r.depthTexture.image.width = r.width, r.depthTexture.image.height = r.height, r.depthTexture.needsUpdate = !0), M(r.depthTexture, 0); + const s = a.__webglTexture, + l = q(r); + if (r.depthTexture.format === ae) K(r) ? o.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER, e.DEPTH_ATTACHMENT, e.TEXTURE_2D, s, 0, l) : e.framebufferTexture2D(e.FRAMEBUFFER, e.DEPTH_ATTACHMENT, e.TEXTURE_2D, s, 0); + else { + if (r.depthTexture.format !== se) throw new Error("Unknown depthTexture format"); + K(r) ? o.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER, e.DEPTH_STENCIL_ATTACHMENT, e.TEXTURE_2D, s, 0, l) : e.framebufferTexture2D(e.FRAMEBUFFER, e.DEPTH_STENCIL_ATTACHMENT, e.TEXTURE_2D, s, 0) + } + }(r.__webglFramebuffer, t) + } else if (a) { + r.__webglDepthbuffer = []; + for (let i = 0; i < 6; i++) + if (n.bindFramebuffer(e.FRAMEBUFFER, r.__webglFramebuffer[i]), void 0 === r.__webglDepthbuffer[i]) r.__webglDepthbuffer[i] = e.createRenderbuffer(), L(r.__webglDepthbuffer[i], t, !1); + else { + const n = t.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT, + a = r.__webglDepthbuffer[i]; + e.bindRenderbuffer(e.RENDERBUFFER, a), e.framebufferRenderbuffer(e.FRAMEBUFFER, n, e.RENDERBUFFER, a) + } + } else if (n.bindFramebuffer(e.FRAMEBUFFER, r.__webglFramebuffer), void 0 === r.__webglDepthbuffer) r.__webglDepthbuffer = e.createRenderbuffer(), L(r.__webglDepthbuffer, t, !1); + else { + const n = t.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT, + i = r.__webglDepthbuffer; + e.bindRenderbuffer(e.RENDERBUFFER, i), e.framebufferRenderbuffer(e.FRAMEBUFFER, n, e.RENDERBUFFER, i) + } + n.bindFramebuffer(e.FRAMEBUFFER, null) + } + const k = [], + j = []; + + function q(e) { + return Math.min(r.maxSamples, e.samples) + } + + function K(e) { + const n = i.get(e); + return e.samples > 0 && !0 === t.has("WEBGL_multisampled_render_to_texture") && !1 !== n.__useRenderToTexture + } + + function $(e, t) { + const n = e.colorSpace, + i = e.format, + r = e.type; + return !0 === e.isCompressedTexture || !0 === e.isVideoTexture || n !== Ke && n !== qe && (Ut.getTransfer(n) === Je ? i === re && r === X || console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.") : console.error("THREE.WebGLTextures: Unsupported texture color space:", n)), t + } + + function ee(e) { + return "undefined" != typeof HTMLImageElement && e instanceof HTMLImageElement ? (c.width = e.naturalWidth || e.width, c.height = e.naturalHeight || e.height) : "undefined" != typeof VideoFrame && e instanceof VideoFrame ? (c.width = e.displayWidth, c.height = e.displayHeight) : (c.width = e.width, c.height = e.height), c + } + this.allocateTextureUnit = function() { + const e = S; + return e >= r.maxTextures && console.warn("THREE.WebGLTextures: Trying to use " + e + " texture units while this GPU supports only " + r.maxTextures), S += 1, e + }, this.resetTextureUnits = function() { + S = 0 + }, this.setTexture2D = M, this.setTexture2DArray = function(t, r) { + const a = i.get(t); + t.version > 0 && a.__version !== t.version ? B(a, t, r) : n.bindTexture(e.TEXTURE_2D_ARRAY, a.__webglTexture, e.TEXTURE0 + r) + }, this.setTexture3D = function(t, r) { + const a = i.get(t); + t.version > 0 && a.__version !== t.version ? B(a, t, r) : n.bindTexture(e.TEXTURE_3D, a.__webglTexture, e.TEXTURE0 + r) + }, this.setTextureCube = function(t, s) { + const o = i.get(t); + t.version > 0 && o.__version !== t.version ? function(t, s, o) { + if (6 !== s.image.length) return; + const l = P(t, s), + c = s.source; + n.bindTexture(e.TEXTURE_CUBE_MAP, t.__webglTexture, e.TEXTURE0 + o); + const h = i.get(c); + if (c.version !== h.__version || !0 === l) { + n.activeTexture(e.TEXTURE0 + o); + const t = Ut.getPrimaries(Ut.workingColorSpace), + i = s.colorSpace === qe ? null : Ut.getPrimaries(s.colorSpace), + u = s.colorSpace === qe || t === i ? e.NONE : e.BROWSER_DEFAULT_WEBGL; + e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, s.flipY), e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL, s.premultiplyAlpha), e.pixelStorei(e.UNPACK_ALIGNMENT, s.unpackAlignment), e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL, u); + const d = s.isCompressedTexture || s.image[0].isCompressedTexture, + f = s.image[0] && s.image[0].isDataTexture, + p = []; + for (let e = 0; e < 6; e++) p[e] = d || f ? f ? s.image[e].image : s.image[e] : m(s.image[e], !0, r.maxCubemapSize), p[e] = $(s, p[e]); + const _ = p[0], + w = a.convert(s.format, s.colorSpace), + x = a.convert(s.type), + b = v(s.internalFormat, w, x, s.colorSpace), + E = !0 !== s.isVideoTexture, + S = void 0 === h.__version || !0 === l, + M = c.dataReady; + let T, C = y(s, _); + if (R(e.TEXTURE_CUBE_MAP, s), d) { + E && S && n.texStorage2D(e.TEXTURE_CUBE_MAP, C, b, _.width, _.height); + for (let t = 0; t < 6; t++) { + T = p[t].mipmaps; + for (let i = 0; i < T.length; i++) { + const r = T[i]; + s.format !== re ? null !== w ? E ? M && n.compressedTexSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i, 0, 0, r.width, r.height, w, r.data) : n.compressedTexImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i, b, r.width, r.height, 0, r.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i, 0, 0, r.width, r.height, w, x, r.data) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i, b, r.width, r.height, 0, w, x, r.data) + } + } + } else { + if (T = s.mipmaps, E && S) { + T.length > 0 && C++; + const t = ee(p[0]); + n.texStorage2D(e.TEXTURE_CUBE_MAP, C, b, t.width, t.height) + } + for (let t = 0; t < 6; t++) + if (f) { + E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, 0, 0, 0, p[t].width, p[t].height, w, x, p[t].data) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, 0, b, p[t].width, p[t].height, 0, w, x, p[t].data); + for (let i = 0; i < T.length; i++) { + const r = T[i].image[t].image; + E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i + 1, 0, 0, r.width, r.height, w, x, r.data) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i + 1, b, r.width, r.height, 0, w, x, r.data) + } + } else { + E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, 0, 0, 0, w, x, p[t]) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, 0, b, w, x, p[t]); + for (let i = 0; i < T.length; i++) { + const r = T[i]; + E ? M && n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i + 1, 0, 0, w, x, r.image[t]) : n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X + t, i + 1, b, w, x, r.image[t]) + } + } + } + g(s) && A(e.TEXTURE_CUBE_MAP), h.__version = c.version, s.onUpdate && s.onUpdate(s) + } + t.__version = s.version + }(o, t, s) : n.bindTexture(e.TEXTURE_CUBE_MAP, o.__webglTexture, e.TEXTURE0 + s) + }, this.rebindTextures = function(t, n, r) { + const a = i.get(t); + void 0 !== n && D(a.__webglFramebuffer, t, t.texture, e.COLOR_ATTACHMENT0, e.TEXTURE_2D, 0), void 0 !== r && U(t) + }, this.setupRenderTarget = function(t) { + const r = t.texture, + o = i.get(t), + l = i.get(r); + t.addEventListener("dispose", b); + const c = t.textures, + h = !0 === t.isWebGLCubeRenderTarget, + u = c.length > 1; + if (u || (void 0 === l.__webglTexture && (l.__webglTexture = e.createTexture()), l.__version = r.version, s.memory.textures++), h) { + o.__webglFramebuffer = []; + for (let t = 0; t < 6; t++) + if (r.mipmaps && r.mipmaps.length > 0) { + o.__webglFramebuffer[t] = []; + for (let n = 0; n < r.mipmaps.length; n++) o.__webglFramebuffer[t][n] = e.createFramebuffer() + } else o.__webglFramebuffer[t] = e.createFramebuffer() + } else { + if (r.mipmaps && r.mipmaps.length > 0) { + o.__webglFramebuffer = []; + for (let t = 0; t < r.mipmaps.length; t++) o.__webglFramebuffer[t] = e.createFramebuffer() + } else o.__webglFramebuffer = e.createFramebuffer(); + if (u) + for (let t = 0, n = c.length; t < n; t++) { + const n = i.get(c[t]); + void 0 === n.__webglTexture && (n.__webglTexture = e.createTexture(), s.memory.textures++) + } + if (t.samples > 0 && !1 === K(t)) { + o.__webglMultisampledFramebuffer = e.createFramebuffer(), o.__webglColorRenderbuffer = [], n.bindFramebuffer(e.FRAMEBUFFER, o.__webglMultisampledFramebuffer); + for (let n = 0; n < c.length; n++) { + const i = c[n]; + o.__webglColorRenderbuffer[n] = e.createRenderbuffer(), e.bindRenderbuffer(e.RENDERBUFFER, o.__webglColorRenderbuffer[n]); + const r = a.convert(i.format, i.colorSpace), + s = a.convert(i.type), + l = v(i.internalFormat, r, s, i.colorSpace, !0 === t.isXRRenderTarget), + h = q(t); + e.renderbufferStorageMultisample(e.RENDERBUFFER, h, l, t.width, t.height), e.framebufferRenderbuffer(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0 + n, e.RENDERBUFFER, o.__webglColorRenderbuffer[n]) + } + e.bindRenderbuffer(e.RENDERBUFFER, null), t.depthBuffer && (o.__webglDepthRenderbuffer = e.createRenderbuffer(), L(o.__webglDepthRenderbuffer, t, !0)), n.bindFramebuffer(e.FRAMEBUFFER, null) + } + } + if (h) { + n.bindTexture(e.TEXTURE_CUBE_MAP, l.__webglTexture), R(e.TEXTURE_CUBE_MAP, r); + for (let n = 0; n < 6; n++) + if (r.mipmaps && r.mipmaps.length > 0) + for (let i = 0; i < r.mipmaps.length; i++) D(o.__webglFramebuffer[n][i], t, r, e.COLOR_ATTACHMENT0, e.TEXTURE_CUBE_MAP_POSITIVE_X + n, i); + else D(o.__webglFramebuffer[n], t, r, e.COLOR_ATTACHMENT0, e.TEXTURE_CUBE_MAP_POSITIVE_X + n, 0); + g(r) && A(e.TEXTURE_CUBE_MAP), n.unbindTexture() + } else if (u) { + for (let r = 0, a = c.length; r < a; r++) { + const a = c[r], + s = i.get(a); + n.bindTexture(e.TEXTURE_2D, s.__webglTexture), R(e.TEXTURE_2D, a), D(o.__webglFramebuffer, t, a, e.COLOR_ATTACHMENT0 + r, e.TEXTURE_2D, 0), g(a) && A(e.TEXTURE_2D) + } + n.unbindTexture() + } else { + let i = e.TEXTURE_2D; + if ((t.isWebGL3DRenderTarget || t.isWebGLArrayRenderTarget) && (i = t.isWebGL3DRenderTarget ? e.TEXTURE_3D : e.TEXTURE_2D_ARRAY), n.bindTexture(i, l.__webglTexture), R(i, r), r.mipmaps && r.mipmaps.length > 0) + for (let n = 0; n < r.mipmaps.length; n++) D(o.__webglFramebuffer[n], t, r, e.COLOR_ATTACHMENT0, i, n); + else D(o.__webglFramebuffer, t, r, e.COLOR_ATTACHMENT0, i, 0); + g(r) && A(i), n.unbindTexture() + } + t.depthBuffer && U(t) + }, this.updateRenderTargetMipmap = function(e) { + const t = e.textures; + for (let r = 0, a = t.length; r < a; r++) { + const a = t[r]; + if (g(a)) { + const t = _(e), + r = i.get(a).__webglTexture; + n.bindTexture(t, r), A(t), n.unbindTexture() + } + } + }, this.updateMultisampleRenderTarget = function(t) { + if (t.samples > 0) + if (!1 === K(t)) { + const r = t.textures, + a = t.width, + s = t.height; + let o = e.COLOR_BUFFER_BIT; + const c = t.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT, + h = i.get(t), + u = r.length > 1; + if (u) + for (let t = 0; t < r.length; t++) n.bindFramebuffer(e.FRAMEBUFFER, h.__webglMultisampledFramebuffer), e.framebufferRenderbuffer(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0 + t, e.RENDERBUFFER, null), n.bindFramebuffer(e.FRAMEBUFFER, h.__webglFramebuffer), e.framebufferTexture2D(e.DRAW_FRAMEBUFFER, e.COLOR_ATTACHMENT0 + t, e.TEXTURE_2D, null, 0); + n.bindFramebuffer(e.READ_FRAMEBUFFER, h.__webglMultisampledFramebuffer), n.bindFramebuffer(e.DRAW_FRAMEBUFFER, h.__webglFramebuffer); + for (let n = 0; n < r.length; n++) { + if (t.resolveDepthBuffer && (t.depthBuffer && (o |= e.DEPTH_BUFFER_BIT), t.stencilBuffer && t.resolveStencilBuffer && (o |= e.STENCIL_BUFFER_BIT)), u) { + e.framebufferRenderbuffer(e.READ_FRAMEBUFFER, e.COLOR_ATTACHMENT0, e.RENDERBUFFER, h.__webglColorRenderbuffer[n]); + const t = i.get(r[n]).__webglTexture; + e.framebufferTexture2D(e.DRAW_FRAMEBUFFER, e.COLOR_ATTACHMENT0, e.TEXTURE_2D, t, 0) + } + e.blitFramebuffer(0, 0, a, s, 0, 0, a, s, o, e.NEAREST), !0 === l && (k.length = 0, j.length = 0, k.push(e.COLOR_ATTACHMENT0 + n), t.depthBuffer && !1 === t.resolveDepthBuffer && (k.push(c), j.push(c), e.invalidateFramebuffer(e.DRAW_FRAMEBUFFER, j)), e.invalidateFramebuffer(e.READ_FRAMEBUFFER, k)) + } + if (n.bindFramebuffer(e.READ_FRAMEBUFFER, null), n.bindFramebuffer(e.DRAW_FRAMEBUFFER, null), u) + for (let t = 0; t < r.length; t++) { + n.bindFramebuffer(e.FRAMEBUFFER, h.__webglMultisampledFramebuffer), e.framebufferRenderbuffer(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0 + t, e.RENDERBUFFER, h.__webglColorRenderbuffer[t]); + const a = i.get(r[t]).__webglTexture; + n.bindFramebuffer(e.FRAMEBUFFER, h.__webglFramebuffer), e.framebufferTexture2D(e.DRAW_FRAMEBUFFER, e.COLOR_ATTACHMENT0 + t, e.TEXTURE_2D, a, 0) + } + n.bindFramebuffer(e.DRAW_FRAMEBUFFER, h.__webglMultisampledFramebuffer) + } else if (t.depthBuffer && !1 === t.resolveDepthBuffer && l) { + const n = t.stencilBuffer ? e.DEPTH_STENCIL_ATTACHMENT : e.DEPTH_ATTACHMENT; + e.invalidateFramebuffer(e.DRAW_FRAMEBUFFER, [n]) + } + }, this.setupDepthRenderbuffer = U, this.setupFrameBufferTexture = D, this.useMultisampledRTT = K + } + + function jp(e, t) { + return { + convert: function(n, i = "") { + let r; + const a = Ut.getTransfer(i); + if (n === X) return e.UNSIGNED_BYTE; + if (n === ee) return e.UNSIGNED_SHORT_4_4_4_4; + if (n === te) return e.UNSIGNED_SHORT_5_5_5_1; + if (n === ie) return e.UNSIGNED_INT_5_9_9_9_REV; + if (n === j) return e.BYTE; + if (n === q) return e.SHORT; + if (n === Y) return e.UNSIGNED_SHORT; + if (n === K) return e.INT; + if (n === Z) return e.UNSIGNED_INT; + if (n === J) return e.FLOAT; + if (n === $) return e.HALF_FLOAT; + if (1021 === n) return e.ALPHA; + if (1022 === n) return e.RGB; + if (n === re) return e.RGBA; + if (1024 === n) return e.LUMINANCE; + if (1025 === n) return e.LUMINANCE_ALPHA; + if (n === ae) return e.DEPTH_COMPONENT; + if (n === se) return e.DEPTH_STENCIL; + if (n === oe) return e.RED; + if (n === le) return e.RED_INTEGER; + if (1030 === n) return e.RG; + if (n === ce) return e.RG_INTEGER; + if (n === he) return e.RGBA_INTEGER; + if (n === ue || n === de || n === fe || n === pe) + if (a === Je) { + if (r = t.get("WEBGL_compressed_texture_s3tc_srgb"), null === r) return null; + if (n === ue) return r.COMPRESSED_SRGB_S3TC_DXT1_EXT; + if (n === de) return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; + if (n === fe) return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; + if (n === pe) return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT + } else { + if (r = t.get("WEBGL_compressed_texture_s3tc"), null === r) return null; + if (n === ue) return r.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (n === de) return r.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (n === fe) return r.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (n === pe) return r.COMPRESSED_RGBA_S3TC_DXT5_EXT + } if (n === me || n === ge || n === Ae || n === _e) { + if (r = t.get("WEBGL_compressed_texture_pvrtc"), null === r) return null; + if (n === me) return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (n === ge) return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (n === Ae) return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (n === _e) return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG + } + if (n === ve || n === we || n === ye) { + if (r = t.get("WEBGL_compressed_texture_etc"), null === r) return null; + if (n === ve || n === we) return a === Je ? r.COMPRESSED_SRGB8_ETC2 : r.COMPRESSED_RGB8_ETC2; + if (n === ye) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : r.COMPRESSED_RGBA8_ETC2_EAC + } + if (n === xe || n === be || n === Ee || n === Se || n === Me || n === Te || n === Ce || n === Ie || n === Re || n === Pe || n === Be || n === De || n === Le || n === Ue) { + if (r = t.get("WEBGL_compressed_texture_astc"), null === r) return null; + if (n === xe) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : r.COMPRESSED_RGBA_ASTC_4x4_KHR; + if (n === be) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : r.COMPRESSED_RGBA_ASTC_5x4_KHR; + if (n === Ee) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : r.COMPRESSED_RGBA_ASTC_5x5_KHR; + if (n === Se) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : r.COMPRESSED_RGBA_ASTC_6x5_KHR; + if (n === Me) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : r.COMPRESSED_RGBA_ASTC_6x6_KHR; + if (n === Te) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : r.COMPRESSED_RGBA_ASTC_8x5_KHR; + if (n === Ce) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : r.COMPRESSED_RGBA_ASTC_8x6_KHR; + if (n === Ie) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : r.COMPRESSED_RGBA_ASTC_8x8_KHR; + if (n === Re) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : r.COMPRESSED_RGBA_ASTC_10x5_KHR; + if (n === Pe) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : r.COMPRESSED_RGBA_ASTC_10x6_KHR; + if (n === Be) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : r.COMPRESSED_RGBA_ASTC_10x8_KHR; + if (n === De) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : r.COMPRESSED_RGBA_ASTC_10x10_KHR; + if (n === Le) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : r.COMPRESSED_RGBA_ASTC_12x10_KHR; + if (n === Ue) return a === Je ? r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : r.COMPRESSED_RGBA_ASTC_12x12_KHR + } + if (n === ke || n === Ne || n === Fe) { + if (r = t.get("EXT_texture_compression_bptc"), null === r) return null; + if (n === ke) return a === Je ? r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : r.COMPRESSED_RGBA_BPTC_UNORM_EXT; + if (n === Ne) return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT; + if (n === Fe) return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT + } + if (36283 === n || n === Oe || n === ze || n === We) { + if (r = t.get("EXT_texture_compression_rgtc"), null === r) return null; + if (n === ke) return r.COMPRESSED_RED_RGTC1_EXT; + if (n === Oe) return r.COMPRESSED_SIGNED_RED_RGTC1_EXT; + if (n === ze) return r.COMPRESSED_RED_GREEN_RGTC2_EXT; + if (n === We) return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT + } + return n === ne ? e.UNSIGNED_INT_24_8 : void 0 !== e[n] ? e[n] : null + } + } + } + class qp { + constructor() { + this.texture = null, this.mesh = null, this.depthNear = 0, this.depthFar = 0 + } + init(e, t, n) { + if (null === this.texture) { + const i = new Gt; + e.properties.get(i).__webglTexture = t.texture, t.depthNear === n.depthNear && t.depthFar === n.depthFar || (this.depthNear = t.depthNear, this.depthFar = t.depthFar), this.texture = i + } + } + getMesh(e) { + if (null !== this.texture && null === this.mesh) { + const t = e.cameras[0].viewport, + n = new rr({ + vertexShader: "\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}", + fragmentShader: "\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}", + uniforms: { + depthColor: { + value: this.texture + }, + depthWidth: { + value: t.z + }, + depthHeight: { + value: t.w + } + } + }); + this.mesh = new Zi(new ya(20, 20), n) + } + return this.mesh + } + reset() { + this.texture = null, this.mesh = null + } + getDepthTexture() { + return this.texture + } + } + class Yp extends dt { + constructor(e, t) { + super(); + const n = this; + let i = null, + r = 1, + a = null, + s = "local-floor", + o = 1, + l = null, + c = null, + h = null, + u = null, + d = null, + f = null; + const p = new qp, + m = t.getContextAttributes(); + let g = null, + A = null; + const _ = [], + v = [], + w = new Et; + let y = null; + const x = new cr; + x.viewport = new Qt; + const b = new cr; + b.viewport = new Qt; + const E = [x, b], + S = new _s; + let M = null, + T = null; + + function C(e) { + const t = v.indexOf(e.inputSource); + if (-1 === t) return; + const n = _[t]; + void 0 !== n && (n.update(e.inputSource, e.frame, l || a), n.dispatchEvent({ + type: e.type, + data: e.inputSource + })) + } + + function I() { + i.removeEventListener("select", C), i.removeEventListener("selectstart", C), i.removeEventListener("selectend", C), i.removeEventListener("squeeze", C), i.removeEventListener("squeezestart", C), i.removeEventListener("squeezeend", C), i.removeEventListener("end", I), i.removeEventListener("inputsourceschange", R); + for (let e = 0; e < _.length; e++) { + const t = v[e]; + null !== t && (v[e] = null, _[e].disconnect(t)) + } + M = null, T = null, p.reset(), e.setRenderTarget(g), d = null, u = null, h = null, i = null, A = null, U.stop(), n.isPresenting = !1, e.setPixelRatio(y), e.setSize(w.width, w.height, !1), n.dispatchEvent({ + type: "sessionend" + }) + } + + function R(e) { + for (let t = 0; t < e.removed.length; t++) { + const n = e.removed[t], + i = v.indexOf(n); + i >= 0 && (v[i] = null, _[i].disconnect(n)) + } + for (let t = 0; t < e.added.length; t++) { + const n = e.added[t]; + let i = v.indexOf(n); + if (-1 === i) { + for (let e = 0; e < _.length; e++) { + if (e >= v.length) { + v.push(n), i = e; + break + } + if (null === v[e]) { + v[e] = n, i = e; + break + } + } + if (-1 === i) break + } + const r = _[i]; + r && r.connect(n) + } + } + this.cameraAutoUpdate = !0, this.enabled = !1, this.isPresenting = !1, this.getController = function(e) { + let t = _[e]; + return void 0 === t && (t = new gr, _[e] = t), t.getTargetRaySpace() + }, this.getControllerGrip = function(e) { + let t = _[e]; + return void 0 === t && (t = new gr, _[e] = t), t.getGripSpace() + }, this.getHand = function(e) { + let t = _[e]; + return void 0 === t && (t = new gr, _[e] = t), t.getHandSpace() + }, this.setFramebufferScaleFactor = function(e) { + r = e, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.") + }, this.setReferenceSpaceType = function(e) { + s = e, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.") + }, this.getReferenceSpace = function() { + return l || a + }, this.setReferenceSpace = function(e) { + l = e + }, this.getBaseLayer = function() { + return null !== u ? u : d + }, this.getBinding = function() { + return h + }, this.getFrame = function() { + return f + }, this.getSession = function() { + return i + }, this.setSession = async function(c) { + if (i = c, null !== i) { + g = e.getRenderTarget(), i.addEventListener("select", C), i.addEventListener("selectstart", C), i.addEventListener("selectend", C), i.addEventListener("squeeze", C), i.addEventListener("squeezestart", C), i.addEventListener("squeezeend", C), i.addEventListener("end", I), i.addEventListener("inputsourceschange", R), !0 !== m.xrCompatible && await t.makeXRCompatible(), y = e.getPixelRatio(), e.getSize(w); + if ("undefined" != typeof XRWebGLBinding && "createProjectionLayer" in XRWebGLBinding.prototype) { + let n = null, + a = null, + s = null; + m.depth && (s = m.stencil ? t.DEPTH24_STENCIL8 : t.DEPTH_COMPONENT24, n = m.stencil ? se : ae, a = m.stencil ? ne : Z); + const o = { + colorFormat: t.RGBA8, + depthFormat: s, + scaleFactor: r + }; + h = new XRWebGLBinding(i, t), u = h.createProjectionLayer(o), i.updateRenderState({ + layers: [u] + }), e.setPixelRatio(1), e.setSize(u.textureWidth, u.textureHeight, !1), A = new jt(u.textureWidth, u.textureHeight, { + format: re, + type: X, + depthTexture: new wa(u.textureWidth, u.textureHeight, a, void 0, void 0, void 0, void 0, void 0, void 0, n), + stencilBuffer: m.stencil, + colorSpace: e.outputColorSpace, + samples: m.antialias ? 4 : 0, + resolveDepthBuffer: !1 === u.ignoreDepthValues, + resolveStencilBuffer: !1 === u.ignoreDepthValues + }) + } else { + const n = { + antialias: m.antialias, + alpha: !0, + depth: m.depth, + stencil: m.stencil, + framebufferScaleFactor: r + }; + d = new XRWebGLLayer(i, t, n), i.updateRenderState({ + baseLayer: d + }), e.setPixelRatio(1), e.setSize(d.framebufferWidth, d.framebufferHeight, !1), A = new jt(d.framebufferWidth, d.framebufferHeight, { + format: re, + type: X, + colorSpace: e.outputColorSpace, + stencilBuffer: m.stencil, + resolveDepthBuffer: !1 === d.ignoreDepthValues, + resolveStencilBuffer: !1 === d.ignoreDepthValues + }) + } + A.isXRRenderTarget = !0, this.setFoveation(o), l = null, a = await i.requestReferenceSpace(s), U.setContext(i), U.start(), n.isPresenting = !0, n.dispatchEvent({ + type: "sessionstart" + }) + } + }, this.getEnvironmentBlendMode = function() { + if (null !== i) return i.environmentBlendMode + }, this.getDepthTexture = function() { + return p.getDepthTexture() + }; + const P = new Zt, + B = new Zt; + + function D(e, t) { + null === t ? e.matrixWorld.copy(e.matrix) : e.matrixWorld.multiplyMatrices(t.matrixWorld, e.matrix), e.matrixWorldInverse.copy(e.matrixWorld).invert() + } + this.updateCamera = function(e) { + if (null === i) return; + let t = e.near, + n = e.far; + null !== p.texture && (p.depthNear > 0 && (t = p.depthNear), p.depthFar > 0 && (n = p.depthFar)), S.near = b.near = x.near = t, S.far = b.far = x.far = n, M === S.near && T === S.far || (i.updateRenderState({ + depthNear: S.near, + depthFar: S.far + }), M = S.near, T = S.far), x.layers.mask = 2 | e.layers.mask, b.layers.mask = 4 | e.layers.mask, S.layers.mask = x.layers.mask | b.layers.mask; + const r = e.parent, + a = S.cameras; + D(S, r); + for (let e = 0; e < a.length; e++) D(a[e], r); + 2 === a.length ? function(e, t, n) { + P.setFromMatrixPosition(t.matrixWorld), B.setFromMatrixPosition(n.matrixWorld); + const i = P.distanceTo(B), + r = t.projectionMatrix.elements, + a = n.projectionMatrix.elements, + s = r[14] / (r[10] - 1), + o = r[14] / (r[10] + 1), + l = (r[9] + 1) / r[5], + c = (r[9] - 1) / r[5], + h = (r[8] - 1) / r[0], + u = (a[8] + 1) / a[0], + d = s * h, + f = s * u, + p = i / (-h + u), + m = p * -h; + if (t.matrixWorld.decompose(e.position, e.quaternion, e.scale), e.translateX(m), e.translateZ(p), e.matrixWorld.compose(e.position, e.quaternion, e.scale), e.matrixWorldInverse.copy(e.matrixWorld).invert(), -1 === r[10]) e.projectionMatrix.copy(t.projectionMatrix), e.projectionMatrixInverse.copy(t.projectionMatrixInverse); + else { + const t = s + p, + n = o + p, + r = d - m, + a = f + (i - m), + h = l * o / n * t, + u = c * o / n * t; + e.projectionMatrix.makePerspective(r, a, h, u, t, n), e.projectionMatrixInverse.copy(e.projectionMatrix).invert() + } + }(S, x, b) : S.projectionMatrix.copy(x.projectionMatrix), + function(e, t, n) { + null === n ? e.matrix.copy(t.matrixWorld) : (e.matrix.copy(n.matrixWorld), e.matrix.invert(), e.matrix.multiply(t.matrixWorld)); + e.matrix.decompose(e.position, e.quaternion, e.scale), e.updateMatrixWorld(!0), e.projectionMatrix.copy(t.projectionMatrix), e.projectionMatrixInverse.copy(t.projectionMatrixInverse), e.isPerspectiveCamera && (e.fov = 2 * gt * Math.atan(1 / e.projectionMatrix.elements[5]), e.zoom = 1) + }(e, S, r) + }, this.getCamera = function() { + return S + }, this.getFoveation = function() { + if (null !== u || null !== d) return o + }, this.setFoveation = function(e) { + o = e, null !== u && (u.fixedFoveation = e), null !== d && void 0 !== d.fixedFoveation && (d.fixedFoveation = e) + }, this.hasDepthSensing = function() { + return null !== p.texture + }, this.getDepthSensingMesh = function() { + return p.getMesh(S) + }; + let L = null; + const U = new Ad; + U.setAnimationLoop((function(t, r) { + if (c = r.getViewerPose(l || a), f = r, null !== c) { + const t = c.views; + null !== d && (e.setRenderTargetFramebuffer(A, d.framebuffer), e.setRenderTarget(A)); + let n = !1; + t.length !== S.cameras.length && (S.cameras.length = 0, n = !0); + for (let i = 0; i < t.length; i++) { + const r = t[i]; + let a = null; + if (null !== d) a = d.getViewport(r); + else { + const t = h.getViewSubImage(u, r); + a = t.viewport, 0 === i && (e.setRenderTargetTextures(A, t.colorTexture, u.ignoreDepthValues ? void 0 : t.depthStencilTexture), e.setRenderTarget(A)) + } + let s = E[i]; + void 0 === s && (s = new cr, s.layers.enable(i), s.viewport = new Qt, E[i] = s), s.matrix.fromArray(r.transform.matrix), s.matrix.decompose(s.position, s.quaternion, s.scale), s.projectionMatrix.fromArray(r.projectionMatrix), s.projectionMatrixInverse.copy(s.projectionMatrix).invert(), s.viewport.set(a.x, a.y, a.width, a.height), 0 === i && (S.matrix.copy(s.matrix), S.matrix.decompose(S.position, S.quaternion, S.scale)), !0 === n && S.cameras.push(s) + } + const r = i.enabledFeatures; + if (r && r.includes("depth-sensing") && "gpu-optimized" == i.depthUsage && h) { + const n = h.getDepthInformation(t[0]); + n && n.isValid && n.texture && p.init(e, n, i.renderState) + } + } + for (let e = 0; e < _.length; e++) { + const t = v[e], + n = _[e]; + null !== t && void 0 !== n && n.update(t, r, l || a) + } + L && L(t, r), r.detectedPlanes && n.dispatchEvent({ + type: "planesdetected", + data: r + }), f = null + })), this.setAnimationLoop = function(e) { + L = e + }, this.dispose = function() {} + } + } + const Kp = new Fn, + Zp = new Cn; + + function Jp(e, t) { + function n(e, t) { + !0 === e.matrixAutoUpdate && e.updateMatrix(), t.value.copy(e.matrix) + } + + function i(e, i) { + e.opacity.value = i.opacity, i.color && e.diffuse.value.copy(i.color), i.emissive && e.emissive.value.copy(i.emissive).multiplyScalar(i.emissiveIntensity), i.map && (e.map.value = i.map, n(i.map, e.mapTransform)), i.alphaMap && (e.alphaMap.value = i.alphaMap, n(i.alphaMap, e.alphaMapTransform)), i.bumpMap && (e.bumpMap.value = i.bumpMap, n(i.bumpMap, e.bumpMapTransform), e.bumpScale.value = i.bumpScale, 1 === i.side && (e.bumpScale.value *= -1)), i.normalMap && (e.normalMap.value = i.normalMap, n(i.normalMap, e.normalMapTransform), e.normalScale.value.copy(i.normalScale), 1 === i.side && e.normalScale.value.negate()), i.displacementMap && (e.displacementMap.value = i.displacementMap, n(i.displacementMap, e.displacementMapTransform), e.displacementScale.value = i.displacementScale, e.displacementBias.value = i.displacementBias), i.emissiveMap && (e.emissiveMap.value = i.emissiveMap, n(i.emissiveMap, e.emissiveMapTransform)), i.specularMap && (e.specularMap.value = i.specularMap, n(i.specularMap, e.specularMapTransform)), i.alphaTest > 0 && (e.alphaTest.value = i.alphaTest); + const r = t.get(i), + a = r.envMap, + s = r.envMapRotation; + a && (e.envMap.value = a, Kp.copy(s), Kp.x *= -1, Kp.y *= -1, Kp.z *= -1, a.isCubeTexture && !1 === a.isRenderTargetTexture && (Kp.y *= -1, Kp.z *= -1), e.envMapRotation.value.setFromMatrix4(Zp.makeRotationFromEuler(Kp)), e.flipEnvMap.value = a.isCubeTexture && !1 === a.isRenderTargetTexture ? -1 : 1, e.reflectivity.value = i.reflectivity, e.ior.value = i.ior, e.refractionRatio.value = i.refractionRatio), i.lightMap && (e.lightMap.value = i.lightMap, e.lightMapIntensity.value = i.lightMapIntensity, n(i.lightMap, e.lightMapTransform)), i.aoMap && (e.aoMap.value = i.aoMap, e.aoMapIntensity.value = i.aoMapIntensity, n(i.aoMap, e.aoMapTransform)) + } + return { + refreshFogUniforms: function(t, n) { + n.color.getRGB(t.fogColor.value, nr(e)), n.isFog ? (t.fogNear.value = n.near, t.fogFar.value = n.far) : n.isFogExp2 && (t.fogDensity.value = n.density) + }, + refreshMaterialUniforms: function(e, r, a, s, o) { + r.isMeshBasicMaterial || r.isMeshLambertMaterial ? i(e, r) : r.isMeshToonMaterial ? (i(e, r), function(e, t) { + t.gradientMap && (e.gradientMap.value = t.gradientMap) + }(e, r)) : r.isMeshPhongMaterial ? (i(e, r), function(e, t) { + e.specular.value.copy(t.specular), e.shininess.value = Math.max(t.shininess, 1e-4) + }(e, r)) : r.isMeshStandardMaterial ? (i(e, r), function(e, t) { + e.metalness.value = t.metalness, t.metalnessMap && (e.metalnessMap.value = t.metalnessMap, n(t.metalnessMap, e.metalnessMapTransform)); + e.roughness.value = t.roughness, t.roughnessMap && (e.roughnessMap.value = t.roughnessMap, n(t.roughnessMap, e.roughnessMapTransform)); + t.envMap && (e.envMapIntensity.value = t.envMapIntensity) + }(e, r), r.isMeshPhysicalMaterial && function(e, t, i) { + e.ior.value = t.ior, t.sheen > 0 && (e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen), e.sheenRoughness.value = t.sheenRoughness, t.sheenColorMap && (e.sheenColorMap.value = t.sheenColorMap, n(t.sheenColorMap, e.sheenColorMapTransform)), t.sheenRoughnessMap && (e.sheenRoughnessMap.value = t.sheenRoughnessMap, n(t.sheenRoughnessMap, e.sheenRoughnessMapTransform))); + t.clearcoat > 0 && (e.clearcoat.value = t.clearcoat, e.clearcoatRoughness.value = t.clearcoatRoughness, t.clearcoatMap && (e.clearcoatMap.value = t.clearcoatMap, n(t.clearcoatMap, e.clearcoatMapTransform)), t.clearcoatRoughnessMap && (e.clearcoatRoughnessMap.value = t.clearcoatRoughnessMap, n(t.clearcoatRoughnessMap, e.clearcoatRoughnessMapTransform)), t.clearcoatNormalMap && (e.clearcoatNormalMap.value = t.clearcoatNormalMap, n(t.clearcoatNormalMap, e.clearcoatNormalMapTransform), e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale), 1 === t.side && e.clearcoatNormalScale.value.negate())); + t.dispersion > 0 && (e.dispersion.value = t.dispersion); + t.iridescence > 0 && (e.iridescence.value = t.iridescence, e.iridescenceIOR.value = t.iridescenceIOR, e.iridescenceThicknessMinimum.value = t.iridescenceThicknessRange[0], e.iridescenceThicknessMaximum.value = t.iridescenceThicknessRange[1], t.iridescenceMap && (e.iridescenceMap.value = t.iridescenceMap, n(t.iridescenceMap, e.iridescenceMapTransform)), t.iridescenceThicknessMap && (e.iridescenceThicknessMap.value = t.iridescenceThicknessMap, n(t.iridescenceThicknessMap, e.iridescenceThicknessMapTransform))); + t.transmission > 0 && (e.transmission.value = t.transmission, e.transmissionSamplerMap.value = i.texture, e.transmissionSamplerSize.value.set(i.width, i.height), t.transmissionMap && (e.transmissionMap.value = t.transmissionMap, n(t.transmissionMap, e.transmissionMapTransform)), e.thickness.value = t.thickness, t.thicknessMap && (e.thicknessMap.value = t.thicknessMap, n(t.thicknessMap, e.thicknessMapTransform)), e.attenuationDistance.value = t.attenuationDistance, e.attenuationColor.value.copy(t.attenuationColor)); + t.anisotropy > 0 && (e.anisotropyVector.value.set(t.anisotropy * Math.cos(t.anisotropyRotation), t.anisotropy * Math.sin(t.anisotropyRotation)), t.anisotropyMap && (e.anisotropyMap.value = t.anisotropyMap, n(t.anisotropyMap, e.anisotropyMapTransform))); + e.specularIntensity.value = t.specularIntensity, e.specularColor.value.copy(t.specularColor), t.specularColorMap && (e.specularColorMap.value = t.specularColorMap, n(t.specularColorMap, e.specularColorMapTransform)); + t.specularIntensityMap && (e.specularIntensityMap.value = t.specularIntensityMap, n(t.specularIntensityMap, e.specularIntensityMapTransform)) + }(e, r, o)) : r.isMeshMatcapMaterial ? (i(e, r), function(e, t) { + t.matcap && (e.matcap.value = t.matcap) + }(e, r)) : r.isMeshDepthMaterial ? i(e, r) : r.isMeshDistanceMaterial ? (i(e, r), function(e, n) { + const i = t.get(n).light; + e.referencePosition.value.setFromMatrixPosition(i.matrixWorld), e.nearDistance.value = i.shadow.camera.near, e.farDistance.value = i.shadow.camera.far + }(e, r)) : r.isMeshNormalMaterial ? i(e, r) : r.isLineBasicMaterial ? (function(e, t) { + e.diffuse.value.copy(t.color), e.opacity.value = t.opacity, t.map && (e.map.value = t.map, n(t.map, e.mapTransform)) + }(e, r), r.isLineDashedMaterial && function(e, t) { + e.dashSize.value = t.dashSize, e.totalSize.value = t.dashSize + t.gapSize, e.scale.value = t.scale + }(e, r)) : r.isPointsMaterial ? function(e, t, i, r) { + e.diffuse.value.copy(t.color), e.opacity.value = t.opacity, e.size.value = t.size * i, e.scale.value = .5 * r, t.map && (e.map.value = t.map, n(t.map, e.uvTransform)); + t.alphaMap && (e.alphaMap.value = t.alphaMap, n(t.alphaMap, e.alphaMapTransform)); + t.alphaTest > 0 && (e.alphaTest.value = t.alphaTest) + }(e, r, a, s) : r.isSpriteMaterial ? function(e, t) { + e.diffuse.value.copy(t.color), e.opacity.value = t.opacity, e.rotation.value = t.rotation, t.map && (e.map.value = t.map, n(t.map, e.mapTransform)); + t.alphaMap && (e.alphaMap.value = t.alphaMap, n(t.alphaMap, e.alphaMapTransform)); + t.alphaTest > 0 && (e.alphaTest.value = t.alphaTest) + }(e, r) : r.isShadowMaterial ? (e.color.value.copy(r.color), e.opacity.value = r.opacity) : r.isShaderMaterial && (r.uniformsNeedUpdate = !1) + } + } + } + + function $p(e, t, n, i) { + let r = {}, + a = {}, + s = []; + const o = e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS); + + function l(e, t, n, i) { + const r = e.value, + a = t + "_" + n; + if (void 0 === i[a]) return i[a] = "number" == typeof r || "boolean" == typeof r ? r : r.clone(), !0; + { + const e = i[a]; + if ("number" == typeof r || "boolean" == typeof r) { + if (e !== r) return i[a] = r, !0 + } else if (!1 === e.equals(r)) return e.copy(r), !0 + } + return !1 + } + + function c(e) { + const t = { + boundary: 0, + storage: 0 + }; + return "number" == typeof e || "boolean" == typeof e ? (t.boundary = 4, t.storage = 4) : e.isVector2 ? (t.boundary = 8, t.storage = 8) : e.isVector3 || e.isColor ? (t.boundary = 16, t.storage = 12) : e.isVector4 ? (t.boundary = 16, t.storage = 16) : e.isMatrix3 ? (t.boundary = 48, t.storage = 48) : e.isMatrix4 ? (t.boundary = 64, t.storage = 64) : e.isTexture ? console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.") : console.warn("THREE.WebGLRenderer: Unsupported uniform value type.", e), t + } + + function h(t) { + const n = t.target; + n.removeEventListener("dispose", h); + const i = s.indexOf(n.__bindingPointIndex); + s.splice(i, 1), e.deleteBuffer(r[n.id]), delete r[n.id], delete a[n.id] + } + return { + bind: function(e, t) { + const n = t.program; + i.uniformBlockBinding(e, n) + }, + update: function(n, u) { + let d = r[n.id]; + void 0 === d && (! function(e) { + const t = e.uniforms; + let n = 0; + const i = 16; + for (let e = 0, r = t.length; e < r; e++) { + const r = Array.isArray(t[e]) ? t[e] : [t[e]]; + for (let e = 0, t = r.length; e < t; e++) { + const t = r[e], + a = Array.isArray(t.value) ? t.value : [t.value]; + for (let e = 0, r = a.length; e < r; e++) { + const r = c(a[e]), + s = n % i, + o = s % r.boundary, + l = s + o; + n += o, 0 !== l && i - l < r.storage && (n += i - l), t.__data = new Float32Array(r.storage / Float32Array.BYTES_PER_ELEMENT), t.__offset = n, n += r.storage + } + } + } + const r = n % i; + r > 0 && (n += i - r); + e.__size = n, e.__cache = {} + }(n), d = function(t) { + const n = function() { + for (let e = 0; e < o; e++) + if (-1 === s.indexOf(e)) return s.push(e), e; + return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."), 0 + }(); + t.__bindingPointIndex = n; + const i = e.createBuffer(), + r = t.__size, + a = t.usage; + return e.bindBuffer(e.UNIFORM_BUFFER, i), e.bufferData(e.UNIFORM_BUFFER, r, a), e.bindBuffer(e.UNIFORM_BUFFER, null), e.bindBufferBase(e.UNIFORM_BUFFER, n, i), i + }(n), r[n.id] = d, n.addEventListener("dispose", h)); + const f = u.program; + i.updateUBOMapping(n, f); + const p = t.render.frame; + a[n.id] !== p && (! function(t) { + const n = r[t.id], + i = t.uniforms, + a = t.__cache; + e.bindBuffer(e.UNIFORM_BUFFER, n); + for (let t = 0, n = i.length; t < n; t++) { + const n = Array.isArray(i[t]) ? i[t] : [i[t]]; + for (let i = 0, r = n.length; i < r; i++) { + const r = n[i]; + if (!0 === l(r, t, i, a)) { + const t = r.__offset, + n = Array.isArray(r.value) ? r.value : [r.value]; + let i = 0; + for (let a = 0; a < n.length; a++) { + const s = n[a], + o = c(s); + "number" == typeof s || "boolean" == typeof s ? (r.__data[0] = s, e.bufferSubData(e.UNIFORM_BUFFER, t + i, r.__data)) : s.isMatrix3 ? (r.__data[0] = s.elements[0], r.__data[1] = s.elements[1], r.__data[2] = s.elements[2], r.__data[3] = 0, r.__data[4] = s.elements[3], r.__data[5] = s.elements[4], r.__data[6] = s.elements[5], r.__data[7] = 0, r.__data[8] = s.elements[6], r.__data[9] = s.elements[7], r.__data[10] = s.elements[8], r.__data[11] = 0) : (s.toArray(r.__data, i), i += o.storage / Float32Array.BYTES_PER_ELEMENT) + } + e.bufferSubData(e.UNIFORM_BUFFER, t, r.__data) + } + } + } + e.bindBuffer(e.UNIFORM_BUFFER, null) + }(n), a[n.id] = p) + }, + dispose: function() { + for (const t in r) e.deleteBuffer(r[t]); + s = [], r = {}, a = {} + } + } + } + class em { + constructor(t = {}) { + const { + canvas: n = It(), + context: i = null, + depth: r = !0, + stencil: a = !1, + alpha: s = !1, + antialias: o = !1, + premultipliedAlpha: l = !0, + preserveDrawingBuffer: c = !1, + powerPreference: h = "default", + failIfMajorPerformanceCaveat: u = !1, + reverseDepthBuffer: d = !1 + } = t; + let f; + if (this.isWebGLRenderer = !0, null !== i) { + if ("undefined" != typeof WebGLRenderingContext && i instanceof WebGLRenderingContext) throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163."); + f = i.getContextAttributes().alpha + } else f = s; + const p = new Uint32Array(4), + m = new Int32Array(4); + let g = null, + A = null; + const _ = [], + v = []; + this.domElement = n, this.debug = { + checkShaderErrors: !0, + onShaderError: null + }, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.clippingPlanes = [], this.localClippingEnabled = !1, this._outputColorSpace = Ye, this.toneMapping = 0, this.toneMappingExposure = 1; + const w = this; + let y = !1, + x = 0, + b = 0, + E = null, + S = -1, + M = null; + const T = new Qt, + C = new Qt; + let I = null; + const R = new wi(0); + let P = 0, + B = n.width, + D = n.height, + L = 1, + U = null, + k = null; + const N = new Qt(0, 0, B, D), + F = new Qt(0, 0, B, D); + let O = !1; + const z = new Jr; + let W = !1, + H = !1; + this.transmissionResolutionScale = 1; + const V = new Cn, + G = new Cn, + j = new Zt, + q = new Qt, + K = { + background: null, + fog: null, + environment: null, + overrideMaterial: null, + isScene: !0 + }; + let J = !1; + + function ie() { + return null === E ? L : 1 + } + let re, ae, se, oe, ue, de, fe, pe, me, ge, Ae, _e, ve, we, ye, xe, be, Ee, Se, Me, Te, Ce, Ie, Re, Pe = i; + + function Be(e, t) { + return n.getContext(e, t) + } + try { + const t = { + alpha: !0, + depth: r, + stencil: a, + antialias: o, + premultipliedAlpha: l, + preserveDrawingBuffer: c, + powerPreference: h, + failIfMajorPerformanceCaveat: u + }; + if ("setAttribute" in n && n.setAttribute("data-engine", `three.js r${e}`), n.addEventListener("webglcontextlost", Ue, !1), n.addEventListener("webglcontextrestored", ke, !1), n.addEventListener("webglcontextcreationerror", Ne, !1), null === Pe) { + const e = "webgl2"; + if (Pe = Be(e, t), null === Pe) throw Be(e) ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context.") + } + } catch (e) { + throw console.error("THREE.WebGLRenderer: " + e.message), e + } + + function De() { + re = new Kd(Pe), re.init(), Ce = new jp(Pe, re), ae = new Cd(Pe, re, t, Ce), se = new Qp(Pe, re), ae.reverseDepthBuffer && d && se.buffers.depth.setReversed(!0), oe = new $d(Pe), ue = new Bp, de = new Xp(Pe, re, se, ue, ae, Ce, oe), fe = new Rd(w), pe = new Yd(w), me = new _d(Pe), Ie = new Md(Pe, me), ge = new Zd(Pe, me, oe, Ie), Ae = new tf(Pe, ge, me, oe), Se = new ef(Pe, ae, de), xe = new Id(ue), _e = new Pp(w, fe, pe, re, ae, Ie, xe), ve = new Jp(w, ue), we = new kp, ye = new Hp(re), Ee = new Sd(w, fe, pe, se, Ae, f, l), be = new Vp(w, Ae, ae), Re = new $p(Pe, oe, ae, se), Me = new Td(Pe, re, oe), Te = new Jd(Pe, re, oe), oe.programs = _e.programs, w.capabilities = ae, w.extensions = re, w.properties = ue, w.renderLists = we, w.shadowMap = be, w.state = se, w.info = oe + } + De(); + const Le = new Yp(w, Pe); + + function Ue(e) { + e.preventDefault(), console.log("THREE.WebGLRenderer: Context Lost."), y = !0 + } + + function ke() { + console.log("THREE.WebGLRenderer: Context Restored."), y = !1; + const e = oe.autoReset, + t = be.enabled, + n = be.autoUpdate, + i = be.needsUpdate, + r = be.type; + De(), oe.autoReset = e, be.enabled = t, be.autoUpdate = n, be.needsUpdate = i, be.type = r + } + + function Ne(e) { + console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ", e.statusMessage) + } + + function Fe(e) { + const t = e.target; + t.removeEventListener("dispose", Fe), + function(e) { + (function(e) { + const t = ue.get(e).programs; + void 0 !== t && (t.forEach((function(e) { + _e.releaseProgram(e) + })), e.isShaderMaterial && _e.releaseShaderCache(e)) + })(e), ue.remove(e) + }(t) + } + + function Oe(e, t, n) { + !0 === e.transparent && 2 === e.side && !1 === e.forceSinglePass ? (e.side = 1, e.needsUpdate = !0, Ze(e, t, n), e.side = 0, e.needsUpdate = !0, Ze(e, t, n), e.side = 2) : Ze(e, t, n) + } + this.xr = Le, this.getContext = function() { + return Pe + }, this.getContextAttributes = function() { + return Pe.getContextAttributes() + }, this.forceContextLoss = function() { + const e = re.get("WEBGL_lose_context"); + e && e.loseContext() + }, this.forceContextRestore = function() { + const e = re.get("WEBGL_lose_context"); + e && e.restoreContext() + }, this.getPixelRatio = function() { + return L + }, this.setPixelRatio = function(e) { + void 0 !== e && (L = e, this.setSize(B, D, !1)) + }, this.getSize = function(e) { + return e.set(B, D) + }, this.setSize = function(e, t, i = !0) { + Le.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (B = e, D = t, n.width = Math.floor(e * L), n.height = Math.floor(t * L), !0 === i && (n.style.width = e + "px", n.style.height = t + "px"), this.setViewport(0, 0, e, t)) + }, this.getDrawingBufferSize = function(e) { + return e.set(B * L, D * L).floor() + }, this.setDrawingBufferSize = function(e, t, i) { + B = e, D = t, L = i, n.width = Math.floor(e * i), n.height = Math.floor(t * i), this.setViewport(0, 0, e, t) + }, this.getCurrentViewport = function(e) { + return e.copy(T) + }, this.getViewport = function(e) { + return e.copy(N) + }, this.setViewport = function(e, t, n, i) { + e.isVector4 ? N.set(e.x, e.y, e.z, e.w) : N.set(e, t, n, i), se.viewport(T.copy(N).multiplyScalar(L).round()) + }, this.getScissor = function(e) { + return e.copy(F) + }, this.setScissor = function(e, t, n, i) { + e.isVector4 ? F.set(e.x, e.y, e.z, e.w) : F.set(e, t, n, i), se.scissor(C.copy(F).multiplyScalar(L).round()) + }, this.getScissorTest = function() { + return O + }, this.setScissorTest = function(e) { + se.setScissorTest(O = e) + }, this.setOpaqueSort = function(e) { + U = e + }, this.setTransparentSort = function(e) { + k = e + }, this.getClearColor = function(e) { + return e.copy(Ee.getClearColor()) + }, this.setClearColor = function() { + Ee.setClearColor(...arguments) + }, this.getClearAlpha = function() { + return Ee.getClearAlpha() + }, this.setClearAlpha = function() { + Ee.setClearAlpha(...arguments) + }, this.clear = function(e = !0, t = !0, n = !0) { + let i = 0; + if (e) { + let e = !1; + if (null !== E) { + const t = E.texture.format; + e = t === he || t === ce || t === le + } + if (e) { + const e = E.texture.type, + t = e === X || e === Z || e === Y || e === ne || e === ee || e === te, + n = Ee.getClearColor(), + i = Ee.getClearAlpha(), + r = n.r, + a = n.g, + s = n.b; + t ? (p[0] = r, p[1] = a, p[2] = s, p[3] = i, Pe.clearBufferuiv(Pe.COLOR, 0, p)) : (m[0] = r, m[1] = a, m[2] = s, m[3] = i, Pe.clearBufferiv(Pe.COLOR, 0, m)) + } else i |= Pe.COLOR_BUFFER_BIT + } + t && (i |= Pe.DEPTH_BUFFER_BIT), n && (i |= Pe.STENCIL_BUFFER_BIT, this.state.buffers.stencil.setMask(4294967295)), Pe.clear(i) + }, this.clearColor = function() { + this.clear(!0, !1, !1) + }, this.clearDepth = function() { + this.clear(!1, !0, !1) + }, this.clearStencil = function() { + this.clear(!1, !1, !0) + }, this.dispose = function() { + n.removeEventListener("webglcontextlost", Ue, !1), n.removeEventListener("webglcontextrestored", ke, !1), n.removeEventListener("webglcontextcreationerror", Ne, !1), Ee.dispose(), we.dispose(), ye.dispose(), ue.dispose(), fe.dispose(), pe.dispose(), Ae.dispose(), Ie.dispose(), Re.dispose(), _e.dispose(), Le.dispose(), Le.removeEventListener("sessionstart", We), Le.removeEventListener("sessionend", He), Ve.stop() + }, this.renderBufferDirect = function(e, t, n, i, r, a) { + null === t && (t = K); + const s = r.isMesh && r.matrixWorld.determinant() < 0, + o = function(e, t, n, i, r) { + !0 !== t.isScene && (t = K); + de.resetTextureUnits(); + const a = t.fog, + s = i.isMeshStandardMaterial ? t.environment : null, + o = null === E ? w.outputColorSpace : !0 === E.isXRRenderTarget ? E.texture.colorSpace : Ke, + l = (i.isMeshStandardMaterial ? pe : fe).get(i.envMap || s), + c = !0 === i.vertexColors && !!n.attributes.color && 4 === n.attributes.color.itemSize, + h = !!n.attributes.tangent && (!!i.normalMap || i.anisotropy > 0), + u = !!n.morphAttributes.position, + d = !!n.morphAttributes.normal, + f = !!n.morphAttributes.color; + let p = 0; + i.toneMapped && (null !== E && !0 !== E.isXRRenderTarget || (p = w.toneMapping)); + const m = n.morphAttributes.position || n.morphAttributes.normal || n.morphAttributes.color, + g = void 0 !== m ? m.length : 0, + _ = ue.get(i), + v = A.state.lights; + if (!0 === W && (!0 === H || e !== M)) { + const t = e === M && i.id === S; + xe.setState(i, e, t) + } + let y = !1; + i.version === _.__version ? _.needsLights && _.lightsStateVersion !== v.state.version || _.outputColorSpace !== o || r.isBatchedMesh && !1 === _.batching ? y = !0 : r.isBatchedMesh || !0 !== _.batching ? r.isBatchedMesh && !0 === _.batchingColor && null === r.colorTexture || r.isBatchedMesh && !1 === _.batchingColor && null !== r.colorTexture || r.isInstancedMesh && !1 === _.instancing ? y = !0 : r.isInstancedMesh || !0 !== _.instancing ? r.isSkinnedMesh && !1 === _.skinning ? y = !0 : r.isSkinnedMesh || !0 !== _.skinning ? r.isInstancedMesh && !0 === _.instancingColor && null === r.instanceColor || r.isInstancedMesh && !1 === _.instancingColor && null !== r.instanceColor || r.isInstancedMesh && !0 === _.instancingMorph && null === r.morphTexture || r.isInstancedMesh && !1 === _.instancingMorph && null !== r.morphTexture || _.envMap !== l || !0 === i.fog && _.fog !== a ? y = !0 : void 0 === _.numClippingPlanes || _.numClippingPlanes === xe.numPlanes && _.numIntersection === xe.numIntersection ? (_.vertexAlphas !== c || _.vertexTangents !== h || _.morphTargets !== u || _.morphNormals !== d || _.morphColors !== f || _.toneMapping !== p || _.morphTargetsCount !== g) && (y = !0) : y = !0 : y = !0 : y = !0 : y = !0 : (y = !0, _.__version = i.version); + let x = _.currentProgram; + !0 === y && (x = Ze(i, t, r)); + let b = !1, + T = !1, + C = !1; + const I = x.getUniforms(), + R = _.uniforms; + se.useProgram(x.program) && (b = !0, T = !0, C = !0); + i.id !== S && (S = i.id, T = !0); + if (b || M !== e) { + se.buffers.depth.getReversed() ? (V.copy(e.projectionMatrix), function(e) { + const t = e.elements; + t[2] = .5 * t[2] + .5 * t[3], t[6] = .5 * t[6] + .5 * t[7], t[10] = .5 * t[10] + .5 * t[11], t[14] = .5 * t[14] + .5 * t[15] + }(V), function(e) { + const t = e.elements; - 1 === t[11] ? (t[10] = -t[10] - 1, t[14] = -t[14]) : (t[10] = -t[10], t[14] = 1 - t[14]) + }(V), I.setValue(Pe, "projectionMatrix", V)) : I.setValue(Pe, "projectionMatrix", e.projectionMatrix), I.setValue(Pe, "viewMatrix", e.matrixWorldInverse); + const t = I.map.cameraPosition; + void 0 !== t && t.setValue(Pe, j.setFromMatrixPosition(e.matrixWorld)), ae.logarithmicDepthBuffer && I.setValue(Pe, "logDepthBufFC", 2 / (Math.log(e.far + 1) / Math.LN2)), (i.isMeshPhongMaterial || i.isMeshToonMaterial || i.isMeshLambertMaterial || i.isMeshBasicMaterial || i.isMeshStandardMaterial || i.isShaderMaterial) && I.setValue(Pe, "isOrthographic", !0 === e.isOrthographicCamera), M !== e && (M = e, T = !0, C = !0) + } + if (r.isSkinnedMesh) { + I.setOptional(Pe, r, "bindMatrix"), I.setOptional(Pe, r, "bindMatrixInverse"); + const e = r.skeleton; + e && (null === e.boneTexture && e.computeBoneTexture(), I.setValue(Pe, "boneTexture", e.boneTexture, de)) + } + r.isBatchedMesh && (I.setOptional(Pe, r, "batchingTexture"), I.setValue(Pe, "batchingTexture", r._matricesTexture, de), I.setOptional(Pe, r, "batchingIdTexture"), I.setValue(Pe, "batchingIdTexture", r._indirectTexture, de), I.setOptional(Pe, r, "batchingColorTexture"), null !== r._colorsTexture && I.setValue(Pe, "batchingColorTexture", r._colorsTexture, de)); + const P = n.morphAttributes; + void 0 === P.position && void 0 === P.normal && void 0 === P.color || Se.update(r, n, x); + (T || _.receiveShadow !== r.receiveShadow) && (_.receiveShadow = r.receiveShadow, I.setValue(Pe, "receiveShadow", r.receiveShadow)); + i.isMeshGouraudMaterial && null !== i.envMap && (R.envMap.value = l, R.flipEnvMap.value = l.isCubeTexture && !1 === l.isRenderTargetTexture ? -1 : 1); + i.isMeshStandardMaterial && null === i.envMap && null !== t.environment && (R.envMapIntensity.value = t.environmentIntensity); + T && (I.setValue(Pe, "toneMappingExposure", w.toneMappingExposure), _.needsLights && (U = C, (B = R).ambientLightColor.needsUpdate = U, B.lightProbe.needsUpdate = U, B.directionalLights.needsUpdate = U, B.directionalLightShadows.needsUpdate = U, B.pointLights.needsUpdate = U, B.pointLightShadows.needsUpdate = U, B.spotLights.needsUpdate = U, B.spotLightShadows.needsUpdate = U, B.rectAreaLights.needsUpdate = U, B.hemisphereLights.needsUpdate = U), a && !0 === i.fog && ve.refreshFogUniforms(R, a), ve.refreshMaterialUniforms(R, i, L, D, A.state.transmissionRenderTarget[e.id]), op.upload(Pe, Je(_), R, de)); + var B, U; + i.isShaderMaterial && !0 === i.uniformsNeedUpdate && (op.upload(Pe, Je(_), R, de), i.uniformsNeedUpdate = !1); + i.isSpriteMaterial && I.setValue(Pe, "center", r.center); + if (I.setValue(Pe, "modelViewMatrix", r.modelViewMatrix), I.setValue(Pe, "normalMatrix", r.normalMatrix), I.setValue(Pe, "modelMatrix", r.matrixWorld), i.isShaderMaterial || i.isRawShaderMaterial) { + const e = i.uniformsGroups; + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + Re.update(n, x), Re.bind(n, x) + } + } + return x + }(e, t, n, i, r); + se.setMaterial(i, s); + let l = n.index, + c = 1; + if (!0 === i.wireframe) { + if (l = ge.getWireframeAttribute(n), void 0 === l) return; + c = 2 + } + const h = n.drawRange, + u = n.attributes.position; + let d = h.start * c, + f = (h.start + h.count) * c; + null !== a && (d = Math.max(d, a.start * c), f = Math.min(f, (a.start + a.count) * c)), null !== l ? (d = Math.max(d, 0), f = Math.min(f, l.count)) : null != u && (d = Math.max(d, 0), f = Math.min(f, u.count)); + const p = f - d; + if (p < 0 || p === 1 / 0) return; + let m; + Ie.setup(r, i, o, n, l); + let g = Me; + if (null !== l && (m = me.get(l), g = Te, g.setIndex(m)), r.isMesh) !0 === i.wireframe ? (se.setLineWidth(i.wireframeLinewidth * ie()), g.setMode(Pe.LINES)) : g.setMode(Pe.TRIANGLES); + else if (r.isLine) { + let e = i.linewidth; + void 0 === e && (e = 1), se.setLineWidth(e * ie()), r.isLineSegments ? g.setMode(Pe.LINES) : r.isLineLoop ? g.setMode(Pe.LINE_LOOP) : g.setMode(Pe.LINE_STRIP) + } else r.isPoints ? g.setMode(Pe.POINTS) : r.isSprite && g.setMode(Pe.TRIANGLES); + if (r.isBatchedMesh) + if (null !== r._multiDrawInstances) Pt("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."), g.renderMultiDrawInstances(r._multiDrawStarts, r._multiDrawCounts, r._multiDrawCount, r._multiDrawInstances); + else if (re.get("WEBGL_multi_draw")) g.renderMultiDraw(r._multiDrawStarts, r._multiDrawCounts, r._multiDrawCount); + else { + const e = r._multiDrawStarts, + t = r._multiDrawCounts, + n = r._multiDrawCount, + a = l ? me.get(l).bytesPerElement : 1, + s = ue.get(i).currentProgram.getUniforms(); + for (let i = 0; i < n; i++) s.setValue(Pe, "_gl_DrawID", i), g.render(e[i] / a, t[i]) + } else if (r.isInstancedMesh) g.renderInstances(d, p, r.count); + else if (n.isInstancedBufferGeometry) { + const e = void 0 !== n._maxInstanceCount ? n._maxInstanceCount : 1 / 0, + t = Math.min(n.instanceCount, e); + g.renderInstances(d, p, t) + } else g.render(d, p) + }, this.compile = function(e, t, n = null) { + null === n && (n = e), A = ye.get(n), A.init(t), v.push(A), n.traverseVisible((function(e) { + e.isLight && e.layers.test(t.layers) && (A.pushLight(e), e.castShadow && A.pushShadow(e)) + })), e !== n && e.traverseVisible((function(e) { + e.isLight && e.layers.test(t.layers) && (A.pushLight(e), e.castShadow && A.pushShadow(e)) + })), A.setupLights(); + const i = new Set; + return e.traverse((function(e) { + if (!(e.isMesh || e.isPoints || e.isLine || e.isSprite)) return; + const t = e.material; + if (t) + if (Array.isArray(t)) + for (let r = 0; r < t.length; r++) { + const a = t[r]; + Oe(a, n, e), i.add(a) + } else Oe(t, n, e), i.add(t) + })), A = v.pop(), i + }, this.compileAsync = function(e, t, n = null) { + const i = this.compile(e, t, n); + return new Promise((t => { + function n() { + i.forEach((function(e) { + ue.get(e).currentProgram.isReady() && i.delete(e) + })), 0 !== i.size ? setTimeout(n, 10) : t(e) + } + null !== re.get("KHR_parallel_shader_compile") ? n() : setTimeout(n, 10) + })) + }; + let ze = null; + + function We() { + Ve.stop() + } + + function He() { + Ve.start() + } + const Ve = new Ad; + + function Ge(e, t, n, i) { + if (!1 === e.visible) return; + if (e.layers.test(t.layers)) + if (e.isGroup) n = e.renderOrder; + else if (e.isLOD) !0 === e.autoUpdate && e.update(t); + else if (e.isLight) A.pushLight(e), e.castShadow && A.pushShadow(e); + else if (e.isSprite) { + if (!e.frustumCulled || z.intersectsSprite(e)) { + i && q.setFromMatrixPosition(e.matrixWorld).applyMatrix4(G); + const t = Ae.update(e), + r = e.material; + r.visible && g.push(e, t, r, n, q.z, null) + } + } else if ((e.isMesh || e.isLine || e.isPoints) && (!e.frustumCulled || z.intersectsObject(e))) { + const t = Ae.update(e), + r = e.material; + if (i && (void 0 !== e.boundingSphere ? (null === e.boundingSphere && e.computeBoundingSphere(), q.copy(e.boundingSphere.center)) : (null === t.boundingSphere && t.computeBoundingSphere(), q.copy(t.boundingSphere.center)), q.applyMatrix4(e.matrixWorld).applyMatrix4(G)), Array.isArray(r)) { + const i = t.groups; + for (let a = 0, s = i.length; a < s; a++) { + const s = i[a], + o = r[s.materialIndex]; + o && o.visible && g.push(e, t, o, n, q.z, s) + } + } else r.visible && g.push(e, t, r, n, q.z, null) + } + const r = e.children; + for (let e = 0, a = r.length; e < a; e++) Ge(r[e], t, n, i) + } + + function Qe(e, t, n, i) { + const r = e.opaque, + a = e.transmissive, + s = e.transparent; + A.setupLightsView(n), !0 === W && xe.setGlobalState(w.clippingPlanes, n), i && se.viewport(T.copy(i)), r.length > 0 && je(r, t, n), a.length > 0 && je(a, t, n), s.length > 0 && je(s, t, n), se.buffers.depth.setTest(!0), se.buffers.depth.setMask(!0), se.buffers.color.setMask(!0), se.setPolygonOffset(!1) + } + + function Xe(e, t, n, i) { + if (null !== (!0 === n.isScene ? n.overrideMaterial : null)) return; + void 0 === A.state.transmissionRenderTarget[i.id] && (A.state.transmissionRenderTarget[i.id] = new jt(1, 1, { + generateMipmaps: !0, + type: re.has("EXT_color_buffer_half_float") || re.has("EXT_color_buffer_float") ? $ : X, + minFilter: Q, + samples: 4, + stencilBuffer: a, + resolveDepthBuffer: !1, + resolveStencilBuffer: !1, + colorSpace: Ut.workingColorSpace + })); + const r = A.state.transmissionRenderTarget[i.id], + s = i.viewport || T; + r.setSize(s.z * w.transmissionResolutionScale, s.w * w.transmissionResolutionScale); + const o = w.getRenderTarget(); + w.setRenderTarget(r), w.getClearColor(R), P = w.getClearAlpha(), P < 1 && w.setClearColor(16777215, .5), w.clear(), J && Ee.render(n); + const l = w.toneMapping; + w.toneMapping = 0; + const c = i.viewport; + if (void 0 !== i.viewport && (i.viewport = void 0), A.setupLightsView(i), !0 === W && xe.setGlobalState(w.clippingPlanes, i), je(e, n, i), de.updateMultisampleRenderTarget(r), de.updateRenderTargetMipmap(r), !1 === re.has("WEBGL_multisampled_render_to_texture")) { + let e = !1; + for (let r = 0, a = t.length; r < a; r++) { + const a = t[r], + s = a.object, + o = a.geometry, + l = a.material, + c = a.group; + if (2 === l.side && s.layers.test(i.layers)) { + const t = l.side; + l.side = 1, l.needsUpdate = !0, qe(s, n, i, o, l, c), l.side = t, l.needsUpdate = !0, e = !0 + } + }!0 === e && (de.updateMultisampleRenderTarget(r), de.updateRenderTargetMipmap(r)) + } + w.setRenderTarget(o), w.setClearColor(R, P), void 0 !== c && (i.viewport = c), w.toneMapping = l + } + + function je(e, t, n) { + const i = !0 === t.isScene ? t.overrideMaterial : null; + for (let r = 0, a = e.length; r < a; r++) { + const a = e[r], + s = a.object, + o = a.geometry, + l = null === i ? a.material : i, + c = a.group; + s.layers.test(n.layers) && qe(s, t, n, o, l, c) + } + } + + function qe(e, t, n, i, r, a) { + e.onBeforeRender(w, t, n, i, r, a), e.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, e.matrixWorld), e.normalMatrix.getNormalMatrix(e.modelViewMatrix), r.onBeforeRender(w, t, n, i, e, a), !0 === r.transparent && 2 === r.side && !1 === r.forceSinglePass ? (r.side = 1, r.needsUpdate = !0, w.renderBufferDirect(n, t, i, r, e, a), r.side = 0, r.needsUpdate = !0, w.renderBufferDirect(n, t, i, r, e, a), r.side = 2) : w.renderBufferDirect(n, t, i, r, e, a), e.onAfterRender(w, t, n, i, r, a) + } + + function Ze(e, t, n) { + !0 !== t.isScene && (t = K); + const i = ue.get(e), + r = A.state.lights, + a = A.state.shadowsArray, + s = r.state.version, + o = _e.getParameters(e, r.state, a, t, n), + l = _e.getProgramCacheKey(o); + let c = i.programs; + i.environment = e.isMeshStandardMaterial ? t.environment : null, i.fog = t.fog, i.envMap = (e.isMeshStandardMaterial ? pe : fe).get(e.envMap || i.environment), i.envMapRotation = null !== i.environment && null === e.envMap ? t.environmentRotation : e.envMapRotation, void 0 === c && (e.addEventListener("dispose", Fe), c = new Map, i.programs = c); + let h = c.get(l); + if (void 0 !== h) { + if (i.currentProgram === h && i.lightsStateVersion === s) return $e(e, o), h + } else o.uniforms = _e.getUniforms(e), e.onBeforeCompile(o, w), h = _e.acquireProgram(o, l), c.set(l, h), i.uniforms = o.uniforms; + const u = i.uniforms; + return (e.isShaderMaterial || e.isRawShaderMaterial) && !0 !== e.clipping || (u.clippingPlanes = xe.uniform), $e(e, o), i.needsLights = function(e) { + return e.isMeshLambertMaterial || e.isMeshToonMaterial || e.isMeshPhongMaterial || e.isMeshStandardMaterial || e.isShadowMaterial || e.isShaderMaterial && !0 === e.lights + }(e), i.lightsStateVersion = s, i.needsLights && (u.ambientLightColor.value = r.state.ambient, u.lightProbe.value = r.state.probe, u.directionalLights.value = r.state.directional, u.directionalLightShadows.value = r.state.directionalShadow, u.spotLights.value = r.state.spot, u.spotLightShadows.value = r.state.spotShadow, u.rectAreaLights.value = r.state.rectArea, u.ltc_1.value = r.state.rectAreaLTC1, u.ltc_2.value = r.state.rectAreaLTC2, u.pointLights.value = r.state.point, u.pointLightShadows.value = r.state.pointShadow, u.hemisphereLights.value = r.state.hemi, u.directionalShadowMap.value = r.state.directionalShadowMap, u.directionalShadowMatrix.value = r.state.directionalShadowMatrix, u.spotShadowMap.value = r.state.spotShadowMap, u.spotLightMatrix.value = r.state.spotLightMatrix, u.spotLightMap.value = r.state.spotLightMap, u.pointShadowMap.value = r.state.pointShadowMap, u.pointShadowMatrix.value = r.state.pointShadowMatrix), i.currentProgram = h, i.uniformsList = null, h + } + + function Je(e) { + if (null === e.uniformsList) { + const t = e.currentProgram.getUniforms(); + e.uniformsList = op.seqWithValue(t.seq, e.uniforms) + } + return e.uniformsList + } + + function $e(e, t) { + const n = ue.get(e); + n.outputColorSpace = t.outputColorSpace, n.batching = t.batching, n.batchingColor = t.batchingColor, n.instancing = t.instancing, n.instancingColor = t.instancingColor, n.instancingMorph = t.instancingMorph, n.skinning = t.skinning, n.morphTargets = t.morphTargets, n.morphNormals = t.morphNormals, n.morphColors = t.morphColors, n.morphTargetsCount = t.morphTargetsCount, n.numClippingPlanes = t.numClippingPlanes, n.numIntersection = t.numClipIntersection, n.vertexAlphas = t.vertexAlphas, n.vertexTangents = t.vertexTangents, n.toneMapping = t.toneMapping + } + Ve.setAnimationLoop((function(e) { + ze && ze(e) + })), "undefined" != typeof self && Ve.setContext(self), this.setAnimationLoop = function(e) { + ze = e, Le.setAnimationLoop(e), null === e ? Ve.stop() : Ve.start() + }, Le.addEventListener("sessionstart", We), Le.addEventListener("sessionend", He), this.render = function(e, t) { + if (void 0 !== t && !0 !== t.isCamera) return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); + if (!0 === y) return; + if (!0 === e.matrixWorldAutoUpdate && e.updateMatrixWorld(), null === t.parent && !0 === t.matrixWorldAutoUpdate && t.updateMatrixWorld(), !0 === Le.enabled && !0 === Le.isPresenting && (!0 === Le.cameraAutoUpdate && Le.updateCamera(t), t = Le.getCamera()), !0 === e.isScene && e.onBeforeRender(w, e, t, E), A = ye.get(e, v.length), A.init(t), v.push(A), G.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), z.setFromProjectionMatrix(G), H = this.localClippingEnabled, W = xe.init(this.clippingPlanes, H), g = we.get(e, _.length), g.init(), _.push(g), !0 === Le.enabled && !0 === Le.isPresenting) { + const e = w.xr.getDepthSensingMesh(); + null !== e && Ge(e, t, -1 / 0, w.sortObjects) + } + Ge(e, t, 0, w.sortObjects), g.finish(), !0 === w.sortObjects && g.sort(U, k), J = !1 === Le.enabled || !1 === Le.isPresenting || !1 === Le.hasDepthSensing(), J && Ee.addToRenderList(g, e), this.info.render.frame++, !0 === W && xe.beginShadows(); + const n = A.state.shadowsArray; + be.render(n, e, t), !0 === W && xe.endShadows(), !0 === this.info.autoReset && this.info.reset(); + const i = g.opaque, + r = g.transmissive; + if (A.setupLights(), t.isArrayCamera) { + const n = t.cameras; + if (r.length > 0) + for (let t = 0, a = n.length; t < a; t++) { + Xe(i, r, e, n[t]) + } + J && Ee.render(e); + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + Qe(g, e, i, i.viewport) + } + } else r.length > 0 && Xe(i, r, e, t), J && Ee.render(e), Qe(g, e, t); + null !== E && 0 === b && (de.updateMultisampleRenderTarget(E), de.updateRenderTargetMipmap(E)), !0 === e.isScene && e.onAfterRender(w, e, t), Ie.resetDefaultState(), S = -1, M = null, v.pop(), v.length > 0 ? (A = v[v.length - 1], !0 === W && xe.setGlobalState(w.clippingPlanes, A.state.camera)) : A = null, _.pop(), g = _.length > 0 ? _[_.length - 1] : null + }, this.getActiveCubeFace = function() { + return x + }, this.getActiveMipmapLevel = function() { + return b + }, this.getRenderTarget = function() { + return E + }, this.setRenderTargetTextures = function(e, t, n) { + ue.get(e.texture).__webglTexture = t, ue.get(e.depthTexture).__webglTexture = n; + const i = ue.get(e); + i.__hasExternalTextures = !0, i.__autoAllocateDepthBuffer = void 0 === n, i.__autoAllocateDepthBuffer || !0 === re.has("WEBGL_multisampled_render_to_texture") && (console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"), i.__useRenderToTexture = !1) + }, this.setRenderTargetFramebuffer = function(e, t) { + const n = ue.get(e); + n.__webglFramebuffer = t, n.__useDefaultFramebuffer = void 0 === t + }; + const et = Pe.createFramebuffer(); + this.setRenderTarget = function(e, t = 0, n = 0) { + E = e, x = t, b = n; + let i = !0, + r = null, + a = !1, + s = !1; + if (e) { + const o = ue.get(e); + if (void 0 !== o.__useDefaultFramebuffer) se.bindFramebuffer(Pe.FRAMEBUFFER, null), i = !1; + else if (void 0 === o.__webglFramebuffer) de.setupRenderTarget(e); + else if (o.__hasExternalTextures) de.rebindTextures(e, ue.get(e.texture).__webglTexture, ue.get(e.depthTexture).__webglTexture); + else if (e.depthBuffer) { + const t = e.depthTexture; + if (o.__boundDepthTexture !== t) { + if (null !== t && ue.has(t) && (e.width !== t.image.width || e.height !== t.image.height)) throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size."); + de.setupDepthRenderbuffer(e) + } + } + const l = e.texture; + (l.isData3DTexture || l.isDataArrayTexture || l.isCompressedArrayTexture) && (s = !0); + const c = ue.get(e).__webglFramebuffer; + e.isWebGLCubeRenderTarget ? (r = Array.isArray(c[t]) ? c[t][n] : c[t], a = !0) : r = e.samples > 0 && !1 === de.useMultisampledRTT(e) ? ue.get(e).__webglMultisampledFramebuffer : Array.isArray(c) ? c[n] : c, T.copy(e.viewport), C.copy(e.scissor), I = e.scissorTest + } else T.copy(N).multiplyScalar(L).floor(), C.copy(F).multiplyScalar(L).floor(), I = O; + 0 !== n && (r = et); + if (se.bindFramebuffer(Pe.FRAMEBUFFER, r) && i && se.drawBuffers(e, r), se.viewport(T), se.scissor(C), se.setScissorTest(I), a) { + const i = ue.get(e.texture); + Pe.framebufferTexture2D(Pe.FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, Pe.TEXTURE_CUBE_MAP_POSITIVE_X + t, i.__webglTexture, n) + } else if (s) { + const i = ue.get(e.texture), + r = t; + Pe.framebufferTextureLayer(Pe.FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, i.__webglTexture, n, r) + } else if (null !== e && 0 !== n) { + const t = ue.get(e.texture); + Pe.framebufferTexture2D(Pe.FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, Pe.TEXTURE_2D, t.__webglTexture, n) + } + S = -1 + }, this.readRenderTargetPixels = function(e, t, n, i, r, a, s) { + if (!e || !e.isWebGLRenderTarget) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + let o = ue.get(e).__webglFramebuffer; + if (e.isWebGLCubeRenderTarget && void 0 !== s && (o = o[s]), o) { + se.bindFramebuffer(Pe.FRAMEBUFFER, o); + try { + const s = e.texture, + o = s.format, + l = s.type; + if (!ae.textureFormatReadable(o)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); + if (!ae.textureTypeReadable(l)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); + t >= 0 && t <= e.width - i && n >= 0 && n <= e.height - r && Pe.readPixels(t, n, i, r, Ce.convert(o), Ce.convert(l), a) + } finally { + const e = null !== E ? ue.get(E).__webglFramebuffer : null; + se.bindFramebuffer(Pe.FRAMEBUFFER, e) + } + } + }, this.readRenderTargetPixelsAsync = async function(e, t, n, i, r, a, s) { + if (!e || !e.isWebGLRenderTarget) throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + let o = ue.get(e).__webglFramebuffer; + if (e.isWebGLCubeRenderTarget && void 0 !== s && (o = o[s]), o) { + const s = e.texture, + l = s.format, + c = s.type; + if (!ae.textureFormatReadable(l)) throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format."); + if (!ae.textureTypeReadable(c)) throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type."); + if (t >= 0 && t <= e.width - i && n >= 0 && n <= e.height - r) { + se.bindFramebuffer(Pe.FRAMEBUFFER, o); + const e = Pe.createBuffer(); + Pe.bindBuffer(Pe.PIXEL_PACK_BUFFER, e), Pe.bufferData(Pe.PIXEL_PACK_BUFFER, a.byteLength, Pe.STREAM_READ), Pe.readPixels(t, n, i, r, Ce.convert(l), Ce.convert(c), 0); + const s = null !== E ? ue.get(E).__webglFramebuffer : null; + se.bindFramebuffer(Pe.FRAMEBUFFER, s); + const h = Pe.fenceSync(Pe.SYNC_GPU_COMMANDS_COMPLETE, 0); + return Pe.flush(), await + function(e, t, n) { + return new Promise((function(i, r) { + setTimeout((function a() { + switch (e.clientWaitSync(t, e.SYNC_FLUSH_COMMANDS_BIT, 0)) { + case e.WAIT_FAILED: + r(); + break; + case e.TIMEOUT_EXPIRED: + setTimeout(a, n); + break; + default: + i() + } + }), n) + })) + }(Pe, h, 4), Pe.bindBuffer(Pe.PIXEL_PACK_BUFFER, e), Pe.getBufferSubData(Pe.PIXEL_PACK_BUFFER, 0, a), Pe.deleteBuffer(e), Pe.deleteSync(h), a + } + throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.") + } + }, this.copyFramebufferToTexture = function(e, t = null, n = 0) { + !0 !== e.isTexture && (Pt("WebGLRenderer: copyFramebufferToTexture function signature has changed."), t = arguments[0] || null, e = arguments[1]); + const i = Math.pow(2, -n), + r = Math.floor(e.image.width * i), + a = Math.floor(e.image.height * i), + s = null !== t ? t.x : 0, + o = null !== t ? t.y : 0; + de.setTexture2D(e, 0), Pe.copyTexSubImage2D(Pe.TEXTURE_2D, n, 0, 0, s, o, r, a), se.unbindTexture() + }; + const tt = Pe.createFramebuffer(), + nt = Pe.createFramebuffer(); + this.copyTextureToTexture = function(e, t, n = null, i = null, r = 0, a = null) { + let s, o, l, c, h, u, d, f, p; + !0 !== e.isTexture && (Pt("WebGLRenderer: copyTextureToTexture function signature has changed."), i = arguments[0] || null, e = arguments[1], t = arguments[2], a = arguments[3] || 0, n = null), null === a && (0 !== r ? (Pt("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."), a = r, r = 0) : a = 0); + const m = e.isCompressedTexture ? e.mipmaps[a] : e.image; + if (null !== n) s = n.max.x - n.min.x, o = n.max.y - n.min.y, l = n.isBox3 ? n.max.z - n.min.z : 1, c = n.min.x, h = n.min.y, u = n.isBox3 ? n.min.z : 0; + else { + const t = Math.pow(2, -r); + s = Math.floor(m.width * t), o = Math.floor(m.height * t), l = e.isDataArrayTexture ? m.depth : e.isData3DTexture ? Math.floor(m.depth * t) : 1, c = 0, h = 0, u = 0 + } + null !== i ? (d = i.x, f = i.y, p = i.z) : (d = 0, f = 0, p = 0); + const g = Ce.convert(t.format), + A = Ce.convert(t.type); + let _; + t.isData3DTexture ? (de.setTexture3D(t, 0), _ = Pe.TEXTURE_3D) : t.isDataArrayTexture || t.isCompressedArrayTexture ? (de.setTexture2DArray(t, 0), _ = Pe.TEXTURE_2D_ARRAY) : (de.setTexture2D(t, 0), _ = Pe.TEXTURE_2D), Pe.pixelStorei(Pe.UNPACK_FLIP_Y_WEBGL, t.flipY), Pe.pixelStorei(Pe.UNPACK_PREMULTIPLY_ALPHA_WEBGL, t.premultiplyAlpha), Pe.pixelStorei(Pe.UNPACK_ALIGNMENT, t.unpackAlignment); + const v = Pe.getParameter(Pe.UNPACK_ROW_LENGTH), + w = Pe.getParameter(Pe.UNPACK_IMAGE_HEIGHT), + y = Pe.getParameter(Pe.UNPACK_SKIP_PIXELS), + x = Pe.getParameter(Pe.UNPACK_SKIP_ROWS), + b = Pe.getParameter(Pe.UNPACK_SKIP_IMAGES); + Pe.pixelStorei(Pe.UNPACK_ROW_LENGTH, m.width), Pe.pixelStorei(Pe.UNPACK_IMAGE_HEIGHT, m.height), Pe.pixelStorei(Pe.UNPACK_SKIP_PIXELS, c), Pe.pixelStorei(Pe.UNPACK_SKIP_ROWS, h), Pe.pixelStorei(Pe.UNPACK_SKIP_IMAGES, u); + const E = e.isDataArrayTexture || e.isData3DTexture, + S = t.isDataArrayTexture || t.isData3DTexture; + if (e.isDepthTexture) { + const n = ue.get(e), + i = ue.get(t), + m = ue.get(n.__renderTarget), + g = ue.get(i.__renderTarget); + se.bindFramebuffer(Pe.READ_FRAMEBUFFER, m.__webglFramebuffer), se.bindFramebuffer(Pe.DRAW_FRAMEBUFFER, g.__webglFramebuffer); + for (let n = 0; n < l; n++) E && (Pe.framebufferTextureLayer(Pe.READ_FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, ue.get(e).__webglTexture, r, u + n), Pe.framebufferTextureLayer(Pe.DRAW_FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, ue.get(t).__webglTexture, a, p + n)), Pe.blitFramebuffer(c, h, s, o, d, f, s, o, Pe.DEPTH_BUFFER_BIT, Pe.NEAREST); + se.bindFramebuffer(Pe.READ_FRAMEBUFFER, null), se.bindFramebuffer(Pe.DRAW_FRAMEBUFFER, null) + } else if (0 !== r || e.isRenderTargetTexture || ue.has(e)) { + const n = ue.get(e), + i = ue.get(t); + se.bindFramebuffer(Pe.READ_FRAMEBUFFER, tt), se.bindFramebuffer(Pe.DRAW_FRAMEBUFFER, nt); + for (let e = 0; e < l; e++) E ? Pe.framebufferTextureLayer(Pe.READ_FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, n.__webglTexture, r, u + e) : Pe.framebufferTexture2D(Pe.READ_FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, Pe.TEXTURE_2D, n.__webglTexture, r), S ? Pe.framebufferTextureLayer(Pe.DRAW_FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, i.__webglTexture, a, p + e) : Pe.framebufferTexture2D(Pe.DRAW_FRAMEBUFFER, Pe.COLOR_ATTACHMENT0, Pe.TEXTURE_2D, i.__webglTexture, a), 0 !== r ? Pe.blitFramebuffer(c, h, s, o, d, f, s, o, Pe.COLOR_BUFFER_BIT, Pe.NEAREST) : S ? Pe.copyTexSubImage3D(_, a, d, f, p + e, c, h, s, o) : Pe.copyTexSubImage2D(_, a, d, f, c, h, s, o); + se.bindFramebuffer(Pe.READ_FRAMEBUFFER, null), se.bindFramebuffer(Pe.DRAW_FRAMEBUFFER, null) + } else S ? e.isDataTexture || e.isData3DTexture ? Pe.texSubImage3D(_, a, d, f, p, s, o, l, g, A, m.data) : t.isCompressedArrayTexture ? Pe.compressedTexSubImage3D(_, a, d, f, p, s, o, l, g, m.data) : Pe.texSubImage3D(_, a, d, f, p, s, o, l, g, A, m) : e.isDataTexture ? Pe.texSubImage2D(Pe.TEXTURE_2D, a, d, f, s, o, g, A, m.data) : e.isCompressedTexture ? Pe.compressedTexSubImage2D(Pe.TEXTURE_2D, a, d, f, m.width, m.height, g, m.data) : Pe.texSubImage2D(Pe.TEXTURE_2D, a, d, f, s, o, g, A, m); + Pe.pixelStorei(Pe.UNPACK_ROW_LENGTH, v), Pe.pixelStorei(Pe.UNPACK_IMAGE_HEIGHT, w), Pe.pixelStorei(Pe.UNPACK_SKIP_PIXELS, y), Pe.pixelStorei(Pe.UNPACK_SKIP_ROWS, x), Pe.pixelStorei(Pe.UNPACK_SKIP_IMAGES, b), 0 === a && t.generateMipmaps && Pe.generateMipmap(_), se.unbindTexture() + }, this.copyTextureToTexture3D = function(e, t, n = null, i = null, r = 0) { + return !0 !== e.isTexture && (Pt("WebGLRenderer: copyTextureToTexture3D function signature has changed."), n = arguments[0] || null, i = arguments[1] || null, e = arguments[2], t = arguments[3], r = arguments[4] || 0), Pt('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'), this.copyTextureToTexture(e, t, n, i, r) + }, this.initRenderTarget = function(e) { + void 0 === ue.get(e).__webglFramebuffer && de.setupRenderTarget(e) + }, this.initTexture = function(e) { + e.isCubeTexture ? de.setTextureCube(e, 0) : e.isData3DTexture ? de.setTexture3D(e, 0) : e.isDataArrayTexture || e.isCompressedArrayTexture ? de.setTexture2DArray(e, 0) : de.setTexture2D(e, 0), se.unbindTexture() + }, this.resetState = function() { + x = 0, b = 0, E = null, se.reset(), Ie.reset() + }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + get coordinateSystem() { + return ht + } + get outputColorSpace() { + return this._outputColorSpace + } + set outputColorSpace(e) { + this._outputColorSpace = e; + const t = this.getContext(); + t.drawingBufferColorspace = Ut._getDrawingBufferColorSpace(e), t.unpackColorSpace = Ut._getUnpackColorSpace() + } + } + var tm; + ! function(e) { + e[e.ImperialUnitsEnabled = 0] = "ImperialUnitsEnabled", e[e.ResetHintEnabled = 1] = "ResetHintEnabled", e[e.GhostCarEnabled = 2] = "GhostCarEnabled", e[e.DefaultCameraMode = 3] = "DefaultCameraMode", e[e.CockpitCameraToggle = 4] = "CockpitCameraToggle", e[e.Checkpoints = 5] = "Checkpoints", e[e.Timer = 6] = "Timer", e[e.Speedometer = 7] = "Speedometer", e[e.Language = 8] = "Language", e[e.CarShadowQuality = 9] = "CarShadowQuality", e[e.TrackShadowEnabled = 10] = "TrackShadowEnabled", e[e.CloudsEnabled = 11] = "CloudsEnabled", e[e.ParticlesEnabled = 12] = "ParticlesEnabled", e[e.SkidmarksEnabled = 13] = "SkidmarksEnabled", e[e.RenderScale = 14] = "RenderScale", e[e.Antialiasing = 15] = "Antialiasing", e[e.SoundEffectVolume = 16] = "SoundEffectVolume", e[e.MusicVolume = 17] = "MusicVolume", e[e.CheckpointVolume = 18] = "CheckpointVolume" + }(tm || (tm = {})); + const nm = tm, + im = JSON.parse('{"rE":"0.5.0","l$":{"r":5,"M":4}}'); + const rm = !1, + am = im.l$.r; + if (!Number.isSafeInteger(am) || am < 1) throw new Error("package.json beta version property must be a positive integer"); + let sm = ""; + im.rE; + const om = im.l$.M; + if (!Number.isSafeInteger(om) || om < 1) throw new Error("package.json beta physicsVersion property must be a positive integer"); + var lm, cm, hm, um, dm, fm, pm, mm, gm, Am, _m, vm = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }, + wm = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + ym = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class xm { + constructor(e, t, n = !0, i = !1) { + var r; + lm.add(this), cm.set(this, void 0), hm.set(this, void 0), um.set(this, void 0), dm.set(this, void 0), fm.set(this, new cr), pm.set(this, void 0), mm.set(this, new Zt(8, 10, 10)), gm.set(this, []), wm(this, cm, e, "f"), wm(this, hm, t, "f"), wm(this, um, new em({ + antialias: null === (r = null == t ? void 0 : t.getSettingBoolean(nm.Antialiasing)) || void 0 === r || r, + powerPreference: "high-performance", + canvas: e, + alpha: i + }), "f"), ym(this, um, "f").outputColorSpace = Ke, ym(this, um, "f").shadowMap.enabled = !0, ym(this, um, "f").debug.checkShaderErrors = rm, wm(this, dm, new _r, "f"), n && (ym(this, dm, "f").fog = new Ar(10211839, 0, xm.maxViewDistance)), ym(this, dm, "f").add(new ts(3891597, 11714755, 4.7)), wm(this, pm, new ms(16777215, 4.7), "f"), ym(this, pm, "f").position.copy(ym(this, mm, "f")), ym(this, pm, "f").castShadow = !0, ym(this, pm, "f").shadow.camera.top = 10, ym(this, pm, "f").shadow.camera.right = 10, ym(this, pm, "f").shadow.camera.bottom = -10, ym(this, pm, "f").shadow.camera.left = -10, ym(this, pm, "f").shadow.camera.near = 1, ym(this, pm, "f").shadow.camera.far = 50, ym(this, pm, "f").shadow.mapSize.width = 2048, ym(this, pm, "f").shadow.mapSize.height = 2048, ym(this, dm, "f").add(ym(this, pm, "f")), ym(this, dm, "f").add(ym(this, pm, "f").target), document.addEventListener("fullscreenchange", (() => { + ym(this, lm, "m", _m).call(this) + })), null != window.electron && window.electron.addFullscreenChangeListener((() => { + ym(this, lm, "m", _m).call(this) + })) + } + clear() { + ym(this, um, "f").clear() + } + update(e, t) { + var n, i, r; + const a = null !== (i = null === (n = ym(this, hm, "f")) || void 0 === n ? void 0 : n.getSettingInteger(nm.CarShadowQuality)) && void 0 !== i ? i : 0; + if (!Number.isFinite(a) || a <= 0) ym(this, pm, "f").castShadow = !1; + else { + ym(this, pm, "f").castShadow = !0; + const e = Math.min(a, ym(this, um, "f").capabilities.maxTextureSize); + ym(this, pm, "f").shadow.mapSize.width == e && ym(this, pm, "f").shadow.mapSize.height == e || (ym(this, pm, "f").shadow.mapSize.setScalar(e), null === (r = ym(this, pm, "f").shadow.map) || void 0 === r || r.dispose(), ym(this, pm, "f").shadow.map = null) + } + ym(this, mm, "f").copy(t.getSunPosition()), ym(this, pm, "f").position.addVectors(e, ym(this, mm, "f").multiplyScalar(12.5)), ym(this, pm, "f").target.position.copy(e), ym(this, lm, "m", Am).call(this), ym(this, um, "f").render(ym(this, dm, "f"), ym(this, fm, "f")) + } + getShadowDirection() { + return (new Zt).subVectors(ym(this, pm, "f").position, ym(this, pm, "f").target.position).normalize() + } + getLightTarget() { + return ym(this, pm, "f").target.position + } + getMaxAnisotropy() { + return ym(this, um, "f").capabilities.getMaxAnisotropy() + } + get isFullscreen() { + return null != window.electron ? window.electron.isFullscreen() : null != document.fullscreenElement + } + toggleFullscreen() { + return vm(this, void 0, void 0, (function*() { + this.isFullscreen ? null != window.electron ? window.electron.setFullscreen(!1) : yield document.exitFullscreen(): null != window.electron ? window.electron.setFullscreen(!0) : yield document.body.requestFullscreen() + })) + } + addFullscreenChangeListener(e) { + ym(this, gm, "f").push(e) + } + removeFullscreenChangeListener(e) { + const t = ym(this, gm, "f").indexOf(e); + t >= 0 && ym(this, gm, "f").splice(t, 1) + } + setCamera(e) { + wm(this, fm, e, "f") + } + get camera() { + return ym(this, fm, "f") + } + get canvas() { + return ym(this, cm, "f") + } + setAnimationLoop(e) { + ym(this, um, "f").setAnimationLoop(e) + } + get scene() { + return ym(this, dm, "f") + } + } + cm = new WeakMap, hm = new WeakMap, um = new WeakMap, dm = new WeakMap, fm = new WeakMap, pm = new WeakMap, mm = new WeakMap, gm = new WeakMap, lm = new WeakSet, Am = function() { + var e, t; + let n = null !== (t = null === (e = ym(this, hm, "f")) || void 0 === e ? void 0 : e.getSettingFloat(nm.RenderScale)) && void 0 !== t ? t : 1; + n = Number.isFinite(n) ? Math.min(Math.max(n, .25), 2) : 1; + const i = window.devicePixelRatio * n; + if (ym(this, um, "f").getPixelRatio() != i && ym(this, um, "f").setPixelRatio(i), ym(this, fm, "f") instanceof cr) { + const e = window.innerWidth / window.innerHeight, + t = new Et; + ym(this, um, "f").getSize(t), t.width == window.innerWidth && t.height == window.innerHeight && ym(this, fm, "f").aspect == e || (ym(this, um, "f").setSize(window.innerWidth, window.innerHeight), ym(this, fm, "f").aspect = e, ym(this, fm, "f").updateProjectionMatrix()) + } + }, _m = function() { + for (const e of ym(this, gm, "f")) e() + }, xm.maxViewDistance = 1e4; + const bm = xm; + var Em, Sm, Mm, Tm, Cm, Im = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Rm { + constructor() { + Em.add(this), Tm.set(this, new cr(Im(Sm, Sm, "f", Mm), 1, .5, bm.maxViewDistance)) + } + reset(e, t, n) { + this.update(e, t, 0), Im(this, Tm, "f").fov = Im(this, Em, "m", Cm).call(this, null != n ? n : 0), Im(this, Tm, "f").updateProjectionMatrix() + } + update(e, t, n) { + Im(this, Tm, "f").fov = Im(this, Em, "m", Cm).call(this, n), Im(this, Tm, "f").updateProjectionMatrix(); + const i = new Zt(0, 1.1, .4); + Im(this, Tm, "f").position.addVectors(e, i.applyQuaternion(t)), Im(this, Tm, "f").quaternion.copy(t), Im(this, Tm, "f").quaternion.multiply((new Kt).setFromEuler(new Fn(0, Math.PI, 0))), Im(this, Tm, "f").updateMatrix() + } + get camera() { + return Im(this, Tm, "f") + } + } + Sm = Rm, Tm = new WeakMap, Em = new WeakSet, Cm = function(e) { + const t = Math.min(1, Math.abs(e) / 400); + return Im(Sm, Sm, "f", Mm) + (80 - Im(Sm, Sm, "f", Mm)) * Math.pow(t, 1) / (Math.pow(t, 1) + Math.pow(1 - t, 1)) + }, Mm = { + value: 70 + }; + const Pm = Rm; + class Bm { + constructor(e, t, n, i) { + this.primary = e, this.secondary = t, this.frame = n, this.rims = i + } + static random() { + const e = 360 * Math.random(), + t = 100 * (1 - Math.pow(Math.random(), 2)), + n = 100 * (.05 + .25 * (1 - Math.pow(Math.random(), 2))); + return new Bm(new wi("hsl(" + e.toString() + "," + t.toString() + "%," + n.toString() + "%)"), new wi("#ffffff"), new wi("#131313"), new wi("#666666")) + } + serialize() { + return this.primary.getHexString() + this.secondary.getHexString() + this.frame.getHexString() + this.rims.getHexString() + } + static deserialize(e) { + const t = []; + for (let n = 0; n < 4; n++) { + const i = e.substring(6 * n, 6 * (n + 1)); + /^[0-9a-f]{6}$/i.test(i) ? t.push(new wi("#" + i)) : t.push(new wi("#555")) + } + return new Bm(t[0], t[1], t[2], t[3]) + } + } + const Dm = Bm; + var Lm, Um, km, Nm, Fm, Om, zm, Wm = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Hm = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class Vm { + constructor() { + Lm.add(this), Nm.set(this, new cr(Hm(Um, Um, "f", km), 1, .5, 1e4)), Fm.set(this, new Zt), Om.set(this, new Zt(0, 1, 0)) + } + reset(e, t, n) { + Wm(this, Fm, new Zt(1e-5, 0, -1), "f"), Hm(this, Fm, "f").applyQuaternion(t), Hm(this, Fm, "f").add(e), Wm(this, Om, new Zt(0, 1, 0), "f"), Hm(this, Om, "f").applyQuaternion(t), this.update(0, e, t, 0), Hm(this, Nm, "f").fov = Hm(this, Lm, "m", zm).call(this, null != n ? n : 0), Hm(this, Nm, "f").updateProjectionMatrix() + } + update(e, t, n, i) { + Hm(this, Nm, "f").fov = Hm(this, Lm, "m", zm).call(this, i), Hm(this, Nm, "f").updateProjectionMatrix(); + const r = new Zt(0, 1, 0); + r.applyQuaternion(n); + const a = Math.min(1, 5 * e); + Hm(this, Om, "f").set(a * r.x + (1 - a) * Hm(this, Om, "f").x, a * r.y + (1 - a) * Hm(this, Om, "f").y, a * r.z + (1 - a) * Hm(this, Om, "f").z); + const s = (new Zt).subVectors(t, Hm(this, Fm, "f")); + s.normalize(); + const o = 5.5; + Hm(this, Nm, "f").position.x = t.x - s.x * o + 2 * Hm(this, Om, "f").x, Hm(this, Nm, "f").position.y = Math.max(.25, t.y - s.y * o + 2 * Hm(this, Om, "f").y), Hm(this, Nm, "f").position.z = t.z - s.z * o + 2 * Hm(this, Om, "f").z, Hm(this, Nm, "f").lookAt(t.x + 2 * Hm(this, Om, "f").x * .9, t.y + 2 * Hm(this, Om, "f").y * .9, t.z + 2 * Hm(this, Om, "f").z * .9), Hm(this, Nm, "f").updateMatrix(), Hm(this, Fm, "f").set(t.x - s.x * o, t.y - s.y * o, t.z - s.z * o) + } + get camera() { + return Hm(this, Nm, "f") + } + } + Um = Vm, Nm = new WeakMap, Fm = new WeakMap, Om = new WeakMap, Lm = new WeakSet, zm = function(e) { + const t = Math.abs(e) / 400; + return Hm(Um, Um, "f", km) + (100 - Hm(Um, Um, "f", km)) * Math.pow(t, 1) / (Math.pow(t, 1) + Math.pow(1 - t, 1)) + }, km = { + value: 70 + }; + const Gm = Vm; + var Qm, Xm, jm, qm, Ym, Km, Zm, Jm, $m = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + eg = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class tg { + constructor(e) { + Xm.set(this, void 0), jm.set(this, void 0), qm.set(this, []), Ym.set(this, 256), Km.set(this, new Zt(0, 1, 0)), $m(this, Xm, e, "f"), $m(this, jm, new Qr(eg(Qm, Qm, "f", Zm), eg(Qm, Qm, "f", Jm), eg(this, Ym, "f")), "f"), eg(this, jm, "f").frustumCulled = !1, e.scene.add(eg(this, jm, "f")), this.clear() + } + dispose() { + eg(this, jm, "f").dispose(), eg(this, Xm, "f").scene.remove(eg(this, jm, "f")) + } + clear() { + eg(this, qm, "f").length = 0, eg(this, jm, "f").count = 0, eg(this, jm, "f").instanceMatrix.needsUpdate = !0 + } + spawn(e, t, n) { + eg(this, qm, "f").push({ + x: e + .25 * (Math.random() - .5), + y: t + .25 * (Math.random() - .5), + z: n + .25 * (Math.random() - .5), + vx: .5 * (Math.random() - .5), + vy: .5 * (Math.random() - .5), + vz: .5 * (Math.random() - .5), + rotation: Math.random() * Math.PI * 2, + lifetime: .5 + }) + } + update(e) { + for (let t = eg(this, qm, "f").length - 1; t >= 0; --t) { + const n = eg(this, qm, "f")[t]; + n.vy += 15 * e, n.x += n.vx * e, n.y += n.vy * e, n.z += n.vz * e, n.lifetime -= e, n.lifetime <= 0 && eg(this, qm, "f").splice(t, 1) + } + let t = !1; + eg(this, jm, "f").count != eg(this, qm, "f").length && (eg(this, jm, "f").count = Math.min(eg(this, qm, "f").length, eg(this, Ym, "f")), t = !0); + for (let e = 0; e < eg(this, jm, "f").count; ++e) { + const t = eg(this, qm, "f")[eg(this, qm, "f").length - 1 - e], + n = new Cn; + n.lookAt(new Zt(t.x, t.y, t.z), eg(this, Xm, "f").camera.position, eg(this, Km, "f")), n.setPosition(t.x, t.y, t.z), n.multiply((new Cn).makeRotationZ(t.rotation)); + const i = .5 + 2 * (.5 - t.lifetime); + n.scale(new Zt(i, i, i)), eg(this, jm, "f").setMatrixAt(e, n) + }(t || eg(this, qm, "f").length > 0) && (eg(this, jm, "f").instanceMatrix.needsUpdate = !0) + } + static initResources(e) { + e.addResource(); + const t = (new $a).load("images/smoke.png", (() => { + e.loadedResource() + })); + eg(this, Qm, "f", Jm).map = t + } + } + Qm = tg, Xm = new WeakMap, jm = new WeakMap, qm = new WeakMap, Ym = new WeakMap, Km = new WeakMap, Zm = { + value: (() => { + const e = new ya; + return e.rotateX(Math.PI), e + })() + }, Jm = { + value: new Ei({ + opacity: .3, + depthWrite: !1, + transparent: !0 + }) + }; + const ng = tg; + var ig, rg, ag, sg, og, lg, cg, hg, ug, dg, fg, pg, mg, gg, Ag = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + _g = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class vg { + constructor(e, t, n) { + ig.add(this), ag.set(this, void 0), sg.set(this, void 0), og.set(this, void 0), lg.set(this, void 0), cg.set(this, void 0), hg.set(this, void 0), ug.set(this, 1e3), dg.set(this, 0), fg.set(this, null), pg.set(this, null), Ag(this, ag, e, "f"), Ag(this, sg, t, "f"), Ag(this, og, n, "f"); + const i = new Oi; + Ag(this, cg, new Float32Array(6 * _g(this, ug, "f") * 3), "f"), Ag(this, hg, new Ci(_g(this, cg, "f"), 3), "f"), i.setAttribute("position", _g(this, hg, "f")), Ag(this, lg, new Zi(i, _g(rg, rg, "f", mg)), "f"), _g(this, lg, "f").frustumCulled = !1, _g(this, ag, "f").scene.add(_g(this, lg, "f")) + } + dispose() { + _g(this, lg, "f").geometry.dispose(), _g(this, ag, "f").scene.remove(_g(this, lg, "f")) + } + clear() { + for (let e = 0; e < _g(this, cg, "f").length; ++e) _g(this, cg, "f")[e] = 0; + _g(this, hg, "f").needsUpdate = !0, Ag(this, dg, 0, "f"), this.break() + } + break () { + Ag(this, fg, null, "f"), Ag(this, pg, null, "f") + } + spawn(e, t, n, i) { + var r, a; + const s = _g(this, fg, "f"), + o = _g(this, pg, "f"); + let l = new Zt(e, t, n).add(new Zt(.172, -.3, 0).applyQuaternion(i)), + c = new Zt(e, t, n).add(new Zt(-.172, -.3, 0).applyQuaternion(i)); + const h = new Zt(0, -1, 0).applyQuaternion(i), + u = _g(this, ig, "m", gg).call(this, l, h, 0, .05), + d = _g(this, ig, "m", gg).call(this, c, h, 0, .05); + if (null != u && null != d) { + if (l = u.point, c = d.point, null != s && null != o) { + const e = (Ag(this, dg, (a = _g(this, dg, "f"), r = a++, a), "f"), r); + _g(this, cg, "f")[6 * e * 3 + 0] = l.x, _g(this, cg, "f")[6 * e * 3 + 1] = l.y, _g(this, cg, "f")[6 * e * 3 + 2] = l.z, _g(this, cg, "f")[6 * e * 3 + 3] = s.x, _g(this, cg, "f")[6 * e * 3 + 4] = s.y, _g(this, cg, "f")[6 * e * 3 + 5] = s.z, _g(this, cg, "f")[6 * e * 3 + 6] = c.x, _g(this, cg, "f")[6 * e * 3 + 7] = c.y, _g(this, cg, "f")[6 * e * 3 + 8] = c.z, _g(this, cg, "f")[6 * e * 3 + 9] = c.x, _g(this, cg, "f")[6 * e * 3 + 10] = c.y, _g(this, cg, "f")[6 * e * 3 + 11] = c.z, _g(this, cg, "f")[6 * e * 3 + 12] = s.x, _g(this, cg, "f")[6 * e * 3 + 13] = s.y, _g(this, cg, "f")[6 * e * 3 + 14] = s.z, _g(this, cg, "f")[6 * e * 3 + 15] = o.x, _g(this, cg, "f")[6 * e * 3 + 16] = o.y, _g(this, cg, "f")[6 * e * 3 + 17] = o.z, _g(this, hg, "f").needsUpdate = !0, _g(this, dg, "f") >= _g(this, ug, "f") - 1 && Ag(this, dg, 0, "f") + } + Ag(this, fg, l, "f"), Ag(this, pg, c, "f") + } else this.break() + } + } + rg = vg, ag = new WeakMap, sg = new WeakMap, og = new WeakMap, lg = new WeakMap, cg = new WeakMap, hg = new WeakMap, ug = new WeakMap, dg = new WeakMap, fg = new WeakMap, pg = new WeakMap, ig = new WeakSet, gg = function(e, t, n, i) { + const r = new Ts(e, t, n, i), + a = _g(this, og, "f").shortRaycast(r); + if (null != a) return a; + const s = _g(this, sg, "f").raycast(r); + return null != s ? s : null + }, mg = { + value: new Ei({ + color: 1118481, + side: 2, + polygonOffset: !0, + polygonOffsetFactor: -1, + polygonOffsetUnits: 0 + }) + }; + const wg = vg; + var yg, xg, bg, Eg, Sg, Mg, Tg, Cg, Ig, Rg, Pg, Bg, Dg, Lg, Ug, kg, Ng, Fg, Og, zg, Wg, Hg, Vg, Gg, Qg, Xg, jg, qg, Yg, Kg, Zg, Jg, $g, eA, tA, nA, iA, rA, aA, sA, oA, lA, cA, hA, uA, dA, fA, pA, mA, gA, AA, _A, vA, wA, yA, xA, bA, EA, SA, MA, TA = function(e, t, n, i) { + return new(n || (n = Promise))((function(r, a) { + function s(e) { + try { + l(i.next(e)) + } catch (e) { + a(e) + } + } + + function o(e) { + try { + l(i.throw(e)) + } catch (e) { + a(e) + } + } + + function l(e) { + var t; + e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) { + e(t) + }))).then(s, o) + } + l((i = i.apply(e, t || [])).next()) + })) + }, + CA = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + IA = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class RA { + constructor(e, t, n, i, r, a, s, o, l) { + var c; + if (yg.add(this), bg.set(this, void 0), Eg.set(this, null), Sg.set(this, 1), Mg.set(this, null), Tg.set(this, []), Cg.set(this, null), Ig.set(this, null), Rg.set(this, null), Pg.set(this, []), this.notificationAudioEnabled = !1, Bg.set(this, void 0), Dg.set(this, void 0), Lg.set(this, void 0), Ug.set(this, !1), kg.set(this, void 0), Ng.set(this, void 0), Fg.set(this, void 0), Og.set(this, void 0), zg.set(this, []), Wg.set(this, []), Hg.set(this, []), Vg.set(this, [0, 0, 0, 0]), Gg.set(this, [0, 0, 0, 0]), Qg.set(this, [0, 0, 0, 0]), Xg.set(this, void 0), jg.set(this, void 0), qg.set(this, null), Yg.set(this, null), Kg.set(this, []), Zg.set(this, null), Jg.set(this, void 0), $g.set(this, void 0), eA.set(this, void 0), tA.set(this, void 0), nA.set(this, void 0), iA.set(this, void 0), rA.set(this, void 0), aA.set(this, []), sA.set(this, null), oA.set(this, [.075, .075, .075, .075]), lA.set(this, void 0), cA.set(this, null), hA.set(this, !1), CA(this, bg, a, "f"), CA(this, Xg, r, "f"), CA(this, nA, s, "f"), CA(this, iA, o, "f"), CA(this, rA, l, "f"), CA(this, Lg, e, "f"), (null == l ? void 0 : l.getSettingBoolean(nm.ParticlesEnabled)) ? CA(this, lA, new ng(r), "f") : CA(this, lA, null, "f"), null != IA(this, nA, "f") && null != IA(this, iA, "f") && CA(this, aA, [new wg(IA(this, Xg, "f"), IA(this, nA, "f"), IA(this, iA, "f")), new wg(IA(this, Xg, "f"), IA(this, nA, "f"), IA(this, iA, "f")), new wg(IA(this, Xg, "f"), IA(this, nA, "f"), IA(this, iA, "f")), new wg(IA(this, Xg, "f"), IA(this, nA, "f"), IA(this, iA, "f"))], "f"), CA(this, Bg, new Gm, "f"), IA(this, Bg, "f").reset(t.position, t.quaternion), r.scene.add(IA(this, Bg, "f").camera), CA(this, Dg, new Pm, "f"), IA(this, Dg, "f").reset(t.position, t.quaternion), r.scene.add(IA(this, Dg, "f").camera), null == xg.models) throw new Error("Car model isn't loaded yet"); + if (null != IA(this, Lg, "f") && null != IA(this, nA, "f") && null != IA(this, iA, "f")) CA(this, kg, IA(this, Lg, "f").createCar(t, IA(this, nA, "f").getMountainVertices(), IA(this, nA, "f").getMountainOffset(), IA(this, iA, "f").getTrackData(), n, (e => { + this.setCarState(e) + })), "f"); + else { + const e = [new Zt(.627909, .27 - xg.suspensionResetLengthFront, 1.3478).applyQuaternion(t.quaternion).add(t.position), new Zt(-.627909, .27 - xg.suspensionResetLengthFront, 1.3478).applyQuaternion(t.quaternion).add(t.position), new Zt(.720832, .27 - xg.suspensionResetLengthRear, -1.52686).applyQuaternion(t.quaternion).add(t.position), new Zt(-.720832, .27 - xg.suspensionResetLengthRear, -1.52686).applyQuaternion(t.quaternion).add(t.position)], + n = [(new Kt).setFromEuler((new Fn).set(0, Math.PI, 0)).multiply(t.quaternion), (new Kt).setFromEuler((new Fn).set(0, Math.PI, 0)).multiply(t.quaternion), (new Kt).setFromEuler((new Fn).set(0, Math.PI, 0)).multiply(t.quaternion), (new Kt).setFromEuler((new Fn).set(0, Math.PI, 0)).multiply(t.quaternion)]; + CA(this, kg, { + id: 0, + frames: 0, + speedKmh: 0, + hasStarted: !1, + finishFrames: null, + nextCheckpointIndex: 0, + hasCheckpointToRespawnAt: !1, + position: { + x: t.position.x, + y: t.position.y, + z: t.position.z + }, + quaternion: { + x: t.quaternion.x, + y: t.quaternion.y, + z: t.quaternion.z, + w: t.quaternion.w + }, + collisionImpulses: [], + wheelInContact: [!1, !1, !1, !1], + wheelSuspensionLength: [xg.suspensionResetLengthFront, xg.suspensionResetLengthFront, xg.suspensionResetLengthRear, xg.suspensionResetLengthRear], + wheelSuspensionVelocity: [0, 0, 0, 0], + wheelRotation: [0, 0, 0, 0], + wheelDeltaRotation: [0, 0, 0, 0], + wheelSkidInfo: [0, 0, 0, 0], + wheelPosition: e, + wheelQuaternion: n, + brakeLightEnabled: !1, + controls: { + up: !1, + right: !1, + down: !1, + left: !1, + reset: !1 + } + }, "f") + } + if (CA(this, Ng, i, "f"), null == n) CA(this, Fg, null != IA(this, Ng, "f"), "f"), CA(this, Og, new Ch, "f"); + else { + if (null != IA(this, Ng, "f")) throw new Error("Can't control car when recording is set"); + CA(this, Fg, !1, "f"), CA(this, Og, n, "f") + } + CA(this, jg, new pr, "f"), IA(this, jg, "f").add(xg.models.chassis.clone()), IA(this, jg, "f").add(xg.models.suspension.clone()), IA(this, jg, "f").add(xg.models.wheelFL.clone()), IA(this, jg, "f").add(xg.models.wheelFR.clone()), IA(this, jg, "f").add(xg.models.wheelBL.clone()), IA(this, jg, "f").add(xg.models.wheelBR.clone()); + for (const e of IA(this, jg, "f").children) { + const t = e; + Array.isArray(t.material) ? t.material = t.material.map((e => e.clone())) : t.material = t.material.clone(), t.castShadow = !0, t.receiveShadow = !0, t.frustumCulled = !1 + } + IA(this, Xg, "f").scene.add(IA(this, jg, "f")), CA(this, qg, IA(this, jg, "f").getObjectByName("Body"), "f"), CA(this, Yg, IA(this, jg, "f").getObjectByName("Suspension"), "f"); + { + const e = document.createElement("canvas"); + e.width = 2048, e.height = 2048; + const t = e.getContext("2d"); + if (null == t) throw new Error("Failed to get context for car texture"); + const n = new Gt(e); + let i; + n.flipY = !1, n.anisotropy = IA(this, Xg, "f").getMaxAnisotropy(), n.needsUpdate = !0, CA(this, Jg, t, "f"), CA(this, $g, n, "f"), CA(this, tA, Dm.random(), "f"), IA(this, yg, "m", dA).call(this), CA(this, eA, { + value: new Zt(0, 0, 0) + }, "f"), i = Array.isArray(IA(this, qg, "f").material) ? IA(this, qg, "f").material : [IA(this, qg, "f").material]; + for (const e of i) "Main" == e.name ? e.onBeforeCompile = e => { + e.fragmentShader = "uniform sampler2D carColorPattern;\nuniform vec3 carColorSecondary;\n" + e.fragmentShader, e.fragmentShader = e.fragmentShader.replace("vec4 diffuseColor = vec4( diffuse, opacity );", "float colorSource = texture(carColorPattern, vUv).a;\nvec4 diffuseColor = vec4( carColorSecondary * colorSource + diffuse * (1.0 - colorSource), opacity );"), e.uniforms.carColorPattern = { + value: n + }, e.uniforms.carColorSecondary = IA(this, eA, "f"), null == e.defines && (e.defines = {}), e.defines.USE_UV = !0 + } : "Metal" == e.name ? e.needsUpdate = !0 : "BrakeLight" == e.name && CA(this, Zg, e, "f") + } + IA(this, Yg, "f").geometry.morphAttributes.position = []; + const h = IA(this, Yg, "f"), + u = xg.models.suspensionFL, + d = xg.models.suspensionFR, + f = xg.models.suspensionBL, + p = xg.models.suspensionBR; + for (const e of IA(this, jg, "f").children) + if (e != IA(this, qg, "f") && e != IA(this, Yg, "f")) { + const t = e; + if (!(u.geometry.attributes.position instanceof Ci && d.geometry.attributes.position instanceof Ci && f.geometry.attributes.position instanceof Ci && p.geometry.attributes.position instanceof Ci)) throw new Error("Vertices must use BufferAttribute"); + const n = u.geometry.attributes.position.array, + i = d.geometry.attributes.position.array, + r = f.geometry.attributes.position.array, + a = p.geometry.attributes.position.array, + s = h.geometry.morphAttributes.position; + if ("WheelFL" == t.name) s.push(new Ci(n, 3)); + else if ("WheelFR" == t.name) s.push(new Ci(i, 3)); + else if ("WheelBL" == t.name) s.push(new Ci(r, 3)); + else { + if ("WheelBR" != t.name) throw new Error("Unidentified wheel"); + s.push(new Ci(a, 3)) + } + IA(this, Kg, "f").push(t) + } IA(this, Yg, "f").updateMorphTargets(), null != IA(this, Ng, "f") && (null === (c = IA(this, Lg, "f")) || void 0 === c || c.controlCar(IA(this, kg, "f").id, IA(this, Ng, "f").up, IA(this, Ng, "f").right, IA(this, Ng, "f").down, IA(this, Ng, "f").left, IA(this, Ng, "f").reset), IA(this, Ng, "f").addChangeCallback(CA(this, cA, (e => { + var t; + null === (t = IA(this, Lg, "f")) || void 0 === t || t.controlCar(IA(this, kg, "f").id, e.up, e.right, e.down, e.left, e.reset) + }), "f"))) + } + dispose() { + var e, t, n; + CA(this, hA, !0, "f"), IA(this, yg, "m", uA).call(this), IA(this, Xg, "f").scene.remove(IA(this, Bg, "f").camera), IA(this, Xg, "f").scene.remove(IA(this, Dg, "f").camera), null === (e = IA(this, lA, "f")) || void 0 === e || e.dispose(); + for (const e of IA(this, aA, "f")) e.dispose(); + IA(this, aA, "f").length = 0, IA(this, Xg, "f").scene.remove(IA(this, jg, "f")), IA(this, $g, "f").dispose(), null === (t = IA(this, Lg, "f")) || void 0 === t || t.deleteCar(IA(this, kg, "f").id), null != IA(this, cA, "f") && (null === (n = IA(this, Ng, "f")) || void 0 === n || n.removeChangeCallback(IA(this, cA, "f"))) + } + addResetCallback(e) { + IA(this, zg, "f").push(e) + } + addCheckpointCallback(e) { + IA(this, Wg, "f").push(e) + } + addFinishCallback(e) { + IA(this, Hg, "f").push(e) + } + getChassisMatrix() { + return null != IA(this, qg, "f") ? IA(this, qg, "f").matrix : null + } + getSpeedKmh() { + return IA(this, kg, "f").speedKmh + } + start() { + var e; + null === (e = IA(this, Lg, "f")) || void 0 === e || e.startCar(IA(this, kg, "f").id, null) + } + hasStarted() { + return IA(this, kg, "f").hasStarted + } + hasFinished() { + return null != IA(this, kg, "f").finishFrames + } + getFinishTime() { + return null == IA(this, kg, "f").finishFrames ? null : new Kh(IA(this, kg, "f").finishFrames) + } + getRecording() { + return IA(this, Og, "f") + } + getTime() { + return new Kh(IA(this, kg, "f").frames) + } + getNextCheckpointIndex() { + return IA(this, kg, "f").nextCheckpointIndex + } + hasCheckpointToRespawnAt() { + return IA(this, kg, "f").hasCheckpointToRespawnAt + } + getPosition() { + return new Zt(IA(this, kg, "f").position.x, IA(this, kg, "f").position.y, IA(this, kg, "f").position.z) + } + getQuaternion() { + return new Kt(IA(this, kg, "f").quaternion.x, IA(this, kg, "f").quaternion.y, IA(this, kg, "f").quaternion.z, IA(this, kg, "f").quaternion.w) + } + getMatrix4() { + const e = this.getPosition(), + t = this.getQuaternion(), + n = (new Cn).makeRotationFromQuaternion(t); + return n.setPosition(e), n + } + get isPaused() { + return IA(this, Ug, "f") + } + set isPaused(e) { + var t; + IA(this, Ug, "f") != e && (null === (t = IA(this, Lg, "f")) || void 0 === t || t.pauseCar(IA(this, kg, "f").id, e), CA(this, Ug, e, "f")) + } + getControls() { + return null != IA(this, Ng, "f") ? IA(this, Ng, "f").getControls() : IA(this, kg, "f").controls + } + getColors() { + return IA(this, tA, "f") + } + setColors(e) { + if (IA(this, eA, "f").value = (new Zt).setFromColor(e.secondary), null != IA(this, qg, "f") && Array.isArray(IA(this, qg, "f").material)) + for (const t of IA(this, qg, "f").material) "Main" == t.name ? t.color.set(e.primary) : "Metal" == t.name && t.color.set(e.frame); + if (null != IA(this, Yg, "f") && !Array.isArray(IA(this, Yg, "f").material)) { + const t = IA(this, Yg, "f").material; + "Metal" == t.name && t.color.set(e.frame) + } + for (const t of IA(this, Kg, "f")) + if (Array.isArray(t.material)) + for (const n of t.material) "Metal" == n.name ? n.color.set(e.frame) : "Rim" == n.name && n.color.set(e.rims); + CA(this, tA, e, "f") + } + setOpacity(e) { + for (const t of IA(this, jg, "f").children) { + const n = t; + let i; + i = Array.isArray(n.material) ? n.material : [n.material]; + for (const t of i) { + t.opacity = e; + const n = e < 1; + t.needsUpdate = n != t.transparent, t.transparent = n + } + } + } + setVisible(e) { + IA(this, jg, "f").visible = e + } + setCarState(e) { + var t; + if (IA(this, hA, "f")) return; + const n = IA(this, kg, "f"); + CA(this, kg, e, "f"); + const i = IA(this, kg, "f").frames != n.frames && IA(this, kg, "f").frames != n.frames + 1; + if (IA(this, kg, "f").nextCheckpointIndex > n.nextCheckpointIndex) { + this.notificationAudioEnabled && IA(this, yg, "m", pA).call(this); + for (const e of IA(this, Wg, "f")) e(n.nextCheckpointIndex) + } + if (null != IA(this, kg, "f").finishFrames && null == n.finishFrames) { + this.notificationAudioEnabled && IA(this, yg, "m", mA).call(this); + for (const e of IA(this, Hg, "f")) e(this) + } + const r = .001; + if (i) { + null === (t = IA(this, lA, "f")) || void 0 === t || t.clear(); + for (const e of IA(this, aA, "f")) e.clear() + } + if (this.getTime().numberOfFrames % 10 == 0 && IA(this, yg, "m", gA).call(this, .01), i || !n.controls.reset && IA(this, kg, "f").controls.reset) { + IA(this, Bg, "f").reset(this.getPosition(), this.getQuaternion(), this.getSpeedKmh()), IA(this, Dg, "f").reset(this.getPosition(), this.getQuaternion(), this.getSpeedKmh()); + for (const e of IA(this, zg, "f")) e() + } + IA(this, yg, "m", vA).call(this, r), IA(this, yg, "m", yA).call(this, r), IA(this, Fg, "f") && IA(this, kg, "f").hasStarted && null == n.finishFrames && IA(this, Og, "f").recordFrame(n.frames, IA(this, kg, "f").controls) + } + update(e) { + var t, n; + if (null != IA(this, qg, "f") && null != IA(this, Yg, "f")) { + IA(this, yg, "m", AA).call(this), null === (t = IA(this, lA, "f")) || void 0 === t || t.update(e); + const i = this.getMatrix4(), + r = this.getQuaternion(); + IA(this, qg, "f").matrixAutoUpdate = !1, IA(this, qg, "f").matrix.copy(i), IA(this, qg, "f").matrix.multiply((new Cn).makeTranslation(0, xg.massOffset, 0)), IA(this, Yg, "f").matrixAutoUpdate = !1, IA(this, Yg, "f").matrix.copy(IA(this, qg, "f").matrix); + const a = 4; + for (let t = 0; t < a; t++) { + const i = IA(this, kg, "f").wheelInContact[t], + a = IA(this, kg, "f").wheelDeltaRotation[t]; + if (this.hasStarted()) { + if (i) IA(this, Vg, "f")[t] = 1e3 * a, IA(this, Gg, "f")[t] = 1e3 * a; + else { + const { + up: n, + down: i + } = this.getControls(), r = 2 == t || 3 == t; + i ? IA(this, kg, "f").brakeLightEnabled ? IA(this, Gg, "f")[t] > 0 ? IA(this, Gg, "f")[t] = Math.max(0, IA(this, Gg, "f")[t] - 50 * e) : IA(this, Gg, "f")[t] < 0 && (IA(this, Gg, "f")[t] = Math.min(0, IA(this, Gg, "f")[t] + 50 * e)) : r && (IA(this, Vg, "f")[t] -= 25 * e, IA(this, Gg, "f")[t] -= 25 * e) : n && r && (IA(this, Vg, "f")[t] += 25 * e, IA(this, Gg, "f")[t] += 50 * e), IA(this, Vg, "f")[t] *= Math.max(0, 1 - e), IA(this, Gg, "f")[t] *= Math.max(0, 1 - e) + } + IA(this, Qg, "f")[t] += IA(this, Gg, "f")[t] * e + } + const s = IA(this, kg, "f").wheelPosition[t], + o = new Kt(IA(this, kg, "f").wheelQuaternion[t].x, IA(this, kg, "f").wheelQuaternion[t].y, IA(this, kg, "f").wheelQuaternion[t].z, IA(this, kg, "f").wheelQuaternion[t].w), + l = IA(this, kg, "f").wheelRotation[t]; + o.multiply((new Kt).setFromAxisAngle(new Zt(-1, 0, 0), IA(this, Qg, "f")[t] - l)), IA(this, Kg, "f")[t].position.set(s.x, s.y, s.z), IA(this, Kg, "f")[t].quaternion.set(o.x, o.y, o.z, o.w); + const c = IA(this, kg, "f").wheelSuspensionLength[t], + h = IA(this, kg, "f").wheelSkidInfo[t]; + IA(this, Yg, "f").morphTargetInfluences || (IA(this, Yg, "f").morphTargetInfluences = []), IA(this, Yg, "f").morphTargetInfluences[t] = 2 * c + .06, e > 0 && (null === (n = IA(this, rA, "f")) || void 0 === n ? void 0 : n.getSettingBoolean(nm.SkidmarksEnabled)) && t < IA(this, aA, "f").length && i && a > .06 && h < .5 && 0 == IA(this, oA, "f")[t] && IA(this, aA, "f")[t].spawn(s.x, s.y, s.z, r) + } + IA(this, yg, "m", EA).call(this, IA(this, kg, "f").brakeLightEnabled) + } + } + updateCameras(e) { + if (null == IA(this, kg, "f").finishFrames) { + const t = this.getPosition(), + n = this.getQuaternion(), + i = this.getSpeedKmh(); + IA(this, Bg, "f").update(e, t, n, i), IA(this, Dg, "f").update(t, n, i) + } + } + get cameraOrbit() { + return IA(this, Bg, "f").camera + } + get cameraCockpit() { + return IA(this, Dg, "f").camera + } + set audioVolume(e) { + CA(this, Sg, e, "f"), null != IA(this, Eg, "f") && IA(this, Eg, "f").gain.setTargetAtTime(IA(this, Sg, "f"), 0, .01) + } + static initResources() { + return TA(this, void 0, void 0, (function*() { + const e = yield new Promise(((e, t) => { + (new wu).load("models/car.glb", (n => { + function i(e) { + const t = n.scene.getObjectByName(e); + if (null == t) throw new Error('Mesh "' + e + '" does not exist'); + if (0 == t.children.length) { + const e = t; + return e.updateMatrixWorld(!0), e.geometry.applyMatrix4(e.matrix.clone()), e.matrix.identity(), e + } + const i = function(e, t = !1) { + const n = null !== e[0].index, + i = new Set(Object.keys(e[0].attributes)), + r = new Set(Object.keys(e[0].morphAttributes)), + a = {}, + s = {}, + o = e[0].morphTargetsRelative, + l = new Oi; + let c = 0; + for (let h = 0; h < e.length; ++h) { + const u = e[h]; + let d = 0; + if (n !== (null !== u.index)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."), null; + for (const e in u.attributes) { + if (!i.has(e)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + '. All geometries must have compatible attributes; make sure "' + e + '" attribute exists among all geometries, or in none of them.'), null; + void 0 === a[e] && (a[e] = []), a[e].push(u.attributes[e]), d++ + } + if (d !== i.size) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". Make sure all geometries have the same number of attributes."), null; + if (o !== u.morphTargetsRelative) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". .morphTargetsRelative must be consistent throughout all geometries."), null; + for (const e in u.morphAttributes) { + if (!r.has(e)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". .morphAttributes must be consistent throughout all geometries."), null; + void 0 === s[e] && (s[e] = []), s[e].push(u.morphAttributes[e]) + } + if (t) { + let e; + if (n) e = u.index.count; + else { + if (void 0 === u.attributes.position) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". The geometry must have either an index or a position attribute"), null; + e = u.attributes.position.count + } + l.addGroup(c, e, h), c += e + } + } + if (n) { + let t = 0; + const n = []; + for (let i = 0; i < e.length; ++i) { + const r = e[i].index; + for (let e = 0; e < r.count; ++e) n.push(r.getX(e) + t); + t += e[i].attributes.position.count + } + l.setIndex(n) + } + for (const e in a) { + const t = _u(a[e]); + if (!t) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + e + " attribute."), null; + l.setAttribute(e, t) + } + for (const e in s) { + const t = s[e][0].length; + if (0 === t) break; + l.morphAttributes = l.morphAttributes || {}, l.morphAttributes[e] = []; + for (let n = 0; n < t; ++n) { + const t = []; + for (let i = 0; i < s[e].length; ++i) t.push(s[e][i][n]); + const i = _u(t); + if (!i) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + e + " morphAttribute."), null; + l.morphAttributes[e].push(i) + } + } + return l + }(t.children.map((e => e.geometry)), !0); + t.updateMatrixWorld(!0), i.applyMatrix4(t.matrix.clone()); + const r = t.children.map((e => e.material)), + a = new Zi(i, r); + return a.name = e, a + } + + function r(e) { + let t; + t = Array.isArray(e.material) ? e.material : [e.material]; + for (const e of t) e.side = 0; + return e + } + xg.models = { + chassis: r(i("Body")), + suspension: r(i("Suspension")), + suspensionFL: r(i("SuspensionFL")), + suspensionFR: r(i("SuspensionFR")), + suspensionBL: r(i("SuspensionBL")), + suspensionBR: r(i("SuspensionBR")), + wheelFL: r(i("WheelFL")), + wheelFR: r(i("WheelFR")), + wheelBL: r(i("WheelBL")), + wheelBR: r(i("WheelBR")), + collisionShapeVertices: IA(xg, xg, "m", SA).call(xg, i("Collision")) + }, xg.models.wheelFL.geometry.translate(-.627909, .218824, -1.3478), xg.models.wheelFR.geometry.translate(.627909, .218824, -1.3478), xg.models.wheelBL.geometry.translate(-.720832, .218824, 1.52686), xg.models.wheelBR.geometry.translate(.720832, .218824, 1.52686), xg.models.wheelFL.geometry.rotateZ(Math.PI), xg.models.wheelFR.geometry.rotateZ(Math.PI), xg.models.wheelBL.geometry.rotateZ(Math.PI), xg.models.wheelBR.geometry.rotateZ(Math.PI), IA(xg, xg, "m", MA).call(xg).then((t => { + e(t) + })).catch(t) + }), void 0, t) + })); + return yield new Promise(((e, t) => { + const n = new Image; + n.addEventListener("load", (() => { + e() + })), n.addEventListener("error", (() => { + t(new Error("Failed to load image")) + })), n.src = "images/car_stripe.svg", xg.images = { + stripe: n + } + })), e + })) + } + } + xg = RA, bg = new WeakMap, Eg = new WeakMap, Sg = new WeakMap, Mg = new WeakMap, Tg = new WeakMap, Cg = new WeakMap, Ig = new WeakMap, Rg = new WeakMap, Pg = new WeakMap, Bg = new WeakMap, Dg = new WeakMap, Lg = new WeakMap, Ug = new WeakMap, kg = new WeakMap, Ng = new WeakMap, Fg = new WeakMap, Og = new WeakMap, zg = new WeakMap, Wg = new WeakMap, Hg = new WeakMap, Vg = new WeakMap, Gg = new WeakMap, Qg = new WeakMap, Xg = new WeakMap, jg = new WeakMap, qg = new WeakMap, Yg = new WeakMap, Kg = new WeakMap, Zg = new WeakMap, Jg = new WeakMap, $g = new WeakMap, eA = new WeakMap, tA = new WeakMap, nA = new WeakMap, iA = new WeakMap, rA = new WeakMap, aA = new WeakMap, sA = new WeakMap, oA = new WeakMap, lA = new WeakMap, cA = new WeakMap, hA = new WeakMap, yg = new WeakSet, uA = function() { + IA(this, yg, "m", fA).call(this), setTimeout((() => { + if (null != IA(this, Mg, "f") && (IA(this, Mg, "f").source.stop(), CA(this, Mg, null, "f")), null != IA(this, Cg, "f")) { + for (const { + source: e + } + of IA(this, Cg, "f")) e.stop(); + CA(this, Cg, null, "f") + } + }), 200) + }, dA = function() { + if (null == xg.images) throw new Error("Car images are not loaded yet"); + IA(this, Jg, "f").clearRect(0, 0, IA(this, Jg, "f").canvas.width, IA(this, Jg, "f").canvas.height), IA(this, Jg, "f").drawImage(xg.images.stripe, 0, 0, IA(this, Jg, "f").canvas.width, IA(this, Jg, "f").canvas.height), IA(this, $g, "f").needsUpdate = !0 + }, fA = function() { + if (null != IA(this, Mg, "f") && (IA(this, Mg, "f").source.playbackRate.setTargetAtTime(.7, 0, .15), IA(this, Mg, "f").gain.gain.setTargetAtTime(0, 0, .15)), null != IA(this, Cg, "f")) + for (const e of IA(this, Cg, "f")) e.source.playbackRate.setTargetAtTime(.3, 0, .15), e.gain.gain.setTargetAtTime(0, 0, .15); + if (null != IA(this, sA, "f")) { + for (const { + source: e + } + of IA(this, sA, "f")) e.stop(); + CA(this, sA, null, "f") + } + }, pA = function() { + var e, t; + const n = null !== (t = null === (e = IA(this, rA, "f")) || void 0 === e ? void 0 : e.getSettingFloat(nm.CheckpointVolume)) && void 0 !== t ? t : 0; + let i = Math.min(Math.max(IA(this, Sg, "f") * n, 0), 1); + if (Number.isNaN(i) && (i = 0), i > 0 && null != IA(this, bg, "f")) { + const e = IA(this, bg, "f").getBuffer("checkpoint"); + if (null != e && null != IA(this, bg, "f").context && null != IA(this, bg, "f").destinationMaster) { + const t = IA(this, bg, "f").context.createBufferSource(); + t.buffer = e, t.playbackRate.value = 1.25; + const n = IA(this, bg, "f").context.createGain(); + n.gain.value = .03 * i, t.connect(n), n.connect(IA(this, bg, "f").destinationMaster), t.start(0) + } + } + }, mA = function() { + var e, t; + const n = null !== (t = null === (e = IA(this, rA, "f")) || void 0 === e ? void 0 : e.getSettingFloat(nm.CheckpointVolume)) && void 0 !== t ? t : 0; + let i = Math.min(Math.max(IA(this, Sg, "f") * n, 0), 1); + if (Number.isNaN(i) && (i = 0), i > 0 && null != IA(this, bg, "f")) { + const e = IA(this, bg, "f").getBuffer("finish"); + if (null != e && null != IA(this, bg, "f").context && null != IA(this, bg, "f").destinationMaster) { + const t = IA(this, bg, "f").context.createBufferSource(); + t.buffer = e, t.playbackRate.value = 1.25; + const n = IA(this, bg, "f").context.createGain(); + n.gain.value = .03, t.connect(n), n.connect(IA(this, bg, "f").destinationMaster), t.start(0) + } + } + }, gA = function(e) { + var t; + for (let n = 0; n < 4; n++) { + const i = IA(this, kg, "f").wheelPosition[n], + r = IA(this, kg, "f").wheelInContact[n], + a = IA(this, kg, "f").wheelDeltaRotation[n], + s = IA(this, kg, "f").wheelSkidInfo[n]; + r && a > .06 && s < .5 ? (n < IA(this, aA, "f").length && (IA(this, oA, "f")[n] = Math.max(0, IA(this, oA, "f")[n] - e)), 0 == IA(this, oA, "f")[n] && null != IA(this, lA, "f") && IA(this, lA, "f").spawn(i.x, i.y, i.z)) : (n < IA(this, aA, "f").length && (null === (t = IA(this, rA, "f")) || void 0 === t ? void 0 : t.getSettingBoolean(nm.SkidmarksEnabled)) && IA(this, aA, "f")[n].break(), IA(this, oA, "f")[n] = .075) + } + }, AA = function() { + if (null != IA(this, bg, "f") && null != IA(this, bg, "f").context && null != IA(this, bg, "f").destinationSfx) { + null == IA(this, Eg, "f") && (CA(this, Eg, IA(this, bg, "f").context.createGain(), "f"), IA(this, Eg, "f").gain.value = IA(this, Sg, "f"), IA(this, Eg, "f").connect(IA(this, bg, "f").destinationSfx)), null == IA(this, Rg, "f") && (CA(this, Rg, IA(this, bg, "f").context.createPanner(), "f"), IA(this, Rg, "f").refDistance = 5, IA(this, Rg, "f").connect(IA(this, Eg, "f"))); + const e = this.getPosition(); + IA(this, Rg, "f").positionX.value = e.x, IA(this, Rg, "f").positionY.value = e.y, IA(this, Rg, "f").positionZ.value = e.z; + const t = 4; + if (IA(this, Pg, "f").length < t) { + IA(this, Pg, "f").length = 0; + for (let e = 0; e < t; ++e) { + const e = IA(this, bg, "f").context.createPanner(); + e.refDistance = 5, e.connect(IA(this, Eg, "f")), IA(this, Pg, "f").push(e) + } + } + for (let e = 0; e < t; ++e) { + const t = IA(this, Pg, "f")[e], + n = IA(this, kg, "f").wheelPosition[e]; + t.positionX.value = n.x, t.positionY.value = n.y, t.positionZ.value = n.z + } + IA(this, Xg, "f").camera != IA(this, Bg, "f").camera && IA(this, Xg, "f").camera != IA(this, Dg, "f").camera || IA(this, bg, "f").refreshListener(IA(this, Xg, "f")), IA(this, yg, "m", _A).call(this), IA(this, yg, "m", wA).call(this), IA(this, yg, "m", bA).call(this) + } + }, _A = function() { + if (null == IA(this, Mg, "f") && null != IA(this, Rg, "f") && null != IA(this, bg, "f")) { + const e = IA(this, bg, "f").getBuffer("engine"); + if (null != e && null != IA(this, bg, "f").context) { + const t = IA(this, bg, "f").context.createBufferSource(); + t.buffer = e, t.loop = !0, t.playbackRate.value = .7; + const n = IA(this, bg, "f").context.createGain(); + n.gain.value = 0, t.connect(n), n.connect(IA(this, Rg, "f")), t.start(0, 2 * Math.random()), CA(this, Mg, { + source: t, + gain: n + }, "f") + } + } + if (null != IA(this, Mg, "f")) { + const e = (IA(this, Vg, "f")[0] + IA(this, Vg, "f")[1] + IA(this, Vg, "f")[2] + IA(this, Vg, "f")[3]) / 4, + t = .7 + Math.pow(Math.abs(e), 1 / 3) / 3, + n = IA(this, kg, "f").wheelInContact[0] || IA(this, kg, "f").wheelInContact[1] || IA(this, kg, "f").wheelInContact[2] || IA(this, kg, "f").wheelInContact[3], + { + up: i, + down: r + } = this.getControls(), + a = this.hasStarted() && !this.hasFinished() && (i && !(r && IA(this, kg, "f").brakeLightEnabled) || r && !IA(this, kg, "f").brakeLightEnabled); + let s; + s = n ? a ? t : Math.max(.7, t / 2) : a ? Math.max(.7, 1.15 * t) : Math.max(.7, t / 2), IA(this, Mg, "f").source.playbackRate.setTargetAtTime(s, 0, .05), IA(this, Mg, "f").gain.gain.setTargetAtTime(Math.min(.285, s / 14), 0, .05) + } + }, vA = function(e) { + if (IA(this, Tg, "f").length < 4) { + IA(this, Tg, "f").length = 0; + for (let e = 0; e < 4; ++e) IA(this, Tg, "f").push(0) + } + for (let t = 0; t < 4 && t < IA(this, Pg, "f").length; t++) + if (IA(this, Tg, "f")[t] -= e, IA(this, Tg, "f")[t] <= 0) { + const e = Math.abs(IA(this, kg, "f").wheelSuspensionVelocity[t]); + if (e > 4 && null != IA(this, bg, "f")) { + const n = IA(this, bg, "f").getBuffer("suspension"); + if (null != n && null != IA(this, bg, "f").context) { + const i = IA(this, bg, "f").context.createBufferSource(); + i.buffer = n, i.playbackRate.value = .7 + .1 * Math.random(); + const r = IA(this, bg, "f").context.createGain(); + r.gain.value = Math.min(.285, e / 140), i.connect(r), r.connect(IA(this, Pg, "f")[t]), i.start(IA(this, bg, "f").context.currentTime + .02 * Math.random()), IA(this, Tg, "f")[t] = .1 + } + } + } + }, wA = function() { + if (null == IA(this, Cg, "f") && null != IA(this, bg, "f")) { + const e = IA(this, bg, "f").getBuffer("tires"); + if (null != e && null != IA(this, bg, "f").context) { + CA(this, Cg, [], "f"); + const t = 4; + for (let n = 0; n < t; n++) { + const i = IA(this, bg, "f").context.createBufferSource(); + i.buffer = e, i.loop = !0, i.playbackRate.value = .3; + const r = IA(this, bg, "f").context.createGain(); + r.gain.value = 0, i.connect(r), r.connect(IA(this, Pg, "f")[n]), i.start(0, n / t * 3.5 + .25 * Math.random()), IA(this, Cg, "f").push({ + source: i, + gain: r + }) + } + } + } + if (null != IA(this, Cg, "f")) + for (let e = 0; e < IA(this, Cg, "f").length; ++e) { + const t = IA(this, Cg, "f")[e]; + if (IA(this, kg, "f").wheelInContact[e]) { + const e = Math.min(3, Math.abs(this.getSpeedKmh()) / 110); + t.gain.gain.setTargetAtTime(e / 10.5, 0, .15) + } else t.gain.gain.setTargetAtTime(0, 0, .15); + const n = .3 + Math.min(.4, Math.abs(this.getSpeedKmh()) / 800); + t.source.playbackRate.setTargetAtTime(n, 0, .15) + } + }, yA = function(e) { + null != IA(this, Ig, "f") && (IA(this, Ig, "f").timeout -= e, IA(this, Ig, "f").timeout <= 0 && CA(this, Ig, null, "f")); + const t = IA(this, kg, "f").collisionImpulses; + for (const e of t) IA(this, yg, "m", xA).call(this, e) + }, xA = function(e) { + if (e > 25 && null != IA(this, Rg, "f") && null != IA(this, bg, "f") && (null == IA(this, Ig, "f") || IA(this, Ig, "f").impulse + 100 < e)) { + CA(this, Ig, { + timeout: .2, + impulse: e + }, "f"); + const t = IA(this, bg, "f").getBuffer("collision"); + if (null != t && null != IA(this, bg, "f").context) { + const n = IA(this, bg, "f").context.createBufferSource(); + n.buffer = t, n.playbackRate.value = .1 + .15 * Math.min(e / 4e3, 1); + const i = IA(this, bg, "f").context.createGain(); + i.gain.value = Math.max(.3, Math.min(e / 4e3, 1)) / 2.5, n.connect(i), i.connect(IA(this, Rg, "f")), n.start(0) + } + } + }, bA = function() { + if (null == IA(this, sA, "f") && null != IA(this, bg, "f")) { + const e = IA(this, bg, "f").getBuffer("skidding"); + if (null != e && null != IA(this, bg, "f").context) { + CA(this, sA, [], "f"); + const t = 4; + for (let n = 0; n < t; ++n) { + const i = IA(this, bg, "f").context.createBufferSource(); + i.buffer = e, i.loop = !0, i.playbackRate.value = .5; + const r = IA(this, bg, "f").context.createGain(); + r.gain.value = 0, i.connect(r), r.connect(IA(this, Pg, "f")[n]), i.start(0, n / t * 3.5 + .25 * Math.random()), IA(this, sA, "f").push({ + source: i, + gain: r + }) + } + } + } + if (null != IA(this, sA, "f")) + for (let e = 0; e < IA(this, sA, "f").length; ++e) { + const t = IA(this, sA, "f")[e]; + 0 == IA(this, oA, "f")[e] ? t.gain.gain.setTargetAtTime(.75 / 3.5, 0, .1) : t.gain.gain.setTargetAtTime(0, 0, .1) + } + }, EA = function(e) { + null != IA(this, Zg, "f") && (e ? IA(this, Zg, "f").emissive.setRGB(1, .4, .3) : IA(this, Zg, "f").emissive.setRGB(0, 0, 0)) + }, SA = function(e) { + const t = e.geometry.toNonIndexed(); + if (!(t.attributes.position instanceof Ci)) throw new Error("Vertices must use BufferAttribute"); + return Array.from(t.attributes.position.array) + }, MA = function() { + return TA(this, void 0, void 0, (function*() { + if (null == xg.models) throw new Error("Car models are not loaded yet"); + const e = new Float32Array(xg.models.collisionShapeVertices), + t = yield window.crypto.subtle.digest("SHA-256", e.buffer), n = Array.from(new Uint8Array(t)).map((e => e.toString(16).padStart(2, "0"))).join(""), i = "dd663fb6330ed93725bf865d5eac2cd29ba19f74dbb3f67ae7f695ea1f68aed0"; + return n == i || console.error("Car collision model checksum mismatch: " + n + " != " + i), n == i + })) + }, RA.massOffset = .6, RA.detectorBoxCenter = new Zt(0, .48, -.15), RA.detectorBoxSize = new Zt(.89, .22, 1.8), RA.suspensionResetLengthFront = .07809501004219055, RA.suspensionResetLengthRear = .0781289680480957, RA.models = null, RA.images = null; + const PA = RA; + var BA, DA, LA, UA, kA, NA, FA, OA, zA, WA, HA, VA, GA, QA, XA, jA, qA, YA, KA, ZA, JA, $A, e_, t_, n_, i_, r_, a_, s_, o_ = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + l_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + DA = new WeakMap, LA = new WeakMap, UA = new WeakMap, kA = new WeakMap, NA = new WeakMap, FA = new WeakMap, OA = new WeakMap, zA = new WeakMap, WA = new WeakMap, HA = new WeakMap, VA = new WeakMap, GA = new WeakMap, QA = new WeakMap, XA = new WeakMap, jA = new WeakMap, qA = new WeakMap, YA = new WeakMap, KA = new WeakMap, ZA = new WeakMap, JA = new WeakMap, $A = new WeakMap, e_ = new WeakMap, BA = new WeakSet, t_ = function(e) { + if (e.length % 3 != 0) throw new Error("Car collision shape number of vertices is not dividable by 3"); + const t = new Ammo.btConvexHullShape; + for (let n = 0; n < e.length; n += 3) { + const i = e[n + 0], + r = e[n + 1], + a = e[n + 2], + s = new Ammo.btVector3(i, r + l_(this, OA, "f"), a); + t.addPoint(s, !0), Ammo.destroy(s) + } + return t.setMargin(.02), t + }, n_ = function() { + return new Zt(0, 0, 1).applyQuaternion(this.getQuaternion()) + }, i_ = function() { + return new Zt(0, -1, 0).applyQuaternion(this.getQuaternion()) + }, r_ = function() { + const e = l_(this, kA, "f").getLinearVelocity(); + return new Zt(e.x(), e.y(), e.z()) + }, a_ = function() { + const e = Math.abs(l_(this, BA, "m", n_).call(this).dot(l_(this, BA, "m", r_).call(this))), + t = l_(this, BA, "m", i_).call(this), + n = .05; + l_(this, WA, "f").setValue(t.x * e * n, t.y * e * n, t.z * e * n), l_(this, kA, "f").applyCentralImpulse(l_(this, WA, "f")) + }, s_ = function(e, t) { + var n; + o_(this, $A, !1, "f"); + let i = !1, + r = !1, + a = !1, + s = !1, + o = !1; + l_(this, qA, "f") && (this.hasFinished() || ({ + up: i, + right: r, + down: a, + left: s, + reset: o + } = null !== (n = null == t ? void 0 : t.getControls(l_(this, YA, "f").numberOfFrames)) && void 0 !== n ? n : { + up: !1, + right: !1, + down: !1, + left: !1, + reset: !1 + }), l_(this, YA, "f").increment()); + const l = this.getWheelInContact(0) || this.getWheelInContact(1) || this.getWheelInContact(2) || this.getWheelInContact(3); + if (!l && a && !this.hasFinished() && l_(this, qA, "f") ? l_(this, kA, "f").setDamping(.1, .6) : l_(this, kA, "f").setDamping(.1, .1), i && !this.hasFinished() && l_(this, qA, "f")) { + const e = 4e3; + l_(this, UA, "f").applyEngineForce(e, 2), l_(this, UA, "f").applyEngineForce(e, 3) + } else l_(this, UA, "f").applyEngineForce(0, 2), l_(this, UA, "f").applyEngineForce(0, 3); + if (a && !this.hasFinished() && l_(this, qA, "f")) + if (this.getSpeedKmh() > 1 || !l) { + const e = 10; + l_(this, UA, "f").setBrake(e, 0), l_(this, UA, "f").setBrake(e, 1), l_(this, UA, "f").setBrake(e, 2), l_(this, UA, "f").setBrake(e, 3), o_(this, $A, !0, "f") + } else { + const e = Math.min(0, Math.max(-2e3, -2e3 * (1 + this.getSpeedKmh() / 100))); + l_(this, UA, "f").applyEngineForce(e, 2), l_(this, UA, "f").applyEngineForce(e, 3), l_(this, UA, "f").setBrake(0, 0), l_(this, UA, "f").setBrake(0, 1), l_(this, UA, "f").setBrake(0, 2), l_(this, UA, "f").setBrake(0, 3) + } + else l_(this, UA, "f").setBrake(0, 0), l_(this, UA, "f").setBrake(0, 1), l_(this, UA, "f").setBrake(0, 2), l_(this, UA, "f").setBrake(0, 3); + const c = l_(this, BA, "m", r_).call(this).applyQuaternion(this.getQuaternion().invert()), + h = -new Et(c.x, c.z).normalize().angle() + Math.PI / 2; + let u = Math.max(0, Math.min(1, this.getSpeedKmh() / 30)); + this.getWheelInContact(0) || this.getWheelInContact(1) || (u = 0); + const d = 155 / Math.pow(46, 1.55), + f = Math.max(-d, Math.min(d, h * u)), + p = 155 / Math.pow(Math.max(46, Math.abs(this.getSpeedKmh())), 1.55); + l_(this, qA, "f") && (s && !this.hasFinished() ? o_(this, XA, Math.min(l_(this, XA, "f") + 10 * e, 1), "f") : r && !this.hasFinished() ? o_(this, XA, Math.max(l_(this, XA, "f") - 10 * e, -1), "f") : l_(this, XA, "f") > 0 ? o_(this, XA, Math.max(l_(this, XA, "f") - 10 * e, 0), "f") : l_(this, XA, "f") < 0 && o_(this, XA, Math.min(l_(this, XA, "f") + 10 * e, 0), "f")); + const m = l_(this, XA, "f") * p; + let g; + g = f < 0 && m < 0 ? Math.min(f, m) : f > 0 && m > 0 ? Math.max(f, m) : f + m, l_(this, UA, "f").setSteeringValue(g, 0), l_(this, UA, "f").setSteeringValue(g, 1); + for (let e = 0; e < 4; e++) { + const t = l_(this, UA, "f").getWheelInfo(e); + let n; + n = t.m_raycastInfo.m_suspensionLength < -.2 ? 200 : 50, n != t.m_suspensionStiffness && t.set_m_suspensionStiffness(n) + } + if (o) { + if (!l_(this, JA, "f") && !this.hasFinished() && l_(this, qA, "f") && null != l_(this, ZA, "f")) { + const e = new Ammo.btTransform; + e.setIdentity(), o_(this, VA, new Zt(l_(this, ZA, "f").position.x, l_(this, ZA, "f").position.y, l_(this, ZA, "f").position.z), "f"); + const t = new Ammo.btVector3(l_(this, VA, "f").x, l_(this, VA, "f").y, l_(this, VA, "f").z); + e.setOrigin(t), Ammo.destroy(t), o_(this, GA, new Kt(l_(this, ZA, "f").quaternion.x, l_(this, ZA, "f").quaternion.y, l_(this, ZA, "f").quaternion.z, l_(this, ZA, "f").quaternion.w), "f"); + const n = new Ammo.btQuaternion(l_(this, GA, "f").x, l_(this, GA, "f").y, l_(this, GA, "f").z, l_(this, GA, "f").w); + e.setRotation(n), Ammo.destroy(n), l_(this, kA, "f").setWorldTransform(e), l_(this, NA, "f").setWorldTransform(e), Ammo.destroy(e); + const i = new Ammo.btVector3(0, 0, 0); + l_(this, kA, "f").setLinearVelocity(i), l_(this, kA, "f").setAngularVelocity(i), Ammo.destroy(i), l_(this, UA, "f").resetSuspension(), l_(this, UA, "f").getWheelInfo(0).m_raycastInfo.set_m_suspensionLength(PA.suspensionResetLengthFront), l_(this, UA, "f").getWheelInfo(1).m_raycastInfo.set_m_suspensionLength(PA.suspensionResetLengthFront), l_(this, UA, "f").getWheelInfo(2).m_raycastInfo.set_m_suspensionLength(PA.suspensionResetLengthRear), l_(this, UA, "f").getWheelInfo(3).m_raycastInfo.set_m_suspensionLength(PA.suspensionResetLengthRear), l_(this, UA, "f").setSteeringValue(0, 0), l_(this, UA, "f").setSteeringValue(0, 1); + const r = l_(this, UA, "f").getNumWheels(); + for (let e = 0; e < r; e++) l_(this, UA, "f").updateWheelTransform(e, !0); + o_(this, KA, l_(this, ZA, "f").nextCheckpointIndex, "f") + } + o_(this, JA, !0, "f") + } else o_(this, JA, !1, "f") + }; + const c_ = class { + constructor(e, t, n, i, r, a, s, o) { + BA.add(this), DA.set(this, void 0), LA.set(this, void 0), UA.set(this, void 0), kA.set(this, void 0), NA.set(this, void 0), FA.set(this, void 0), OA.set(this, void 0), zA.set(this, new Ammo.btTransform), WA.set(this, new Ammo.btVector3), HA.set(this, new js(new Zt, PA.detectorBoxSize.clone())), VA.set(this, void 0), GA.set(this, void 0), QA.set(this, void 0), XA.set(this, 0), jA.set(this, null), qA.set(this, !1), YA.set(this, new Kh), KA.set(this, 0), ZA.set(this, null), JA.set(this, !1), $A.set(this, !1), e_.set(this, null), o_(this, QA, s, "f"), o_(this, OA, a, "f"), o_(this, LA, new Qh, "f"), l_(this, LA, "f").createGroundPlane(), l_(this, LA, "f").createMountains(e, t), o_(this, DA, new fu(l_(this, LA, "f"), n, i), "f"); + const l = new Ammo.btTransform; + l.setIdentity(); + const c = new Ammo.btDefaultMotionState(l); + Ammo.destroy(l); + const h = new Ammo.btVector3(0, 0, 0); + o_(this, FA, l_(this, BA, "m", t_).call(this, r), "f"), l_(this, FA, "f").calculateLocalInertia(400, h); + const u = new Ammo.btRigidBodyConstructionInfo(400, c, l_(this, FA, "f"), h), + d = new Ammo.btRigidBody(u); + d.setFriction(1), d.setContactProcessingThreshold(0), Ammo.destroy(u), Ammo.destroy(h), d.setDamping(.1, .1), d.setActivationState(4), l_(this, LA, "f").world.addRigidBody(d, 1, 2), o_(this, kA, d, "f"); + const f = new Ammo.btVehicleTuning, + p = new Ammo.btDefaultVehicleRaycaster(l_(this, LA, "f").world), + m = new Ammo.btRaycastVehicle(f, d, p); + m.setCoordinateSystem(0, 1, 2), l_(this, LA, "f").world.addAction(m), o_(this, UA, m, "f"); + const g = new Ammo.btVector3(0, -1, 0), + A = new Ammo.btVector3(-1, 0, 0); + for (const e of ["WheelFL", "WheelFR", "WheelBL", "WheelBR"]) { + let t; + if ("WheelFL" == e) t = new Ammo.btVector3(.627909, .27, 1.3478); + else if ("WheelFR" == e) t = new Ammo.btVector3(-.627909, .27, 1.3478); + else if ("WheelBL" == e) t = new Ammo.btVector3(.720832, .27, -1.52686); + else { + if ("WheelBR" != e) throw new Error("Unidentified wheel"); + t = new Ammo.btVector3(-.720832, .27, -1.52686) + } + const n = "WheelFL" == e || "WheelFR" == e, + i = m.addWheel(t, g, A, .12, .331, f, n); + Ammo.destroy(t), i.set_m_maxSuspensionTravelCm(1e3), i.set_m_maxSuspensionForce(1e6), i.set_m_suspensionStiffness(50), i.set_m_wheelsDampingRelaxation(1.35), i.set_m_wheelsDampingCompression(200), i.set_m_frictionSlip(3), i.set_m_rollInfluence(.5) + } + Ammo.destroy(g), Ammo.destroy(A); + const _ = new Ammo.btTransform; + _.setIdentity(), o_(this, VA, new Zt(o.position.x, o.position.y, o.position.z), "f"); + const v = new Ammo.btVector3(l_(this, VA, "f").x, l_(this, VA, "f").y, l_(this, VA, "f").z); + _.setOrigin(v), Ammo.destroy(v), o_(this, GA, new Kt(o.quaternion.x, o.quaternion.y, o.quaternion.z, o.quaternion.w), "f"); + const w = new Ammo.btQuaternion(l_(this, GA, "f").x, l_(this, GA, "f").y, l_(this, GA, "f").z, l_(this, GA, "f").w); + _.setRotation(w), Ammo.destroy(w), o_(this, NA, l_(this, kA, "f").getMotionState(), "f"), l_(this, kA, "f").setWorldTransform(_), l_(this, NA, "f").setWorldTransform(_), Ammo.destroy(_), l_(this, UA, "f").resetSuspension(), l_(this, UA, "f").getWheelInfo(0).m_raycastInfo.set_m_suspensionLength(PA.suspensionResetLengthFront), l_(this, UA, "f").getWheelInfo(1).m_raycastInfo.set_m_suspensionLength(PA.suspensionResetLengthFront), l_(this, UA, "f").getWheelInfo(2).m_raycastInfo.set_m_suspensionLength(PA.suspensionResetLengthRear), l_(this, UA, "f").getWheelInfo(3).m_raycastInfo.set_m_suspensionLength(PA.suspensionResetLengthRear), l_(this, UA, "f").setSteeringValue(0, 0), l_(this, UA, "f").setSteeringValue(0, 1); + const y = l_(this, UA, "f").getNumWheels(); + for (let e = 0; e < y; e++) l_(this, UA, "f").updateWheelTransform(e, !0) + } + dispose() { + l_(this, LA, "f").world.removeRigidBody(l_(this, kA, "f")), Ammo.destroy(l_(this, NA, "f")), Ammo.destroy(l_(this, kA, "f")), Ammo.destroy(l_(this, zA, "f")), Ammo.destroy(l_(this, WA, "f")), Ammo.destroy(l_(this, FA, "f")), l_(this, LA, "f").world.removeAction(l_(this, UA, "f")), Ammo.destroy(l_(this, UA, "f")), l_(this, LA, "f").dispose() + } + get physics() { + return l_(this, LA, "f") + } + get controls() { + return l_(this, QA, "f") + } + getSpeedKmh() { + return this.hasStarted() ? l_(this, UA, "f").getCurrentSpeedKmHour() : 0 + } + start() { + o_(this, qA, !0, "f") + } + hasStarted() { + return l_(this, qA, "f") + } + hasFinished() { + return null != l_(this, jA, "f") + } + getFinishTime() { + return l_(this, jA, "f") + } + getTime() { + return l_(this, YA, "f").clone() + } + getNextCheckpointIndex() { + return l_(this, KA, "f") + } + hasCheckpointToRespawnAt() { + return null != l_(this, ZA, "f") + } + isBrakeLightEnabled() { + return l_(this, $A, "f") + } + getPosition() { + return l_(this, VA, "f") + } + getQuaternion() { + return l_(this, GA, "f") + } + getMatrix4() { + return (new Cn).compose(this.getPosition(), this.getQuaternion(), new Zt(1, 1, 1)) + } + getWheelPosition(e) { + const t = l_(this, UA, "f").getWheelTransformWS(e).getOrigin(); + return new Zt(t.x(), t.y(), t.z()) + } + getWheelQuaternion(e) { + const t = l_(this, UA, "f").getWheelTransformWS(e).getRotation(); + return new Kt(t.x(), t.y(), t.z(), t.w()) + } + getWheelInContact(e) { + return l_(this, UA, "f").getWheelInfo(e).m_raycastInfo.m_isInContact + } + getWheelSuspensionVelocity(e) { + return l_(this, UA, "f").getWheelInfo(e).m_suspensionRelativeVelocity + } + getWheelSuspensionLength(e) { + return l_(this, UA, "f").getWheelInfo(e).m_raycastInfo.m_suspensionLength + } + getWheelRotation(e) { + return l_(this, UA, "f").getWheelInfo(e).m_rotation + } + getWheelDeltaRotation(e) { + return l_(this, UA, "f").getWheelInfo(e).m_deltaRotation + } + getWheelSkidInfo(e) { + return l_(this, UA, "f").getWheelInfo(e).m_skidInfo + } + getCollisionImpulses() { + const e = [], + t = l_(this, LA, "f").dispatcher.getNumManifolds(); + for (let n = 0; n < t; ++n) { + const t = l_(this, LA, "f").dispatcher.getManifoldByIndexInternal(n), + i = t.getBody0(), + r = t.getBody1(); + if (i.H == l_(this, kA, "f").H || r.H == l_(this, kA, "f").H) { + const n = t.getNumContacts(); + for (let i = 0; i < n; ++i) { + const n = t.getContactPoint(i); + e.push(n.getAppliedImpulse()) + } + } + } + return e + } + step() { + var e; + if (this.hasStarted() && l_(this, YA, "f").numberOfFrames < Ch.maxFrames) { + const t = 1 / Qh.stepsPerSecond, + n = l_(this, VA, "f"), + i = l_(this, GA, "f"); + (null == l_(this, e_, "f") || l_(this, e_, "f").manhattanDistanceTo(n) > 1.5) && (null == l_(this, e_, "f") ? o_(this, e_, n.clone(), "f") : l_(this, e_, "f").copy(n), l_(this, LA, "f").activePhysicsAt(n)), l_(this, BA, "m", a_).call(this), l_(this, BA, "m", s_).call(this, t, l_(this, QA, "f")), l_(this, LA, "f").step(); + const r = l_(this, zA, "f"); + l_(this, NA, "f").getWorldTransform(r); + const a = r.getOrigin(), + s = r.getRotation(); + if (n.set(a.x(), a.y(), a.z()), i.set(s.x(), s.y(), s.z(), s.w()), !this.hasFinished()) { + const t = l_(this, HA, "f"); + t.center.copy(PA.detectorBoxCenter).applyQuaternion(i).add(n), t.rotation.elements = [1 - 2 * (i.y * i.y + i.z * i.z), 2 * (i.x * i.y + i.z * i.w), 2 * (i.x * i.z - i.y * i.w), 2 * (i.x * i.y - i.z * i.w), 1 - 2 * (i.x * i.x + i.z * i.z), 2 * (i.y * i.z + i.x * i.w), 2 * (i.x * i.z + i.y * i.w), 2 * (i.y * i.z - i.x * i.w), 1 - 2 * (i.x * i.x + i.y * i.y)]; + const r = l_(this, DA, "f").getTotalNumberOfCheckpointIndices(); + if (l_(this, KA, "f") == r) null != l_(this, DA, "f").checkFinish(t) && o_(this, jA, l_(this, YA, "f").clone(), "f"); + else { + const n = l_(this, DA, "f").checkCheckpoint(t, l_(this, KA, "f")); + if (null != n && (o_(this, KA, (e = l_(this, KA, "f"), ++e), "f"), n.rotationAxis == Au.YPositive)) { + const e = l_(this, BA, "m", r_).call(this); + let t = n.rotation * Math.PI / 2; + (0 == n.rotation && e.z < 0 || 1 == n.rotation && e.x < 0 || 2 == n.rotation && e.z > 0 || 3 == n.rotation && e.x > 0) && (t += Math.PI); + const i = (new Kt).setFromEuler(new Fn(0, t, 0)), + r = new Zt(0, .35, -1.35); + r.applyQuaternion(i), n.type != mu.CheckpointWide && n.type != mu.PlaneCheckpointWide || r.sub(new Zt(-10, 0, 0).applyEuler(new Fn(0, n.rotation * Math.PI / 2, 0))), o_(this, ZA, { + position: new Zt(n.x * fu.partSize + r.x, n.y * fu.partSize + r.y, n.z * fu.partSize + r.z), + quaternion: i, + nextCheckpointIndex: l_(this, KA, "f") + }, "f") + } + } + } + } + } + }; + var h_, u_, d_, f_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + u_ = new WeakMap, h_ = new WeakSet, d_ = function(e) { + if (e.length % 9 != 0) throw new Error("Physics shape vertices length is not dividable by 9"); + const t = new en, + n = new Ammo.btTriangleMesh; + for (let i = 0; i < e.length; i += 9) { + const r = e[i + 0], + a = e[i + 1], + s = e[i + 2], + o = e[i + 3], + l = e[i + 4], + c = e[i + 5], + h = e[i + 6], + u = e[i + 7], + d = e[i + 8], + f = new Ammo.btVector3(r, a, s), + p = new Ammo.btVector3(o, l, c), + m = new Ammo.btVector3(h, u, d); + n.addTriangle(f, p, m), Ammo.destroy(f), Ammo.destroy(p), Ammo.destroy(m), t.expandByPoint(new Zt(r, a, s)), t.expandByPoint(new Zt(o, l, c)), t.expandByPoint(new Zt(h, u, d)) + } + const i = new Ammo.btBvhTriangleMeshShape(n); + return i.setMargin(.01), { + boundingBox: t, + shape: i, + triangleMesh: n + } + }; + const p_ = class { + constructor(e) { + h_.add(this), u_.set(this, new Map); + for (const { + id: t, + vertices: n, + detector: i, + startOffset: r + } + of e) { + const { + boundingBox: e, + shape: a, + triangleMesh: s + } = f_(this, h_, "m", d_).call(this, n); + f_(this, u_, "f").set(t, { + boundingBox: e, + shape: a, + triangleMesh: s, + detector: null != i ? { + type: i.type, + center: new Zt(i.center[0], i.center[1], i.center[2]), + size: new Zt(i.size[0], i.size[1], i.size[2]) + } : null, + startOffset: null != r ? new Zt(r[0], r[1], r[2]) : null + }) + } + } + dispose() { + for (const { + shape: e, + triangleMesh: t + } + of f_(this, u_, "f").values()) Ammo.destroy(e), Ammo.destroy(t); + f_(this, u_, "f").clear() + } + getPhysicsShape(e) { + const t = f_(this, u_, "f").get(e); + if (null == t) throw new Error('Track part with the id "' + e.toString() + '" has no physics model'); + return { + boundingBox: t.boundingBox.clone(), + shape: t.shape + } + } + getPartTypesWithDetector(e) { + const t = []; + for (const [n, i] of f_(this, u_, "f").entries()) null != i.detector && i.detector.type == e && t.push(n); + return t + } + getStartPartTypes() { + const e = []; + for (const [t, n] of f_(this, u_, "f").entries()) null != n.startOffset && e.push(t); + return e + } + getPartStartOffset(e) { + var t, n; + const i = f_(this, u_, "f").get(e); + if (null == i) throw new Error('Track part with the id "' + e.toString() + '" does not exist'); + return null !== (n = null === (t = i.startOffset) || void 0 === t ? void 0 : t.clone()) && void 0 !== n ? n : null + } + getDetector(e) { + const t = f_(this, u_, "f").get(e); + if (null == t) throw new Error('Track part with the id "' + e.toString() + '" does not exist'); + return t.detector + } + }; + var m_; + ! function(e) { + e[e.Init = 0] = "Init", e[e.Verify = 1] = "Verify", e[e.TestDeterminism = 2] = "TestDeterminism", e[e.CreateCar = 3] = "CreateCar", e[e.DeleteCar = 4] = "DeleteCar", e[e.StartCar = 5] = "StartCar", e[e.ControlCar = 6] = "ControlCar", e[e.PauseCar = 7] = "PauseCar", e[e.VerifyResult = 8] = "VerifyResult", e[e.DeterminismResult = 9] = "DeterminismResult", e[e.UpdateResult = 10] = "UpdateResult" + }(m_ || (m_ = {})); + const g_ = m_; + var A_, __ = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + v_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + A_ = new WeakMap; + const w_ = class { + constructor(e) { + A_.set(this, void 0), __(this, A_, e, "f") + } + dispose() {} + getControls(e) { + return v_(this, A_, "f").getFrame(e) + } + }; + var y_ = n(1312); + const x_ = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + b_ = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]; + + function E_(e) { + let t = 0, + n = ""; + for (; t < 8 * e.length;) { + const i = M_(e, t); + let r; + 30 & ~i ? (r = i, t += 6) : (r = 31 & i, t += 5), n += x_[r] + } + return n + } + + function S_(e) { + let t = 0; + const n = [], + i = e.length; + for (let r = 0; r < i; r++) { + const a = e.charCodeAt(r); + if (a >= b_.length) return null; + const s = b_[a]; + if (-1 == s) return null; + 30 & ~s ? (T_(n, t, 6, s, r == i - 1), t += 6) : (T_(n, t, 5, s, r == i - 1), t += 5) + } + return new Uint8Array(n) + } + + function M_(e, t) { + if (t >= 8 * e.length) throw new Error("Out of range"); + const n = Math.floor(t / 8), + i = e[n], + r = t - 8 * n; + if (r <= 2 || n >= e.length - 1) return (i & 63 << r) >>> r; + return (i & 63 << r) >>> r | (e[n + 1] & 63 >>> 8 - r) << 8 - r + } + + function T_(e, t, n, i, r) { + const a = Math.floor(t / 8); + for (; a >= e.length;) e.push(0); + const s = t - 8 * a; + if (e[a] |= i << s & 255, s > 8 - n && !r) { + const t = a + 1; + t >= e.length && e.push(0), e[t] |= i >> 8 - s + } + } + var C_, I_ = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + R_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class P_ { + constructor(e = 28) { + if (C_.set(this, void 0), !(Number.isSafeInteger(e) && e >= 0 && e < 180)) throw new Error("Representation is not a safe integer or is out of range"); + I_(this, C_, e, "f") + } + clone() { + return new P_(R_(this, C_, "f")) + } + toDegrees() { + return 2 * R_(this, C_, "f") + } + static fromDegrees(e) { + const t = Math.round(e / 2 % 180); + return new P_(t) + } + getSunPosition() { + const e = 2 * R_(this, C_, "f") * (Math.PI / 180), + t = Math.cos(e), + n = Math.sin(e); + return new Zt(t, .78, n).normalize() + } + get representation() { + return R_(this, C_, "f") + } + } + C_ = new WeakMap; + const B_ = P_; + var D_; + ! function(e) { + e[e.Summer = 0] = "Summer", e[e.Winter = 1] = "Winter", e[e.Desert = 2] = "Desert" + }(D_ || (D_ = {})); + const L_ = D_; + var U_; + ! function(e) { + e[e.Default = 0] = "Default", e[e.Summer = 1] = "Summer", e[e.Winter = 2] = "Winter", e[e.Desert = 3] = "Desert", e[e.Custom0 = 32] = "Custom0", e[e.Custom1 = 33] = "Custom1", e[e.Custom2 = 34] = "Custom2", e[e.Custom3 = 35] = "Custom3", e[e.Custom4 = 36] = "Custom4", e[e.Custom5 = 37] = "Custom5", e[e.Custom6 = 38] = "Custom6", e[e.Custom7 = 39] = "Custom7", e[e.Custom8 = 40] = "Custom8" + }(U_ || (U_ = {})); + const k_ = U_; + var N_; + ! function(e) { + e[e.Special = 0] = "Special", e[e.Road = 1] = "Road", e[e.RoadTurns = 2] = "RoadTurns", e[e.RoadWide = 3] = "RoadWide", e[e.Plane = 4] = "Plane", e[e.Block = 5] = "Block", e[e.WallTrack = 6] = "WallTrack", e[e.Pillar = 7] = "Pillar", e[e.Sign = 8] = "Sign" + }(N_ || (N_ = {})); + const F_ = N_; + var O_, z_ = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + W_ = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class H_ { + constructor(e) { + O_.set(this, void 0); + const t = []; + for (const [n, i, r] of e) t.push([n, i, r]); + z_(this, O_, t, "f") + } + rotated(e, t) { + const n = t == Au.YNegative || t == Au.XNegative || t == Au.ZNegative; + return new H_(W_(this, O_, "f").map((([i, r, a]) => { + if (n) switch (e) { + case 0: + break; + case 1: + [i, a] = [-a - 1, i]; + break; + case 2: + [i, a] = [-i - 1, -a - 1]; + break; + case 3: + [i, a] = [a, -i - 1]; + break; + default: + throw new Error("Invalid rotation") + } else switch (e) { + case 0: + break; + case 1: + [i, a] = [a, -i - 1]; + break; + case 2: + [i, a] = [-i - 1, -a - 1]; + break; + case 3: + [i, a] = [-a - 1, i]; + break; + default: + throw new Error("Invalid rotation") + } + return t == Au.YPositive || (t == Au.YNegative ? [i, r] = [-i - 1, -r - 1] : t == Au.XPositive ? [i, r] = [r, -i - 1] : t == Au.XNegative ? [i, r] = [-r - 1, i] : t == Au.ZPositive ? [r, a] = [-a - 1, r] : [r, a] = [a, -r - 1]), [i, r, a] + }))) + } + forEach(e) { + for (let t = 0; t < W_(this, O_, "f").length; t++) { + const [n, i, r] = W_(this, O_, "f")[t]; + e(n, i, r, t) + } + } + get length() { + return W_(this, O_, "f").length + } + } + O_ = new WeakMap; + const V_ = H_, + G_ = [{ + id: k_.Summer, + colors: {} + }, { + id: k_.Winter, + colors: { + Road: "#5077b2", + RoadBarrier: "#898989", + RoadEdgeWhite: "#ffffff", + RoadEdgeRed: "#1f3d6b", + BlockSurface: "#878787", + Pillar: "#2b4d7f", + PillarEdge: "#071428", + WallTrack: "#5077b2", + WallTrackBottom: "#878787", + WallTrackSides: "#ffffff", + PlaneWall: "#1f3d6b", + PlaneWallDetail: "#878787", + SignYellow: "#1b2a89", + SignRed: "#841901", + SignBlack: "#5077b2" + } + }, { + id: k_.Desert, + colors: { + Road: "#997240", + RoadBarrier: "#211001", + RoadEdgeRed: "#5b2424", + RoadEdgeWhite: "#510808", + BlockSurface: "#b78f5b", + Pillar: "#99713d", + PillarEdge: "#1c1105", + WallTrack: "#260b0b", + WallTrackBottom: "#160606", + WallTrackSides: "#75562e", + PlaneWall: "#633030", + PlaneWallDetail: "#aa8a53", + SignYellow: "#997240", + SignRed: "#d80202", + SignBlack: "#601d1d" + } + }], + Q_ = G_.concat([{ + id: k_.Custom0, + colors: { + BlockSurface: "#131313" + } + }, { + id: k_.Custom1, + colors: { + BlockSurface: "#501b1b" + } + }, { + id: k_.Custom2, + colors: { + BlockSurface: "#7f4d2b" + } + }, { + id: k_.Custom3, + colors: { + BlockSurface: "#93862d" + } + }, { + id: k_.Custom4, + colors: { + BlockSurface: "#2a5e30" + } + }, { + id: k_.Custom5, + colors: { + BlockSurface: "#236363" + } + }, { + id: k_.Custom6, + colors: { + BlockSurface: "#20244b" + } + }, { + id: k_.Custom7, + colors: { + BlockSurface: "#592759" + } + }, { + id: k_.Custom8, + colors: { + BlockSurface: "#302318" + } + }]); + class X_ { + constructor(e, t, n, i, r, a, s = null, o = null) { + const l = []; + for (const [e, t] of a) + for (let n = e[0]; n <= t[0]; n++) + for (let i = e[1]; i <= t[1]; i++) + for (let r = e[2]; r <= t[2]; r++) { + if (null != l.find((([e, t, a]) => e == n && t == i && a == r))) throw new Error("Duplicate tile in track part"); + l.push([n, i, r]) + } + this.checksum = e, this.category = t, this.id = n, this.models = i, this.colors = r, this.tiles = new V_(l), this.detector = s, this.startOffset = o, Object.freeze(this) + } + } + const j_ = [new X_("6d94d798abd14dc3bce4e99c180309d993ad43adb5f2c90eef8e350eedafe7cf", F_.Special, mu.Start, [ + ["Road", "Start"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], null, new Zt(0, .35, 1.35)), new X_("f29e34b2e05e0a4751109ae564b03fe8878a79cc6b26288f1117ed296d09c5bb", F_.Special, mu.StartWide, [ + ["RoadWide", "StartWide"] + ], G_, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], null, new Zt(-10, .35, 1.35)), new X_("3c304054f415fbede4f73a43517db04302f38b16fa2cd4e587082b37b75e20e5", F_.Special, mu.PlaneStart, [ + ["Planes", "PlaneStart"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], null, new Zt(0, .35, 1.35)), new X_("f08710416bdaa3d91d0d43f014e45d421fdb4587a334993bad0056f3dbbcb6bb", F_.Special, mu.PlaneStartWide, [ + ["Planes", "PlaneStartWide"] + ], G_, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], null, new Zt(-10, .35, 1.35)), new X_("223fc87c72bb64b58677062ffa08ab7eafd78071bced7c53233606763cd5316b", F_.Special, mu.Checkpoint, [ + ["Road", "Checkpoint"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], { + type: Jh.Checkpoint, + center: [0, 2.2, 0], + size: [10.5, 3.8, 1] + }), new X_("82d9a9879cee92c04c8d4ba2e16fc31bb1917a31f5802a3bb5177ca9a5cfee01", F_.Special, mu.CheckpointWide, [ + ["RoadWide", "CheckpointWide"] + ], G_, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], { + type: Jh.Checkpoint, + center: [10, 2.2, 0], + size: [30.6, 3.8, 1] + }), new X_("fe8946d7f09724b5e11f493eb5c2a5b5e3d502b15beaad003f8134ac63558948", F_.Special, mu.PlaneCheckpoint, [ + ["Planes", "PlaneCheckpoint"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], { + type: Jh.Checkpoint, + center: [0, 2.2, 0], + size: [18.25, 3.8, 1] + }), new X_("d486d9b851db35dd44c15f9e0bb3bf582118daf7be514598a19307f61cf46678", F_.Special, mu.PlaneCheckpointWide, [ + ["Planes", "PlaneCheckpointWide"] + ], G_, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], { + type: Jh.Checkpoint, + center: [10, 2.2, 0], + size: [38.25, 3.8, 1] + }), new X_("c01200d573a3594a6a4cb73ebb600964d653e4a89267d3297f3969220742aa79", F_.Special, mu.Finish, [ + ["Road", "Finish"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], { + type: Jh.Finish, + center: [0, 2.2, 0], + size: [10.5, 3.8, 2] + }), new X_("a9cefdff816e94a643210c58582c2809de0e3e0e0478b8d5baabd7fe81f13e73", F_.Special, mu.FinishWide, [ + ["RoadWide", "FinishWide"] + ], G_, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], { + type: Jh.Finish, + center: [10, 2.2, 0], + size: [30.6, 3.8, 2] + }), new X_("75e5f09fe8a18ecafaf1fb80929173ef0a7dc0b785596bbe0ccd85a934d79578", F_.Special, mu.PlaneFinish, [ + ["Planes", "PlaneFinish"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ], { + type: Jh.Finish, + center: [0, 2.2, 0], + size: [18.25, 3.8, 2] + }), new X_("5801b3268c75809728c63450d06000c5f6fcfd5d72691902f99d7d19d25e1d78", F_.Special, mu.PlaneFinishWide, [ + ["Planes", "PlaneFinishWide"] + ], G_, [ + [ + [-2, 0, -2], + [5, 0, 1] + ] + ], { + type: Jh.Finish, + center: [10, 2.2, 0], + size: [38.25, 3.8, 2] + }), new X_("3421096c1986d008da88b5fac64cd4c475603138c9bf8a98ab6d581dda6befa7", F_.Road, mu.Straight, [ + ["Road", "Straight"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("bdc3bcdafec9bc26835dc76159f7223da7da5babb3a5770129fa11046c748b69", F_.Road, mu.StraightPillarBottom, [ + ["Road", "Straight"], + ["Pillar", "SurfacePillarBottom"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("2758e984d87b3170f6618c9c689554ef169fd5f80ea7f0df292ffd69792d414e", F_.Road, mu.StraightPillarShort, [ + ["Road", "Straight"], + ["Pillar", "SurfacePillarShort"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("fb5a81784022cfc2d3d0007a032976c8dfd066e72a3bc92f671c98c5cca36aaa", F_.Road, mu.TurnSharp, [ + ["Road", "TurnSharp"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("3da2e9a93da06b1376c33486f30a5f02d8c2f125f5b7d8b41166049ecd95f269", F_.Road, mu.TurnSharpPillarBottom, [ + ["Road", "TurnSharp"], + ["Pillar", "SurfacePillarBottom"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("c642122276547382e37dcb857b130088f4dc0d208dc7fdb6055b2a93080a3ffe", F_.Road, mu.TurnSharpPillarShort, [ + ["Road", "TurnSharp"], + ["Pillar", "SurfacePillarShort"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("110efb0facc096e1c875e545b075b0effaa1b78d50b97f906aec44796501544b", F_.RoadTurns, mu.TurnShort, [ + ["Road", "TurnShort"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 0, -1], + [2, 0, -1] + ], + [ + [-1, 0, -2], + [3, 0, -2] + ], + [ + [-1, 0, -3], + [5, 0, -3] + ], + [ + [0, 0, -4], + [5, 0, -4] + ], + [ + [1, 0, -5], + [5, 0, -5] + ], + [ + [3, 0, -6], + [5, 0, -6] + ] + ]), new X_("20a164840b0e83f3eac96ba9e3650a30e3b3dec4bb635946e3e9e9a1b74820d2", F_.RoadTurns, mu.TurnLong, [ + ["Road", "TurnLong"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, -2], + [2, 0, -2] + ], + [ + [-1, 0, -3], + [2, 0, -3] + ], + [ + [-1, 0, -4], + [3, 0, -4] + ], + [ + [0, 0, -5], + [4, 0, -5] + ], + [ + [1, 0, -6], + [6, 0, -6] + ], + [ + [2, 0, -7], + [9, 0, -7] + ], + [ + [3, 0, -8], + [9, 0, -8] + ], + [ + [4, 0, -9], + [9, 0, -9] + ], + [ + [7, 0, -10], + [9, 0, -10] + ] + ]), new X_("c36dddde35a740c6f01227522bf35e1a450cddbfdd8bde1617873bef0d47c95c", F_.RoadTurns, mu.TurnLong2, [ + ["Road", "TurnLong2"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-1, 0, -4], + [2, 0, -3] + ], + [ + [-1, 0, -5], + [3, 0, -5] + ], + [ + [0, 0, -6], + [4, 0, -6] + ], + [ + [0, 0, -7], + [5, 0, -7] + ], + [ + [1, 0, -8], + [6, 0, -8] + ], + [ + [2, 0, -9], + [7, 0, -9] + ], + [ + [3, 0, -10], + [9, 0, -10] + ], + [ + [4, 0, -11], + [13, 0, -11] + ], + [ + [5, 0, -12], + [13, 0, -12] + ], + [ + [7, 0, -13], + [13, 0, -13] + ], + [ + [10, 0, -14], + [13, 0, -14] + ] + ]), new X_("0ed20c04a941708c23fe6ced4af3f357c0e435f09278e06f3de2806786d44059", F_.RoadTurns, mu.TurnLong3, [ + ["Road", "TurnLong3"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-1, 0, -4], + [2, 0, -3] + ], + [ + [-1, 0, -5], + [2, 0, -5] + ], + [ + [0, 0, -6], + [3, 0, -6] + ], + [ + [0, 0, -7], + [3, 0, -7] + ], + [ + [0, 0, -8], + [4, 0, -8] + ], + [ + [1, 0, -9], + [5, 0, -9] + ], + [ + [2, 0, -10], + [6, 0, -10] + ], + [ + [2, 0, -11], + [7, 0, -11] + ], + [ + [3, 0, -12], + [8, 0, -12] + ], + [ + [4, 0, -13], + [10, 0, -13] + ], + [ + [5, 0, -14], + [13, 0, -14] + ], + [ + [7, 0, -15], + [17, 0, -15] + ], + [ + [8, 0, -16], + [17, 0, -16] + ], + [ + [11, 0, -17], + [17, 0, -17] + ], + [ + [14, 0, -18], + [17, 0, -18] + ] + ]), new X_("034ef287319877f2fcc32fbd6f32415539a4c287dfcd620360386a781adad22a", F_.RoadTurns, mu.TurnSLeft, [ + ["Road", "TurnS", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-3, 0, -3], + [0, 0, -2] + ], + [ + [-4, 0, -4], + [0, 0, -4] + ], + [ + [-5, 0, -5], + [-1, 0, -5] + ], + [ + [-5, 0, -7], + [-2, 0, -6] + ], + [ + [-6, 0, -10], + [-3, 0, -8] + ] + ]), new X_("0d49e9feb603d0899927c7e5184f4f4fdd4363d2e1fd296f0b7b3cf4dbbf0e8d", F_.RoadTurns, mu.TurnSRight, [ + ["Road", "TurnS"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, -3], + [2, 0, -2] + ], + [ + [-1, 0, -4], + [3, 0, -4] + ], + [ + [0, 0, -5], + [4, 0, -5] + ], + [ + [1, 0, -7], + [4, 0, -6] + ], + [ + [2, 0, -10], + [5, 0, -8] + ] + ]), new X_("26bca19e63867bc0b755ff6fcca65de296c9d1f109f87540103565eb88a0e03d", F_.RoadTurns, mu.TurnShortLeftWide, [ + ["RoadWide", "TurnShortLeftWide"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, -2], + [1, 0, -2] + ], + [ + [-1, 0, -4], + [5, 0, -3] + ], + [ + [0, 0, -5], + [5, 0, -5] + ], + [ + [1, 0, -6], + [5, 0, -6] + ], + [ + [2, 0, -7], + [9, 0, -7] + ], + [ + [3, 0, -8], + [9, 0, -8] + ], + [ + [4, 0, -9], + [9, 0, -9] + ], + [ + [7, 0, -10], + [9, 0, -10] + ] + ]), new X_("e3845854f85dafd8cec193bcbecdac6cb79f625066de29524d5c10c5580611c5", F_.RoadTurns, mu.TurnShortRightWide, [ + ["RoadWide", "TurnShortRightWide"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 0, -1], + [2, 0, -1] + ], + [ + [-2, 0, -2], + [3, 0, -2] + ], + [ + [2, 0, -6], + [5, 0, -3] + ] + ]), new X_("dc6088960a65a55c74353a1e7c8a1ca8ec99e683f6273bf666d6909b288bb84b", F_.RoadTurns, mu.TurnLongLeftWide, [ + ["RoadWide", "TurnLongLeftWide"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-1, 0, -5], + [1, 0, -3] + ], + [ + [0, 0, -6], + [1, 0, -6] + ], + [ + [0, 0, -7], + [5, 0, -7] + ], + [ + [1, 0, -8], + [5, 0, -8] + ], + [ + [2, 0, -9], + [5, 0, -9] + ], + [ + [3, 0, -10], + [5, 0, -10] + ], + [ + [4, 0, -11], + [13, 0, -11] + ], + [ + [5, 0, -12], + [13, 0, -12] + ], + [ + [7, 0, -13], + [13, 0, -13] + ], + [ + [10, 0, -14], + [13, 0, -14] + ] + ]), new X_("0bbb8d6c1e4a325e10643cf45546da725c1ea18e92a3a95f753339629a06ef6c", F_.RoadTurns, mu.TurnLongRightWide, [ + ["RoadWide", "TurnLongRightWide"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 0, -3], + [2, 0, -2] + ], + [ + [-2, 0, -4], + [3, 0, -4] + ], + [ + [-2, 0, -5], + [4, 0, -5] + ], + [ + [-2, 0, -6], + [6, 0, -6] + ], + [ + [2, 0, -10], + [9, 0, -7] + ] + ]), new X_("7d8d1eed719515ba7e48b5ef4a53b6b4bb2bef42496b6b40d2551230435ecb66", F_.Road, mu.SlopeUp, [ + ["Road", "SlopeUp"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -2] + ] + ]), new X_("d6d54dbf283f7209032541fc6b924dc879d914f253e391cf8b34dde8354661be", F_.Road, mu.SlopeUpLong, [ + ["Road", "SlopeUpLong"] + ], G_, [ + [ + [-2, 0, -4], + [1, 0, 1] + ], + [ + [-2, 1, -5], + [1, 1, -4] + ], + [ + [-2, 1, -6], + [1, 2, -6] + ] + ]), new X_("435e8cf33d28e52f75890cba1cb6529991148afd701f9b40e9ab876c11b2c448", F_.Road, mu.SlopeDown, [ + ["Road", "SlopeDown"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, 0], + [1, 1, 1] + ] + ]), new X_("01990158f65e5d499030d8c6d0ce80d34c136189ae1a9430d4260ea7a85e91a9", F_.Road, mu.SlopeDownLong, [ + ["Road", "SlopeDownLong"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -1], + [1, 1, 5] + ], + [ + [-2, 2, 3], + [1, 2, 5] + ] + ]), new X_("4afecc8b9bd7a3b074112008831fef6b11f9a55ab8c1e570e3e73c1e92b43c6d", F_.Road, mu.Slope, [ + ["Road", "Slope"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ] + ]), new X_("27f9b25126b1006514941bd148c8f19dc2d82022b0c1aa2358f36cb711d4b59c", F_.Road, mu.SlopePillar, [ + ["Road", "Slope"], + ["Pillar", "PillarTopSlope"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ], + [ + [-1, 0, -1], + [0, 0, -1] + ] + ]), new X_("eb236f0ac4bd895c170db53cb518c8df5167a9db5af4bb4f33f73c02deec5265", F_.Road, mu.SlopePillarShort, [ + ["Road", "Slope"], + ["Pillar", "PillarShortSlope"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ], + [ + [-1, 0, -1], + [0, 0, -1] + ] + ]), new X_("99cb9068cb3f97e7cbfdbb3f1edc1085ea37514f3d5dd8936bc32089cc066a5c", F_.Road, mu.SlopeUpVertical, [ + ["Road", "SlopeUpVertical"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new X_("63628b23e104a3eb3c2ba8189cd408a10fbb6ebcd6fa4359d981e3c3804c13d8", F_.Road, mu.IntersectionT, [ + ["Road", "IntersectionT"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("400dc4643653001d283bb13f740593fc2300c547bb4d2a962054ba6aabf3721c", F_.Road, mu.IntersectionTPillarBottom, [ + ["Road", "IntersectionT"], + ["Pillar", "SurfacePillarBottom"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("60355388650d35fcbddaaac29e0d03bc2ae46db1a05cd23ddd3f2722ec2d409e", F_.Road, mu.IntersectionTPillarShort, [ + ["Road", "IntersectionT"], + ["Pillar", "SurfacePillarShort"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("74197b3731c2befd03498bf5172859f0b3652f1972c19e43a99bb938769573df", F_.Road, mu.IntersectionCross, [ + ["Road", "IntersectionCross"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("464e69b5c4f2667c246ade9ed33fd3e50b49438ed0ab787a086dfe74c217ff6c", F_.Road, mu.IntersectionCrossPillarBottom, [ + ["Road", "IntersectionCross"], + ["Pillar", "SurfacePillarBottom"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("90004caf354627289265314966f11b5656e6879ca7de10507e6c50cd95254b75", F_.Road, mu.IntersectionCrossPillarShort, [ + ["Road", "IntersectionCross"], + ["Pillar", "SurfacePillarShort"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("2af8aa6050028dd6ee69b7150e83a6d8819e1848a7b1c782848d3f6448c5091a", F_.RoadWide, mu.ToWideMiddle, [ + ["RoadWide", "ToWideMiddle"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("26341cfe6bec34f46b10ffcd9a7706a8156b9ac41ed2cdfd166f9f8d3e9bc8f3", F_.RoadWide, mu.ToWideLeft, [ + ["RoadWide", "ToWideSide", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("3f82ebd6c72110b532a20673f8b54c7b25ae5988a51d3793bf383fea8ffcffc3", F_.RoadWide, mu.ToWideRight, [ + ["RoadWide", "ToWideSide"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("f5cecce9870f41f8cba7a9fbe631c315370a7a82824d04977ec857dbb1dfed29", F_.RoadWide, mu.ToWideDouble, [ + ["RoadWide", "ToWideDouble"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("99dc726611397f81b47459d32c7bfb8232322d1ca976ba9a3e71cc15451d8cfb", F_.RoadWide, mu.ToWideDiagonal, [ + ["RoadWide", "ToWideDiagonal"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("47d7e3fb334681911e122babef127881a36a763fb22176854114495802d5ce84", F_.RoadWide, mu.StraightWide, [ + ["RoadWide", "StraightWide"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("521adc95ed5a4809eeff7eec872c3d6449e4d6a7e4941d672f1e06a50a6615de", F_.RoadWide, mu.InnerCornerWide, [ + ["RoadWide", "InnerCornerWide"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("d82274b362794e3c1772510002d5015dde345f1e72dd675c8bac41cf2331398b", F_.RoadWide, mu.OuterCornerWide, [ + ["RoadWide", "OuterCornerWide"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("9b1df4dd4687404adb5789f3b90af39ea6fa65ef741a07b116dc436dc14a2aa1", F_.RoadWide, mu.SlopeUpLeftWide, [ + ["RoadWide", "SlopeUpWide", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -2] + ] + ]), new X_("651d4e988913b84359ad10e0c4745965b6a388eaa8c9bfbba4b6a50ae6d4f592", F_.RoadWide, mu.SlopeUpRightWide, [ + ["RoadWide", "SlopeUpWide"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -2] + ] + ]), new X_("848d9930c58e66152090d7853af87c8bb7971e1771d3c337ac1a50aaa4975a78", F_.RoadWide, mu.SlopeUpLongLeftWide, [ + ["RoadWide", "SlopeUpLongWide", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, -4], + [1, 0, 1] + ], + [ + [-2, 1, -5], + [1, 1, -4] + ], + [ + [-2, 1, -6], + [1, 2, -6] + ] + ]), new X_("e4d54c6c3b6011a1acfb6766b6b3e7ea0de6f9c6569a5ec88c47968ad4105b2a", F_.RoadWide, mu.SlopeUpLongRightWide, [ + ["RoadWide", "SlopeUpLongWide"] + ], G_, [ + [ + [-2, 0, -4], + [1, 0, 1] + ], + [ + [-2, 1, -5], + [1, 1, -4] + ], + [ + [-2, 1, -6], + [1, 2, -6] + ] + ]), new X_("106ad1d4c5aded30cc3ef4cd1bdc40babab84464ce7dbce3b81cc20d55fd615f", F_.RoadWide, mu.SlopeDownLeftWide, [ + ["RoadWide", "SlopeDownWide", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, 0], + [1, 1, 1] + ] + ]), new X_("23a693633b8453c7a531de9723e6ca14d0676b1d7a4df7f78278914467b90a27", F_.RoadWide, mu.SlopeDownRightWide, [ + ["RoadWide", "SlopeDownWide"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, 0], + [1, 1, 1] + ] + ]), new X_("0f2e33a8b68667e30e80ceaefdb890a77643799d63c7f20672ca3185bbc04270", F_.RoadWide, mu.SlopeDownLongLeftWide, [ + ["RoadWide", "SlopeDownLongWide", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -1], + [1, 1, 5] + ], + [ + [-2, 2, 3], + [1, 2, 5] + ] + ]), new X_("164903518c7efa4890a792017ea2b8125a2c3dae76bba4c6f1f56fb0f7e40ebc", F_.RoadWide, mu.SlopeDownLongRightWide, [ + ["RoadWide", "SlopeDownLongWide"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -1], + [1, 1, 5] + ], + [ + [-2, 2, 3], + [1, 2, 5] + ] + ]), new X_("c20560fd35288c5cc74af61834b9a56efaeacdde55eb793d400b7c5b97904993", F_.RoadWide, mu.SlopeLeftWide, [ + ["RoadWide", "SlopeWide", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ] + ]), new X_("b6a26eb3cefee53d4deef24544e5b5c1ecd25e8e8bd7c3070c7947ada55c57c2", F_.RoadWide, mu.SlopeRightWide, [ + ["RoadWide", "SlopeWide"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ] + ]), new X_("b598ff14bda99600434b24a619132fec4bffcc535483b9b57b0c8c09c1be1f1b", F_.RoadWide, mu.SlopeUpVerticalLeftWide, [ + ["RoadWide", "SlopeUpVerticalWide"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new X_("4e0275d3a01eaca6ec5118b8b816ed292cb7172710cf9b7801068424ab684b22", F_.RoadWide, mu.SlopeUpVerticalRightWide, [ + ["RoadWide", "SlopeUpVerticalWide", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new X_("896b47675cc2ff58494979168f6fd36c27c43da29aed6a52fdf80f054630166a", F_.Plane, mu.Plane, [ + ["Planes", "Plane"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("dc9afb98a8bb998d3b76c3563385e58c1749e56ff43fbc7577b1f57ba8360702", F_.Plane, mu.PlanePillarBottom, [ + ["Planes", "Plane"], + ["Pillar", "SurfacePillarBottom"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("f59ad95edd26814236ab30b73f6f4f68003885ef150201a4ace14b832abcf438", F_.Plane, mu.PlanePillarShort, [ + ["Planes", "Plane"], + ["Pillar", "SurfacePillarShort"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("48247a66b232461083fa2aa36644e7e8779f5b426d474efd375ee7d21d009c9a", F_.Plane, mu.HalfPlane, [ + ["Planes", "HalfPlane"] + ], G_, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [-2, 0, 0], + [0, 0, 0] + ], + [ + [-2, 0, -1], + [-1, 0, -1] + ], + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new X_("eac8530d1a025291674bf34b206f75700dc8626012d8d33ed398f7aed746dac8", F_.Plane, mu.QuarterPlane, [ + ["Planes", "QuarterPlane"] + ], G_, [ + [ + [-2, 0, 1], + [-2, 0, 1] + ], + [ + [-2, 0, -1], + [-1, 0, 0] + ], + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new X_("1da4dcad366aa90a5977e1b20c5d79297106ed3b4f664be04b6b3f6370c105b4", F_.Plane, mu.PlaneSlopeUp, [ + ["Planes", "PlaneSlopeUp"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -2] + ] + ]), new X_("3e203219ec0ea114da510b37a4c392b90417af796e2b089da6d996e628c0a323", F_.Plane, mu.PlaneSlopeUpLong, [ + ["Planes", "PlaneSlopeUpLong"] + ], G_, [ + [ + [-2, 0, -4], + [1, 0, 1] + ], + [ + [-2, 1, -5], + [1, 1, -4] + ], + [ + [-2, 1, -6], + [1, 2, -6] + ] + ]), new X_("053dbf6c03eea5102b67168ccb479d8364233b36c4210aff093928bbb83d859d", F_.Plane, mu.PlaneSlopeDown, [ + ["Planes", "PlaneSlopeDown"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, 0], + [1, 1, 1] + ] + ]), new X_("d68121a3cb0ee19cab45adb136e0df6145f43ca9ecbde8a417c02a6d4a75a757", F_.Plane, mu.PlaneSlopeDownLong, [ + ["Planes", "PlaneSlopeDownLong"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -1], + [1, 1, 5] + ], + [ + [-2, 2, 3], + [1, 2, 5] + ] + ]), new X_("67ec222e8fe770a8d728bb76ff571377c261d2f232134d4cb328c9ab772cf3ca", F_.Plane, mu.PlaneSlope, [ + ["Planes", "PlaneSlope"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ] + ]), new X_("a52c09d87d37088b68420db07626f274c74f792cb223764624d887a5ed145a2e", F_.Plane, mu.PlaneSlopePillar, [ + ["Planes", "PlaneSlope"], + ["Pillar", "PillarTopSlope"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ], + [ + [-1, 0, -1], + [0, 0, -1] + ] + ]), new X_("57df805433e706ec946d767d7ff0881f163c2e36bb1db00b0e3259954a787dec", F_.Plane, mu.PlaneSlopePillarShort, [ + ["Planes", "PlaneSlope"], + ["Pillar", "PillarShortSlope"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 2, -2] + ], + [ + [-1, 0, -1], + [0, 0, -1] + ] + ]), new X_("ba0d6ec33647740bf4c60e542d1758095afa3ef451bdaec76c783dd32116e4cb", F_.Plane, mu.PlaneSlopeVerticalBottom, [ + ["Planes", "PlaneSlopeVertical"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new X_("78a372de15f3151f901cf7fa7a3983ee6513cf19fa8568f10946e195c5a62515", F_.Plane, mu.PlaneSlopeToVertical, [ + ["Planes", "PlaneSlopeToVertical"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 3, -2] + ] + ]), new X_("5f6d1ece085d450643f1399af53673dcc6bbbf413094d8dd5ee6816d80e1c8ae", F_.Plane, mu.PlaneBridge, [ + ["Planes", "PlaneBridge"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 1] + ] + ]), new X_("32b91fc4cdf95f5b7a490d81058522bae14741601dd44c73cc110121aa1dd6e6", F_.Plane, mu.PlaneBridgeCorner, [ + ["Planes", "PlaneBridgeCorner"] + ], G_, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new X_("2db870b1821fb655437bd0527569d5a6843718fa0775682701437432265a1a88", F_.Plane, mu.PlaneBridgeIntersectionT, [ + ["Planes", "PlaneBridgeIntersectionT"] + ], G_, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new X_("33aa0e7524b74dcdae4aed89856c09d25248c4cab8f70dcc31b347f0a00fcb52", F_.Plane, mu.PlaneBridgeIntersectionCross, [ + ["Planes", "PlaneBridgeIntersectionCross"] + ], G_, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, -2], + [0, 0, -2] + ] + ]), new X_("bd7cc4ab180fc0a6936fef828ae3a91566b3dd621b888fbcc57c9ac11dcb713b", F_.Plane, mu.PlaneWall, [ + ["Planes", "PlaneWall"] + ], G_, [ + [ + [-2, 0, 1], + [1, 0, 1] + ] + ]), new X_("d92568164028bb2e65799abd9dc6ba66cfe8a28515c09fbe5ac175f5966af66a", F_.Plane, mu.PlaneWallCorner, [ + ["Planes", "PlaneWallCorner"] + ], G_, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [1, 0, -2], + [1, 0, 0] + ] + ]), new X_("792ab5a6f0e2bf8e556575ef12731ec30755855d4394f98eb4ca7ec8b713933c", F_.Plane, mu.PlaneWallInnerCorner, [ + ["Planes", "PlaneWallInnerCorner"] + ], G_, [ + [ + [1, 0, 1], + [1, 0, 1] + ] + ]), new X_("de0d588c4b2fe6b32d72a7e0e2984285955f805ccb86d3c269f7155401cd6b20", F_.Block, mu.Block, [ + ["Blocks", "Block"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("1ce6b585c0e99d71877fefe015ff16336ae62eb0caebeca62dd09d836092d7b6", F_.Block, mu.HalfBlock, [ + ["Blocks", "HalfBlock"] + ], Q_, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [-2, 0, 0], + [0, 0, 0] + ], + [ + [-2, 0, -1], + [-1, 0, -1] + ], + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new X_("0d5f0609c3c98f687d55d3a73313225c1642f6285ddaca3ed536db742c85958d", F_.Block, mu.QuarterBlock, [ + ["Blocks", "QuarterBlock"] + ], Q_, [ + [ + [-2, 0, 1], + [-2, 0, 1] + ], + [ + [-2, 0, -1], + [-1, 0, 0] + ], + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new X_("18fc1c569c6fc04f95f10174143d19e7a9ea4e387302363f4ae60883c1acd3f0", F_.Block, mu.BlockSlopedDown, [ + ["Blocks", "BlockSlopedDown"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, -1] + ], + [ + [-2, 1, -2], + [1, 1, 1] + ] + ]), new X_("22dd5b2804c88994a4d283cb822f47de3c72f82376e4c9332d39feae85206c0f", F_.Block, mu.BlockSlopedDownInnerCorner, [ + ["Blocks", "BlockSlopedDownInnerCorner"] + ], Q_, [ + [ + [-2, 0, -2], + [-1, 0, 1] + ], + [ + [0, 0, -2], + [1, 0, -1] + ], + [ + [-2, 1, -2], + [1, 1, 1] + ] + ]), new X_("81a71b4cc6ef8520f20fd738457abc31b04258c97f9862f70190fd2a0ba91382", F_.Block, mu.BlockSlopedDownOuterCorner, [ + ["Blocks", "BlockSlopedDownOuterCorner"] + ], Q_, [ + [ + [-2, 0, -2], + [-1, 0, -1] + ], + [ + [-2, 1, -2], + [1, 1, 1] + ] + ]), new X_("f4e19d3bc49994a85fecd187b76c21d258e7f30f0506d90bc6f173336e11627d", F_.Block, mu.BlockSlopedUp, [ + ["Blocks", "BlockSlopedUp"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -1] + ] + ]), new X_("fd9309468e97131bbbd1404fac34a7137cb176327789b955c1aea30267e1cded", F_.Block, mu.BlockSlopedUpInnerCorner, [ + ["Blocks", "BlockSlopedUpInnerCorner"] + ], Q_, [ + [ + [-2, 1, -2], + [-1, 1, 1] + ], + [ + [0, 1, -2], + [1, 1, -1] + ], + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("1321fb07ece1b80b99dc4671b52673ac028fbf43322e9e652ad633ff6afac21b", F_.Block, mu.BlockSlopedUpOuterCorner, [ + ["Blocks", "BlockSlopedUpOuterCorner"] + ], Q_, [ + [ + [-2, 1, -2], + [-1, 1, -1] + ], + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("b97c17388fc38139f2f5a98a36d94831095f79db709dd97748ad2904bc54d689", F_.Block, mu.BlockSlopeDown, [ + ["Blocks", "BlockSlopeDown"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("50276826bbfb9fcb11a8519b8dae8a2b1cf82817d5431418d9a376664261be82", F_.Block, mu.BlockSlopeUp, [ + ["Blocks", "BlockSlopeUp"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("63fd3032796397f8e25669c1c1d3fc97b8ec0e5fc88bfcb5c00a2a2c2b517888", F_.Block, mu.BlockSlopeDownLong, [ + ["Blocks", "BlockSlopeDownLong"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, 5] + ], + [ + [-2, 1, 0], + [1, 1, 5] + ] + ]), new X_("2d29131222a8d891b4350e6a2f335b114e001cf22e4e2f170dc9b86c4b2fd325", F_.Block, mu.BlockSlopeUpLong, [ + ["Blocks", "BlockSlopeUpLong"] + ], Q_, [ + [ + [-2, 0, -6], + [1, 0, 1] + ], + [ + [-2, 1, -6], + [1, 1, -4] + ] + ]), new X_("0bbcd96c91b69e6e8005bfae5b64455b0d6510cb1595f3fca7f77c86ddda4560", F_.Block, mu.BlockSlopeVerticalTop, [ + ["Blocks", "BlockSlopeVertical", { + flipY: !0 + }] + ], Q_, [ + [ + [-2, 3, -2], + [1, 3, 1] + ], + [ + [-2, 2, -2], + [1, 2, -1] + ], + [ + [-2, 0, -2], + [1, 1, -2] + ] + ]), new X_("e81a123c0be3f8f168fb584d53e8aa038785569bbf2cd1c1cead2272889591e0", F_.Block, mu.BlockSlopeVerticalBottom, [ + ["Blocks", "BlockSlopeVertical"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -1] + ], + [ + [-2, 2, -2], + [1, 3, -2] + ] + ]), new X_("94e14468f31af7f39b9d7ba188a364089ae81da2bd6a9db2b8f5b1b8cedce741", F_.Block, mu.BlockSlopeToVertical, [ + ["Blocks", "BlockSlopeToVertical"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, -1] + ], + [ + [-2, 2, -2], + [1, 3, -2] + ] + ]), new X_("3a2f05b1c2c2fd976997fa473f1adb3ba14495701dc5a998f8697798384c6946", F_.Block, mu.BlockSlopeVerticalCornerTop, [ + ["Blocks", "BlockSlopeVerticalCornerBottom", { + flipY: !0 + }] + ], Q_, [ + [ + [-2, 3, -2], + [1, 3, 1] + ], + [ + [-2, 2, -2], + [0, 2, 0] + ], + [ + [1, 2, -2], + [1, 2, -1] + ], + [ + [-2, 2, 1], + [-1, 2, 1] + ], + [ + [-2, 1, -2], + [-1, 1, -1] + ], + [ + [-2, 1, 0], + [-1, 1, 0] + ], + [ + [0, 1, -2], + [0, 1, -1] + ], + [ + [1, 1, -2], + [1, 1, -2] + ], + [ + [-2, 1, 1], + [-2, 1, 1] + ], + [ + [-2, 0, -2], + [-1, 0, -1] + ], + [ + [-2, 0, 0], + [-2, 0, 1] + ], + [ + [0, 0, -2], + [1, 0, -2] + ] + ]), new X_("3e4fa43e69aa1dbee584e16451a95a16229bba8d638df2bf6f6c9ffb3a9629c9", F_.Block, mu.BlockInnerCorner, [ + ["Blocks", "BlockInnerCorner"] + ], Q_, [ + [ + [-2, 0, 0], + [-2, 0, 1] + ], + [ + [-2, 0, -2], + [-1, 0, -1] + ], + [ + [0, 0, -2], + [1, 0, -2] + ] + ]), new X_("cc9c95eef56def4cf013e4ac85b8013a2b4f4b4346f1f5dd41fa017de763ef17", F_.Block, mu.BlockSlopeVerticalCornerBottom, [ + ["Blocks", "BlockSlopeVerticalCornerBottom"] + ], Q_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [0, 1, 0] + ], + [ + [1, 1, -2], + [1, 1, -1] + ], + [ + [-2, 1, 1], + [-1, 1, 1] + ], + [ + [-2, 2, -2], + [-1, 2, -1] + ], + [ + [-2, 2, 0], + [-1, 2, 0] + ], + [ + [0, 2, -2], + [0, 2, -1] + ], + [ + [1, 2, -2], + [1, 2, -2] + ], + [ + [-2, 2, 1], + [-2, 2, 1] + ], + [ + [-2, 3, -2], + [-1, 3, -1] + ], + [ + [-2, 3, 0], + [-2, 3, 1] + ], + [ + [0, 3, -2], + [1, 3, -2] + ] + ]), new X_("e4c82c8e512d52269cb6588fa34b06c179340ea40e71f74cbadadc7e8353f5a2", F_.Block, mu.BlockSlopeVerticalInnerCornerTop, [ + ["Blocks", "BlockSlopeVerticalInnerCorner", { + flipY: !0 + }] + ], Q_, [ + [ + [-2, 3, -2], + [0, 3, 1] + ], + [ + [1, 3, -2], + [1, 3, 0] + ], + [ + [-2, 2, -2], + [-2, 2, -1] + ], + [ + [-1, 2, -2], + [-1, 2, -2] + ], + [ + [-2, 0, -2], + [-2, 1, -2] + ] + ]), new X_("926fdc6e82ecd709cc535faea6bb8778c6e2e91edb39eb6ae6308076dca2ed18", F_.Block, mu.BlockSlopeVerticalInnerCornerBottom, [ + ["Blocks", "BlockSlopeVerticalInnerCorner"] + ], Q_, [ + [ + [-2, 0, -2], + [0, 0, 1] + ], + [ + [1, 0, -2], + [1, 0, 0] + ], + [ + [-2, 1, -2], + [-2, 1, -1] + ], + [ + [-1, 1, -2], + [-1, 1, -2] + ], + [ + [-2, 2, -2], + [-2, 3, -2] + ] + ]), new X_("1086515ba3c1d8e5ec76b378f0bdbc77fc5a57fc8eba8972f0d5e611be945235", F_.Block, mu.BlockBridge, [ + ["Blocks", "BlockBridge"] + ], Q_, [ + [ + [-1, 0, -2], + [0, 0, 1] + ] + ]), new X_("5426ad4ff64af3f1a0f0794ad30cfc20434dfffdf44d93010f5f98671c246ff3", F_.Block, mu.BlockBridgeCorner, [ + ["Blocks", "BlockBridgeCorner"] + ], Q_, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new X_("784b9b4459e838e5b8f74f6250769ffa52ec5cc3608abc24c380a2e792c3d338", F_.Block, mu.BlockBridgeIntersectionT, [ + ["Blocks", "BlockBridgeIntersectionT"] + ], Q_, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new X_("dfbcbc107a3c12217bfa3b224a5757d08e995705d1c122bb2c2665bbb8447b1c", F_.Block, mu.BlockBridgeIntersectionCross, [ + ["Blocks", "BlockBridgeIntersectionCross"] + ], Q_, [ + [ + [-1, 0, -1], + [0, 0, 1] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, -2], + [0, 0, -2] + ] + ]), new X_("5fe53442e559418b7cc9483315b0ac45b8797f9630d5ecc4c7604dab4be25584", F_.WallTrack, mu.WallTrackTop, [ + ["WallTrack", "WallTrackBottom", { + flipY: !0 + }] + ], G_, [ + [ + [-2, 3, -1], + [1, 3, 1] + ], + [ + [-2, 2, -1], + [1, 2, -1] + ], + [ + [-2, 0, -2], + [1, 2, -2] + ] + ]), new X_("010d187fbfbd399bfe880bbea1b548678c239eba0be2913e5cb8a69fbd17adf7", F_.WallTrack, mu.WallTrackMiddle, [ + ["WallTrack", "WallTrackMiddle"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new X_("33216a4dcb734511a80c5bf70ca6f66de555800426686eae5a2519d4c837090e", F_.WallTrack, mu.WallTrackBottom, [ + ["WallTrack", "WallTrackBottom"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-2, 1, -1], + [1, 1, -1] + ], + [ + [-2, 1, -2], + [1, 3, -2] + ] + ]), new X_("1e306d2a6347b68d6e275bf4ccc9c8942e0a633bf625a3bba95fa9f98ecd50ff", F_.WallTrack, mu.WallTrackSlopeToVertical, [ + ["WallTrack", "WallTrackSlopeToVertical"] + ], G_, [ + [ + [-2, 0, 0], + [1, 0, 1] + ], + [ + [-2, 1, -2], + [1, 1, 0] + ], + [ + [-2, 2, -2], + [1, 3, -2] + ] + ]), new X_("3ed21ddbc756a6644e05f5e1ca78ff8df6d51affc472c2d86e7f23d85911e273", F_.WallTrack, mu.WallTrackTopCorner, [ + ["WallTrack", "WallTrackBottomCorner", { + flipY: !0 + }] + ], G_, [ + [ + [-2, 0, -1], + [-2, 0, 1] + ], + [ + [-1, 0, -1], + [-1, 0, -1] + ], + [ + [-1, 0, -2], + [1, 0, -2] + ], + [ + [-2, 1, -1], + [-2, 1, 1] + ], + [ + [-1, 1, -1], + [-1, 1, 0] + ], + [ + [0, 1, -1], + [0, 1, -1] + ], + [ + [-1, 1, -2], + [1, 1, -2] + ], + [ + [-2, 2, 0], + [-2, 2, 1] + ], + [ + [-1, 2, 1], + [-1, 2, 1] + ], + [ + [-1, 2, -1], + [0, 2, 0] + ], + [ + [1, 2, -1], + [1, 2, -1] + ], + [ + [0, 2, -2], + [1, 2, -2] + ], + [ + [0, 3, -1], + [1, 3, 1] + ], + [ + [-1, 3, 0], + [-1, 3, 1] + ] + ]), new X_("4027a2439cc3e42ceda50ff3d427a31e127b25a6457b55edc2d498b474a296a7", F_.WallTrack, mu.WallTrackMiddleCorner, [ + ["WallTrack", "WallTrackMiddleCorner"] + ], G_, [ + [ + [-2, 0, -1], + [-2, 0, 1] + ], + [ + [-1, 0, -1], + [-1, 0, -1] + ], + [ + [-1, 0, -2], + [1, 0, -2] + ] + ]), new X_("498286e062056a537a482ed3385fe0ac0343b399f29d470641df8f74c0532672", F_.WallTrack, mu.WallTrackBottomCorner, [ + ["WallTrack", "WallTrackBottomCorner"] + ], G_, [ + [ + [-2, 3, -1], + [-2, 3, 1] + ], + [ + [-1, 3, -1], + [-1, 3, -1] + ], + [ + [-1, 3, -2], + [1, 3, -2] + ], + [ + [-2, 2, -1], + [-2, 2, 1] + ], + [ + [-1, 2, -1], + [-1, 2, 0] + ], + [ + [0, 2, -1], + [0, 2, -1] + ], + [ + [-1, 2, -2], + [1, 2, -2] + ], + [ + [-2, 1, 0], + [-2, 1, 1] + ], + [ + [-1, 1, 1], + [-1, 1, 1] + ], + [ + [-1, 1, -1], + [0, 1, 0] + ], + [ + [1, 1, -1], + [1, 1, -1] + ], + [ + [0, 1, -2], + [1, 1, -2] + ], + [ + [0, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, 0], + [-1, 0, 1] + ] + ]), new X_("ac09cd62c83af376f23d37dd88273614a2a11cc04a04bff6075fd749bb1ff421", F_.WallTrack, mu.WallTrackTopInnerCorner, [ + ["WallTrack", "WallTrackBottomInnerCorner", { + flipY: !0 + }] + ], G_, [ + [ + [-2, 3, -1], + [1, 3, 1] + ], + [ + [-1, 3, -2], + [1, 3, -2] + ], + [ + [-2, 2, -2], + [-1, 2, -1] + ], + [ + [-2, 0, -2], + [-2, 1, -2] + ] + ]), new X_("16c9c8ece47c097f60cfc7f8a2daa2f0e7ad0befb0ebfd185402013fd1ec8e0f", F_.WallTrack, mu.WallTrackInnerCorner, [ + ["WallTrack", "WallTrackInnerCorner"] + ], G_, [ + [ + [-2, 0, -2], + [-2, 0, -2] + ] + ]), new X_("404e7506c2f7e9302acac39c31a659e7e09e7852786e5f0244f9827727a0bf1e", F_.WallTrack, mu.WallTrackBottomInnerCorner, [ + ["WallTrack", "WallTrackBottomInnerCorner"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 1] + ], + [ + [-1, 0, -2], + [1, 0, -2] + ], + [ + [-2, 1, -2], + [-1, 1, -1] + ], + [ + [-2, 2, -2], + [-2, 3, -2] + ] + ]), new X_("8b7023471502607ef19109760bee3b954ea3b3883c32f3960f75c6651c912ffd", F_.WallTrack, mu.WallTrackFloor, [ + ["WallTrack", "WallTrackFloor"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("59e7f31827236c71db8b16f3f1f259c4c82c87a37e4d57a5a097c0d527d128f3", F_.WallTrack, mu.WallTrackFloorCorner, [ + ["WallTrack", "WallTrackFloorCorner"] + ], G_, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [0, 0, 0], + [1, 0, 0] + ], + [ + [1, 0, -2], + [1, 0, -1] + ] + ]), new X_("d58e3805b550b70940c845a807086865b21a4c36da74ffddedcfe5ce2d08e093", F_.WallTrack, mu.WallTrackFloorPlaneCorner, [ + ["WallTrack", "WallTrackFloorPlaneCorner"] + ], G_, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [0, 0, 0], + [1, 0, 0] + ], + [ + [1, 0, -2], + [1, 0, -1] + ] + ]), new X_("a56b0c1cf964b213a38167cbbac6f33acd403978ad75746eb51bcfd8c6a36148", F_.WallTrack, mu.WallTrackCeiling, [ + ["WallTrack", "WallTrackCeiling"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, 1] + ] + ]), new X_("f87b592d02120312e8e93d8a27c02dcda1095ac2f09879c6efafb2ca2b49d127", F_.WallTrack, mu.WallTrackCeilingCorner, [ + ["WallTrack", "WallTrackCeilingCorner"] + ], G_, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [0, 0, 0], + [1, 0, 0] + ], + [ + [1, 0, -2], + [1, 0, -1] + ] + ]), new X_("cfce1fe50f8cd26393eadd475783830e02f0b39bad4c0e00f7aa69614b22decc", F_.WallTrack, mu.WallTrackCeilingPlaneCorner, [ + ["WallTrack", "WallTrackCeilingPlaneCorner"] + ], G_, [ + [ + [-2, 0, 1], + [1, 0, 1] + ], + [ + [0, 0, 0], + [1, 0, 0] + ], + [ + [1, 0, -2], + [1, 0, -1] + ] + ]), new X_("19656d02145f1a4ba07dbf2f236f865d34c86f823741b247b5d444a36d61c316", F_.Pillar, mu.PillarTop, [ + ["Pillar", "PillarTop"] + ], G_, [ + [ + [-1, 0, -1], + [0, 0, 0] + ] + ]), new X_("dde596d55ffc00f0f00d361667239d9f71c414f03304fecb6a7d11f6f5e702f1", F_.Pillar, mu.PillarMiddle, [ + ["Pillar", "PillarMiddle"] + ], G_, [ + [ + [-1, 0, -1], + [0, 0, 0] + ] + ]), new X_("dced5202d9373f9dd81a39530a87a1a7036c93ae71604a4e26c3a191abf3c197", F_.Pillar, mu.PillarBottom, [ + ["Pillar", "PillarBottom"] + ], G_, [ + [ + [-1, 0, -1], + [0, 0, 0] + ] + ]), new X_("af83eebf50c302880377e4f8c1fb3b2ef96ae193e8d03c17e1fd77c73a847e63", F_.Pillar, mu.PillarShort, [ + ["Pillar", "PillarShort"] + ], G_, [ + [ + [-1, 0, -1], + [0, 0, 0] + ] + ]), new X_("25b41116fb04b1f3cdd3119f57e0000a6ea8cb12d435718ffd6bb765866c272f", F_.Pillar, mu.PillarBranch1, [ + ["Pillar", "PillarBranch1"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ] + ]), new X_("05ae39aea4f1ddd818fa57860e688c9cb875544f9b82eafe58a2eb9c19d8d91d", F_.Pillar, mu.PillarBranch1Top, [ + ["Pillar", "PillarBranch1Top"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ] + ]), new X_("06c29d92e42e0c32050af98d69eecc94ce15adf8ac81dbe53dfb577a83265f4e", F_.Pillar, mu.PillarBranch1Middle, [ + ["Pillar", "PillarBranch1Middle"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ] + ]), new X_("4a989027e0bd6db264f092bac729d9d450e012a710ea28d199f7ff52efd70fbd", F_.Pillar, mu.PillarBranch1Bottom, [ + ["Pillar", "PillarBranch1Bottom"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ] + ]), new X_("78b2ff83ad71e7f3d692abc35923fa20c2ae14c01e37d44ec430746ca1bac992", F_.Pillar, mu.PillarBranch2, [ + ["Pillar", "PillarBranch2"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new X_("b22c93bc73ec2da9dbff218da1676d7436527ed284e264f37294e48ef1307301", F_.Pillar, mu.PillarBranch2Top, [ + ["Pillar", "PillarBranch2Top"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new X_("79a456a8fa3da24bec6c033f6c736fa1c728745f9624ae78ca20b6a4a76afae8", F_.Pillar, mu.PillarBranch2Middle, [ + ["Pillar", "PillarBranch2Middle"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new X_("3b81b3f965cbc9fda4fe09e830ba25f1b96ce512d87b0146a1192a6cd0d07335", F_.Pillar, mu.PillarBranch2Bottom, [ + ["Pillar", "PillarBranch2Bottom"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ] + ]), new X_("27727678bbcac9d3b0172b165ca5c92b10f4b4584a3a18fef4c542f3e791f26f", F_.Pillar, mu.PillarBranch3, [ + ["Pillar", "PillarBranch3"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new X_("50c7ac511d30ab9e065c928b776652f038be7683d948082bbefc419ee049e505", F_.Pillar, mu.PillarBranch3Top, [ + ["Pillar", "PillarBranch3Top"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new X_("98b3bfe99e7132825f5aa93122e4e5fdec46eb2877c8eb91fa2648f709527b60", F_.Pillar, mu.PillarBranch3Middle, [ + ["Pillar", "PillarBranch3Middle"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new X_("7326bbb558f8bcc28d5875c43b1b8e3646caadb873a14fde3ab517f779aea345", F_.Pillar, mu.PillarBranch3Bottom, [ + ["Pillar", "PillarBranch3Bottom"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ] + ]), new X_("0e23c2615cfdb350bb3a700b6169589265a1d1079f61294fb497b8f80191d523", F_.Pillar, mu.PillarBranch4, [ + ["Pillar", "PillarBranch4"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, 1], + [0, 0, 1] + ] + ]), new X_("e62b55e111dbcb3faefed0a203eac5b55051a2b11911946660310e3df3588da3", F_.Pillar, mu.PillarBranch4Top, [ + ["Pillar", "PillarBranch4Top"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, 1], + [0, 0, 1] + ] + ]), new X_("4e2cfb89c1c591803a1440532a74c3ace37ec7fe78a526c1b57f6679c620df2e", F_.Pillar, mu.PillarBranch4Middle, [ + ["Pillar", "PillarBranch4Middle"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, 1], + [0, 0, 1] + ] + ]), new X_("e7807350788e4570c8bb74d4a635639ef731d83e52922fac5bc10f415f73f794", F_.Pillar, mu.PillarBranch4Bottom, [ + ["Pillar", "PillarBranch4Bottom"] + ], G_, [ + [ + [-1, 0, -2], + [0, 0, 0] + ], + [ + [1, 0, -1], + [1, 0, 0] + ], + [ + [-2, 0, -1], + [-2, 0, 0] + ], + [ + [-1, 0, 1], + [0, 0, 1] + ] + ]), new X_("836bfd12791bfebd99aba70531da4c9bd6e332d16c1e120a8888ea54f59456f9", F_.Pillar, mu.PillarBranch5, [ + ["Pillar", "PillarBranch5"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 0] + ] + ]), new X_("ab85228116faf9ae7b1e6cb4a03530cbec808df3d3c1d7883eb41eb7cfe231d7", F_.Pillar, mu.PillarBranch5Top, [ + ["Pillar", "PillarBranch5Top"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 0] + ] + ]), new X_("db93d5cea4e523fd67a56f8d928084ab6355331a8e5d1899115c1841866006bb", F_.Pillar, mu.PillarBranch5Middle, [ + ["Pillar", "PillarBranch5Middle"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 0] + ] + ]), new X_("dd793efa234159e3a0ff28b064ecb715e6c8bb76e06acfe4bd0d9a2f2b9bba88", F_.Pillar, mu.PillarBranch5Bottom, [ + ["Pillar", "PillarBranch5Bottom"] + ], G_, [ + [ + [-2, 0, -1], + [1, 0, 0] + ] + ]), new X_("350f7d3591ffd0b2cfb8204d1c6cd0022fd3bda81ea7e950fce3abea7ec89e1a", F_.Sign, mu.SignArrowLeft, [ + ["Signs", "SignArrowRight", { + flipX: !0 + }] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new X_("22e104e58bba0a609d379578e391ce50ca523c9eee1c3fddebb6d1bb2246a0b9", F_.Sign, mu.SignArrowRight, [ + ["Signs", "SignArrowRight"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new X_("acba0cfe380e625285b973e09344e61740e77d6f8cac8691ef3e0a0b0878040e", F_.Sign, mu.SignArrowUp, [ + ["Signs", "SignArrowUp"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new X_("8d0dbea0a26bdf3addd372f5d9a2fdecfd776a48f31218acdeb036129b248ca5", F_.Sign, mu.SignArrowDown, [ + ["Signs", "SignArrowUp", { + flipY: !0 + }] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new X_("e5e1b1ca69d7b230331171be07876c4b1bdebba557c19b18ab17d91eee2771d5", F_.Sign, mu.SignWarning, [ + ["Signs", "SignWarning"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ]), new X_("64ed1fba4990a25bc774575ff8835117638d2c3e7c8f41bf0032d219e1083e4c", F_.Sign, mu.SignWrongWay, [ + ["Signs", "SignWrongWay"] + ], G_, [ + [ + [-2, 0, -2], + [1, 0, -2] + ] + ])], + q_ = new Map; + for (const e of j_) { + if (q_.has(e.id)) throw new Error("Duplicate track part id " + e.id.toString()); + q_.set(e.id, e) + } + + function Y_(e) { + const t = q_.get(e); + if (null == t) throw new Error("Unknown track part id " + e.toString()); + return t + } + const K_ = j_.filter((e => { + var t; + return (null === (t = e.detector) || void 0 === t ? void 0 : t.type) == Jh.Checkpoint + })).map((e => e.id)), + Z_ = j_.filter((e => null != e.startOffset)).map((e => e.id)); + + function J_(e) { + const t = e.parts; + if ("object" != typeof t && null !== t && !Array.isArray(t)) return null; + const n = new Pv(L_.Summer, new B_), + i = Object.keys(t); + for (const e of i) { + const i = parseInt(e, 10); + if (!(i in mu)) return null; + { + const e = t[i]; + if (!Array.isArray(e)) return null; + if (e.length % 4 != 0) return null; + for (let t = 0; t < e.length; t += 4) { + const r = parseInt(e[t + 0], 10), + a = parseInt(e[t + 1], 10), + s = parseInt(e[t + 2], 10), + o = parseInt(e[t + 3], 10); + if (isNaN(r) || isNaN(a) || isNaN(s) || isNaN(o)) return null; + if (!(o >= 0 && o <= 3 && Math.abs(r) <= 1e9 && a >= 0 && a <= 1e9 && Math.abs(s) <= 1e9)) return null; + { + if (K_.includes(i)) return null; + let e = null; + Z_.includes(i) && (e = 0), n.addPart(4 * r, a, 4 * s, i, o, Au.YPositive, k_.Default, null, e) + } + } + } + } + return n + } + + function $_(e) { + const t = fh(e); + if (null == t) return null; + const n = new Pv(L_.Summer, new B_); + let i = 0; + for (; i < t.length;) { + if (t.length - i < 2) return null; + const e = t[i + 0] | t[i + 1] << 8; + if (i += 2, !(e in mu)) return null; + if (t.length - i < 4) return null; + const r = t[i + 0] | t[i + 1] << 8 | t[i + 2] << 16 | t[i + 3] << 24; + i += 4; + for (let a = 0; a < r; ++a) { + if (t.length - i < 3) return null; + const r = (t[i + 0] | t[i + 1] << 8 | t[i + 2] << 16) - Math.pow(2, 23); + if (i += 3, t.length - i < 3) return null; + const a = t[i + 0] | t[i + 1] << 8 | t[i + 2] << 16; + if (i += 3, t.length - i < 3) return null; + const s = (t[i + 0] | t[i + 1] << 8 | t[i + 2] << 16) - Math.pow(2, 23); + if (i += 3, t.length - i < 1) return null; + const o = 3 & t[i + 0]; + if (i += 1, o < 0 || o > 3) return null; + if (K_.includes(e)) return null; + let l = null; + Z_.includes(e) && (l = 0), n.addPart(4 * r, a, 4 * s, e, o, Au.YPositive, k_.Default, null, l) + } + } + return n + } + + function ev(e) { + const t = S_(e); + if (null == t) return null; + const n = new dh.Inflate; + if (n.push(t, !0), n.err) return null; + const i = n.result; + if (!(i instanceof Uint8Array)) return null; + const r = new Pv(L_.Summer, new B_); + let a = 0; + for (; a < i.length;) { + if (i.length - a < 2) return null; + const e = i[a + 0] | i[a + 1] << 8; + if (a += 2, !(e in mu)) return null; + if (i.length - a < 4) return null; + const t = i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16 | i[a + 3] << 24; + a += 4; + for (let n = 0; n < t; ++n) { + if (i.length - a < 3) return null; + const t = (i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16) - Math.pow(2, 23); + if (a += 3, i.length - a < 3) return null; + const n = i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16; + if (a += 3, i.length - a < 3) return null; + const s = (i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16) - Math.pow(2, 23); + if (a += 3, i.length - a < 1) return null; + const o = i[a + 0]; + if (a += 1, o < 0 || o > 3) return null; + let l = null; + if (K_.includes(e)) { + if (i.length - a < 2) return null; + l = i[a + 0] | i[a + 1] << 8, a += 2 + } + let c = null; + Z_.includes(e) && (c = 0), r.addPart(4 * t, n, 4 * s, e, o, Au.YPositive, k_.Default, l, c) + } + } + return r + } + + function tv(e) { + const t = S_(e); + if (null == t) return null; + const n = new dh.Inflate; + if (n.push(t, !0), n.err) return null; + const i = n.result; + if (!(i instanceof Uint8Array)) return null; + const r = new Pv(L_.Summer, new B_); + let a = 0; + for (; a < i.length;) { + if (i.length - a < 2) return null; + let e = i[a + 0] | i[a + 1] << 8; + a += 2; + let t = k_.Default; + if (e >= 134 && e <= 178) switch (e) { + case 134: + e = mu.Block, t = k_.Custom1; + break; + case 135: + e = mu.HalfBlock, t = k_.Custom1; + break; + case 136: + e = mu.QuarterBlock, t = k_.Custom1; + break; + case 137: + e = mu.BlockSlopedDown, t = k_.Custom1; + break; + case 138: + e = mu.BlockSlopedDownInnerCorner, t = k_.Custom1; + break; + case 139: + e = mu.BlockSlopedDownOuterCorner, t = k_.Custom1; + break; + case 140: + e = mu.BlockSlopedUp, t = k_.Custom1; + break; + case 141: + e = mu.BlockSlopedUpInnerCorner, t = k_.Custom1; + break; + case 142: + e = mu.BlockSlopedUpOuterCorner, t = k_.Custom1; + break; + case 143: + e = mu.BlockSlopeDown, t = k_.Custom1; + break; + case 144: + e = mu.BlockSlopeUp, t = k_.Custom1; + break; + case 145: + e = mu.BlockBridge, t = k_.Custom1; + break; + case 146: + e = mu.BlockBridgeCorner, t = k_.Custom1; + break; + case 147: + e = mu.BlockBridgeIntersectionT, t = k_.Custom1; + break; + case 148: + e = mu.BlockBridgeIntersectionCross, t = k_.Custom1; + break; + case 149: + e = mu.Block, t = k_.Custom6; + break; + case 150: + e = mu.HalfBlock, t = k_.Custom6; + break; + case 151: + e = mu.QuarterBlock, t = k_.Custom6; + break; + case 152: + e = mu.BlockSlopedDown, t = k_.Custom6; + break; + case 153: + e = mu.BlockSlopedDownInnerCorner, t = k_.Custom6; + break; + case 154: + e = mu.BlockSlopedDownOuterCorner, t = k_.Custom6; + break; + case 155: + e = mu.BlockSlopedUp, t = k_.Custom6; + break; + case 156: + e = mu.BlockSlopedUpInnerCorner, t = k_.Custom6; + break; + case 157: + e = mu.BlockSlopedUpOuterCorner, t = k_.Custom6; + break; + case 158: + e = mu.BlockSlopeDown, t = k_.Custom6; + break; + case 159: + e = mu.BlockSlopeUp, t = k_.Custom6; + break; + case 160: + e = mu.BlockBridge, t = k_.Custom6; + break; + case 161: + e = mu.BlockBridgeCorner, t = k_.Custom6; + break; + case 162: + e = mu.BlockBridgeIntersectionT, t = k_.Custom6; + break; + case 163: + e = mu.BlockBridgeIntersectionCross, t = k_.Custom6; + break; + case 164: + e = mu.Block, t = k_.Custom0; + break; + case 165: + e = mu.HalfBlock, t = k_.Custom0; + break; + case 166: + e = mu.QuarterBlock, t = k_.Custom0; + break; + case 167: + e = mu.BlockSlopedDown, t = k_.Custom0; + break; + case 168: + e = mu.BlockSlopedDownInnerCorner, t = k_.Custom0; + break; + case 169: + e = mu.BlockSlopedDownOuterCorner, t = k_.Custom0; + break; + case 170: + e = mu.BlockSlopedUp, t = k_.Custom0; + break; + case 171: + e = mu.BlockSlopedUpInnerCorner, t = k_.Custom0; + break; + case 172: + e = mu.BlockSlopedUpOuterCorner, t = k_.Custom0; + break; + case 173: + e = mu.BlockSlopeDown, t = k_.Custom0; + break; + case 174: + e = mu.BlockSlopeUp, t = k_.Custom0; + break; + case 175: + e = mu.BlockBridge, t = k_.Custom0; + break; + case 176: + e = mu.BlockBridgeCorner, t = k_.Custom0; + break; + case 177: + e = mu.BlockBridgeIntersectionT, t = k_.Custom0; + break; + case 178: + e = mu.BlockBridgeIntersectionCross, t = k_.Custom0 + } + let n = null, + s = { + x: 0, + y: 0, + z: 0 + }; + if (79 == e) n = mu.WallTrackFloorPlaneCorner; + else if (81 == e) n = mu.WallTrackCeilingPlaneCorner, s = { + x: 0, + y: 3, + z: 0 + }; + else if (e >= 87 && e <= 98) switch (e) { + case 87: + e = mu.Slope, n = mu.BlockSlopedUp; + break; + case 88: + e = mu.SlopeUp, n = mu.BlockSlopeUp; + break; + case 89: + e = mu.SlopeDown, n = mu.BlockSlopeDown; + break; + case 90: + e = mu.SlopeUpLeftWide, n = mu.BlockSlopeUp; + break; + case 91: + e = mu.SlopeUpRightWide, n = mu.BlockSlopeUp; + break; + case 92: + e = mu.SlopeDownLeftWide, n = mu.BlockSlopeDown; + break; + case 93: + e = mu.SlopeDownRightWide, n = mu.BlockSlopeDown; + break; + case 94: + e = mu.SlopeLeftWide, n = mu.BlockSlopedUp; + break; + case 95: + e = mu.SlopeRightWide, n = mu.BlockSlopedUp; + break; + case 96: + e = mu.PlaneSlopeUp, n = mu.BlockSlopeUp; + break; + case 97: + e = mu.PlaneSlopeDown, n = mu.BlockSlopeDown; + break; + case 98: + e = mu.PlaneSlope, n = mu.BlockSlopedUp; + break; + default: + throw new Error("Invalid track part id") + } + if (!(e in mu)) return null; + if (i.length - a < 4) return null; + const o = i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16 | i[a + 3] << 24; + a += 4; + for (let l = 0; l < o; ++l) { + if (i.length - a < 3) return null; + const o = (i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16) - Math.pow(2, 23); + if (a += 3, i.length - a < 3) return null; + const l = i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16; + if (a += 3, i.length - a < 3) return null; + const c = (i[a + 0] | i[a + 1] << 8 | i[a + 2] << 16) - Math.pow(2, 23); + if (a += 3, i.length - a < 1) return null; + const h = i[a + 0]; + if (a += 1, h < 0 || h > 3) return null; + let u = null; + if (K_.includes(e)) { + if (i.length - a < 2) return null; + u = i[a + 0] | i[a + 1] << 8, a += 2 + } + let d = null; + Z_.includes(e) && (d = 0), null != n && r.addPart(4 * o + s.x, l + s.y, 4 * c + s.z, n, h, Au.YPositive, k_.Default, null, d), r.addPart(4 * o, l, 4 * c, e, h, Au.YPositive, t, u, d) + } + } + return r + } + + function nv(e, t) { + let n = e; + if (t.length - n < 1) return null; + const i = t[n]; + if (n += 1, !(i in L_)) return null; + if (t.length - n < 1) return null; + const r = t[n]; + if (n += 1, !Number.isSafeInteger(r) || r < 0 || r >= 180) return null; + const a = new Pv(i, new B_(r)); + if (t.length - n < 9) return null; + const s = t[n] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24; + n += 4; + const o = t[n] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24; + n += 4; + const l = t[n] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24; + n += 4; + const c = 3 & t[n], + h = t[n] >> 2 & 3, + u = t[n] >> 4 & 3; + if (n += 1, c < 1 || c > 4 || h < 1 || h > 4 || u < 1 || u > 4) return null; + for (; n < t.length;) { + if (t.length - n < 1) return null; + const e = t[n + 0]; + if (n += 1, !(e in mu)) return null; + if (t.length - n < 4) return null; + const i = t[n + 0] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24; + n += 4; + for (let r = 0; r < i; ++r) { + if (t.length - n < c) return null; + let i = 0; + for (let e = 0; e < c; ++e) i |= t[n + e] << 8 * e; + if (i += s, n += c, t.length - n < h) return null; + let r = 0; + for (let e = 0; e < h; ++e) r |= t[n + e] << 8 * e; + if (r += o, n += h, t.length - n < u) return null; + let d = 0; + for (let e = 0; e < u; ++e) d |= t[n + e] << 8 * e; + if (d += l, n += u, t.length - n < 1) return null; + const f = t[n + 0]; + if (n += 1, f < 0 || f > 3) return null; + if (t.length - n < 1) return null; + const p = t[n + 0]; + if (n += 1, !(p in Au)) return null; + if (t.length - n < 1) return null; + const m = t[n + 0]; + if (n += 1, !(m in k_)) return null; + let g = null; + if (K_.includes(e)) { + if (t.length - n < 2) return null; + g = t[n + 0] | t[n + 1] << 8, n += 2 + } + let A = null; + if (Z_.includes(e)) { + if (t.length - n < 4) return null; + A = t[n + 0] | t[n + 1] << 8 | t[n + 2] << 16 | t[n + 3] << 24, n += 4 + } + a.addPart(i, r, d, e, f, p, m, g, A) + } + } + return a + } + class iv extends Qr { + constructor(e, t) { + const n = new Ei({ + color: t, + depthWrite: !1 + }); + super(e.geometry, n, e.count); + for (let t = 0; t < e.count; ++t) { + const n = new Cn; + e.getMatrixAt(t, n), this.setMatrixAt(t, n) + } + this.meshMatrix = e.matrixWorld, this.frustumCulled = !1, this.matrixAutoUpdate = !1, this.renderOrder = -1 + } + update(e, t) { + var n = new Cn, + i = e.normal.x * t.x + e.normal.y * t.y + e.normal.z * t.z + -e.constant * t.w, + r = n.elements; + r[0] = i - t.x * e.normal.x, r[4] = -t.x * e.normal.y, r[8] = -t.x * e.normal.z, r[12] = -t.x * -e.constant, r[1] = -t.y * e.normal.x, r[5] = i - t.y * e.normal.y, r[9] = -t.y * e.normal.z, r[13] = -t.y * -e.constant, r[2] = -t.z * e.normal.x, r[6] = -t.z * e.normal.y, r[10] = i - t.z * e.normal.z, r[14] = -t.z * -e.constant, r[3] = -t.w * e.normal.x, r[7] = -t.w * e.normal.y, r[11] = -t.w * e.normal.z, r[15] = i - t.w * -e.constant, this.matrix.multiplyMatrices(n, this.meshMatrix) + } + } + var rv, av, sv, ov, lv, cv, hv, uv, dv, fv, pv, mv, gv, Av, _v, vv = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + wv = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + class yv { + constructor(e, t, n, i, r, a, s, o, l, c) { + if (this.checkpointOrder = null, this.startOrder = null, this.x = e, this.y = t, this.z = n, this.rotation = i, this.rotationAxis = r, this.color = a, this.type = s, this.matrix = o, this.checkpointOrder = l, this.startOrder = c, null != s.configuration.detector && s.configuration.detector.type == Jh.Checkpoint) { + if (null == l) throw new Error("Checkpoint has no checkpoint order") + } else if (null != l) throw new Error("Non-checkpoint has checkpoint order"); + if (null != s.configuration.startOffset && null == c) throw new Error("Start part has no start order"); + if (null == s.configuration.startOffset && null != c) throw new Error("Non-start part has start order") + } + } + class xv { + constructor(e, t, n) { + rv.add(this), av.set(this, void 0), sv.set(this, void 0), ov.set(this, void 0), this.environment = L_.Summer, lv.set(this, new B_), cv.set(this, []), hv.set(this, new Map), uv.set(this, new Map), dv.set(this, { + min: new Et(0, 0), + max: new Et(0, 0) + }), fv.set(this, null), pv.set(this, []), vv(this, av, e, "f"), vv(this, sv, t, "f"), vv(this, ov, n, "f") + } + get sunDirection() { + return wv(this, lv, "f") + } + set sunDirection(e) { + vv(this, lv, e.clone(), "f") + } + getID() { + return wv(this, fv, "f") + } + clear() { + vv(this, fv, null, "f"), wv(this, cv, "f").length = 0, wv(this, hv, "f").clear(), wv(this, uv, "f").clear(), wv(this, rv, "m", mv).call(this) + } + getPartsAt(e, t, n) { + const i = wv(this, hv, "f").get(e.toString() + "|" + t.toString() + "|" + n.toString()); + return null == i ? [] : i.map((e => ({ + id: e.type.configuration.id, + x: e.x, + y: e.y, + z: e.z, + rotation: e.rotation, + rotationAxis: e.rotationAxis, + color: e.color + }))) + } + setPart(e, t, n, i, r, a, s, o, l) { + const c = wv(this, ov, "f").getPart(i); + if (s != k_.Default && !c.colors.has(s)) throw new Error("Track part color does not exist"); + const h = eu(r, a), + u = new Zt(e * xv.partSize, t * xv.partSize, n * xv.partSize), + d = (new Cn).compose(u, h, new Zt(1, 1, 1)), + f = new yv(e, t, n, r, a, s, c, d, o, l); + wv(this, cv, "f").push(f); + c.configuration.tiles.rotated(r, a).forEach(((i, r, a) => { + const s = (e + i).toString() + "|" + (t + r).toString() + "|" + (n + a).toString(); + if (t + r < 0) throw new Error("Track part below ground"); + { + const e = wv(this, hv, "f").get(s); + null == e ? wv(this, hv, "f").set(s, [f]) : e.push(f) + } + })); + const p = wv(this, uv, "f").get(i); + null == p ? wv(this, uv, "f").set(i, [f]) : p.push(f) + } + deletePartsAt(e, t, n) { + const i = wv(this, hv, "f").get(e.toString() + "|" + t.toString() + "|" + n.toString()); + if (null == i) return !1; + for (const e of i) wv(this, rv, "m", Av).call(this, e); + return !0 + } + deleteSpecificPart(e, t, n, i, r, a) { + for (const s of wv(this, cv, "f")) + if (s.type.configuration.id == e && s.x == t && s.y == n && s.z == i && s.rotation == r && s.rotationAxis == a) return wv(this, rv, "m", Av).call(this, s), !0; + return !1 + } + getBounds() { + return wv(this, dv, "f") + } + shortRaycast(e) { + const t = new Zt(Math.floor(e.ray.origin.x / xv.partSize), Math.floor(e.ray.origin.y / xv.partSize), Math.floor(e.ray.origin.z / xv.partSize)), + n = new Set; + for (let e = -1; e <= 0; e++) + for (let i = -1; i <= 0; i++) + for (let r = -1; r <= 0; r++) { + const a = wv(this, rv, "m", gv).call(this, t.x + e, t.y + i, t.z + r); + for (const e of a) n.add(e) + } + let i = null; + for (const t of n) { + let n = t.color; + n == k_.Default && (n = k_.Summer); + const r = t.type.colors.get(n); + if (null == r) throw new Error("Track part is not loaded yet"); + if (null == i) { + r.matrixWorld.copy(t.matrix); + const n = e.intersectObject(r, !0); + n.length > 0 && (i = n[0]) + } + } + return i + } + generateMeshes() { + wv(this, rv, "m", mv).call(this); + const e = wv(this, lv, "f").getSunPosition(), + t = new Qt(e.x, e.y, e.z, 0); + let n, i = null; + if (wv(this, sv, "f").getSettingBoolean(nm.TrackShadowEnabled)) switch (this.environment) { + case L_.Summer: + i = new wi(1192238); + break; + case L_.Winter: + i = new wi(3825803); + break; + case L_.Desert: + i = new wi(3883831) + } + switch (this.environment) { + case L_.Summer: + n = k_.Summer; + break; + case L_.Winter: + n = k_.Winter; + break; + case L_.Desert: + n = k_.Desert + } + for (const e of wv(this, ov, "f").getAllParts()) + for (const [r, a] of e.colors) { + const s = []; + for (const t of wv(this, cv, "f")) { + let i = t.color; + i == k_.Default && (i = n), t.type == e && i == r && s.push(t) + } + if (s.length > 0) { + if (null == a) throw new Error("Mesh is not loaded"); + const e = new Qr(a.geometry, a.material, s.length); + e.frustumCulled = !1, e.receiveShadow = !0; + for (let t = 0; t < s.length; ++t) e.setMatrixAt(t, s[t].matrix); + if (wv(this, av, "f").scene.add(e), wv(this, pv, "f").push(e), null != i) { + const n = new iv(e, i); + n.update(new Yr(new Zt(0, 1, 0), 0), t), wv(this, av, "f").scene.add(n), wv(this, pv, "f").push(n) + } + } + } + wv(this, rv, "m", _v).call(this) + } + getCheckpoints() { + let e = []; + const t = wv(this, ov, "f").getPartTypesWithDetector(Jh.Checkpoint); + for (const n of t) { + const t = wv(this, uv, "f").get(n); + null != t && (e = e.concat(t)) + } + return e.map((e => { + if (null == e.checkpointOrder) throw new Error("Checkpoint has no checkpoint order"); + if (null == e.type.configuration.detector) throw new Error("Checkpoint has no detector"); + return { + x: e.x, + y: e.y, + z: e.z, + rotation: e.rotation, + rotationAxis: e.rotationAxis, + type: e.type.configuration.id, + checkpointOrder: e.checkpointOrder, + detector: e.type.configuration.detector + } + })) + } + getCheckpointOrders() { + let e = []; + const t = wv(this, ov, "f").getPartTypesWithDetector(Jh.Checkpoint); + for (const n of t) { + const t = wv(this, uv, "f").get(n); + null != t && (e = e.concat(t)) + } + return e.map((e => { + if (null == e.checkpointOrder) throw new Error("Checkpoint has no checkpoint order"); + if (null == e.type.configuration.detector) throw new Error("Checkpoint has no detector"); + return e.checkpointOrder + })) + } + getTotalNumberOfCheckpointIndices() { + let e = []; + const t = wv(this, ov, "f").getPartTypesWithDetector(Jh.Checkpoint); + for (const n of t) { + const t = wv(this, uv, "f").get(n); + null != t && (e = e.concat(t)) + } + return e.map((e => e.checkpointOrder)).filter(((e, t, n) => n.indexOf(e) == t)).length + } + getStart() { + let e = -1 / 0, + t = null; + for (const [n, i] of wv(this, uv, "f")) { + const r = wv(this, ov, "f").getPartStartOffset(n); + if (i.length > 0 && null != r) + for (const n of i) { + if (null == n.startOrder) throw new Error("Start part has no start order"); + n.startOrder >= e && (e = n.startOrder, t = { + part: n, + startOffset: r + }) + } + } + return null != t ? { + x: t.part.x, + y: t.part.y, + z: t.part.z, + rotation: t.part.rotation, + rotationAxis: t.part.rotationAxis, + startOffset: t.startOffset + } : null + } + getStartTransform() { + const e = this.getStart(); + if (null != e) { + const t = eu(e.rotation, e.rotationAxis).multiply((new Kt).setFromEuler(new Fn(0, Math.PI, 0))), + n = e.startOffset; + return n.applyQuaternion(t), { + position: new Zt(e.x * xv.partSize + n.x, e.y * xv.partSize + n.y, e.z * xv.partSize + n.z), + quaternion: t + } + } + return null + } + getNextStartOrder() { + let e = 0; + for (const [t, n] of wv(this, uv, "f")) { + const i = wv(this, ov, "f").getPartStartOffset(t); + if (n.length > 0 && null != i) + for (const t of n) { + if (null == t.startOrder) throw new Error("Start part has no start order"); + e = Math.max(e, t.startOrder + 1) + } + } + return e + } + getTrackData() { + const e = new Pv(this.environment, wv(this, lv, "f")); + for (const t of wv(this, cv, "f")) e.addPart(t.x, t.y, t.z, t.type.configuration.id, t.rotation, t.rotationAxis, t.color, t.checkpointOrder, t.startOrder); + return e + } + loadTrackData(e, t = !0) { + return this.clear(), vv(this, fv, t ? e.getId() : null, "f"), this.environment = e.environment, this.sunDirection = e.sunDirection.clone(), e.forEachPart(((e, t, n, i, r, a, s, o, l) => { + this.setPart(e, t, n, i, r, a, s, o, l) + })), !0 + } + } + av = new WeakMap, sv = new WeakMap, ov = new WeakMap, lv = new WeakMap, cv = new WeakMap, hv = new WeakMap, uv = new WeakMap, dv = new WeakMap, fv = new WeakMap, pv = new WeakMap, rv = new WeakSet, mv = function() { + for (const e of wv(this, pv, "f")) wv(this, av, "f").scene.remove(e); + wv(this, pv, "f").length = 0 + }, gv = function(e, t, n) { + var i; + return null !== (i = wv(this, hv, "f").get(e.toString() + "|" + t.toString() + "|" + n.toString())) && void 0 !== i ? i : [] + }, Av = function(e) { + const t = wv(this, cv, "f").indexOf(e); + if (!(t >= 0)) throw new Error("Track part missing from parts list"); + wv(this, cv, "f").splice(t, 1); + e.type.configuration.tiles.rotated(e.rotation, e.rotationAxis).forEach(((t, n, i) => { + const r = (e.x + t).toString() + "|" + (e.y + n).toString() + "|" + (e.z + i).toString(), + a = wv(this, hv, "f").get(r); + if (null == a) throw new Error("Track part section missing"); + { + const t = a.indexOf(e); + if (!(t >= 0)) throw new Error("Track part missing from parts by position map"); + a.splice(t, 1), 0 == a.length && wv(this, hv, "f").delete(r) + } + })); + const n = wv(this, uv, "f").get(e.type.configuration.id); + if (null == n) throw new Error("Track part type is missing from parts by type map"); + for (let t = 0; t < n.length; ++t) { + if (n[t] == e) { + n.splice(t, 1); + break + } + if (t == n.length - 1) throw new Error("Track part is missing from parts by type map") + } + }, _v = function() { + let e = 1 / 0, + t = 1 / 0, + n = -1 / 0, + i = -1 / 0; + for (const r of wv(this, cv, "f")) e = Math.min(r.x, e), t = Math.min(r.z, t), n = Math.max(r.x, n), i = Math.max(r.z, i); + Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(i) ? vv(this, dv, { + min: new Et(e, t), + max: new Et(n, i) + }, "f") : vv(this, dv, { + min: new Et, + max: new Et + }, "f") + }, xv.partSize = 5; + const bv = xv; + var Ev, Sv, Mv, Tv, Cv, Iv = function(e, t, n, i, r) { + if ("m" === i) throw new TypeError("Private method is not writable"); + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a setter"); + if ("function" == typeof t ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return "a" === i ? r.call(e, n) : r ? r.value = n : t.set(e, n), n + }, + Rv = function(e, t, n, i) { + if ("a" === n && !i) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof t ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === n ? i : "a" === n ? i.call(e) : i ? i.value : t.get(e) + }; + Sv = new WeakMap, Mv = new WeakMap, Ev = new WeakSet, Tv = function() { + let e = -1 / 0, + t = null; + for (const [n, i] of Rv(this, Mv, "f")) { + const r = Y_(n).startOffset; + if (i.length > 0 && null != r) + for (const n of i) { + if (null == n.startOrder) throw new Error("Start part has no start order"); + n.startOrder >= e && (e = n.startOrder, t = { + part: n, + startOffset: r + }) + } + } + return null != t ? { + x: t.part.x, + y: t.part.y, + z: t.part.z, + rotation: t.part.rotation, + rotationAxis: t.part.rotationAxis, + startOffset: t.startOffset.clone() + } : null + }, Cv = function() { + const e = []; + e.push(this.environment), e.push(Rv(this, Sv, "f").representation); + let t = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + a = -1 / 0, + s = -1 / 0; + for (const [, e] of Rv(this, Mv, "f")) + for (const o of e) t = Math.min(o.x, t), n = Math.min(o.y, n), i = Math.min(o.z, i), r = Math.max(o.x, r), a = Math.max(o.y, a), s = Math.max(o.z, s); + Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(i) && Number.isFinite(r) && Number.isFinite(a) && Number.isFinite(s) || (t = 0, n = 0, i = 0, r = 0, a = 0, s = 0); + const o = r - t + 1, + l = a - n + 1, + c = s - i + 1, + h = Math.max(1, Math.min(4, Math.ceil(Math.log2(o + 1) / 8))), + u = Math.max(1, Math.min(4, Math.ceil(Math.log2(l + 1) / 8))), + d = Math.max(1, Math.min(4, Math.ceil(Math.log2(c + 1) / 8))); + e.push(255 & t, t >>> 8 & 255, t >>> 16 & 255, t >>> 24 & 255, 255 & n, n >>> 8 & 255, n >>> 16 & 255, n >>> 24 & 255, 255 & i, i >>> 8 & 255, i >>> 16 & 255, i >>> 24 & 255, 255 & (h | u << 2 | d << 4)); + for (const [r, a] of Rv(this, Mv, "f")) { + if (r < 0 || r > 255) throw new Error("Type id is out of range"); + const s = a.length; + e.push(255 & r, 255 & s, s >>> 8 & 255, s >>> 16 & 255, s >>> 24 & 255); + for (const s of a) { + const a = s.x - t, + o = s.y - n, + l = s.z - i; + if (1 == h ? e.push(255 & a) : 2 == h ? e.push(255 & a, a >>> 8 & 255) : 3 == h ? e.push(255 & a, a >>> 8 & 255, a >>> 16 & 255) : 4 == h && e.push(255 & a, a >>> 8 & 255, a >>> 16 & 255, a >>> 24 & 255), 1 == u ? e.push(255 & o) : 2 == u ? e.push(255 & o, o >>> 8 & 255) : 3 == u ? e.push(255 & o, o >>> 8 & 255, o >>> 16 & 255) : 4 == u && e.push(255 & o, o >>> 8 & 255, o >>> 16 & 255, o >>> 24 & 255), 1 == d ? e.push(255 & l) : 2 == d ? e.push(255 & l, l >>> 8 & 255) : 3 == d ? e.push(255 & l, l >>> 8 & 255, l >>> 16 & 255) : 4 == d && e.push(255 & l, l >>> 8 & 255, l >>> 16 & 255, l >>> 24 & 255), e.push(3 & s.rotation, 7 & s.rotationAxis, 255 & s.color), K_.includes(r)) { + if (null == s.checkpointOrder) throw new Error("Checkpoint has no checkpoint order"); + e.push(255 & s.checkpointOrder, s.checkpointOrder >>> 8 & 255) + } + if (Z_.includes(r)) { + if (null == s.startOrder) throw new Error("Start has no start order"); + e.push(255 & s.startOrder, s.startOrder >>> 8 & 255, s.startOrder >>> 16 & 255, s.startOrder >>> 24 & 255) + } + } + } + return new Uint8Array(e) + }; + const Pv = class { + constructor(e, t) { + Ev.add(this), Sv.set(this, void 0), Mv.set(this, new Map), this.environment = e, Iv(this, Sv, t.clone(), "f") + } + get sunDirection() { + return Rv(this, Sv, "f").clone() + } + set sunDirection(e) { + Iv(this, Sv, e.clone(), "f") + } + addPart(e, t, n, i, r, a, s, o, l) { + const c = { + x: e, + y: t, + z: n, + rotation: r, + rotationAxis: a, + color: s, + checkpointOrder: o, + startOrder: l + }, + h = Rv(this, Mv, "f").get(i); + null != h ? h.push(c) : Rv(this, Mv, "f").set(i, [c]) + } + forEachPart(e) { + for (const [t, n] of Rv(this, Mv, "f")) + for (const i of n) e(i.x, i.y, i.z, t, i.rotation, i.rotationAxis, i.color, i.checkpointOrder, i.startOrder) + } + getId() { + return (0, y_.sha256)(Rv(this, Ev, "m", Cv).call(this)) + } + getBounds() { + let e = 1 / 0, + t = 1 / 0, + n = -1 / 0, + i = -1 / 0; + return this.forEachPart(((r, a, s) => { + e = Math.min(r, e), t = Math.min(s, t), n = Math.max(r, n), i = Math.max(s, i) + })), Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(i) ? { + min: new Et(e, t), + max: new Et(n, i) + } : { + min: new Et, + max: new Et + } + } + hasStartingPoint() { + return null != Rv(this, Ev, "m", Tv).call(this) + } + getStartTransform() { + const e = Rv(this, Ev, "m", Tv).call(this); + if (null != e) { + const t = eu(e.rotation, e.rotationAxis).multiply((new Kt).setFromEuler(new Fn(0, Math.PI, 0))), + n = e.startOffset; + return n.applyQuaternion(t), { + position: new Zt(e.x * bv.partSize + n.x, e.y * bv.partSize + n.y, e.z * bv.partSize + n.z), + quaternion: t + } + } + return null + } + toSaveString() { + const e = Rv(this, Ev, "m", Cv).call(this), + t = new dh.Deflate({ + level: 9, + windowBits: 9, + memLevel: 9 + }); + t.push(e, !0); + const n = E_(t.result), + i = new dh.Deflate({ + level: 9, + windowBits: 15, + memLevel: 9 + }); + return i.push(n, !0), E_(i.result) + } + toExportString(e) { + const t = (new TextEncoder).encode(e.name); + let n, i; + null != e.author ? (i = (new TextEncoder).encode(e.author), n = i.length) : (i = null, n = 0); + const r = new Uint8Array(1 + t.length + 1 + n); + r[0] = t.length, r.set(t, 1), r[1 + t.length] = n, null != i && r.set(i, 1 + t.length + 1); + const a = Rv(this, Ev, "m", Cv).call(this), + s = new dh.Deflate({ + level: 9, + windowBits: 9, + memLevel: 9 + }); + s.push(r, !1), s.push(a, !0); + const o = E_(s.result), + l = new dh.Deflate({ + level: 9, + windowBits: 15, + memLevel: 9 + }); + return l.push(o, !0), "PolyTrack1" + E_(l.result) + } + static fromSaveString(e) { + const t = function(e) { + const t = S_(e); + if (null == t) return null; + const n = new dh.Inflate({ + to: "string" + }); + if (n.push(t, !0), n.err) return null; + const i = n.result; + if ("string" != typeof i) return null; + const r = S_(i); + if (null == r) return null; + const a = new dh.Inflate; + if (a.push(r, !0), a.err) return null; + const s = a.result; + return s instanceof Uint8Array ? nv(0, s) : null + }(e); + if (null != t) return t; + const n = tv(e); + if (null != n) return n; + const i = ev(e); + if (null != i) return i; + const r = $_(e); + if (null != r) return r; + const a = J_(e); + return null != a ? a : null + } + static fromExportString(e) { + const t = e.replace(/\s+/g, ""), + n = function(e) { + const t = "PolyTrack1"; + if (!e.startsWith(t)) return null; + const n = S_(e.substring(10)); + if (null == n) return null; + const i = new dh.Inflate({ + to: "string" + }); + if (i.push(n, !0), i.err) return null; + const r = i.result; + if ("string" != typeof r) return null; + const a = S_(r); + if (null == a) return null; + const s = new dh.Inflate; + if (s.push(a, !0), s.err) return null; + const o = s.result; + if (!(o instanceof Uint8Array)) return null; + const l = o[0]; + if (o.length < 1 + l) return null; + const c = new TextDecoder("utf-8").decode(o.subarray(1, 1 + l)), + h = o[1 + l]; + if (o.length < 1 + l + 1 + h) return null; + let u; + u = h > 0 ? new TextDecoder("utf-8").decode(o.subarray(1 + l + 1, 1 + l + 1 + h)) : null; + const d = nv(1 + l + 1 + h, o); + return null == d ? null : { + trackMetadata: { + name: c, + author: u + }, + trackData: d + } + }(t); + if (null != n) return n; + const i = function(e) { + if (!e.startsWith("v3")) return null; + const t = S_(e.substring(2, 4)); + if (null == t) return null; + if (1 != t.length) return null; + const n = t[0], + i = S_(e.substring(4, 4 + n)); + if (null == i) return null; + let r; + try { + r = new TextDecoder("utf-8").decode(i) + } catch (e) { + return null + } + const a = tv(e.substring(4 + n)); + return null == a ? null : { + trackMetadata: { + name: r, + author: null + }, + trackData: a + } + }(t); + if (null != i) return i; + const r = function(e) { + if (!e.startsWith("v2")) return null; + const t = S_(e.substring(2, 4)); + if (null == t) return null; + if (1 != t.length) return null; + const n = t[0], + i = Math.ceil(n / 3 * 4), + r = S_(e.substring(4, 4 + i)); + if (null == r) return null; + let a; + try { + a = new TextDecoder("utf-8").decode(r) + } catch (e) { + return null + } + const s = ev(e.substring(4 + i)); + return null == s ? null : { + trackMetadata: { + name: a, + author: null + }, + trackData: s + } + }(t); + if (null != r) return r; + const a = function(e) { + if (!e.startsWith("v1n")) return null; + const t = fh(e.substring(3, 5)); + if (null == t) return null; + if (1 != t.length) return null; + const n = t[0], + i = e.substring(5, 5 + n); + let r; + try { + r = decodeURIComponent(i) + } catch (e) { + return console.error(e), null + } + const a = $_(e.substring(5 + n)); + return null == a ? null : { + trackMetadata: { + name: r, + author: null + }, + trackData: a + } + }(t); + if (null != a) return a; + const s = function(e) { + let t, n; + try { + t = JSON.parse(e) + } catch (e) { + return console.error(e), null + } + if ("string" != typeof t.name) return null; + if ("string" != typeof t.track) return null; + try { + n = JSON.parse(t.track) + } catch (e) { + return console.error(e), null + } + const i = J_(n); + return null == i ? null : { + trackMetadata: { + name: t.name, + author: null + }, + trackData: i + } + }(e); + return null != s ? s : null + } + createThumbnail() { + let e = 1 / 0, + t = 1 / 0, + n = -1 / 0, + i = -1 / 0; + this.forEachPart(((r, a, s, o, l, c) => { + Y_(o).tiles.rotated(l, c).forEach(((a, o, l) => { + e = Math.min(e, Math.floor((r + a - 2) / 4)), t = Math.min(t, Math.floor((s + l - 2) / 4)), n = Math.max(n, Math.floor((r + a - 2) / 4)), i = Math.max(i, Math.floor((s + l - 2) / 4)) + })) + })), Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(i) || (e = 0, t = 0, n = 0, i = 0); + const r = 10, + a = n - e + 1; + a <= r && (n += Math.ceil((r - a) / 2), e -= Math.ceil((r - a) / 2)); + const s = i - t + 1; + s <= r && (i += Math.ceil((r - s) / 2), t -= Math.ceil((r - s) / 2)); + const o = document.createElement("canvas"); + o.width = Math.min(1024, n - e + 1), o.height = Math.min(1024, i - t + 1); + const l = o.getContext("2d"); + if (null == l) throw new Error("Failed to get canvas context"); + const c = l.createImageData(o.width, o.height), + h = [], + u = [], + d = []; + let f, p, m; + switch (this.environment) { + case L_.Summer: + f = 255, p = 255, m = 255; + break; + case L_.Winter: + f = 190, p = 216, m = 247; + break; + case L_.Desert: + f = 237, p = 226, m = 175 + } + this.forEachPart(((n, i, r, a, s, l) => { + const g = Y_(a); + g.tiles.rotated(s, l).forEach(((i, a, s) => { + const l = Math.floor((n + i - 2) / 4) - e, + A = Math.floor((r + s - 2) / 4) - t, + _ = 4 * (l + A * o.width); + c.data[_ + 0] = f, c.data[_ + 1] = p, c.data[_ + 2] = m, c.data[_ + 3] = 255, null != g.startOffset ? u.push([l, A]) : null != g.detector && g.detector.type == Jh.Checkpoint ? h.push([l, A]) : null != g.detector && g.detector.type == Jh.Finish && d.push([l, A]) + })) + })); + for (const [e, t] of h) c.data[4 * (e + t * o.width) + 0] = 226, c.data[4 * (e + t * o.width) + 1] = 192, c.data[4 * (e + t * o.width) + 2] = 38, c.data[4 * (e + t * o.width) + 3] = 255; + for (const [e, t] of u) c.data[4 * (e + t * o.width) + 0] = 51, c.data[4 * (e + t * o.width) + 1] = 140, c.data[4 * (e + t * o.width) + 2] = 224, c.data[4 * (e + t * o.width) + 3] = 255; + for (const [e, t] of d) c.data[4 * (e + t * o.width) + 0] = 209, c.data[4 * (e + t * o.width) + 1] = 41, c.data[4 * (e + t * o.width) + 2] = 41, c.data[4 * (e + t * o.width) + 3] = 255; + return l.putImageData(c, 0, 0), o + } + }; + const Bv = class { + constructor() { + this.up = !1, this.right = !1, this.down = !1, this.left = !1, this.reset = !1 + } + dispose() {} + getControls() { + return { + up: this.up, + right: this.right, + down: this.down, + left: this.left, + reset: this.reset + } + } + }; + importScripts("lib/ammo.wasm.js"); + const Dv = []; + onmessage = e => { + Dv.push(e) + }, Ammo().then((function(e) { + let t = new p_([]); + const n = []; + + function i(e) { + switch (e.data.messageType) { + case g_.Init: { + const n = e.data.isRealtime; + t = new p_(e.data.trackParts), + function(e) { + e ? l() : setInterval(c) + }(n); + break + } + case g_.Verify: + ! function(e) { + const n = Pv.fromSaveString(e.data.trackData); + if (null == n) throw new Error("Failed to load track"); + const i = Ch.deserialize(e.data.carRecording); + if (null == i) throw new Error("Failed to deserialize recording"); + const r = n.getStartTransform(); + if (null == r) throw new Error("Track has no starting point"); + const a = e.data.carId, + s = new c_(e.data.mountainVertices, new Zt(e.data.mountainOffset.x, e.data.mountainOffset.y, e.data.mountainOffset.z), t, n, e.data.carCollisionShapeVertices, e.data.carMassOffset, new w_(i), r); + s.start(); + const o = new Kh(e.data.targetFrames); + for (; !s.hasFinished() && s.getTime().lessOrEqual(o);) s.step(); + const l = s.hasFinished() && s.getTime().equals(o); + postMessage({ + messageType: g_.VerifyResult, + carId: a, + result: l + }), s.dispose() + }(e); + break; + case g_.TestDeterminism: + postMessage({ + messageType: g_.DeterminismResult, + isDeterminstic: r() + }); + break; + case g_.CreateCar: + ! function(e) { + const i = Pv.fromSaveString(e.data.trackData); + if (null == i) throw new Error("Failed to load track"); + let r, a = null; + const s = e.data.carRecording; + if (null == s) r = a = new Bv; + else { + const e = Ch.deserialize(s); + if (null == e) throw new Error("Failed to deserialize recording"); + r = new w_(e) + } + const o = i.getStartTransform(); + if (null == o) throw new Error("Track has no starting point"); + const l = e.data.carId, + c = new c_(e.data.mountainVertices, new Zt(e.data.mountainOffset.x, e.data.mountainOffset.y, e.data.mountainOffset.z), t, i, e.data.carCollisionShapeVertices, e.data.carMassOffset, r, o); + n.push({ + id: l, + model: c, + controls: a, + targetSimulationTime: null, + isPaused: !1 + }) + }(e); + break; + case g_.DeleteCar: + ! function(e) { + var t; + const i = e.data.carId; + for (let e = 0; e < n.length; e++) { + const r = n[e]; + if (r.id == i) { + null === (t = r.controls) || void 0 === t || t.dispose(), r.model.dispose(), n.splice(e, 1); + break + } + } + }(e); + break; + case g_.StartCar: + ! function(e) { + const t = e.data.carId; + for (const i of n) + if (i.id == t) { + i.model.start(); + const t = e.data.targetSimulationTimeFrames; + i.targetSimulationTime = null != t ? new Kh(t) : null; + break + } + }(e); + break; + case g_.ControlCar: + ! function(e) { + const t = e.data.carId; + for (const i of n) + if (i.id == t) { + if (null == i.controls) throw new Error("Tried to control uncontrollable car"); + i.controls.up = e.data.up, i.controls.right = e.data.right, i.controls.down = e.data.down, i.controls.left = e.data.left, i.controls.reset = e.data.reset; + break + } + }(e); + break; + case g_.PauseCar: + ! function(e) { + const t = e.data.carId; + for (const i of n) + if (i.id == t) { + i.isPaused = e.data.isPaused; + break + } + }(e) + } + } + for (const e of Dv) i(e); + + function r() { + if (3.141592653589793 != Math.PI) return console.error("Determinism check failed: Math.PI"), !1; + if (1.4142135623730951 != Math.SQRT2) return console.error("Determinism check failed: Math.SQRT2"), !1; + if (.8325082155867481 != Math.cos(.587123751237)) return console.error("Determinism check failed: Math.cos"), !1; + if (.530868917654027 != Math.sin(2.581961285)) return console.error("Determinism check failed: Math.sin"), !1; + if (3678159.3874182813 != Math.pow(123, Math.PI)) return console.error("Determinism check failed: Math.pow"), !1; + if (123 * Math.PI != 386.41589639154455) return console.error("Determinism check failed: Multiply"), !1; + if (123 / Math.PI != 39.152116000606256) return console.error("Determinism check failed: Division"), !1; + const t = new Zt(-.6827400326728821, .11212741583585739, 2.6956899166107178), + n = new Kt(-.615668535232544, .03904851898550987, .7859793305397034, .04079177975654602), + i = new Qh; + i.createGroundPlane(), i.activePhysicsAt(new Zt(0, 0, 0)); + const r = new e.btTransform; + r.setIdentity(); + const a = new e.btDefaultMotionState(r); + e.destroy(r); + const s = new e.btVector3(0, 0, 0), + o = new e.btVector3(.1, .1, .1), + l = new e.btBoxShape(o); + l.calculateLocalInertia(400, s), e.destroy(o); + const c = new e.btRigidBodyConstructionInfo(400, a, l, s), + h = new e.btRigidBody(c); + e.destroy(s), e.destroy(c), h.setActivationState(4), i.world.addRigidBody(h); + const u = new e.btVehicleTuning, + d = new e.btDefaultVehicleRaycaster(i.world), + f = new e.btRaycastVehicle(u, h, d); + f.setCoordinateSystem(0, 1, 2), i.world.addAction(f); + const p = new e.btVector3(0, -1, 0), + m = new e.btVector3(-1, 0, 0); + for (const t of ["WheelFL", "WheelFR", "WheelBL", "WheelBR"]) { + let n; + if ("WheelFL" == t) n = new e.btVector3(.627909, .27, 1.3478); + else if ("WheelFR" == t) n = new e.btVector3(-.627909, .27, 1.3478); + else if ("WheelBL" == t) n = new e.btVector3(.720832, .27, -1.52686); + else { + if ("WheelBR" != t) throw new Error("Unidentified wheel"); + n = new e.btVector3(-.720832, .27, -1.52686) + } + const i = "WheelFL" == t || "WheelFR" == t; + f.addWheel(n, p, m, .12, .331, u, i), e.destroy(n) + } + e.destroy(p), e.destroy(m); + const g = new e.btTransform; + g.setIdentity(), h.setWorldTransform(g), h.getMotionState().setWorldTransform(g), e.destroy(g), f.resetSuspension(), f.setSteeringValue(0, 0), f.setSteeringValue(0, 1); + const A = new e.btTransform; + A.setIdentity(); + const _ = new e.btDefaultMotionState(A); + e.destroy(A); + const v = new e.btVector3(0, 0, 0), + w = new e.btVector3(.1, .1, .1), + y = new e.btBoxShape(w); + y.calculateLocalInertia(100, v), e.destroy(w); + const x = new e.btRigidBodyConstructionInfo(100, _, y, v), + b = new e.btRigidBody(x); + e.destroy(v), e.destroy(x), b.setActivationState(4), i.world.addRigidBody(b); + const E = 1e5; + f.applyEngineForce(E, 2), f.applyEngineForce(E, 3); + for (let e = 0; e < 999; e++) i.step(); + const S = new e.btTransform; + h.getMotionState().getWorldTransform(S); + const M = S.getOrigin(), + T = S.getRotation(); + e.destroy(S); + const C = t.equals(new Zt(M.x(), M.y(), M.z())), + I = n.equals(new Kt(T.x(), T.y(), T.z(), T.w())); + i.dispose(), e.destroy(l), e.destroy(h), e.destroy(f), e.destroy(y), e.destroy(b); + const R = C || I; + return R || console.error("Determinism check failed: Simulation"), R + } + + function a(e) { + var t, n; + const i = e.id, + r = e.model, + a = r.controls.getControls(r.getTime().numberOfFrames); + r.step(); + const s = r.getPosition(), + o = r.getQuaternion(), + l = r.getWheelPosition(0), + c = r.getWheelPosition(1), + h = r.getWheelPosition(2), + u = r.getWheelPosition(3), + d = r.getWheelQuaternion(0), + f = r.getWheelQuaternion(1), + p = r.getWheelQuaternion(2), + m = r.getWheelQuaternion(3); + return { + id: i, + frames: r.getTime().numberOfFrames, + speedKmh: r.getSpeedKmh(), + hasStarted: r.hasStarted(), + finishFrames: null !== (n = null === (t = r.getFinishTime()) || void 0 === t ? void 0 : t.numberOfFrames) && void 0 !== n ? n : null, + nextCheckpointIndex: r.getNextCheckpointIndex(), + hasCheckpointToRespawnAt: r.hasCheckpointToRespawnAt(), + position: { + x: s.x, + y: s.y, + z: s.z + }, + quaternion: { + x: o.x, + y: o.y, + z: o.z, + w: o.w + }, + collisionImpulses: r.getCollisionImpulses(), + wheelInContact: [r.getWheelInContact(0), r.getWheelInContact(1), r.getWheelInContact(2), r.getWheelInContact(3)], + wheelSuspensionLength: [r.getWheelSuspensionLength(0), r.getWheelSuspensionLength(1), r.getWheelSuspensionLength(2), r.getWheelSuspensionLength(3)], + wheelSuspensionVelocity: [r.getWheelSuspensionVelocity(0), r.getWheelSuspensionVelocity(1), r.getWheelSuspensionVelocity(2), r.getWheelSuspensionVelocity(3)], + wheelRotation: [r.getWheelRotation(0), r.getWheelRotation(1), r.getWheelRotation(2), r.getWheelRotation(3)], + wheelDeltaRotation: [r.getWheelDeltaRotation(0), r.getWheelDeltaRotation(1), r.getWheelDeltaRotation(2), r.getWheelDeltaRotation(3)], + wheelSkidInfo: [r.getWheelSkidInfo(0), r.getWheelSkidInfo(1), r.getWheelSkidInfo(2), r.getWheelSkidInfo(3)], + wheelPosition: [{ + x: l.x, + y: l.y, + z: l.z + }, { + x: c.x, + y: c.y, + z: c.z + }, { + x: h.x, + y: h.y, + z: h.z + }, { + x: u.x, + y: u.y, + z: u.z + }], + wheelQuaternion: [{ + x: d.x, + y: d.y, + z: d.z, + w: d.w + }, { + x: f.x, + y: f.y, + z: f.z, + w: f.w + }, { + x: p.x, + y: p.y, + z: p.z, + w: p.w + }, { + x: m.x, + y: m.y, + z: m.z, + w: m.w + }], + brakeLightEnabled: r.isBrakeLightEnabled(), + controls: a + } + } + Dv.length = 0, onmessage = i; + let s = performance.now(), + o = 0; + + function l() { + const e = performance.now(); + o += Math.max(0, Math.min(.1, (e - s) / 1e3)), s = e; + const t = []; + for (; o > .001;) { + o -= .001; + for (const e of n) { + if (null != e.targetSimulationTime) throw new Error("Realtime simulation does not support targetSimulationTime"); + e.model.hasStarted() && e.model.getTime().numberOfFrames < Ch.maxFrames && !e.isPaused && t.push(a(e)) + } + } + t.length > 0 && postMessage({ + messageType: g_.UpdateResult, + carStates: t + }), requestAnimationFrame(l) + } + + function c() { + const e = performance.now(), + t = []; + if (n.length > 0) { + let i; + do { + i = !0; + for (let e = 0; e < Math.max(1, Math.ceil(100 / n.length)); e++) { + for (const e of n) + if (e.model.hasStarted()) { + if (null == e.targetSimulationTime) throw new Error("Non-realtime simulation requires targetSimulationTime"); + e.model.getTime().numberOfFrames < Ch.maxFrames && e.model.getTime().lessThan(e.targetSimulationTime) && !e.isPaused && (t.push(a(e)), i = !1) + } if (i) break + } + } while (Math.max(0, performance.now() - e) / 1e3 < .01 && !i) + } + postMessage({ + messageType: g_.UpdateResult, + carStates: t + }) + } + })) + })() +})(); \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/90_reset.track b/public/assets/g/polytrack/tracks/community/90_reset.track new file mode 100644 index 00000000..7dc1d38d --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/90_reset.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/arabica.track b/public/assets/g/polytrack/tracks/community/arabica.track new file mode 100644 index 00000000..94a97fae --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/arabica.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/clay_temples.track b/public/assets/g/polytrack/tracks/community/clay_temples.track new file mode 100644 index 00000000..8b5e40c7 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/clay_temples.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/concrete_jungle.track b/public/assets/g/polytrack/tracks/community/concrete_jungle.track new file mode 100644 index 00000000..6d22e22c --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/concrete_jungle.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/desert_stallion.track b/public/assets/g/polytrack/tracks/community/desert_stallion.track new file mode 100644 index 00000000..1237d157 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/desert_stallion.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/hyperions_sanctuary.track b/public/assets/g/polytrack/tracks/community/hyperions_sanctuary.track new file mode 100644 index 00000000..ac1ade72 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/hyperions_sanctuary.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/las_calles.track b/public/assets/g/polytrack/tracks/community/las_calles.track new file mode 100644 index 00000000..1c580044 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/las_calles.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/last_remnant.track b/public/assets/g/polytrack/tracks/community/last_remnant.track new file mode 100644 index 00000000..26977d97 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/last_remnant.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/lu_muvimento.track b/public/assets/g/polytrack/tracks/community/lu_muvimento.track new file mode 100644 index 00000000..301d53c3 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/lu_muvimento.track @@ -0,0 +1 @@ +PolyTrack14pdr9d1giq083fKhEE8SJnBJD3BYTOKII8pfbjzM7O7s755fbeecc1RkQHqwvq6qqOUT3xs7aXHYc6aGws7yO5WWWQWgXwFfnuHc3zLw7UiXw9jvg5tUfJrUvUpRfSGjgWrm7c13kuaxdnpXKpIfEnUxtrnfU8WZokAjl21imblT99btcMqMpeEqVxkY3WXrp3XvkakdBMfcSmzpMqLZdd77oJk7UE67LwmCR2QGGwBsfMBYbKjfzpOQW7mKeslM5jfv95Mgszzh5nxnDeQuwDpMNGvRCs3ZDOXs3cTeWS2ZNnSxW8A5XVXB95i6Uh5iip7DCalUGFJMPRRWtVPLUEYoGDOOcs5jdbZfMtDaan85y8c0speoBHZATRMj5hfbXwd8G5PltvOvBuTuu7Io5FHaKGtaYTVyldpWho5a2F7abg8KambeOhUzBUnKwd2sw170Z9ri0Pr2KdzyXrTfMrm7yQRlpy9ps72JOwuHXr5LC7la8WbrhHU2qdANCTYDhDFg0n7Z7QRoyiCcR8kYRlrrApE7nb2FtPTGNwVBPvp2mnux63DOBaBOERebfkana1hOTveYjdzF8CCHePc0VqMGeqmQTGNW4eWHmurGJl6dDuEy2T8RUGP5wnu0vnqIh90rUU9uhshcaLnwA4l9SDe6bg4qSAQ5cEVJg2mjX06Jrr0ttVgv0Wyr0NRfndeK0LLqBXrsHsWIykKvOUkNZvjEnMWzYyhbn7wGM6ucfrBwerZDFiGUr5ZurVcGzahkDWZ2FiKUS5ZIrD5JS37Or9qx5yFByhaqIF2n1uIOsg6c1AhpWYnCRGMFYS8y2KoQL8kLyufYjWrtUGHgbsxd4EnOuMtZwAhk8TbceIieizUvCcbo3lIEUo4c6zdRUdFma4C4pSUqmrt6iMXpW1kBcNva9TcYfYdf1na48wf6wxpppU5fpm0cPRUGqepsV7xt7tBkeulBIvGInyTheuCbHqboSojMoougUANjLbdrXPSLqlBlW7eSzStYsVALJT7D3tVClZz0AZQgy8jWjBsHIgbxWX6YXSwN1v0OwdnCReFw1lA82mCRr0xEePvcqyIe5E8lrPvjbmcfWDVwVMG5szN4COsknzfQEIqe1LdeCN4nUPlI5RcieifBAehlCuKbqWJi7SsdSnwmZxUS3X1pXujzqW1CP0dlKBvzPWftfk0d15hEixmQN9mABKRmAe1GDoI9LxDodQWV6M2iHMAR2BlqBFndt2WiHtoZ9wBiTuh0heDFXRdoUlqQTGX4UZ2pdYTMteAZ6WcYVucxMye87NoA5CrbqIXTaUSynttfwN7qi8OgRtWCKjSpwPOAtfeJzQrwCOfD6mNXTvGh36oPF85DyvQnR8mw8L3MUxJJNRNdNeTyhVri2CgcB5dr8K2OlXiWC3vV9rvehNkjxVWGywEUpduO26e51TsYSUG57sL64nkcSjfqJuHeoLs4UrJ0Ptw9UdSbRidSR5w6C7k1bWUoMZxMpunnhlvIT1UTTCpNyKYZS4Rl0M0GXXvf6ODpyrAfCzVIoOaqTPYqmTeeZ5Qnw0eKce3uyrXcWXwYycv4aeGUaiKVUupKFfaaR5L6HfiOlcBJNo5pUDZ6UVtPSgtAZfS1TAmMt1OBw7fORTo0dOMVKvczFXS7ksLMZKrBBC8u2CQi1XlAtS9dkhh0smW92zkksZFrsXNlgHgORC2xMpYLEvCyzt9GReIWoBNHc2qqr0d0WOe6og2TI7kbJ7InFgUuoxez0zAVogwM9B0qncziVSOKFecYjp4sL80KVaS5n7RfqCIZJIjeESkWugbe6I7Xzx0kjN1PPZfRq6Q9Ah5CufhcevPBkX21cI50T5q7gVNM2LzitbvfXJhmTLXOeX7pma7f9fqRKWGga7SYjgZr1450v3fqewrq4bUr2Bt1W0xrX9Xbi0fqjA5CerqhX17vWAOd65nPW9JK5LS26hbcbyOTjKZSMP63sAP8tPfzzfAbbJDstp0hsYpsVbxqcbjCPKDyDuJaeyF8IFTg2uoZCeX7A4XJNBpqwfLCef6gf3phonuFXtKaUEtMfwfKtf1rx3ovT6EGqcjVYlxQYW8c5UONSOT9TlALvRt9qgSV6He7LnDWYWl5LU6NjArgabnX1vaIGOV9RfRNBm89nn1eetthAzJl0q5Fjwt3NVbOMKILfG2A10LrqW1EqNvHpSaDMoGzDYThsGYVHPbuR3emFDSa7Gu5CaI3EjvZReee0ssPY1dVI4fS8iq9xvlznSOQd5Ux72wtowFlX6L1BJFk3S3hqYRhzIh0Otk9d2bkcArCSrjHhyALP8GCvS4lNUk0On5XkodPifn9fEqXi6g9wjxI7WSZ9dGf9uEd11Z11UOodusK9IACeYjKWngibdLRRk9Wfx5bdx12IyspOZQ845ESLiH1C00MdGUjyrptF6LuuwTMLd8mxoUEfGXLWPKfXoGpS4FonvYhyrhikwPydhp03TGczrd4sMD9KrxKjQvWzd5zE27pQdAYVd18oeMPVP1aro15aexr6eMl3uSlzeoLtuG5F1KtfZtcrTTAyq2eOQrfuK0Bju0S43GnqTZ3VsZuY0sRzcKyX5u9gtvy8FmzaDmTpkkBwR8xibt3dcPXJooPxf1crclxeWuLy83b3dXtqVFn9KRjzkuLWj40cZFKjqEPwpBLPLStvYV2zexZmqIvcJ2PR3J6qFrREUDtvz2FP2zVqe9ibvprJt3SOQXmzqlDa8XZPtmr2MkO0qNfGrLr3NOmcx0DGYjdfOZuanjsT3YOdv25JfI8IN7Wn2wHpcJ6weC9b6u0WSQxNvHSunmazAZEA3uWeGvLrebqwHoPUf71QbrLQxvJR3fkzu9l8ZHlj7sGOcYUBnM3myt0Mo0jqzbSe7nfnVeUwLiDDF60q596sUPJu379BUIfDnlGTZZzLis1THiTOPeRuE3Vz3yDuLkYeg9bllWix729ASRXFWYTkl6btsrCtvQ3v2zHnHf3TsyV2IieHcOE5c1kLXylepbsIMwH19UJbmfcY6ZV1N7fezSH56861wwA5uGhv1iEF7qh8W5iM34GzPbYwLX8t27DN0CvNNa5pALzqFxPPe2bv7HS2NWljevJPw7tK5Ry7r8ascyOm8hyHSaeUT0HKjDRO2HyYVx8gRkGtr3c4lxet1yL4H6jjwXpQLIrGJmZIFhwkkmydzQEcKVkeFPwtuoTgv13bO9MBCDsmSO6bDIRoZgfaiftI4UjTEUXkB3k93H4J8NSNPGruNchFx59Qf4sS79BeyQBDeFM0qBoNe7FGf7hKowZCbV1R2vYzLuyBlRKoIivd5PG6hCaIuamaeThtfaGw1Y1Re2L1P1b8jJx1w1evH9LWfzpevFTp1NLeHP54cfhX14EYVyidsWvFeKyPp8hCADdBom1SJyvsKcRq5aIKkbjOhydWLI2EUPtOAlsiOwdRL2Bq2fAWbL8FaXbhVdXPjZJAeOUpd6pMGUHpgsX0HAyRSSWere48pLbrnv9hSQIjWkl5EAnWMkmtnm31Hpqfvbe3KFcmGID0HFv3eVuL7exJChzhChd8I7K8SQJVUdOIq9IRoJ0mWAieuZG5btdyH3QyQ5P4nhGKVzd0PhKqqXpRgi0AP2teULjoeZe1UzuLYMzcnarA91oD2Xu0XL0fZVkXLSyJye3SEJqNZGiEbsCw7YA3KE3OPdhLQJVA32vLV2MtEIdejJAKfgYFegVnH8bWmcDAU8ZtshcRBq1CVeApeQg2Z16JLuRsykFoJnhwPhPzB990Rq5wWCEe4p6pUCns4395J1EZMG5kGXpbWb5vz8FLpj9HMuFaiOMJDfFDtu9mRf7QKnsnRty3pccB6fcIeeU8P5OcFQHtT3LrLPHVJ7zbU7Ob10bPRwJee7bymzcB2u7TtvF2w5vJJXGZHcRhvMyAKE0aWgaX98lh5d4nAogjWigpOpwCb2sGuLgYEZtfWiRcPdMZItNzpb8cFXfVzp2Y9eoNsB6fhstk2MmLIXf9T11YQspv7xHoxq8FmErqHn64do6LyU2yvoEFXI8TOR59K7aPVyHrV0AcfdespUZNFwtozMvmdiLiY7uPeA3a2bI09Xg0DFinOP5TfnsQefIl6efN3bW4ZrfiWeHNfNsUvO58DuLIzfqgxgNpRxFoE2IAOEweqeewnN81fqCimWK2rl9qo2rq2ecPgiQAhSEVF1mC2gXWbZxrZObrs32YpFLwMcjQYNMSuKAw1OX50I2Fh6tF7yoFOb3wDCrL6gg5t4B45ZxEFDQbp5zOp8pc5teqZ9B8Gcp5cNV3cNhDC8gH3OGbCAnrzQX4oUZMjxzoFQrEAqMZN5ZbHDjPum5VISesol4hYaDtUpQexZWFeKquKKAFiyIe14qVOLrY5eL9rf4vJQzyq16r8UhSfEBgGNq69hspbiiXhySlq7IWeEai6aRR1NybYCxFPnDaJWG7Du9oTerJZwDpNmY5Cm3wyfHqD7riklfnENQJKS33TjRXNkYGLeNtEvhgqiW9z7zaeIafuFZUPYX8A8XURcYfXz6qntkPPg4fUl9nU4RgeQtA0vfIu7deHUsoYVDifT5wbyXe4H3xbE1gHynv49HERwBI8CxH9YVe7gys0WRVf5dZmNufd68BknkftQ87rWfUJhjIZZ9HDBkhd1clQIiZT2Xi5fhWAt9d765k6IAHXkgk4F38Mfr7O1z14EMB0Up5qigpCVWwUeM01dOg2xZ4ICQy7Uo4K6WPrZqJv0QITbGhPc10DfWRne6nN6bzTWPbMarTk3fwtGytZXkRXOpY9YLJCwk3hd26BdXb9xbzdEC8QT5eQ8pPeTXxke4ScBE3fKqTg0H713esI5WdjNV2UPK7UC0g8ncZnC6ikJ040ZtI5aFQpnuHms6CtJf81EhNstZlCC1fmAI6p6rOsVxHiYoqf6YArP5b71mgagfhlP2iJF1fwGi8lKdH7PpUQ1ENfly4MDUGZ63CXy3eKzoBHV7sWixr7qvGyTREdKTQCdwsLItH30psyTkM1uo1JCG5vUv2ztIY1lgHXgV2jFXuTPgJcM20mDHGswTXJia7gz5eUBQMrAhtMtdXWoxlXK7OBHmmMmMNTW3ndxFaKSmTzZlj0tOxBhQjC0DMYMziZflI3C6bEb2qxODFXQPH9DFfTGhC1edAGonWFUDRDJeYmVFP3WuLgyxHMgL2gfMfsXaPTJjMCMLg2RvXLD8h9CO0wSMNLsrUv7CG4nYXaPJbO9gfTwqO6ewkhpeMBP6DgmPE8Icnql811GMgQOmU69DPdIjLceLbb1mwBa15koQeAUuMtFPZb3ikaMgf8EXIsv4xpWszlIi3mi8ZQFny41oal7o0VeiVx4E8k2SZhmaBmbNYaqH1qJgjSqD7J9QjOAowbjwrkK8ZLKfFB19Bz5ZK3MObmXnxWEwQJSv4i3Qvki7ddxGfYQXVNOvjbpXIyj1eBFFzMsQrxQV0m8CDfY11HyKuwaczUsvjFZneZirXSzBf9roLe2QvMd3MBbHezLML9IW9bqbphzq7F5QzEkH6qB3lNlaqJiUP78QfOFTQ3pcIS4WcMeQOnMjVP4U76OLIt4xV4dWN7sTke2tYtmThKPey1vaYS4PPkhuDBiWjzef8vQAO7rG81VgJeZVK8env5JehMB0qVAVxDOA51lrvfkJlvCoa7Uug01NAtZlHQl3pmyvuTfJ1pKD9l7xjUIIYDRKdtRAkpCndw9YU4TYG5VcdquSke4Q94sYNNAEfpvkzkdO9MD0AXee8tyGDV802VQvxTeR5cwLI9NfnGpn8o0dfKwlPD49CaFfORqv6ePET1V3b2E6gXMqZODeb0Ctb7Tfts3tynpWe9UlP8QQEIlbXWeZEeHCeHBmszcROzFv2A58ci7IGYNlxlxE5fbYKUInHcJg3y7iB2fEYwoKUd3vgeWpC4847PRQii3jhTjZt2ftyDhp4S1Hc67NeiDb7qcvz9qJ6EXQh7dEuAjaoWfN1s2WjPuJACLrJqXhWZGttu3iHd9QcLdgsOFDExZGgKY5yu92TFScboIteZM8Xs4u364Fuelir12XIhOHqbfPtwLfuN3P0VSijcgRefQnKe61h8q9kflp1O3ES9b8vkowCulrqf1ShWoOO3qchDdHPETziBVG15UEuMTaTw6iBLZWEeMZ8XsZZ8UZSUc8XoUuoJj6QDbNQ1J3QcuxUj4IDQul3fqle9gxp7CWbamTihkyHakgaioBp1ozrJJFYbUuFdcUce7kHWkHgn4nMIvJOel6rOAg1Zx5VrgfiOeUu1tRaoIWIWfDQaRAtzveHA5qw3OP8HAKRMmlzqec1h9422jY4UqGE3p8yTZORoV71eqeB9IPptbJIYNNfTVqJsmswpQoGToaTIR2TDiKcYft6U28fG6S0zRwf2IQ0XCSyfBmk8aCF4YSDusyJ1BEZIZZ8GViUVztmw3L9whvx5asSCkHhaxhq0Pv1fer3t2ZUZUvSy6PCNscVLQ4ylpI2gGt4NXEVoYAmDxA0Ptxh9HoFse7mXbmjecfzeamvOJHQAnPgjFP1irWrT7S4PXutcJTNCBwq6FqFK9eSSslAt78WbmYDtqP8YCajsKRwfKycvFZZvBqsMJUPe2C5h6ZoEWUuDQotaopKOtDFD560OeDX9VfTy2wqfgsNBOq8DzbjAKcnQd30WYselt23Qbv5W8Bop2MhysRBr7dlJCWuHL4mfRUASSW4FOySUaLIf8IQhT42x8QDhBfLP5vXiagmx49BkhIAdDOyoGcwx51CJzLNTrBAoWhwvGnSG0xipQBQEPpV5bfLT5lCTDL1yksPVWqb9NGs7YVfFwUsy4gbdVnjeiD2yur45I3yNnzqdfksXLUneTQjeNkPoivlitlP0Q1FVYice3BGp86ujMmemUM3tPfXBP2bPeT8bXuU0QT2VFmJH1aKki9YHQT2AxL51SUxkJdLOk04FpTN7j6on64ezx4psaKcS48KhTMN4VysdqvuLzGwdoWWeTyTRWhYrprGFz0J0ouDXeKstKfruHTLviIrOHqknERZ0WKg7L0lElaUCWt0AE0Glv6oRNmiCdgT4ax2vaxCaRamdLJFeUESapesGJdrY7xZxfYBxCUOzmgsn6smxYtUelxOJN4ZBmnJICAkPD1iDVeHeQnfqjotZtQHqqqTBE9MC3nbvQ3e4CziJe7yvq8eND3q1wsfNH00nMbZMYjMfVCmgHAtfSS1Qai2ekK90kJ43mzuc67mVcPN0m542lmfNUrzGAx2Fp3PCl5s26zsPQiM8LxacXK3ahYqSYBA6M1GYjW5wbMpsDYGGeA4IBtwxdgsuofmlGGMGqne7qs2qaxXy7xYpAKse94OllifObmadhoXaEUWMcoojGb7sF0EaNMBqzNnfS3usVLwkSI3dzCKICfZSrFrq7tQESJ2z1QeoXPMoezKraOIOSI77kWXFU7J0ECItt4O1nfruDOtbkW9QTsE65FuySiKmYe5LGvonsWmFoG7f9a9tDNsBame4dquTfySobRKY0pkrzMLkAuc7MAaEyydhLJdWZz79ZokqyfcORJTA0t7CfPtlZAUYAlPsX2Z1rOKEjjnIN20bwUpaXiLJB1XvlflHRPzvXFSjGana8KlKzCfuY61lCt4GFkHL2JcoX4pMe5FoYeAjCMepqw2EmuXbv8LRaAdRWzKJPkB4yVIzMkjGODAvG4o7iKuJP8avzk5kjRThSGxBFyxJc9nOc9t0amSwtZDnkfTfp7RFVJkKfksyf11fJrfa6flrgRvTdH5m9fhr9iAv4u3g2ePtv89FxURXtRVQeQO8Hz2fm2u8tuNxeifHNQFxMsATWotFqfpTaAYefdHoeTvJLd8D2fvuC3fHXxyDwfRffbE4Zj83fovjAaiU0zYLRd0IwWesiVP6gZ8dqy8HMgNoGH9dV6nGDDQWiTMLgbKR19aBNQ7zoEZW0wHLyeaFazyzTWSRtBiUx5BzI92Uj5PEAK5BGp6uEQl3wfJzH3WSZPLruBeCeebnJgRPn8hP12LHnzveelmutwt1oTlxsQNazfbv0fDRLJTfHuqtPlqCzR9vgDAHRYfXOb6z1BYYo7vGaPuEwg0WO7VSeelsyPFfKdrzUCaYXU8RYEsWuCFzLCNdBKNl3f1WeQjp9CrugcKIdfYamy0VN1JWoVOCkDN1zu2q6I2kzaTMi9LbvwylGvfK0uHLoqsfb3KXfZ0TLfcItRLp2qX3ZSmef1ZbgKJTfvd79GVMPhrQU7brMxYSBrEcETQQjCFPEhGSGomqjseEi4gZxrDZof1JeyxawI1oVLcuck2UeFNHToxgnuid1DozsYg7xG4YyOARw2wEMrR5Kcv8vHNJxneXwjhj8EMpnCyfAwjPucN4yff1POJVdXpSbfDeHmKzR5nvvY0pfFsV7Bb1ZVFBsUxFQ62zFf4ceh50ZrlTap3wlWfyhqg7CteWNRafsG8Tx0mN4DcZVsw5yFPM6GXH5T3but5bj26AuLtNYnkRe2nrl638e2PUBYYoKX8Po1odhwjaoF5MYSTxd5fP9F7d5qOfPUe6IaIGwcXEiY7otF7PfkFybnApf6iFe3xXSbekrQz13p7EhGfH715UfQlCwzvBaxm2k2SEe5rYPczyf2ECzpkDq0iXq9QLBYBtLkzGSDtDf0pNhZfU25TtPY3u1S6gk4kuTd6IeTMnvwS1wfSPXmYRmzKGHIT0ah3qLyOskLDtEaNmOGQLbrMz9s2pIgJTWmOVmA19DbDxYA6FZV3ObEI9KgFeLL8ULwn8txNvef6lC8mzkqC1qctpevucHfObx2exfQpCd2yF2bSvF2wUtoG2tagPPzkwJYeFmVcLDacxZDU7fwXmnHTtPzezpqoqbBIcUCfJrVIybcMovwlBzHdaYPP187CeGBWkgI0yPWapH1fYC0FFDrYOjERkffcZoOcc5cjVlyfT1cajTXMefgQSrHineD09fXSCUy0y0ffQcHUtVj5eMnLfvekvh1RgTa7FKua4QZ6ggJAuXfVnwmVmPyK0O0E2MjH7TjU9qHz9jaxwxb6fSBlX7ykUev7cYM3xiNBgeaLynpU8gjpWIK59kHrJPutZ43iiZOx5BuuCCAnMizshTuLX07XWoz6z0xrAY5mnfxXObO8XKDyEJfP7uKZuAzdR0MCgFbev8y8vn87p4vsgU9P8IOckqxcax5PV8Kpax9D4G3deJwhLPVDmnM9ffctHhGMSTWWfebbWc6xChxABtpqhQE4jDaSXlul9nQJCRqdlfe0TEYuvmDaRXa5isFkflLigD1piFadK9CzGJW9NtskCTVqBuLhCJKQrXSeeKO2xAI4yKEuz40aaZC5ZmsztEDh4ef29HojgjwWatLgbBawNgJT5myQbdM8LP2TyOzdhgf9bRONu4PumdelDfZzWhioApr0px8mj4ZGo5Bnayh2kwgpSx73RFn1kvoAbfgtsWmfYtZf5qj3uU4SqiFB54XDeoroOVCeZkcNDirrwDCH53BN1r8lcoKo4esmXOZpPjV0NgYBVNjG4JMPKNyJaeVADgP3kla44KkhjMXuo7besrMwD2WSXW7YBEFZ3XzUwdozeoIbXGp8MZtgeJhUbps5MVogmKWClsZoJB0EYAv64HotGlMZUXQCRIUfYNgG2XF0tiAwuoEFB5h3NCbzCtWceqJqlzvRbwv1KPj0uIbJPzMPDrILj3WXrUYjqqh547S4Zs4Z3xBYVAhTwe2LFZ3wpzF5cHZ8xBqgb8X8syG7XUOfRJwb9UF752hKl7IdVD4ht8MKXEQa1qUw7muxjLH51SGM2pdZg64mtOMKSTIxTlThyeaWmlSTaWxXxGWmeeOsONPSxxL7BXobiPg6fSut8ZaiZ4JwWQ2h9Zr6aV8Kuw9WL5UlLXr013ZM7dhtWyFRxfi6ul4IS0y99wzELBVwnS64HcZNnAZOGlZJrYLfFYYCpzQZVQpbM3GqFn6u6qYNAPkFISh0XeO13HRMgjIn55SYMdbIerAeGubjg7KrNp5VYvaJDgLdMA5OUheyNMNye1IPQI9f9FRdLNr58dVIzSQxiIFbejZCDqKaLvVGvxRCtWN4Aj3NHbd5T1I0gaEsTYt4636kHjbdG2fRcK6BIQnSa02xEBHjoTjMMU5XkT2xzJDiHu4Hv0gmMUAf5D6IIxQUOhNeguBHKna76e1ED1QQDOIsKN9i3UsUEafe0EVeVIhhIbG0KtrHeaQNKmMZiQovAaKlfAkJtzRRh7bubUZ8UVQSsis1TymNZPS7yCIGzWeEUvzsfKRFOp8GyqRO1dAUQLmpDBYBcZe9wYfJAXQGtHQ8GZGGe5sEoUddUwBFSUYWgt3IEnwdfd3bXfIubVaMe6Q9cYdEcIXhHKkelFDnIlKQreGrFPHCfbUQRzgjGTSYic5QkCPqfy84JCuZlXIyPzsVs3eZcekJMscJ7UETI7aNE2hOdiAKDE7si0duxsktQStXZkbh7Xd2TISea4ckfjwW42TbeNSrmWnlxWzMXZhMUBdQsM3tbeeYFrqpjOVeU1DGtQ8sEIV0BnIcm2BX8pBZOQX8yf8leaisqTVoKTWnTOw1zlmfd8dmL0mb2821Zrio4ylEYI7c7LDdvsaMGRgvd6Q97UiVLRvpvVtqXqK9je8EFyFee9FRDUyhRNq95Cl1mB4ikdEeh1LBtBPDxce5Za0h3e3x5XNQfzS5ZnvC7RCMXhpWfPAMNoV9baSOKEDOp8lTOQkuekeT5t1EKNozeeXa9uh6HxOTonuUC0EmPrSjJS1Ussdeie5wtlGCoEfbrB8gLQiB9xsHP2RUmPDgKeXOpOrtnFZhaVu0IdMVJXCWFkKn4faa0uWchLQmfcNHaFkZWty3zd8uKb3sYXcG8fdbAwVflPEgh5Kl8TvhYh56e3BDK8OxlLKvMzqXEC5fK7qg1pYnFKJuMP7BwqddJIzlppH8oTSvQ3Qr5s1LVTDcDusI7mMTHKY75kCQFOJcXBMYael6JSjTU08RJDDZ4rekYbNaeOe87Xi1L50AuDORvEjfK2gyS7t49hTc2JGW3BeuQ2UWTFzQOMRe2ZSlZyVjGmkgAgQ3twg1nOL6dahescjQ4NSPb7rVwAfXtXHtlFV92m2EaNfiR2WuzCd9ZNDpb3wQV6GfaZsmQHdNinutawGd5DHDiNXiNkgxihhCjt5FoU3zIe6wtbY6E8foONs0Vm1Ree0hbj0nQV0rHUPjwN7LHLtcyj4GwPKkeZ1bZMIBlekj9K9H409FhoN3CF9kVgYBGqfsY2f5ZWZUWW1ObglC7RUzbXcfpGNe3TlfcGx1wuEeNpUObAu9J3SdeewzXj36rajNfSmLvXdgjgMvG4Waita10eC9xN7lCrvycRWqsWUaEI7GDPcWT1BpiHe9tMGbHg4lFu6Kb5sMJrMP5zBXKbqLRbQouB7pWsc33cRI4wAjcECOh5uIncQOxEYKn12I77P4JjGUuPbQUjFy8CadssB25aHwY962AfG8VmbIvstWkkTzhCy9au14IszqeVRRVDuH0eSlwbuEhq9oRLarEIcQnyOfRoz63dElI3kh8s5d5uZ1DmTdwxCRUoJJuSE7nLllPHGbrwRPsQTwrcSU5eTBRMs1lPZKfUDXBeGfmQizwJAPbwgGUiIgqhOx8yQKft87t4EKvJCbU0T8UjQLkGDaR0uHrEcnxrYuXRGzWh4RpNY8cSf7iDD1hPkfMuEeFYz2aACPACE0XSZX0bsVWfOJ92xRNaoVliUsyyHkuXcRh346Em7m5tzJXbHQWzjQKrLbrrTsyfUR1idPr3ZiP0OslLLf2Kf8LMiSvIdj9VPBpgIl0nS8jNCPnu4JJ28ECMk3pt8Jb5z7l2XmtHXSK7x65g4TTkKK75WMsBeYPee461b3LOIV0lJsLTsnGQVpGD6kdbt500eKxWIhdA0EubXofKhVGrELWewGMx0EoReO8KI9zr1myPbO7Smdxp2ALItEhAaeRgSeHElW3bC75qqbtn8HU7vv94KQkeSIOmoRBXnzgXnm1ZSStVWeAHW6hzXHcUcizASN0k2KTO6QCvWNfP3gi5vyWEHyWm8YgNdkTRiXX1a3GBc74FtcM72V444FdoWkcFoyT2eXoRCkJEdFSveeCW5rHeRszVxm6urPrt3KEtH2Tdx5WbqxHbeyXduASQg2ANc6GXZOl7z4Ik4hF0PclmBuO7iDeMP8Z6F7IXQpdq8Kr8rA3YbxlapLD1RLr0SEM3lljTWblJEyf6c5ZgfSSvjFdBbNQuw2N78aQRN89LKsB3is1ChXmiWqQYSd6eVhD7UlBy1r4DDUY1S6nzus2lxXdG0KLyLKj66WYugg2i7cNLJHeXFdiNg2xZC4gXCfCTR5MISulqeZnWzgT3LCgXkPSXLsZJXYBBsQptisAeQ7F2KszcfkOCBFx4UCPcO1ezIAqQOl49zz6NnVfibdlbphKJepOPGvhZoeElIzpZ5LofoR1lOpl1Kbvcxr510ZGLLbyegWnFe29SQlGWKy7QJNVynFdQg0Hs5QUeuPUfDse6ByJbQYVvh9BRYJnb5BRc6dZFhuFiIxhxq8AG6uGNkwEzLuDTaDTtwuO7Ku49X9Px0q1eyUA4cta0N66m19lhe2AUfI8tcoluhkQ76ikiFKbXgicHLQubg6DJe7m56ACywLpwrxVsbH1yuw9Nf1Bqui8rkm46TNn2zOdfltsRgO5NU9of2RARADeZ3VjeL3hHZ86uWVfWnPseaoZ6BWCvWeNX5gzFq2kqbrertWwPrG79q15544ql90DXZl5Ywa6KzFrnsqNqsH2zwTWRJalsnGi3f8WPpUXKoBthQ9SjEWXdc2IfDTvfwX5VWIf3Ir16czWHpiTeR4oVVfGrbXEEO1f1L1TAvow3xGOFCgACndvvbJrU5ys07X4nvcX7MbcenX4997ea20R4YsSKnJF5rxJApzUEq5EX61wM7GtmQ056XfdQfuVfJnf2DbSRtfDfifEaxlv5xElHzPf9fcb1N6YAPEQaokLWVZty40tHuLhfZQwpNKyfX3SZyhfhTJUe4u6lfwVAp5n51L1UOBYOyiFFL07j1DceanbKRiene2zZNvLfhXoOVhQ12qcCprdoPqNGNv9yQEZ8zGN9ovWfRFvytWxX5gM5yF6MJMoaQJ8PWdfz4nejskbu7KbU2Cfpj03muZev8ge1LfZIfzYgFSje6FrfprrWvjasIvf67VqmRQs9K6t2ISIgfphfcdda41rQe8x3WIXo1Afbngh8yQWefj4xWgui15ai0eyBTHvW58XFfy34oXQNGsfxNNC9Bi2isDJVZPUb4ESdS2m9f215yfprzdav3AtIN6PGS30eYqISFKlwA2zYFgdAUtE30gRpNBemcfKBjqccsfFY8CDfV1f26WYT1529ieXhNX3vCbOIzNaPXgj8ouyvdXiYXb9XOgiE3WWevcf8IntVkA3f2f2Jx1q5eFdweJdrnuyf9UGfPuh4DyMxFCfTXgeIGXeN3n9rEZoJY031Rerd3PWgSdnxCVvmKhUB86v8TdY7ssX3zb3FDUkDUtuV71op8tufifq7z99lpSzPQeE6hv8u3RGPZe9oR7vHNunOUz9L5cvUfiN43LTaxrzAUL9Gs8CIdDtVvhDE01JmD31lIoPfRUI0wi2iGgeJhs1ricEJSAk14GH7s1zafsxVZx9ZAh3VXfrHrwRAf5IdIkl8SPdEXomc2MfTSzrzBjhOPmB0eImDW4mw4ssQzene5VkNGBtyfMuUG5iW4fHs6bpSyPnMceNHaaYo9N6xwWW1necjOY7ew950Ir6b295qmDyBvIjJ3Z7iDfHeOlEfIsvdffd07f38TPleLeT3azQu89sHgde3zeAGOmftDlVPXfbyyw31eMxrV5rIQeRUzeNv7U1FH7P5R5wGsrdbeZITZgKIfLqFHpZnH8nkrfXryxQ1g0fifO6TluKA9vk6memVDwq73jztESXeHLVyL5z4UovG2qcyMMcIw12r2FMMIT0tMGrff0x4Vnx5q5OYqflnifNJEP5ACfPSpEtubMiQctfOt9hDddeLH6ejOK0ge83L3aG2CQPsYaY7TBeYniMq1OyRnm6ZiaItoYQ8eJll54s6meVyFNIRfM2mNGxxCOXbky4J8xcHUXvj34eP7f3mMH1eqQVWVrDPwYeyQxxaW1EW9r8lkI8e5H7f941ykWosT7f29432o2P9P8OurBIzE5fe6saii07F9PWw2MCeZXCgoueFTc9ROP8rHafpeZKXe7x2GeXy6lE92eDdoRgHK63CcfnP3nQDYfTttHpYgKy7sJ4reomECL0qfi3DTgR8k04d5NZvfW9bshTxPb9GgbfLNRbaLSd3ez2HUxxFkfjUY4fq5FM09jHE8EHfPORsGOjovi3qgFJV1SKIUijz6cYmk8HcPqxRNSBPkIfrBtt0LXOGhK2cf81nxDnb7Gx5PdxUIy4lYFoQKCjPE3YIhJfzhUBU9PV4fWUY3DxPjb7VD4jP4zkQ60Lgl9nu1CbCHrz2dJSeHTxtGehau8aTcpInfrQz3I4TkFw7PBRthZHyfrPs1vCuLiTTc9re8H6z3tcDMpO7ISPN5eZTzpyaoQAffksqVbJa4eMkyz6qfCbB1R74TkBtECNoXebEEdEpXelicYPzEjggww8f3fwJBP3OKLfbgBRwh2vuJeDLbUnKMQFlLeCLIqtx2QsJ1QhI1FOsrGZHWhgVfWAiQEijN5dkmp7y3JqfVjVb5ESpyvAX8utfWoGE4EQLoRSE9biv6rqgjefLkEqfGmDtFFLjclfm3VaX9rML8YWsEYfbLQYk1SffRiktbPa2KtBfxPkPze3PjPQafQv5PiPHsxfIyMStNbAfBDRHiTff1pF06Ct7rfTthfQ2Rg1PS0Pi6nbf6WezMLxHw8jFBE5u6T2IuTOerJ0Kpq5fXBMCc8F28f3oB7cfH4heZoRqeQ52PXXeOB1EKf7l8rlA7Z3PVwlvRA2ePWpSi0FmhoOefbxvU8Rk8f5yAHRme5etXsfZMvu7jeGJ6pyz8QNsyfnygv8Pf0zKJHeXLNa6zgBpkl8fl4fJtdPQm2ZeXhcLouhW9xmm2O0YyuHr5aLXjWdVmpIZWuhjxCIZzWuGwTVm3df4dL1ABqEWTV8IGTWcMGASRnwRYJzQVvIpk0yeKJTrofre5Q1nEDXeOmbgmesJwI40O9TGcCmjIFmNQmi86imsxsk87VKffgisRZzQ5vlTfhxd7Rtfd3Y0GL6vSitzhPggrfHTejeI9ZSRl4PGgiAfZoPDn4pBNtGByfLlpHJw36dl0OmfHfUezzfrAZGjeIa7wk5PT7Jl627ufJJKdMmVE78UvNi3iRCLqi3TPF5d1g09h9wdKRJIpfz2xfge8jaBgyQxRkyfPfRWJOaAdSbQs5d5Lk71VKUJyPZDWbJGuhI6TR6ehXm0qIzTH8KGMeUvyPC50XmOxsYVfI4fWh6ckSwFkaNI1Hxlo6hPMhCuxYtwqgsNs132ebcFfHUfPA5SDJ0cf7wC734bB2vlPRfXr4890r2fLK176T5jrAfrtYYkehyFsAPfnCHCLJUehNeeTek5ytt6XfV8OoNPc9ypDggRP5HiE8afdzTrlNjfqNqbVbdiXwc5SiKfhpNy73bpRl1uXI3qqPh943WTefAD252tSNefzwqtAvd5weiP1jY3pd6w997IQiaTNq6fkPqat2xxtN5RnMZohdLxdVgTwaDxFbEymem1SqSRfXBXS0TVA6drGMeXuHo1QWGBeMkFjnk8ZIJGP229XN3DS7ye4nhXixApPjqfvL7y6nnzuGZPjSDFdNdywfRI3JdXTefZEslaavrFbdJQmt1a77R8Ck6xVYKrlhE1V4Cyq7arNVRjcLS4eJrQn1PiS7WGUhp7hirIHB1iVtcLdLfWWUeamTXnkmSCNXBH5Fv4EXSoQlh4983xLOdW46lrY6ugLeOiToE7Pee4Q7Ypdd5Xsj1c0flpJ7Xe3SZSmfPA5Nj9TJBNsUGfXiNa5iaYG1WcKBGkVf21cZkfP1Of0fy6JoRy0naUofbpBjG9utyI1Etwn2ZlhYeK0j7UguW7ftMvcLs5fB544T2JyRT6gfUnpWmTjloFyIktvjGTj6ZBm4RtPygCwgJQBeVQftGdFKOSsRP19zflipyl7QUpWRtvPsPpV0sYjzZIigjDwNrvPKDCsRysLfUer7rIdE6yAogaeR7jfmrG0We8Pgx89YEdr8ZxXfxiteLCWoufdHeNRnbfGUK2fGsf11NClEHlA9fbHRpuDngfvrnAKZrPvKvctJlOGnBBouCf9KAfQrg8TAmUugcnzMp5B57XYSpCyNbUr9rlrU21lOPoFfUiwTL85rLHrIQHrhZqud4ehi76lfm2NP1X6qEoqUisLC4nOCLzTsBqUfdKCOcqjo1FVLhrlD96v8eqW81yMbBr7V2pjfDHz0uf0evHbZ1E6KAH5SKBefymzgAzPYubKuMSeDfzqXbK5WZi2dOs8fRkPpVWDHh03fwLG7G04v7SWRgWpz6yf43notfW43Q1TFMNvfWQ4zonnf6UzDhjQVDyLZJoNUP8viH4lHfH57DTTV28pfbDVXWef4CyqZ2yqt34eXBW3m4CFaELGX6ejYb3IVcV0vNkNeDlXcr4r9gQIA217MZ5riXfkFfF2M1P4DWCwRfO5EefzgfeisgiX1rjCyFf2kcMXW8dhvEUeWvfGZj1w9jZo7lBWjbuyLluZKfF5uWm4pqfKoeBR4jf3dXIrxRQz8L5u3Ov7eBIjJ1bVlBUWkRvmdDv5aWVeAFqtjVGVJPQO906DGQczZdJ7SoIJa4EhU0jF44mPUdzjCsnCA0HHFHosja2DgHzRmAeJ9RYB6o86uc8phjKPHTqAep1GlXE5Pr3tk3tY3tI3fadL1GvYygAc5WR20a11fR1p7BGWKnuYj2xrL6i7pGtEpa7am24c2pxN6Z1oRlOTG7X3Z2H28MCFtNiXRLmpdodCAFewdXHKUpNYp2ZMZw7oBOsd8HZiH8tiM3VWWwaBBXG7DuTUrVuCP3RmrDFC9DNOW1fF8FEF85XoJ5RZfOPhMyHcmmRWRsf2Zs1D2xeneRqFQ3odV5IaknVr8fGoA0KPtw0Q2Vu16fK1rR5ms6VKsfY0RiQRUfi9merv9lZ7REwfwhSuxBqsBeniMueoG3dAFmfnZ2NdIY95ZrHQq036znMVSv6ZoUHkUeCL5j8CJHQC9r0cXWH5Nf8fqIAouPd5Xm7DQeLz9F5Qv9ZidfO2QmfTxnQznZJv2KAxtIqpqxOpCfQLXZW3WpzhPEWfMoqQM6YfWPK0G2NpbOPHXz9R9AC8dvGtrlYeXA1gkoOfGnKkEV4s8vcWki6ZWltmebfXBX5b3293iEMMUevQTcGftfjzmLcdQj3wIlDPXGARIYkDRuFhnvqsWcUNGo95NUSTxDXjXlzdY6YMuXmFwHNjEnlNefVQfMCq1O6tTAtJX0VImtkf1Hzgmfdytoj9fOaUf4xfbFNAxfPuwgMwfjg9lglc8fM0ZD1l3PyapF7oJH3fjUc5NYCBSb3mL0f34WhaVtfviAUoeLiP8ARGfvSwnYbydpxP0g9Oy9ZXYlunDHxTKX6R0WqHeXOOeszPfsQeCVSefyyeT21uf7zU4f4MVfXrIko6N7fFN21f9pJerqIxvB2eIR2ejB5ctWpREtf4qJZK13LXpgiZucFygLeNvOdemCv83Veg8oMvztPhC5C9rOXrYfRUnjafIcuEQ8lf6PjquwPX3tfGo7hgjPW7030381EnsZeXrBIlXd7sa55HSfbLkPRefoytk5efYRDXSeXecDY2pHaiHz3YZCbXKfvmXl3DWEf31CqsBwfR5kZefVjiE9P8Fri4rLKoRf1dHa8guTBvNFRzKutw3egzAXed9lZtfDkldfjKtEgoGHXZe59jK6YGYNzA3h9IsJOt2xBkzN5pwQ7miTnVseRuCQ82hLPFiF73re8IWtDOuATdKMmMyj4tAqXKqwMwcrwlw05vndwevqTOZfbfKAOw8i8fwuiqTfHWgs4FbWb9AMUkpvmFfIeSXv2dF8qIz7tdQQT6zuIjIcKgDYeaGzanIg4oiXGlT6IkZBVUEw8MAXlJTMfyVKiCTRKYfBLFGdGZxRsiI8eYzxNUU8YsRma4tbCwVVrWyRbjwOytqvo9P0u0kfg2f7qjjSaNjD0oNVoq4D9uQdSctCQr5aK05hU7qQDeBJ9h4cbfxS6kfFkLJxRNyX6FRjFrX8Jico9IeLS4AtFJh3bLrdskjOyUGljcjCeXrPn8QBq597qxehTYN0sKXG5qUktetVO6URT93EMLtj5K8Y8fVe0SLLelfb1FHijBWkYiwPeqfipPylXxLmGlkVOnBvoBZ3ebupGeXiIf6XurbqfSMArzfFvcSWQTxCX6yagbplk4Fe5mmUvnmMrv9wpC03LvU8ic1P0tdpVzyVjHaeg3Cvbx3lnNqkn7ZgTvZ0wpSMVqmPvpMUeKWEouwdqFCi4PjXhM6fRALcjQCUd26P49hH5PCTijj48zzRb047UruGl3Mfne1QJZwUidzrvOQHBJ2Xx7hrwFzJxv4U0OL239peSHfy3eLxNjVflGrWNjyUq2fOK7NQvpVUfHeDtRbe6fZQaYIYbfHus9eGUifaBFDJfrFU0lQgZEdeDO5efbsKP7nXTeTfZVcfN7f9SkS83hEBqWL4fwEHsMuhfjKpnpf4in9fJECMCzxfdGVuRAEfvKjTpZXOffyTyVjjDcW8eeRxWA5IcEGNaPCJIEGrYz30G3XdfBKVWBfvbARMj0JWNRHADS6qXzNarrPgOdTvUyU41cpdtoOVf8InsMklLP6d3quPhsI6g8Y802tXMN9LtudGIRfK5xgGddfhPxas3o0fOVTEe0EfrmlhjlWVwLjNEUm4ZN470B2YdoUbecWcEPwwD3B0p1cuRFs3Fa8a2cu3e0kkyib269abAn9RoqrF1y2eZ9UDW8el7zlk5D0ZnfuAWrbjQknUX3tM1rNcSZJaQeyFOi5Mhm2LxcnIs7hvRMvvnAtmdoWVWnfplZNp7qbN0Hl5CWTPc5syeKTSvLgHZKIP18e0NmV2341egj6ge5AaKyrmB4E0ByUp5ZPXPK6E0ZXgmQeIf2WmH8EvT9ylLPb016sVzuutOYDBUopPNwhNolW8OuPvzSaelu6so2JsD7apMaQ9Imdkaw2SJXvf6S2gN86eUOG3IPpE7Jt80sL5ypjwk8Od5TfyPJclDMpizfwq0JWRT51DfMDLSHV3aLcTLhalhc7a1bIkl9Y8WYMvfSwaxEnN9IC7sTF3WlhSneHF36o5BVyxmw7nTzeZiK35XSq8qhxUD36qpdEOIeHZbbFHweFwoCEbztQsBAfCXEg12F2jakGqTJ0moGt0HytQDngnB7KUaBIv9oQsZkOytwGhEHbdHsmQDazxuSFX8gGo0YRAawnkB8QW7GmEzLoYeGbNvHlBtG6my5MOrjIukeTMVhB85nKeIK0D3bsMhPjQeCP1hWPSDQBMiXFERlm8GTjDFXTXf0mCT61LHxsDVe5fOnsuFrQ2WMntS78uQSDNf4hRwIQsEPFX7dJtnGhc2rmCgq8sr4wZ8n3GLm7vTcknRH5Yk41MQeMFWOLjaXzozUGKUr1402US5nqXtLtvHjH4opGNtT9QGAllVgqhl7OPh7Cnu0zEH4iof65YfGiG8XaGeEuXUdDxy2aXeLXZeuxnYCqt3Q9OFLXRzdbwp6ZdKwm0yDVTE9KDSjbSDfdnX9bhXbsaIdSgiweaEt0dun22yhpSKS1amTf5Pif3uLPMslx0tIb7jaOH5kY6EPvL5olcmU15MZSwGHh9WdcIt9zrNTZaNX2dNuNeCSSkbDQHOh0GeMSSiLFkDW7V05bKpbMsHeesBVmNPDeWQd9OWZtlQr92TVa3gUID9mLaUrMulKXIGW4uLv3E2U8o1YVbYXvhK0lQmMXx0vkVuw78tNkbuOGnRKzSHGSHWZJLDliKdYNLVtHrFHwDkOB0GZInrc3ckAJBegqUOb7H33IEPcB9CK9spKUC49A2dU6LzVwuu5grZVoNy0de96Em7D2i4WvDAeFSx6RTVdnVfa48NPccep3THfUqonT0bMYsCJJjoB9SngfWkeZqgSocqAiSX7YyhaE7MfdIJmGDALnj9lBos0nSC2x9cs61hB2XGc6cLV9o5ufsLSp9FZ75OZPCwdLb5AAvcD1aQt7WwSoTGQOIhxSdByl4OReUoqkPhwTph6lTqluKREGaN2ebVCat3sW8KNyQ6P1yo4oEdPWZUboCXX90wJfSXGSfU1WJasGxVxNOEBoc16ucwTtGL4LEwJ4DeIXmH5NvwG4AUmoEQNJlHx4kKPQZB2HOS0i5Dpsgm3dav3vHvpuVHxfeCvCPb5Fth4TGI8efAOb0N4eeNE3t62NHyjzVeRncJFOuyUXCoyDW5tkiGKavUDO1apoZat3VCcbajcaqlPhBbZ759d0WBQhX3GieAe6ecUlJJUW4i9gVmn0JSJI5nfzSeIU9Gx8PPrx0AfsGlJ8c2Mb5wiUiadzAFLwBuscbynOegPrpsDFMsSzOYWKEkeFy0OOwFJP56jCwSDO1dpo4OseNJeRU7njaVfiUvxVT22j5sWlpj4QN2AiRAUTBqXMb2tmeRgiCTGKrCSmnJDxFIYriEl1gi7YrXWdfkkZfxS1xAsOON45yRR3gO4Kcw0rfEslIeRWsaqZ6zFnBQhHvhv4dZHqn1nh6An0GcO7fgCAD9gU5y7BUhXmKv5BcQh3gHWUJQpiQZGZqlF1yg4jqJnhn4gtBGPkE9wThnhdVh6iEtLWdWeOC5B3NybxY3Gr1GEe8CkWhY2GBelOLGHF6iEjMvilSWcCB5D9LXufU5iSjmzYxheE3t4sbxbgtml7Xf6ZDHpKslUyBNqFV2Kprf8NEByqY5Rdx57hd1pWhB1pZ5s32M7RA5QeerGXtOnXLKCbqUovcoMqLeoJGKYK8jkrnjSIPgkfrb2sNh9msXawjhDFCQtGFEQyHP8pjZQVlTOs7DKTJlo6WJzs2PfyQiAgRLbGKWnSBpuXMPS9Gra572ZxHZRf58ldeZtrJMLyUCzmLQuL4QC1xLbTtdiI29dtdYL28Bu4JLY3e8Bbq5pjpBVpTibXhy2OSNWT5UzAOWZd3yCBo1u8Zhj1kXOoffRqFniMfLngNYIjUflRNE1zMH57lqXiyFoElkjk77X5k5T1yb2F2cx36vXU0I1P2qBZBtLsu7iCaJUTWiANzLGNDuf21UULo8Ca8SMWNG8sUgn1zt4k2ns2wB36Un7u2QtwGKyiPHemZfTeW181rW6jR2pcyOcHBsRf6PDjw7Nx3aGmrqGVlLwt8sLVg2eIaryvrSIlzSZWlomdTOLtB9eRenOKzYmvcuQ0YgCtXfowcsxAz4eJHZjHWu0yU34suHKD4iTKPqyOfdJsbK9HlZlmTPXAfrisLP5rfAPcNouGRX5j6toYoVIQG4yf0ki1FkiOaqE2AhUi17SFpsYD9ompXDXWf0hKQ6JvXJFgGCSL0fsUWeyY7DcoyQTcdPKIZnrX95tACFB6Ut1vEaAoJBuJSzXykhQnycOKBP7rzHr3A4KmAEHHJ7TWc2rqQysxtsUFKIeMDn4blf6iyz7yta7d4kynhAJGPS7B6sXrm0ajAtMGhVjMbZ4MEQ8gT1c8wHfzBwvTeE87Y8ARq5EeReHAjlenJ1EORZfyLvnaiGveMnHOn4spd6blqrIB0qDjoUmNtMPsa82wF9Tf6Qee1hQdrfaUg2hJhu9GSqdsB4IueieEyTQ5YK5R2XwU7j8UfZKr6hRRxeE6Xe0jofZenI49OSujbHJeU9e2xtBqD9tENanJUWIKgv3gY9tpQB0J7LPr1eHlrPGEAfeXePf6C6vL0YRWi5nOCGeftFwXEXeyFM4e7hLFprnNzvPl1bGlyHhbfm69aIGKNrWenrEe0xezd7NZ0mhVDVNld6aUCOZr7PLYrB6u3wOiMeQSMyRkAnnXu3kZl4RKgaqVh7EkCeyc2ILdefyZwfwjIvfEfljDf3OUe0FGSbKSb5x7sq0DLoRnsPrHF0SlwDfEeQaIbAtHif4gzRlPkn6e0BefsezeeensLd8DveiHLrBgx79uNAbhernWz1cO5wjfog4vkLOWQfe04zspwrC5eWiaeCTtDuyfeyGjts8PM0NxpszVLywpUXuqxcljYf9HHJPpf6XGPeql4zV3xhZpPQelTn5NdZh4z8bwueeAo5guvjxcQMCw7EqNpMzgUl1QD9DFUO2iWtBwcrM2NpK2pbKEDyf8F0OS1m6gYZoefOxbIkajrJr5WepoejyP8TQ4RybF1XYMKHBVI7we00Fgl4NlJMO6BQpSyziGn6yW1iSbXX7Se1baQLHlknms7eV1QCO3Ifzoz27Tn70rNxeog2dbooaNRsYI1tlwis6dBdCjeYgVAUFsYL4OHeV79tmeH7AAHNRJo4tin16anPf5wqWCuzQxcAew3ZCi2OUmf0S9Cz9ozvXetNKZ3ehEsG0MHsq3eX6cGUZu5Gw689mnNu23Wya1e0A9O99WnaoE4XYvQWd5Rurp7EtcmRtG3qe59QPo1Z2FOsduI7StaQRvVujESjY6TZ8xk5HVEJSjj175eJdbm5IjBX9Zlli4evDDc3GCpBTevalqJwv8rSwe1fuEsb5s0Asyuta1vUpMO4CJhs9e07gk6wNFjnfN3BieqmFxo6l7pnhksYvGWeO4wfx3vcZYwUfPfGBUxfnpyiJ37NFrQn5tRfqlGNv6yJxXYBDbsbJi1YG4nX0lnoDLZgDinN65017HurzeBVEo3Gais19eA3OieXcn9AebrUnfofeP1e4W7JuLW6n5ePWkku86fDuz7yLcK0fJf6Te2gWE3p8Sm70LeOtON4ulpueAmeefoIyE62uffzaIj5gUwfOmQer8vphQ7fdRkhYnqHaKeIE5xc8t20trI1OgVbyNFnW2uQ9h7Z2LzeBJRfcdjO2Qf8lzQdFgWgQexn3WFR8ByPDueNF3FGuLLfLXSFZEfcqX8pX2WxVnnKTlHQNf4f9ufBNTuIkXNafW9q5nrUjyfO0Pf769mUDO4ByYmI3FwjZIkhjS3fuHdfR1fmAQ9b1gyj2dCxrNXQYE0Iy2tqmBqvfPJSzCjCN9hqEbKus3FvG6lxXkpsuU3bOC5lsxDuCegJzEVk4jZCj9F337vG5dWYWfIeVZBbAJLH0KKLXCt7nGFnxNFqrO2ReJOpalVLcn5zpT3MtvHAR3FNdf9NwluIQJQ2OrsN4Lyn7QZSfmHRVUjljzsRAN9Xe3v8eHFEWfkAkvlRegfen1tOjIRGwhIHtFkUm7PrZUpf4KU4lhuTl3s2kZ4xaB8kDbohS7eg4SoBoYd2QbPLFmUDk0vYvlicS58lxZ5ponA5aNhbdECH1IbbjATheubJuuQrUbSuC8LQ6D836hGY6oCFdfFAOVl0ZmZoLjcfkpjQS7ulMEeRDx5OUsNlHnnZGqCjq8u02cGR8eyw2E3yhlFuTHhyem6OTvyX19PraU52rVknhI5ie0SSf5G1KgE67APfNR3tbhTPF2SNOTmigR0vsblZIey9f67JQ5TJQuS8tmliCqBIrVp5ux7wCsvugiXXZ3TGAHbOfhNs1mSb2bKYBnlsXgcEQZNjSn9sQgghrfWcezaLUvFWCtuEaUKOfPxz4JP6diwxesdZGd55rwOZDziNe4NxF5CjdVbm7ph4hr0IoINewbYXUgCCI0zqkjQiAbfUHhS2IcKuRwW0CAay8JqPTsmmHBsDzAbFBnOnGWdsD08yONyeJZHd4HHyIUUPvZns8LZSnxXrf7K0o6Yy8RhlGa8NICqyhxLCkcy5XlwQIbDfzkD3yAu9LdMXu8nfgDejrfXf4W2D0nje7im5M3dlFe48AtpMeNuIPrtJfldDSd2yD2KU15qOIi2beOXMeIyzf7FP0hQZo4RtwT7Y8fxfKI83GI0oSu54NON2JSBZOrhkcRumR4yyeUTQkTv502lzdus9xvk5CK5fHioHquY9Hr08dtO7usL6PQbluqnbu701398zCAaQzHwEOnheyfcpfJ9kC8n1fjSPtHurYZffogJDo4iIftop7XFRECJdypf9qYZGYhWY83B0MgpudGyPePiHgOCefmAxPKQ0YLfjAjUR8ljfUVoZIk0tQD18S3PGEpTjWd8qj8sViOKD01cRgzMk0eVeSVb2sy7u3ajKbrVNH7OF3XRgu6NhJe3bLg8HkRf3lLx266fjQLmrBfmy9Sfh3a7uZqH9MNCH1xDs18CtGtN6ASx7Ih55aehab2Vpww2gWXzZ0mvPlF988XcfWcHAGan5eH7cUz2f2OH19WEMMfcJAMxvtBvQNuJWIX8xwWsV03lW3eRLf7nmQfotCfIR9zYj1Ht7XGJwXiBDpnoKaCFv3vl1fSizWftjY36mL5to9pGGQkdFAFhAzOTYa0ckDLKWBjNtrEwMUcvrEi28zQ93M089QnfVEPCgdzxfeZDjr6fRyREIvfm8nFCP6zyXf6Zdyyfq0nfuyZeatcAyAtRzac0ZpdqCOV896n78Ke8luE9MwAQ639qmwgPKjX2ZkepDHhlOYDesx6oMq9O2m9aDNaqf7UKe8tdEO6vlQxS2kvX1PlCqn7N9OfogXb9LdcRP9GAMCBt8quz9W2fB3wTeQ6MtRCezpqRbWopIwWh2sszuG3LPsWCzgDfaGDjUfloYNZhlqB16xpVEextWJ1JqL3fhuWOywnfGjgfG9axLk0HlC6teNm1IPzhq7vZfvGsO9drLze4bbWdT9m5cdeRGN7RekvR26fYgWW9HYgMiiavfnVmz4Ql7F6euhW7vpxfYbQtWL027fMZATDevW367iZ0i5L0f7Lw4amw1fzi0K28R5fOpclhl2eMlh70zHR9ixHFQQRHH73b5RifMu9eOoXIYsajqRrQAffq8lnUeH5zz9VsOAKhePZ2QfCNfQeZmE6wW6VM6FidPAYywhWbCsqdyZTmefkyul0owqz3V8n1G4nkgfZo7Qr8jRXzrdcfzhLXjhMP79Dvg8ntyJupsfKkeJI87KWPdFkqHbrPJqde0HVgU4bkABPByclK3oa4bDaNetPmb2SdKB0nQ5A3k2JdZeIEReX6QmU8YOSGdsrOtJe1E1urilGnpwtlexleF2yYAw7PsMj7TCPhEo75vnwDMaO79OLn9LR6IitJ25GDqQpND9ree24giHAFatajyCrwl732Iztfk1PBkcsZwoSMyDxOKexN5cgSTFGUDoge30DnBuArgvNMIWvUQ5eJL669VtMweff8fc6QkVyEeH4Yf419vjjlAa4qGUNh66M9ipkeGW5m5s1DYJ6lZ3eZW0SGy8WywZ9XJHqEM3fww68GY0RW9DhxnPQ7YDeB2ynFHz9Q7UO1twfx5jteO1GrynaITdLdJTaHeRRXQjH0C7xUw3GzpXXNgQ5QWvFv8k123ReLDpItgtkmTgZlfVxrsDhf5fDdX3n8eX70iXFQfyXSefx5Kff8cblf3nLE2qsRzrRDx0qStGLbLePbdPKaUZGHqe50Sc4derhbacopf08pIAEYseWcWpz61eJFv9XKUBneXbaTPnBfL2CVptaIv7fjczepXS2f3pHzWq6gpzseflIQSFdNZnf8oZ1f7HNpkX5243qh5sYFSJ3kHUUTfY9j1ao4hF0Qj7tKz6FiIz2GDmZzBWKRxkLluyQg5HeDq6zDfFFcsDZP6YdsFtej9eyl2nAj8NBjoLwh1zXSeRpJ8mmTDHWw5tx6fWm2yvkpF16UKa8iqMrwjoe8eOjVOV3wrWsk9qQxBvSSqEQF0nmBL611NCojahBD6TNwplBzpZJ442Tujd8biaF72QFrlG3tBOn2oiLXP8dRYWdsywqwhxaAfkeRe7sGMqds7XhBSPmzH4AaQP2odC3PT14VieqeJ64QWkVheF6roZwfM7Ai8P9YxcWPixfwvekeDf1zwgWefMprvrne2w679ezj5FYaEYgsRtU9Xtfn1pd03mbe7uQpPtbhA8PKN73BnDDDEZJffjPWAXeXZHwRpa6yPf4VEx9eXobvXfwKef2iEpmqvehLS3affYfLKEtqnK7uolyZbXi6fNVO2L2i6flLcWfcIFq7eufQ84Gzpfjqut1UTNffjyuNQ588wOedKe8XQdIJVVe1O0AEWq33nEuIhav9N5HYvgYSRftNvUzGz4vpeenV8fh04WS95LIYrXaRBfuUZ55Lvennqub2tfBViVi6hs3fe9u4YLZ7X0HXgIDIGft9yk9vDGA7IVAf9hQ6vTy98IRmf9f6tvLlE70qfTv3JwnO2wv9yZbxBKHhNfdhiXF3ZJFNCPiEZjunrIvrE8qsf1mCeHSvml9PFICMpzQXxm7eVTcYxYSbyAZqwQROz7sF7JIcX8HsZd5L6U3LIVnNb8u8rqqdNgXPbTj9TpXAq0oPN2KKMr78v8P8iqV2TKUMoN53HWWUdIIhU5JYfqkicW4uu1ppFoRCHF2I8HNxBRewEpeOYpunT6FjVAxf7YTOn98Rl2seCezaq1qEqysotDrM81FfnZi59m2ZlofpQ5x3ViefR2zmenVQFE9JenasYf76lxlfoey4bZab0Z2fsWdEybz8dn4BtD2xK7zN5VUumrz31gCVsq6Nff4uKvHYHbMJ783RoZitYRoD8EhKejB5tVWuQwTCF9CufmdG96te6v6ytByhsZcIYd5RAnVBARgYbZL6JNNdnBK0ucMF8Nte5PqgGuctBnQP7pkyrOViFP3KNfn64BDHb476tebiCfuEuABPFfIaKPut9mjH4glOkNOVY2BZRGW6fxuGyvl9hd67Cf4TmdG8Hl3qLVOsZ4IridCgXDFmG6Uf6jfhT6ecfytRaIB4vrAz8QB6jNuNzibSQ1hfclkX78oeCRLLifnGqai8xCUQeoMRkbzmFfyfhDYjA6fH2ir0RGorH3Y86aPfRyVffU8mGWSsiyjzPumRtGYOfCX2UJHitQy3TbPw3quNFtfpB9DssyQSzWiHKV2jgT1yUlyvke4VP4S9ouMK3XND5dzeifqFLcxcs7TKljv887flhuvt3NXt9rxvI2iv2E1K26zYdewLyz8K1CrpUvLfUodI1Ymcun1HQaetFF8NV6vliB5ce1Dr5DGccSFWsapI0bFvOnXX1OlHHZVv84zRB6oMEouf3HMfNbzakvf0eHzELeXbkbLPM6eRlZvDRbJ05TMRm7m5YAW85srAUzeZJvZf6QyDqejdzLSKRsfMO6NHe9tsNtRjv5YYlexnPqmeejCpy9p7fD5sHQWfNf7gz7wo126FpvxpicCstSNiKf9mujVzBcFk1U5UlTMKWD5iuKUXXN5AXKIFLVI9P1qReaLfWVrYyEfJ7iSIIvaz1Zc8lMachiU11CY62MX2aNaeZBtO7GOJLmJVvpVjEplwT7zP95stgwv0sD5dMUmsPXli9OjnSLhms288IBoYW1Kvctly9z8Pn2R7Rvh0yXlHltauPrsfoEEcoI1v3BlZ9Z9Z7zqz2ROakcrydO4VfvWbmjINneEdodY1KstzmQjqo5lp3HcrJT39dGkdUAlfZieQ59Cc77q2jMY2w8lIVGBxj098dEsfrUheYdLPCxJIX2HV2sXFy56XT4Q5mIAsPaXKiB6u7Y30hanJS6bnD27s1zcfeXW6fevG4e9vqO2a2EDGch9ArIcGh5jtrsfOtVK3429j7f1hgm4ei1sqS55rrbfyY3eaopxzx0hfer8h4s6ME8SreXp2kpxW6qaOZ92s70kMtLmRkpDVSveMnQFZyR2cqNKPqgoeWZbxl5duHSz791akctGQz8sVfSeMneJO908U77t3dNYy4dIToDteRifm1nx46km2DcfubZCKTfYut8PyCnLs7mBxIyo8aZMPvrgq9OJDbC9j2iORYroxeo8wxrwexKslVcX1ptLq8ONxlZV7nvfyIDZ1eRm4UL4DeRSFKl5jey53pU3et7t2eNGiIqbbcU2F42jQKnisymsP2eXfWuDdnwzamxTcJtOX74M4Tjxtz3v2pflQNuMidcW5DaRxncQBeHUQmaRbJe5WLoA8garROTVICu2tnOwWzYonKzHb8QB72eocVa43VwrXlzPpgDl2Yo8yi1IG71aqWsoq9e4TpcxGy6dPa396Mx0lqucTfRbLzdthpj3gNVe6wxzjzwqoQELcfkQKDubcQ7vz8TGzauE3W8uteOaUcleJqxLQsbhgt87JkiTaZZFZ8lta4MfUKyn1gG2uQWbu2xfpLeCXppx6Ob8ervKqofgu7qh8XnAtRSZ45kreP2fKXDlwe2my4kSwgDi4M1pxAeGMH77yHV0Y4lDHHFgjjy8pdQ86zkaH3jjjwAHHife9Xk3fx1Eif2qyZqO7L2Ky7A23EwhMZu2OgGvVFP1k3pn5bfyBSVBfrkcAbogqZlrW45HBJu5ZOVWxe3SJQaaOSfV3AeO2D7K4k3LKqclecqOznKfaRundK0itKo1lvT7SVNRIeZPHcJESTYRNmYDjDfu2SIfZNyqb5Z4kbhID1HZxqIAq1PKPba1UkSqgqXX40HJe1Uf42f95dktrQqSTWKpjTuiD0zdpssO6NDJLq5kLNGTp6O1fgfAfStJJW1t1yJUpH6bxsk2TRfzi1inkRldN37taYjJ9wRG9Eno9vqEDFvZahdS5nVH1hVYvhnxpBFw9u7VxJ6Pl4JPWdsmgsGGQyobvm8a8nfxUhVuXRFj4DxiamGJk8V365raaF6u45Xa6xv6lmrYcjXsvkdatoZcWlQRdSJVDHHOxS3gj2QVqkKhver7FrxAnv6JA3b6p3sWurZ9l67vgcLfkMLexeonQW9pCB0bsJQTfCNAeYE7ppiY0b6QxkQRkwDgcaSiP52LB3J6veZhukWcBv8vfXE6ppyTmNHl2XQQPAMst4t8OrfpgY3MjEk8soSi9QAV66WS1LXhqBNfAXjSt4PzQ1e1UCHlQOeV9HUq1Ojy27JyGxxWHpQli25sMlzE7XnGHfAU8KgcnAAApFDYkXAEebNYLrblfKcJwGUgtUL51UaVNLdZgVa0VACeGEZQ5Lh87Ol9uuWnvzdj71TL3XSCW8qLw7CLmc2qW29gHXiXCyycXqMZPRbVIkqpqAORiPu8sxP3vw66ZLmdpihoQBZtgrMuzAMMp82jkuWLY1W9mn9VnrP4GDlGbbFGV8byK4Fv30MWcUjdHi21KLUKsRWGkGtL2yZ4zeIAiQMvswOnqe1KXT7n3Mu5fG6r4zZSnca1r5rlrpdpVHt7hQUw3qve0I3pG2A6UvVP2A2P2DomX5VBBP2suLDlU9OE98uGIfbnjA5015zxsFFP4eMFfWuKfnh4l5qcP9fxmwEZdxpxHVGn8fEseE9bzfDvaepNH3Lj0oj7MT6rVe0qedt4sQ44H3LdfAfebSSacWOZ8ekCs8pREn0CHutsWWAPXOBXKebnsEues47fWaY0qdBgRl2XbqPsbosn7kdRD9F6HwzRgzXeEU98ZTtmq4XwbjdeGGVWfGwrlpPb96aeXxCS1hoPbgGyK6LM52HEKvW2c1Kvft7epCOaUhScHNKNddLbMEubqw7hCi6EX4r1yceGu7xImtynesEe2aGCNRtI9ea6cIoirCui3IloLZswZsSpig9PmRvKQiwrXPpZvIehdGDaH6ae1rwGTmUZvjPlVx5JugZUchg3jI7j14sDiRNwWskxeOirrK5AxHRjt69yKudXYGEQBemmUW1GUdYOREvZPWcn7SS8wSoXEH6rJot6XZFqcZSCeoB24k8hkSKgEJGOBmI5mbGeZYtKkibb6jtEvpXdNmPe1Yu4tSOPqoeG9gbs3qu5cbfN4UX7CaEzertsICIGIyI8I6amXADpe25PDN9eZmzcnvGLGz2yqlE6f1ITM4ywgVvcfoe8hc3eACW2ssqRo4cxZ4IOne9gMtX1xqfn3Bhz1DZI7ct8wvYcL5G5Nxbd3Cuhdzk1iFNIC3yDM8SdMc4ParxP7KgPS5eW90wjfe8IrdHMXixWVEWEdYLXGhG2HE0EDRXngsZ3ngglF717v3z270r2n0LGe5KVeBIf5SJBBaElUj1e57e2d5yEmblZdYe0KkZlr4FdFfn0haru8YC8ZaIcIaIMaM9eCrXJ6jsLJ75FPpTjJpdcF4vvCB2U21srUkFk3oOVfRfn3P29R5fkH3kxhvlRjIsjAeHqO3WMw4QDfDeLykhnE51nO4PzTEBicZPcyGOxxXeaRe484ixclitClJc1yHmQ22b3mvpf2pbeu1cjfNibR3Gifkersy7cnCzfipSsVSjGvNXm2xA9Cl30mVGYSzIkalLXmBTK1ZtOH2dpbVSFLzieIDBTONY9OrDbLIsiTLRU8ikPorgUoVQ7eQhVtq7F47YnSvriRDtmAJfAblV5Sqe3DVf8WzpJHutiXjr6EN42z1b3zAlX53D5SbT8s7hYzdOyYbC0autg9ZV56ut6zcbegmYXfmR8TV5ipTIFcSZGljHTcsWWO86mJNLU3TR88hUVyCsVtwHfJkoJFPAP5D3ru9HAsiFyto6qgM9PvBypmlSbXjY6kb3P7XileueWsJWZARkzMvjTgKBptTgwLUtnpTBmPTLouunYkliSRMRsHt3tfsb5DpXUFRDJ9dFSmxtiVhQKKd5bEnviaAp7emzBhVLIEkHBFf9J4xfg0jMMQ62JjyYhVE67eZIjBteh8AOhxwx8ZVW1pHRZTfg2NfbWSDND5b7nfw0HSFyBFIPBiqEFE18xbRq6ziMArqy0KuyjnYTuiyRttex1lc8lbQZl3XVZW4mAf0SNAjdetTqfrDf9loMFhfUeZOStM1gUEnYim3BeQ0rwTUlei0kBOf8MV8MN0IaGH8qrWz4LCv6emSMU9pXi4rZheeVpNVR0kqw9KuwAG5GZGRL3jKgdmyKCmHWUeKkKbVKGnw9HhTRH0u8eLf4aTUNuCny22qKCYqIgzVztsV0xeDugXQybA04gW1eD3WpCPvrsbYPeIZFuNyzyTzPGNDpRu96KcUernlnfqwDi3xPZaXwfrnGn3nmECnXduaKPZ8Kwrs6MfiTswRC632oGY4vn7hj7YW2AP87OsQJlbZBVBTBzEuXeQhXqZ3KuZ5z0yfQdMbNdtRtwi950Ftctip8pCoJaFUIQsmZzKlFWMdsIMQ5G18ZjYAGwprISHCSgiR4790NfEfC9lTZhrVMwWrKF3qDtpOl26OtpJlZ5JXRGxT7MQ4tIHfJZ4ZEXc66DBAe1KaTFKJIE4My1LyGRQFnXYV5g6R5gaAjW3KA0YV9b3I69vmuseCU97zsDtdsq0n59VmmCNbdUKDl8k0lYlckUVHdhy6qFgdM6apauat6yWgK9ulIAq4h5BD46KLjaA1ml4A4Dd0XfWL9IkCPUA9RS030oLhDgNpnm4wvLhWBprACfueuMYmpZ5HbBppmrUVn0CPP1jk7W4mXXUnzVwljPj308ITYjb7qtoNrNvNttgttzF7cpnljRvyudWRv4EVgMXWyKLtpGcYpix0YKOUfqDjJNl76ermqUprZ0UmFZPC1vY7R0DoOGpVhD4Osm8U1QCkH8eZnixfqQkF0vWdFemhBN3Agln5hvc1Ui66NsSnbiWQFb0ezxrzDltkkLscLPkA8WPKNkv2f6UxgMUytY05VtiIo12tfSdkDUqgavYfEo0CCG1busBQYFGSgbMeZ2wCuBuwjQdR3UuXubX8p4x5eQOYf7H6MXZgX1uQL0qKoYZEOTHjODN2wWooDir7CxsxinvCV7yAFUS3qewrZgJakE8ST2X0vYh6uRsXL9KP3dNbAa9EYvIjBnKPzGPgO70KBbmeVeQupUL45d15EPUabbsi7eecLleMG35BO5WsfzLWBPg5bXMebm3lLNJFQSlthwf96GnEnrqLrrursLvLtrhrgriLDkVnzVyNvhb70zLcbsbiKXV4kylhHnBeMEgnJ97rRHeqfolruW7lOcUXifvpdlElCkMlygCCUU5HlB22HyGabZDsnCbqUee47tyb232upcb8W8tz3Eu1eAkNEqNoxV1iYftXxldj4ijjQQa5SyeXeIUSxVkjmh9Ezh64x3qjVQ6r5Ufyy1IXFnlilGSa0Xfm8ZXSa6rZ0Br0U0l13iesdtDKmjfbl1nu5eNSN6TMn6HuatZLPyU8BsfH2BAVyDv3jwnRcebQQrMQY1sjibeS33eyqRs2EqlT6941fe4iKHDEjae1Xogrt1ekcPkhe40etTijBCP8AX8tLvesLLaQ71J753Y2hAc9o9Y8u2w2Q3w0c9tkVGeXJYJoJYIuGxGRHx8wJ9RAHrer6M6szXrWLd4gKCeet8L0aQiYhPfClbt89fEwnCBOdtarUMBram8V8FJOQ4M44dyjXx0HIy0s1Ftp8mBOPGgaUeRD707n3HNkjGRE7A7A9Q8Ld5EIWGBoIBeQRDibXhiJY2o3E24hafcFqfjwI9IPDdRhEsF62DiNKh3auTJXPSzAKfrvKwoBPXJpXMpoXFZykwrKcumxhfEfuUPjzzJEHmYjd1Qhqd9VOGjhBF6K51FVKQOmIgeamO1rXefIz7cMTRDLzCdK3h3dOOXoQeKruXMWJZWEfrnAUjgrWx6mId2Nc2j7C8WxDMWTUBe4DHhPCfHXPHQAeZfwdSgzrG8esVsmVPc3IzbvbcUAv8L0VttVEP9gehnWn0DJXNyvzQy8hrMeSQG8Kqqu5OLJNq6kZYWB7VyrvrqkPW9z1VfivTfTfvL5OJroF3vCvW5pkD3gwReMtz2TfqJio0TOvrhYflbFb5XqhCW2euqZ9hXd6WfMHe3FOegeKw5Z7loIT4xgtnjn4HV5kAeAlDXDzkc1IHHtGvPbIMKLfFGYLUf07tft5zsH171JeQsJ6sLKUKrqsJMoSTMyETeKhKc1K0yRKeD9FnQMNvAtLcVpwj28KUuUmxeX2ehc6CQOexQOfKQJA23K7mHe4eZhfpxoN12InO2XLqh3UX4NHp4Xa3RQ6ec7l3iv6F23qD585h6DyqRs91w2tzKozpLEvewoV8leOzQEOwnznSbOe0bhya8hYchUFEDQiQ2FWqW7rmNVnDXToFFNGxXl8NEg0PrH1uLGxrvHpBSK7VzBhwxIWxrGSUnfZl96geR1FF6LpHGKeYou4ej927rp3wPVwSLKYwk6KbYKuXO95dNQ0Q6Yznp4zyAnq8zcDQEUzergHWZJh4lhhh3gI1DfKQ48UKDuTuJrhMFxaw1OGQzaAdnA40KGTHN4eVzrZW3c9TvGsGMpgpp1dFAFJKiLyry4pgL2TgxmZgrBvgMB8HFOsQtFZ8wb0QelrgsrZp41rd0ZuwnkzVWHCVTLt3i7ehUsDRdF8YTHwTYrVrFf5vJ9pMu2mcuhfHvkNLrFt2qkIsqpksBHvUBSRgPf32ANrzO1X9OrMCZ8DfRLJFXNfCnBPl36QxiAYeaUeFWA7qJT5WJLODgm2FEMg3TxCofMntfVaQVZD08vLrY0wxl5VsrZx4IwBrsl1AG4AHf1MW4gocBUt5wa31urCkZmW1FqQK8LYOlxu5PV8GtbG1GUcG3aGVgAjDckjTHsd0zyulNJtC1CvhAtjqYn1IblfglVT5ur2Q5e0JXec2927HuU6kFnu1pMh2SugKlgmWrrV27cN4GBiZeq4BkFJWmDtDHV60uC5dJo9cBZDH6nf4GvriuqnIw5WlRnDT7V9Ou0dEKjG8dvAdddlbB6qjga74mxUOdIK8TCpNkWUIVSqBV211cLtnCwLb4YHy4HGU616lkgX0N746zYI5Aeel8UrHB2eWcPJ6ZyRljQBFsf2oA8oWnkrLaWe8ceysGc8ePoCarMPJ3cV49aHoBnLecc3nwM51yzttoenRgEUOMOSesq7tTbeAzn2e6ut8ZJqEewWT38tXZxp8RClBPK7R4symIeAqH3xXAIg4dX6lXfQ5k7noQwDHu1MMEakAQ6nCNcwQ0I2hW3NYXnZdZXtRW2vFk2AhJUCSfw3uP8iM4RWXNEgLyZHksm0d6TZYNqyceDyGLeUSeMtqF1mn52F2lHaTUnqoKutI3nchsm7xu1wTf4KFq8P5WXUGg4EyNdmo4X7YyAHEUK4M6FJj2p6D7vYVfC7KyIAjYfwDXfxe6q4lo3vhlCqrFbAS0uvaKekgPEc5Cjd5woJhvt9RLC0VBeif1ImiaONI3116INm2Z8eyABFJB02GR2EIeQroTTXPPfOUUwrzY46FQdVLFm8A01mQmzRIZzoZZFPFHzsuefPg06UfPA \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/malformations.track b/public/assets/g/polytrack/tracks/community/malformations.track new file mode 100644 index 00000000..76648ac5 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/malformations.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/opal_place_ii.track b/public/assets/g/polytrack/tracks/community/opal_place_ii.track new file mode 100644 index 00000000..1fb63556 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/opal_place_ii.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/re_akina.track b/public/assets/g/polytrack/tracks/community/re_akina.track new file mode 100644 index 00000000..26e7926a --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/re_akina.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/sandline_ultimatum.track b/public/assets/g/polytrack/tracks/community/sandline_ultimatum.track new file mode 100644 index 00000000..7262adf2 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/sandline_ultimatum.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/snow_park.track b/public/assets/g/polytrack/tracks/community/snow_park.track new file mode 100644 index 00000000..16c33ae2 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/snow_park.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/community/winter_hollow.track b/public/assets/g/polytrack/tracks/community/winter_hollow.track new file mode 100644 index 00000000..d5ca5587 --- /dev/null +++ b/public/assets/g/polytrack/tracks/community/winter_hollow.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/desert1.track b/public/assets/g/polytrack/tracks/official/desert1.track new file mode 100644 index 00000000..e90c3a6a --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/desert1.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/desert2.track b/public/assets/g/polytrack/tracks/official/desert2.track new file mode 100644 index 00000000..3b9bd957 --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/desert2.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/desert3.track b/public/assets/g/polytrack/tracks/official/desert3.track new file mode 100644 index 00000000..af6f6983 --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/desert3.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/desert4.track b/public/assets/g/polytrack/tracks/official/desert4.track new file mode 100644 index 00000000..011c4dcd --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/desert4.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/summer1.track b/public/assets/g/polytrack/tracks/official/summer1.track new file mode 100644 index 00000000..918d65ec --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/summer1.track @@ -0,0 +1 @@ +PolyTrack14pdXVdtskiDD9Xic4xmmGoJnTvRwuBMpmM81vcnZntmarSlktOy2qkKdciRZjtyc9URhksCc87a2o31ifhmy8hCv0BxRamOHlBTXZs60qZ3PSvWccezaVnna7zJGRJIyy4h4hZVbB6K1NlYYBYjR5BE8EOmBC7Zme1CsB7hiwKILMAu9FAJsBM2Qo3JECOsBN1AIAOB5vQZl4otQT5VqX04ktTvoN5kZ4N86B9N1SzeU8f0oMA27thwbzbRAbrdGTBLvgyPNG6qmrqFuxwRYoJwqm0lDrO6kqOy7MHvfBg6hVt6G1cpJ7hQxrecEeHa1nF9TkfbH70tFLi4qFyk1s79hkyySXfzuDeUCcvBvAzJk4fwbd4WcnG5wL9u3HGSWfSM7ObrPeUj6pNSQLfOA1iWXj9IW9iUgzI8ULnzN34RxkjSgLOkwzpeDXekSYfY1b66vkWskm3S3HQYc09MXbeIdPYbIXbahcesVVZiOxHXjPEKOfQLaAf4SJBI0Zvz9LFzkzdFmCrWADgbsm8YpUJqzeJTtgnxFClWWjP2i32lvHh7gLhPZnuREDDigcQCfM5urVkH2cIQpq9eo4JLfkwm6oBec8JSy7ZFSMUexO6nmEyPsMqIa1172tmly3fWeeTeeuAYz9d8fjyKG1lGXpKZ16Ie5iqOMagWLbtub6fZvkGTJCT8q8VxexJPbjY8JWxnOxfliuGzgVzYcf4rMnBTVnLcsCTzYffL7fXMjddxuX3PTIGnWG4fKMFuZdlSdBUBPNfGrbuujPu4r1VM182ec22HRVghLOPXv1914kzLURX52qQDVGqbz7KOFETPHTHcLbrqT2fGfGqQKqRYeTe3n0MOCeE2pMtfRUz0OOlsRGQe0WY01KZyZeiv5Y7mZsymQZyTe1oielbXIS6AyxKWMiyMQ5ar98IpR90RYip8uGWj1likKtALQwHI0zIYy9hA8pDeTO9FIsebB14RY6RQbbwsYeDZjahgEgkYyr7WNW2bVXefKv7W49cwpee1OeJye1lfeYCKVTmKQIbALakWeMe0td9v9UsMGgnAJONQILBiENbdPLaBE92YEnDhwaOaYE7FnKrTVvXiCRtZyLxhBNd593Efsko05MR7CfZt4B7hR3ej9BeHVX6Wu10U1XIjr1L0cLaBFUooymQekpPlf1MAMTMbXEt8zUZf0z0uUriPeLR4Kp83p5QrxLrwUwMv5Jjbk9Fzoku6dgNAiFIic196FR1S11XIvZ97Kzbsfb299sLo9ftBKKop38UxjrLt8ajCiX3kOd8mMGxqfkXiG8jIet0O3zLdjtflhkxVRTSE9BI1ge5JzdJeNJihom01tvOfhigTWl7qtM5K1brqLqoCFQahN4B4HCk7SbZmVVD1DimUjfaoeMVaH9reZ23hpsK1fQFD01zLaFqo11IpmiKJ1YQ85tqeVY0t8fUTi07Jje1mXBagUPHYNrqQbtybBeS2euhtdvhBGqDBcPVHIL2zhRyFS9vHpejzCd1hNKLPHwixOL8xNI6nrgm9bVsn42XZYd8bBaJiIEKiYZ6ta5cevvVVJMjRIDWCfesV5RGBIkAR58b1mZ2AXvuES66f0emX2YFulmjn2zB8rXA71eftMUBn7V3BIUJgF1Qsahl3p55VXCVKrfuEIw3DHtdjJC6vH8eL6OMZj1fh6Drbc57v5ecvmWfCLgcTdCmaMobTfMsuY9kzbhWfkJJDuZPn5XwJOZqbNnJR1VdZSfgcYjy2EJo5eHPlu0xk6DLaNZSnVZsOe6JxWnUJfJmRZfCFsCH2tniD9zpdS2s4jJzGD7LOZznuZ8jXiNjL3jYxx55tCMuOFubPm5c9GlDJEaKmlDkc25kk8f1fzifw71IN9rfDwMijEZ \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/summer2.track b/public/assets/g/polytrack/tracks/official/summer2.track new file mode 100644 index 00000000..797f066d --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/summer2.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/summer3.track b/public/assets/g/polytrack/tracks/official/summer3.track new file mode 100644 index 00000000..0611652e --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/summer3.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/summer4.track b/public/assets/g/polytrack/tracks/official/summer4.track new file mode 100644 index 00000000..a2d2e8cd --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/summer4.track @@ -0,0 +1 @@ +PolyTrack14pdrYd1ljizt9vERB8YbwGMZbwkeGBJjJnTf1fKXV3T3VNz8NvcXlXgwqs0RnweeehQjMdbUDtciQM6EjAahuMdoglsme56fQePyW9gqiy7X7DnPJqq9jePPljf3zrKxSxhxhVPPuc7CfX3OvqfH6hnufp2jctHOndeettHGXcfelGxAgYAjIKhwkjuJw8HHHjNkcxCJThH0I0KCi4Q0CotO0NWkLaBpAt5Re3LRMoNUBSxFAb44gLoBdXOI5Ytk6GiF9CxNwBReXsfYEaNXlwklNvkeufV2M4PshZBtOEV9n5r5Pkq3eoeZezlusRGeZFhOQJeawYosV1hIl9INHYT2fhGof8wTWjiODVgoXo8R0JhE2ZNfHyUFCFzPuQtG7v54vmejlMrSzogd8Z14LyxchQ09gBxkQzhQV9QrjQN3XQffcd0juMEJxtBlmV71S4ByZzbPSKXl7muvnMWZSxIng8VH9ETqWfPeO3re7WLzuNcGkWqjuxcl8WJRNmzHU0KeqEgAIIdpjSPXwJZpkORnbaTgCKd3j9ZgdL2TAe8s11JJH4pE2nmwnTowHesAkFAetdWa5FOctl2x6KTbFUQuie74VVAwDrBQHGoDH25JQtLQxgXXFsBJBBSAencFe8M8JB8ZJ65EPeKfUCqAvt3Xg3zg3dFaPDbJgtlo2Jetmw7JIX80qLQ1MoqrQ5ZYJBssEVOxXaCVTQH4pjWgRZwIXhxzwRC4YJacifoJMKBpjnelF4lM4FXhXnhvIgvKRvm4fyEWV2O4lHZ0cZs0bs2cUhTBHrGzJHfqa8XRYnvFZKmv9t4LPZbPfeBoeWoedwenh9EweloeT89mQvEUC2GMXgmZQTXh6zwaCYdJqeEfaT4UZrevZDLELvq6yRafe915777EeetOAVbhq7gf2Cbmg26ZTPJFQe0cw7gecaPbSoJNCn0fV0QhwYJMrAeQYZAS3iM3gnJfQoelevfN6lKMQhy3lIVy4smYuhC006v27QOTKL6D7eQ7eN29IUbE6OLfOsBhjVuAeu1g3RmDIohktxkMAnDEwDCIYDMIDw5LBCgAS2ATSbfnhDQ76Dj69zetCsNaiMqUv30JeI0SPUdI0MJcp1p9j4SeJ0N0BTKAywhaBoNYj2pv5XGw78A8nrfgq1gKqgKeBTVLxF4wyHJF6wfyYKXDKpCK5DGrWCLw5GovY5NVrNVUNV8NTV2JF4UrPSJdxzTw2YQ2Uu2US1Uy3MWZHVgzMfRGdBEoQyqYSqUtqURpUxrgf7x7f2J0fj42bz3bB6lB9cFe3TnefVK9lfnFEfPKnefoY8NExpF4pM4fxSZB80wf7ABFkHifz40zF7WoEg9JE9Mye1Gp9UUbfR6BOSWYd8yZKkQpexL1bpexpe2ipWhhoT2n9qw4JYj4Zn11cJHunl2h6KjbSUQsJEtEQPcI8xCoPJ4AhU7QKGIFMDPZTAd3RWdczZK1pMH4fCaU2raCC8zmJf4NUa3k3ekpqJKGfJoasZtNkQwK7OdXMpkSWdZznKsIx5FV7fMR1myOew3xQu93Q3Nxo7CfX2sZ8mdMwRwa5O5KyVSZpuc4TFVwNK8f5x7fOAOOpLkPhEXsWAQ3PgtpWaHF7o7cgw0ltzAaNlvWENdf3d7L6Ze9X74lxUiaYqRHoIMFaAJeM6un6xQEw44RkzV34IHrDf7jbGJ229asw4ZrDTv5z7VenLPmqSTMop0fq3JPQnIKvTr8WOhWZaepHhFXog7t9PAkOZej7dUfQbyRNIWviKsbKQNXT9xf5LxqP0fvch4au8ftLwyb2qEuiCfHvHIKUdD50ucGonDf1h5ntqPXLcb3QGKAXSa3tQQfzqx9apK0HS8XpLxuwWUfRcqVfR3qs3XE6Hx4x9pX71U4Bbt9pB7rEWuRfSKC7TGa3HNmj1eGLv8TMRlhvlqBu6FKNEdRP60RksbkYCWJSJeSeVp92F4bpM8pwvKlhJNJXKENFlvEpbryIomHtYX9Veg8h3DXmUNZzq3Nqxlt7fp8GJKc1n8CV7hsLJ2F2ReKrcS3mcyowLccjhUMzPsXU9x1JR1gQ9LUh3R3T8yftjSffHHFHiterfjtWHc27rame4bVVRJEHiWPFisf1UZh0v9PyeHUyCYlboRlvIDT8fjzmcgTxQPusdCGPYlY6NcOuyfQJuq1PZkkKJTdauPHXesNQpfRe642zyaT5OwbJRtmWEUKAHZQv8Fvq7Qw1Mr9HFlrX7Md2LGruTxcNBdNYvtst5bR5GpQ8J7ReftDWKWUmMgMHk22Jrln7k0WqErLNtlTBznLzn7pa7JAkezoi79VJ0m8Vpj1noCHmoBOxfHdij7nX2fF9rjfmerF8mfq8VrHfOYhOwuGmwmJ5NnseVZZJnihpODWD0JEsgXFGBvA9gm4xu8H868D8KoZcup7kma5t1A4sOrIpEci28BaYKfCaX1Viyyr65yFPhA2je8nRXRfxSj9QTDTBfTQ4WpyYNtMAn8zJPaYzoNXTTxKPXxxA5fD7dOWJebhCvunFBfLb3fH2ezD23xfb6ojUBsnK3oM9bAcGi2eGkDuksPcN9Edrom3jymnjh8luBBK8jllElLCjPeV3Q6PSYVvn84d923y1e6wf1mn0Cm5TpNZZNCQL61s5Gu0EaWrlDTkFNijPh1ChnFJvcsQz5grKk9aTYwavymn4SboZrXOEQWI8qgmnPW2445Em9hnhJvWA7CDhIYT15Urgzp3wpLnhAsWSrm8AbLMCEgdl79DIHMUAWr7rZnKsqYVmBA7EdWu2JkfEibC5I1m6SeZSI361t0HNqLchW5gRzeQ6eopcLl3LnEP45tGVgtKMh0NuQj909JdWCeu2m2MY8yCRYjpmJDevthitH2og9LizerInOtQSTDIx0iTfTyTmVoAXfFuF06UFhdqNX568eWdRfTrj67Oc75fVu5Hi1fLAEp5rCKifd84cKEHExMnkspumBiHVUpq2uomO0BBKCgMEeXPR6dI5vLetmU5UvHe8ZJ9ApVdeVz9wbDDmgakYQnk1xd6hImayRdBf0rzDEzmXfQvcVsb62eDsO30FrgmDTyUVjg4jKejYj4Y4gg1w10V8okyQ1eEriIuvyfcH3ZewJsnoWjtjafjk0eT2mmvb08XQCvwdYeXlnEtDPeHnfxf95v4dPlf1PRcuH2fjc1lSdQKJnMeBgWHBXC2IzmbhTGQOvUVJBbEecGH0HQ8cdw35CgpenTT2voqqiz8mbUY2YG6ORvnlabvWk6WDXfrhzf9w8fa4CHL4TQf2ufLciaXpfxRuWF08TyhR02JuP6z2XOrU7X8RK6erpjeJM9sFHY06I6NJg8b8LJKKrcs8oV6LwskkwgJJRfGhGCTAz7e6mQUPFeVyl1I1gy6SjK6zmYbjEr5OqPoBDOHBBjlHCmHhwDemuR7RUXexc9HJ4mYMhATQa2u3p3E2SzOCe6X083GoBc4uDoGo7PQ8jr201JcpZHvWRHhXoOyS1pX5YsJYZl02ddmfMY3e6ADJfP5knfUn9Na1O6HoGtAyMcZLLC3HI3QccDuAfIDY2dChGAwoN1mmL8YpXWJ2sEzAJb2RinBEX8kSYpOdJjkemEPzTqynSSefJ3PZCupfWKqH33j4xx40ReOZ4CSQK816wBzDYNtJBqL1qZ7CP1rVqE7oXo5aG6dMGCz8SjRr64drobOxMcPLC3eMPCX3H1vaS4HRoz7O2m06dJA7bJJ37kiDdCEqn7VTI2RRopMUKD2yVEVDP4eW5oFd89EFi9bavxnX5o2z7Vm8a6DkxOf3Y94jh1W0enbPEwSs6XCs5IRZQBsQLKah3nqCrqNiXy98b7VZwfkLJtRP94JFxvP9YlPmmlsGILwLLlsdWWV1Cb2UWDNCJ6NBefBtR4YgCH5GEEuY5HHAqfuT8ncsnmnZ25fET10ewbJJkDzMZ182jJTluXWeZB38R9JJJE8pPFREHnPB7VryClHEkI1R2y7ZWXtJwndysdF9lN7h65dEFyIAVFlPYzcgZEvDxMYLcvKvV90eeG83NgPLHYejFpFnx2Af5K0CLCsGP4fivePVYSNaxr9xQMR4qShnBpEf7wuW4HNgDxIZo7rKsu8RQo5h4yePHfvYfuhbQeAffkIedcLzv7UHDcJHwUzsQDOA9jNcMenzD8g8E4mFPwMSo067NHXSj4J0kyFUhf0vf4Z5tyfU87C65LcfCHrk4SJUDoqWvRtL7vW6OfqJDLfRrGAM19gn4pOjz8rB2JeKOSJRlZ4ejhaHycuH8jh46uUsIq1geC3WRVNEb2UoXfoesk1sW6piBMBmek0ZN2elDOLYFPYgYEAFAkziO4nNzofcr7kymKfH4suvrHGwHurwgT1kBq4Ql6JlDVeEWywsm1NDCWU6eezdwGGsajCPdR09SmmwXonOi0UmqXysaCW1ZfxS8uUeUqZwWV6GnwYOHgfSIHSSVnD76eeh3qhf8lxNvLTPzDUY5uvg4WHkQzXMeATAaugknvqet7pclEujvIneCKxBmlhJaxc84W9tQDuwDMRPJCBVR48eBb35kQbkJYBJlCec5wVLvJqyxtCsOogDn4m6DBv5D5bD6ExsDYqCYLdrorE0ue87X2EeAMePk6C0WBfeoFL4TdRq39ggZjjMMBs9rY54v12weZbT37Xi5bE1w4V7SfnfniEFh4WmTLCWu3QH2nUua6wJrikTiePxCT77j3ZPIQLbeeHDlradTO7DjVJmkT1AfuZDd4Olpj7frvYyqXbQAEnNT9YoaNubyfehpqKMMeuggeHV1xdn91mqcgOJR3xU4MkXAp5devmfiTSeScnJH4MdjFL3mDDSDVD34jSeGJRxP8qBkdg0ed1a5dOJ9lNx6BYXCeGSC4jdzmOPjBI0Zx74AeigNcPAvmbW15Zn4AVWslrj95VQQFg3xNr788j4ANW9pKcbv7XggLAeiuZ5nnvFHclVfYVUH3niV2bx6FfW6zJkiTgM2peEKYP4y7vJB4VSE9HEZSUyeq8Xo6P8dJ1yxq71Y9VtHDcXlfb6VHWjHWSFsXRSTD5Uc3oXvRfYlgZ2x4yfYxeulEDyrumfy9W6merPIuYtfv9pPooDLqF3hrS1H2enFmkhumUPw3ZwaITH7k1z36260MuklX83fhrKU73Wqc6L9ff3P8Pcz67sIfoJu31ksrG85XII8pJ1AEtJvAfIgpbeq7nPP95x6na1jXv01ccwc5EOhBOemgXXAFbMkqFz85xjVfFN5wRXCxBwL80VC6i1y8cTVLB1IyOE7pDRIdDEHL1ZW2pRegC2cccMzURdna2TwaAenvPlHYpMstW006lUnghEvehMBjxhyloHOYx3YDsIfCHWNduFqR3n0kEdGpwGGsHGQGGwcRQHn29lWefXyLk5GjVoxgavEg2PGHPc5UsYd5CWrfBykBPgheHQTCf4hbek73v5FLkJtYiRamrHYeiXfHw3oEBhFVENJ7iOCzNigsfALqBhbLheQDSzDabuUUU5yZhUwM8ocsIgKUK3UG8TCPMrFeEYGjdTezUksnwQnZzDxehrj0lVl8bUr9zcNElN8T0CuOgUswo6KeTKM3hVLRebwuU48hronImUbcRtcNCVHKq7KqeMfroYueWIZkDTPcSSBSg7TLhZ9eMKYjs5jOmGLNbmusaDj429JpaaBQfTY5JCzgW9dJVDfWuOSZWeRNEsbgDHHHcv1ILXf0EZPzQHRSaAIquG3AWifd0RGKvZszgPEW29WtmdQTGcOA6wZ0wb0kSwG9utKR9UoeXNLSjmwwE5tVapEsCKViDyogSFsgpML9RauYuZMGvtMiFrfEPqG5KGc8kMCLGn1auz7ycBWiC8T6fYqd2QU1xf45IIuvwC1IHOc2mdTAO2PP344Th4nDQFSeJwRRrHhxH5z010ptD8omCR0GxjySsP373q0LfElXy2pimR30e13eGmleB07LzXTXO4Mm44WXecQf8tKdQvxygT8eevsLrqT1DOQoLQJI41AHkLKjcE36cRVAhHb16yCJm8iPcBzgh4phcAI7U3wuDKjefsVusDwzfuJxTBVQqnf9Lw6UAFv0pfGYrIDSRUOfsPNLA4lR5petqZN8guD0iOHUS4Jqmena0RLEOsXeuT83aegQqTFFQWbTdeRCRZwe7YBRIUwiaHKZQENOd1OEr6eNrXFc8BnrZtfYeI3BYGZyqoHQ5Flt5hVz39ONJzrtAVtPjadgo4wCdt52hNqTS48tpcRddrhhbbPpmXQm51vdnmNnRYzB1g86m3WbQIFeMaz6iffB9myIjA \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/summer5.track b/public/assets/g/polytrack/tracks/official/summer5.track new file mode 100644 index 00000000..0d44e7b0 --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/summer5.track @@ -0,0 +1 @@ +PolyTrack14pddZdtlrqrs9XykhHtNYwkNZ4NCSmcOfrfVu7ee6s715eMaNQuBUqUVz5sEhaZJmQCCfUqzGGgTKtzQm01bbTkP0e2CdBa7nrmmbFeq6zHW3L3eMSW7ZQ1d1KrjHAlp3R1p7ua31fwBVZTeeAUpqw9fjyKcNkilFUqe1zFbiACKw55qxCOsHeAWgeXC0MGaaSD3gcPg1wA9ZfwAuRwoGAesFAJgXecEGUbNrRDdnvDX15AqMPbhE4ns4bTybhKTRAIAgfBAkAPZnn0H6FKlKiDFqtIewjQx7h6e7aSnbX6EN2bOUwAhmON3NDNPXbdNA3TgGyrrTRJrXpkfE8esK3FsA9yqUWHmn4nUHqXMEkCr40eesugZLkcZjA6o3LuLQxlEQ2ypwGzKy6zawCI5JJG3NJaO2LjP4dBVnUSW3MbnxBhcRelDYv8iKTyLYJwNDo23685yK5645JwSfuofImikd7prn7Tl2QqBm5s6ebzhyefmKE3yscgbDwBcYuDlwCIlIbx3vV4s1Tqxe4avDWEpb6dFHvYp387ncNei0FLT2c12TUk7rqstPswYDT1lH27uA1D1WAWOPlzHkrmyr0r6ELHlD0bM8qr8k0FJeWuLtu2NT2LwG776XYPczu9TNoURepxQlGXnMp4BxGxObmmz8tSZY8RgTBpAetPF607ZG5DlmxaNvthSZu6R8Qf6i19LvBp34Sv5te9AqXBa22BsaT84iJ567nR8tn4Gt6pGJhkWl7Cu0RXl57oveQ6FAIvaSx91Fj47HJOwxNfFUh5EyVaAL1t0j61W0eeUszkTlKUBFq7PIZLd8sNrv4IT95Cn6y9gydJGtWjzenp0oaP1OYhMyKJNfteOvTKm0jzeOe6jV4aPIiYzw3T7bTR7XGNP9MJqYEU3sX53vFCDNnUBfzaQE1FV3H8fq9hm3tku3ze2aUJVeIdf9llYDZKXd0AHNkiflRiare2TvDqCq0sdH9afl9gSfh1CYp2Cnj1xCObfs1hnczvIBZQXyTxCpdz4beCIQ7qXX5OoAOU2N2FWh8gAfYEF91wzeXhdRzmoe2l8bhPFz92GC13J0GFm7453eS7ex3e2jH2remtD4LIWcrjfcnVawsebAfPGf2C1s3GXKE3X88TewRYspgmIZLEtrU1jMAprl7yIfhiA7U5vsqkia3O3104INUjarnOtxjkZmqy8Pe7bw5eAZ1RmlqgXmPuAvj7cjxN9mh0qQbuDqbDnemg6uT07LrhT9PRbffcZryZJcReZS03zMXuCnjUgPfxCvtnaC8vkitKJpa0gBHUf1KnVYPH57WNw3fMXD7FetX44vwZfa541C5VPbxXY3uQdtJe1kwrJJXTAXXOuuECHqu0Ow1fEENAi45iS4iO5oU4oK4cl7l8Ysa5CHAh8chJchnckKckFZek7V9YsbziGWmyXmmXmoWSrXS3Pdlp0GAa0saN0a4bRTznhnt7eMKVxtqrMcn5zwz7p3Ep3wp3aY28o3eIZ02OZAvxI50dOifcUyc05MlyMVxMae4hXiV7c4gfpcfTzeno8Tr9T3bQzeVD69nNaecwfyB33BP1ZxGZH59sjfCT8SEfmBkj6tkxbJL3C6vFMtoIjFNQPlfss4Bf9rXy9v80wtuK3N7ZmRVv4hoYn9x1Bj3GSbu8oFfetgfVp7vLLeeiekaGeajPGmenLXooskZH5f1eNn7rwncaVgfny7fd5S7frS5vL1DZ9xBD4oasBaxtGJPQy0DcRm3t9xWSivzDF8vNO08CBhQqBENKJ2iYfdVKBCg7SehsuTDNPJ8XS4elwTTsjdwwvEl0Mon0pnMWrIP3FrSP1rLflmxrhCDtXTZogo47eScazQ7I8eYeqNLcwA5frIbcyaiWpkVXMPP8K9L1Y3An70bX1EKFefHXIkfHTPGnWuv864dlju6J9qlPc42UecSKy6BXObaW7Gab8t6p5Ik3d5wZ3ZkGGyry1zuxGrfFK3mYlkwCFZnO6PQzO656aerr2dz0yMa6FPFF7tPecwowQa3tMkPAtzehL3da27N03x3oGqSN8MbNMb7FHsPeawoyQ6wN4Lzo19fZFdQy1uvexXYCNKZGPafuc3Ke9kEFDn6RtSVjyRzygDNwQDqjcHMqNaPcdQru7eafqtMaYnmoysBo1AMbYMsrrsczEyMKQMxiie4Nz7f9L3BbY7RTMZUPzq6NOLWurHeeGbzKoANlwA4TpnOFfWKOV6Cgi1o9MBkCAI6dfNnrjIAinLvqrehjLb5dvfNRfb4e3aC2883eIANDtHWqMCOcVj4VjSUjOVpUUpKGRzhHeCsaHDH8my9mm9mo8Sr9S3xGqmaGG7Px0wix3ixxjxZjXOiXCnUk3dREuoVZIeXaJqN6SneKoKSQdHvHxr2kwB9pc9pZ9JK90a90dBPb7u47ZNbuyT5C4evnYkPWt9wxTWueQfLRKO1Hi2RJ9TUuL2KBaO1Vaotl2INPxknlz17NnkKRp7pesP6jNyak6hGPeNxSDABr4N4XbMiET8CzO9TdxDvLVhDoYkiYkaipbVVHfD8KYht5HemfmfJR3xIGKA4Kf9nX2WVVftX9LHNu3f5uTNgf8zdqGvifgMLfvtefbLeflVevtsveLr5moNeXY6XoEbUQQoCoZeWZtk7nI3MbFPnenuNK16V922ieQxIaNKl6Voluh3n1QjSreqgbjFYCqGyOTiI6vneFzReFDeR6AcGN21DJ9nzaYoturZdP0LYYhZMfeC3Cn14fvlxFHMX7XfDsTB2mjLFNGiS6hmNcooX5XUtYYVfxQNdH9g82ulChJFf3K3ePD7DroQlm3Iewp6KZeFV8Uf9GDt43D0HK9P9VFUUliIpHxqfGFXwBzaFB0GACGWhsqzvhDqDWIoe1uzoHMXtWziu4dGBJOAr1cfpwJgfKSVKZZTdxvFT0GO8fZxTm6DyFNbUDdEetzp52oTzTPACJa9FWQ3ZQ4QQIf1Ncke5A106AUT8GAeoZ9ao9w3GnmDiOXP8ANomYhR0dSEOQgayOOQMBkkWvqVmJesVKrwx2tt4cTtfAtm7Aw68u1PuhbKhemaIBY4kcXBftKelkOknkqkJiXKefY1jGIoYIkhMXOZuAJiwJiMXPNgGMQphK2beg3yA8N084bSTzmhnQEzoZPd7FqWNs2pczoEYlOU1zG8wDeBKDgGaV8tgp5V0LfFc8KBkpQabcbcPZLZnZjZXardrdPYLYnYzczcfqLEpZpiBgEvCk9g5Ibwo9BzUu0HZgeZTIlHUlvBzw8qWfCEbG1jFizxpHORS4680KDJ9vv6JwDYA9nF2fxj7efDZOwD1tKegKZgft1efnbQffee0KFZTLs2uzv285NRbQCJAn0aJUTsQbH0sWN0W4blTzSomgGl3om8CTq7UKcQC1E0ogkcxnWzgaCwlDchiTDjbKnJKh4sZtdMtVRmwCjp7kJcgJknYHfSpO0Y5AFdmq6tWbsiywAhaqmw4jzOnWjAWpEHAi0siN0i4bIk1kwTiNvFEB4YPN2FKEYC2UexokA0g0MmiY2DswG7ORgOjIuQ0gUoDVWOu5Zb8CjfFqbN0XTIvmwgmv3WOAIoh2BmenopLYKnbambiiLtmAtOyGAZ0sZN0Z4bMTzEIDMyaBc2WzhLh9RVdPyCfO82yjTvvQmPdZQgek8I6PFNU2WlSHjFkRvAxkQwfbfvmx4krHmfXyaeBfyX9eGBHvfC3YYUetswriFWhPmGamKGePyQsfRGyujZ0YoefGqBDJjR0b0qFLcIeUe4p54Jq406409Xesv3HfZm4hbep8X4efMxoaU4ANQVhdD5G6a156hhJi4IzbohFS0feohb799DL0oe8zs5dso8npWfPgeeSPX4DCoePfnQewaxka4wDdUaJYCD4z2DhfPJpM2PTUUinLsXs18zNnqABxx5x2ST34u8e6YZ7hRd183qT4cA3PUfclMEQXViwHnoK2cklmRJfRDzvJW1ZuuHfhbS0ACl3fIYW2X0nQGf1E6MJZmdeSeGaOJiCptSeWruvV7B4aT5nfPTRrF4sTaf9JBiCmNOy8S86gi0Refau1LvGVhcSoBuZrWQm790GDLnDrp7zuZqeIsxeV9aR14TKF99LvFeBqtLOze3Y79fmXwsGKa9HHx4VF5Pd6FKgGmhnNuFW2FKjGlg6q0hGnWKNPE4ZkreSjzwBkmQbUKtZNHuyDVVvwEo1278bfzQxf7hK2xerAnF1BkCLXa5fROReiPpuO8zFuYHnxAVa3kX3jdHRSZdNrFu05XKcRGhsYvUMIhCfd1jABbhW2ooXmOafoJpN2dPbluYZZkyyWHgGSXSX8ASohrevIvXQX1N0pQEntfYAKfZq1ez8yxBAIKDSMBjdSQulLyLbMJYelC1MjbKDQUA9kPtIChGwPOWfADqYwjypENTl3t8kyor6xZEpefmLYw32VfFeAD0tERPSh96SQdk57g8gSi3EFE5ElM8dQSPSMSdyZyMSuPNUKTz4Gi9ZXdPCssvYfSnh6rPcxdAb7PhYtfSpP2jq3ev0tU9xeuQSLTrYeDkvxDo4HUgvNAYd4NCVzYzNsqDMyFfoCFlukVbYT04eLGnFfl8gneRb10uzGZeb7HOFHOxHObGP9GOfYFpuStjejLUP0weYKX1waens2HKePZg0DfDheeHNfDzAfz0WyaStUFjbSllsAHWVWJT6w07IF95BFHNwvOVhBXk4HukmD0Pn0li9oUQRx1jMvGHYHA7WU1nuw3Jc3WrMJLgPfqGCOyg5eyUkDfWJZrfhBGj407RUf7pfQGhQwpSKCkSZxDF46mN6NrjXkiWxI8xr0xnGWcJjxq2bv8mdoYOUmnBo8PGmZbEuotxyLnXEgU5FR2D8Fec5BU6RoWDXe5URHRAbnufSKTAl904MhG7r6QYxf9eXz3S3DU5Kfr7kOWBer7YOcMDEggPaHGHmoCQU3tuRDfhAvjmRjhBJeIk3GcTGedFiPflVZYAJSjQA52b9binXHD703VaKiCN8fuGs02jfEM1qDb5SSYhXw3TEBZM2UyvhCwH4EPl6bsMs1dUaypCvpIRdlDe3eiBkmEw1mM8espNMYsncQmk2nmHEGWgJ4h8hKZErMrF7N07nhci1ROzeIvxO70caE8WdHD4HnwMvZcXq87Dc0O1Y5aQx4GGKjhbOhn67ihZTPAuTiiIsx1XjYPNViuxNSDp8ZesktlYKgsMtJof41TA7aOifLFUka1fw6oCgZocddA5HdAY7zWCGpW3IKoyYuDnSTiemFXhFYChhyIhezDLFajEpcOm645Fc4FVfx7VwRz5rzySgQQz7LfuNRiqB7fkLumewivIF02RP7r7Yq5odduzh1EDK2QMYcyEZQd21DgtE3bI5MtG4yz6WnNu0wluCvxdaB0TL029ZeAAchBz7sMkJYpR1Xuuj1JAfxNnbQM5RQpMSbaxbV2xePRZ0DJcREAyE27HbGA5aEp7e5LAUJYUOYohdShcmNwLA0rS0i0clwlla9lQVIIc93aDLUOwP21YvdAJoJf8xtiaAOYd1kMtMtMn86kJOPiCKPbDPUd6GugUEK3bn9IUc89frjmzZfOZKrJLcmVjv20087zAkUmVojenTAYo8r6frjHopzehwgRuR7mLKnzIFvW7WnohcWcxPME5XOfiGeVTGSQ3nDqlO9qje36XQwSgexwLRQNP4UO43HV2f64xeXHJ2LJPb6XYGXikaG4T6mVkn7jTon0dwa0vYXX57OfRGeiex7ixoM8cGwrMSOe5cm1RD0NvkXt6hDiT5RuZieatweV9KSnuaPd9FqaNMU2wNOYUXoSbiRirRAl3pTv5MjeOfc43ZLV9e7tPUGWKMC2dHRrddvAn2RUeN9sRDtGK1D3f7U3fvyVvHRvaj5SjUJAcSi1aUHcpf1JmuG18Jqqotikzj9B7ngxbowxfKYM10PexcxjweEQfeQqo1BdD7lI3mulJ64S0eSMEtXVbUJ0ymxrnb4CYgNpTBq7efofmXN8ePCeNI70pASOSenx7fO4fnQfxfMeOfz4lBbZh3wWstfeeLKuT9OT5W6NVIeTIpwhEx9A1RQcEAusoWWhJS1PfdLlN8xKTSk4uHQm5uEKYlXiihVCOHCrghzYFeqGg7b1g471tlyf8pP00e1pQMhMfC1RLKUeDyPrTe4JEYMyabQGzkYKxPfYqnlzgln4ZbPn0CFAGxVymZ52e6p54zBd8DG8Ofe3xDlWlt051g563G03oBNCYXrXdKNwiA8fGol0PVaRCRrfz3O6j4OO630h8u2GCuON3JyTe9XTyV7269VDS3R2YEkxDw92dUuKNIeJreyyhwzVCTMpphDl1PfODppf6LwIo94c7rvOjhoUeg3tlf5rEwSAgamIdgt4JNncgszXrwrwHU1NvuQOvlm7xmumozNjyRX2K7KFfnwr2i2HvsdNlWfO1LLpc3Cscq9olKbNygJSwQ8nA9OcqfOUHNLZhj9XUgygVjN45s3ATGapDdqI5XwBNl5ej8gB3rJ38RJ0W2TawSsxBd2hnW2vnLnEmEXbdBIjfATS46M7oMCinBwlYf6aVWY2dAEDDuy5we2KHnw6ax6bzSzczCz3ElI2yCi3BlB5Sbch9jXU8fmCgaCB7OUh84qDjpJt2KkuzBBtABCgZ6QbE6pkChaXDGLfgHZDEVdOZNwtm3xoG3j8Jzcex581UWVY7QBEe6iyWhyfPl3wg0B \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/summer6.track b/public/assets/g/polytrack/tracks/official/summer6.track new file mode 100644 index 00000000..2a60473e --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/summer6.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/summer7.track b/public/assets/g/polytrack/tracks/official/summer7.track new file mode 100644 index 00000000..2449e9e6 --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/summer7.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/winter1.track b/public/assets/g/polytrack/tracks/official/winter1.track new file mode 100644 index 00000000..bcddeb49 --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/winter1.track @@ -0,0 +1 @@ +PolyTrack14pdXUlstriDD8XCCgBWemABCJETYwMsjBbCgJgZKAf6buvX3b6V6c0RWqqSlcsdRkDpH94jhNEibOhxQqcA9mOtzXvKW8VYA3tg1LhNzdlXHvjEvBfw41LurzundJ4mF9CBeKKPLomxYpWJhdCXDmsSOtQWwDk9vfoergiJhSUdGUJCfQU2ZbLEfSLLDgeb9YWtxaRuW061cjP3TDgAiFec8Dz979dfEaT3dUt0d2assrOna9S21e76rmBShuLh9j39lG1Uj7a789uY89W7X38L7iKU3pmHtrHF7aXi70c420AvkvjDkDqwxfhKT0ORenBTfgqOWlJelpjQeEqKDs5R3dp9iyIsDfy0Z7ETA4W8I63uFoohVvLJMGGKavOICnXDD5PeeQ8r5rMNgUDOnRzAx1jPWty13jvUHfH1OtIuzUbash5qeDkCcNhdz7Fi85mHBZeXlRLvzuUwivbXegt1i6trJ5SewVfaZXXHfiWsej2sMUQz4LQolu50yGmrHr9mrSzzc2VHm3G8jAHf95tHFRWze2YMWe9IeVyNjvXAree6TaPHeZeVjlb8owaRjpl1O8SgFx6Za3KkPLuTg7mkf7SHNRJ9AZfuFEG2LaOjM2YeufQWrXr2F3oWe03FF5D2eZrULWgmkr7Hrr1ZWcQUnULBPnwpm4vnHNlnbesLJL90Y7SV7SX7yMW3fah2zOVPsXPxIfPyL2e9aZJeu0ofWP2Ik3v6DDzloiE5oyv87idglGcYPHwNBXHIYBmh6f5saehxkVI3Jbe39tglqxRHpUMkzkg1GcnedYe7onfNvAVBfkHiLPptJFBFs3H3tpiN35vb8HDTRfgnbS3eRLHebC5BVXg6tVyi6nfsDozHrdqqoq18ORUYs7w69zxixc1Ge9u4l5fxG8jz6bTxHhOCvni1Yu0ue3tMYpde18TG8qosQA3WwMrRsjVDPkql7W4AeefBbj6ubdmZ0tfHfXH88O2uA7tgesmmu0KovNfYknRP4WBcLQ6Ibf0W4uNfAkX7B6KgrB7IrkW2OnktfpAazV28rPPs5TReC7B3Lm3CyOqomlxJZ4PFRbKYzefR2m3F5B7AnLwl9wBvNLkTfdftAIaxnXOQ9IGNgfmV0UevsSEopqEeb44ZedXIXAKrgxw2rZ2NlMmWT5Tks15kMhsBPehaLCBSg56MRA11rKApICyL3RqdDiS0jDy6uxpG2ibvxfTLRoH4XZ6I00VHehbXlTVfklVUg0qmqUbsLN2miC9ZohCPo86pQHnqEwC4mqj1J4aUfUDTphIqOYkQTafcXYKtIrexorxNe6HZvrgc1nHjM5r6ryeU9QKUO2dO4hmT8buOgXPMerV3X0ecwwpTWojzZjovocNhVNlfnTvb60OvwUZviHlg3MmfeW9OznuTeeM5Qzcf82DDSIvLtmAcQwtLm6LJiezJ1XXKI1MDeTeVejw6z8rRfm873XHfG7mxrfCg0vvfguIDq3eUCDH7Vus8kDGdcO9yXOw9xJeg0GWlW35JE5Vg3feSz2Kzw8lW6qQvbfAjil4MJWPGBuoCoVLkoXT6GPwjJdiu8D6aWVEYy25CmyHzYLWUUAU1P14WAeEeUeAczDEe1NyOu9tHWIEag2aJUokG2VaL21EseHjVdY1B4fZlyWK1ffzCnF3ZWqEbeguAuhzNLofcyfFs83seHCIS0YfQVJf5fA0fyHlF \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/winter2.track b/public/assets/g/polytrack/tracks/official/winter2.track new file mode 100644 index 00000000..3a00c971 --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/winter2.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/winter3.track b/public/assets/g/polytrack/tracks/official/winter3.track new file mode 100644 index 00000000..1d6a0bda --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/winter3.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/official/winter4.track b/public/assets/g/polytrack/tracks/official/winter4.track new file mode 100644 index 00000000..da327a5f --- /dev/null +++ b/public/assets/g/polytrack/tracks/official/winter4.track @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track1.track b/public/assets/g/polytrack/tracks/track1.track deleted file mode 100644 index f0d04718..00000000 --- a/public/assets/g/polytrack/tracks/track1.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track10.track b/public/assets/g/polytrack/tracks/track10.track deleted file mode 100644 index 48465f64..00000000 --- a/public/assets/g/polytrack/tracks/track10.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track11.track b/public/assets/g/polytrack/tracks/track11.track deleted file mode 100644 index ba272281..00000000 --- a/public/assets/g/polytrack/tracks/track11.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track12.track b/public/assets/g/polytrack/tracks/track12.track deleted file mode 100644 index d47890f4..00000000 --- a/public/assets/g/polytrack/tracks/track12.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track13.track b/public/assets/g/polytrack/tracks/track13.track deleted file mode 100644 index 3e50bc4f..00000000 --- a/public/assets/g/polytrack/tracks/track13.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track2.track b/public/assets/g/polytrack/tracks/track2.track deleted file mode 100644 index 81bc7141..00000000 --- a/public/assets/g/polytrack/tracks/track2.track +++ /dev/null @@ -1 +0,0 @@ -v3KAUJXYjtGIyA4pdXXuzjkUDEA2v63TvSIeQc8QiDIlMyQCCJjfAAJgEe74QEgESkSEp8vb2Fme0t7ZW2lbx2l9XP7cnuTfaXuKXucVu8oUtq4f8zhf7f90rMC9I0DQfXo7hODdKQmEd4pXpMhftY1XHk0VkYtFJal6pwM7TUQiuSpFJGRzWlFbsmsZkmYde3hx6S60w39qPCd84bLQzQHxOHx2zQLQBrEWjsPY1Ffg2WWTrDqCqelS1J7FlmpaoGoWoOoBoeQ7uiCeZ9AUPUHULUDUNUFkDanyF8emyuOHxC7a1YZO2xifw8mlzJtE5Ff1Eer4pe3WVx5SecUMncmxIZPjseeOpsFdJXzGzYE6dTeRd5MKfkZBaGKce1e9UfYJTU0Wbwi6SudmeI0DseCS1C9A0jQhqGtuUfJr7rR3Apl9d4bjE1iZm7gGg6g6hahagqhqgcQ3QGyNXdaFz0Hg6h6gahqhagqgcQvf0JksXvnIR8GiPIYjSMf9EzjS0EPE9Cff6bKWM71xdyHqeLBpWqItURa5WBLVu7gGviWQ6isvzU3VWeJq6PRVfIJeyNaFyDtANDdEaC6AWeh03FySOvlblsl6noXpRXN6mpnS5Yb0E0RoZoFIP0K0Js8JWtT4Bnwr2oVIPzzjueYvNaFproxKSPi0jIdLasRTIdCNmwKbRyDSlqJprW6vcUyUzkByeKaC6Az7A6eA2bbN2oJZe0y9MKIJOfcqXYU3Qk0ag0QKIxeyjZ5MySsySsySEywJjhTGDnMGOPMkH8Mal1wza4ZN2oVkupxKrxZWjzY5zUltnTw94f2jPvXunJTVQ1QNXSakqRDNWRjl3IFSVohCrowyZagOMD0hpHqDq9KK3nPPWDjVzY1MW1V0MvvYjiSfyU3PZPcH7h7YPcH7hI9JpZLRmbJycLRmbJyEpPPdjucC9PpzvdlqiwN3DJpWeWBbpbj6Hv4ldzSlhIRfbTvSzgf57LfOvifhyr4yfe3dxr6izfnmscLVzDlaO7fS9iwYO6zXBVD1A1C1B1DNAtDaE6mLlqvcsZoFIP66xe8sGesue4Le4f84zesP8s38kHEpfu6tkTjKem1MphUQh6vnR5XDnJNkByeSpWqntUPnJbasDiuZSDpgENOIW2SnlM9bhemVZbtgtWwWLYrFs1MeoZuJaGrOjvNjfNq7fMVR0mksH7npcWYL0fI9bka5mgWuFplbgEp3S39NaPdn2z9iR6rTvPywK7gagqhsQVQfqUdyuS01eLUvBfek0VxR1tjKeOuFIT1QNQjJf5i8S1MNA1D1B1C1AVDVB5geTp66xifXPW8c9nVkI15mxS34Qe9sENftC5u9fyyvfoO9KT1vqeSJbyRPMH9Od8ecPjWh8MvNdzd9c8GUHvgxRXPHdC3sn0xMnxuCdiz1VIP0RoJhcXS5feruy9yFSBJ7jNaCpToxEWZCv6I0EVGxI0LK9F0cXTe7KfNpIvm77ffBeqr9yA \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track3.track b/public/assets/g/polytrack/tracks/track3.track deleted file mode 100644 index 83c41f59..00000000 --- a/public/assets/g/polytrack/tracks/track3.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track4.track b/public/assets/g/polytrack/tracks/track4.track deleted file mode 100644 index ef4a6641..00000000 --- a/public/assets/g/polytrack/tracks/track4.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track5.track b/public/assets/g/polytrack/tracks/track5.track deleted file mode 100644 index 793a0ff9..00000000 --- a/public/assets/g/polytrack/tracks/track5.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track6.track b/public/assets/g/polytrack/tracks/track6.track deleted file mode 100644 index 4d2ca950..00000000 --- a/public/assets/g/polytrack/tracks/track6.track +++ /dev/null @@ -1 +0,0 @@ -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lJHZKlMlcmaLfQFTJUKlR5UB1Xv9qgypsh5YvSZvSeeqt9ig9iq9i09ie96gUPIHHUKHUyHUbHEBHEVH0fyX0fyX0fyX0fyX0fyX0fyX0fyX0fSvekec61jS9RnBfojkH93OKH96g82re5YvS5AtXqHUK7l3T6fvofetfGtQZlb0jcjokbUmcj8kb0ocjQlbUrMjklZ0tMj4lZUwMjMmZ0yMjgm9dHnekeefJXR8krSekrcekrmekrwekr66PX8FXPfLue8Xc98Xc98Xc98Xc98Xc98J9fezrJj0ufm4lejWnmfbieX1eYS05ZhIexz3DVQJUKlR5UBNiKpx0EaKNjuYomL15yxclycl8c12cRwcR1cR6cRf5aRz1KnrlHU0w64zq3P3eZJusNSb3vpfknv4TmhiPZvqeT2Xvfk917nsveeT2Xvfk917nsveeT2Xvfk917nsveeT2Xv9qfvSGzlj5Kl5K55qt5ig5iq5i05iez1imrVOXLfcHNm7IUfc8ZlSffKL9Q7dE32fYQ7NTe61O6h27wekhaHt3MerX7oHMzg9aHt3KSufqUuXHkavOK1e6RpeRrc5DWNz9avU3bVP3rTfcff45n448dafFtvt6W9p25exE7TfTs78nYdify2Vz97o3f7UYmuD6t0xzPn4parV912h2jTBdJ9OHJeeDPmEeUMfve8IOXaeYfSzj9fLnfcEXaeTfvq7fOsiJe3e8KQ7tdvzgQ98g6pX7abpB9W6f5z1d77a60dfKu7fffQpff85nX58R223OSUZ37GLqs7djFV29uxiK7euxiK7euxiK7euxiK7euxiK7mfVRffK6fy2feg4FeE5vwTkfFeE5vwz1f3oV0aKUKzGq10Kap1SWvWRrpraL5Z00hatU71Kp2rlSdZ7KC61W1bv2um412XEvudXx8sem23CTrWRrpr8se35NSvzbkeOPffBFeLEQhftC5oQOK87IbhfOyW43D3Cf9wtwvHuFe7hbhfewtwvHub72LRRb727UnOaE2FV3YnGNVtNVtN1KqaqZq9f7oy25ZeLbbfb1y2VP1LtjieSlfwuW6G7mrtdKe2uUjf3F9y2eFfSp0XqveQFqzXbPVf1qpXOULtCmDnRaV6U3l9U33WbttS9uudlR0evFKvT9TefT0zFS0IHbH549InDG58yInrG5I6IHlH588In7HpfhR6j8fv0DLRrB \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track7.track b/public/assets/g/polytrack/tracks/track7.track deleted file mode 100644 index 48503131..00000000 --- a/public/assets/g/polytrack/tracks/track7.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track8.track b/public/assets/g/polytrack/tracks/track8.track deleted file mode 100644 index bfa5ecab..00000000 --- a/public/assets/g/polytrack/tracks/track8.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/public/assets/g/polytrack/tracks/track9.track b/public/assets/g/polytrack/tracks/track9.track deleted file mode 100644 index ba9c15f4..00000000 --- a/public/assets/g/polytrack/tracks/track9.track +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file